diff --git a/.sass-lint.yml b/.sass-lint.yml new file mode 100644 index 0000000..22d07f5 --- /dev/null +++ b/.sass-lint.yml @@ -0,0 +1,178 @@ +# sass-lint config to match the AirBNB style guide +files: + include: '**/client/src/**/*.scss' + ignore: + - 'client/src/styles/legacy/*' + - 'admin/client/src/styles/legacy/*' +options: + formatter: stylish + merge-default-rules: false +rules: + # Warnings + # Things that require actual refactoring are marked as warnings + class-name-format: + - 1 + - convention: hyphenatedbem + placeholder-name-format: + - 1 + - convention: hyphenatedlowercase + nesting-depth: + - 1 + - max-depth: 3 + no-ids: 1 + no-important: 1 + no-misspelled-properties: + - 1 + - extra-properties: + - "-moz-border-radius-topleft" + - "-moz-border-radius-topright" + - "-moz-border-radius-bottomleft" + - "-moz-border-radius-bottomright" + variable-name-format: + - 1 + - allow-leading-underscore: true + convention: hyphenatedlowercase + no-extends: 1 + + # Warnings: these things are preferential rather than mandatory + no-css-comments: 1 + + # Errors + # Things that can be easily fixed are marked as errors + indentation: + - 2 + - size: 2 + final-newline: + - 2 + - include: true + no-trailing-whitespace: 2 + border-zero: + - 2 + - convention: '0' + brace-style: + - 2 + - allow-single-line: true + clean-import-paths: + - 2 + - filename-extension: false + leading-underscore: false + no-debug: 2 + no-empty-rulesets: 2 + no-invalid-hex: 2 + no-mergeable-selectors: 2 + # no-qualifying-elements: + # - 1 + # - allow-element-with-attribute: false + # allow-element-with-class: false + # allow-element-with-id: false + no-trailing-zero: 2 + no-url-protocols: 2 + quotes: + - 2 + - style: double + space-after-bang: + - 2 + - include: false + space-after-colon: + - 2 + - include: true + space-after-comma: + - 2 + - include: true + space-before-bang: + - 2 + - include: true + space-before-brace: + - 2 + - include: true + space-before-colon: 2 + space-between-parens: + - 2 + - include: false + trailing-semicolon: 2 + url-quotes: 2 + zero-unit: 2 + single-line-per-selector: 2 + one-declaration-per-line: 2 + empty-line-between-blocks: + - 2 + - ignore-single-line-rulesets: true + + + # Missing rules + # There are no sass-lint rules for the following AirBNB style items, but thess + # - Put comments on their own line + # - Put property delcarations before mixins + + # Disabled rules + + # These are other rules that we may wish to consider using in the future + # They are not part of the AirBNB CSS standard but they would introduce some strictness + # bem-depth: 0 + # variable-for-property: 0 + # no-transition-all: 0 + # hex-length: + # - 1 + # - style: short + # hex-notation: + # - 1 + # - style: lowercase + # property-units: + # - 1 + # - global: + # - ch + # - em + # - ex + # - rem + # - cm + # - in + # - mm + # - pc + # - pt + # - px + # - q + # - vh + # - vw + # - vmin + # - vmax + # - deg + # - grad + # - rad + # - turn + # - ms + # - s + # - Hz + # - kHz + # - dpi + # - dpcm + # - dppx + # - '%' + # per-property: {} + # force-attribute-nesting: 1 + # force-element-nesting: 1 + # force-pseudo-nesting: 1 + # function-name-format: + # - 1 + # - allow-leading-underscore: true + # convention: hyphenatedlowercase + # no-color-literals: 1 + # no-duplicate-properties: 1 + # mixin-name-format: + # - 1 + # - allow-leading-underscore: true + # convention: hyphenatedlowercase + # shorthand-values: + # - 1 + # - allowed-shorthands: + # - 1 + # - 2 + # - 3 + # leading-zero: + # - 1 + # - include: false + # no-vendor-prefixes: + # - 1 + # - additional-identifiers: [] + # excluded-identifiers: [] + # placeholder-in-extend: 1 + # no-color-keywords: 2 diff --git a/_config/config.yml b/_config/config.yml index b421fe2..9e9ec92 100644 --- a/_config/config.yml +++ b/_config/config.yml @@ -8,3 +8,10 @@ SilverStripe\Core\Injector\Injector: DNADesign\Elemental\Controllers\ElementController: default_styles: - silverstripe/elemental-bannerblock:client/dist/styles/frontend-default.css + +SilverStripe\Admin\LeftAndMain: + extra_requirements_javascript: + - 'silverstripe/elemental-bannerblock:client/dist/js/bundle.js' + extra_requirements_css: + - 'silverstripe/elemental-bannerblock:client/dist/styles/bundle.css' + diff --git a/client/dist/js/bundle.js b/client/dist/js/bundle.js index 3409a1b..e21eeaa 100644 --- a/client/dist/js/bundle.js +++ b/client/dist/js/bundle.js @@ -1 +1 @@ -!function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},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=5)}([function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"Component",function(){return p});var o=n(2),l=n.n(o),c=n(1),s=(n.n(c),n(8)),u=n.n(s),f=function(){function e(e,t){for(var n=0;n').addClass("insert-link__dialog-wrapper"),e("body").append(t))},onmatch:function(){this.createDialog()},onclick:function(t){if(!e(t.target).is("button")){var n=this.attr("name");this.getDialogWrapper().addClass(k).data("datafield-name",n).renderModal(!0),e("#"+g).updateModalTitle(e(this).find("#"+n+"_Title").val())}},registerChange:function(){this.find(".block-link-field__content").empty().append(e("").addClass("block-link-field__content--message").text(o.a._t("BlockLinkField.ModifiedMessage","Changes will be visible upon save")))}}),e(".js-injector-boot .block-link-field__actions").entwine({getLinkField:function(){return this.parent(".block-link-field")},getLinkDataField:function(){return this.getLinkField().find("input:hidden.block-link-field")},onmatch:function(){var e=JSON.parse(this.getLinkDataField().val());e&&void 0!==e.PageID&&this.renderActionsMenu()},renderActionsMenu:function(){var t=this,n=p.a.LINK_ACTIONS.map(function(n){if(n.callback)return n;switch(n.value){case"clear":return h({},n,{callback:function(){t.getLinkDataField().val("{}"),t.getLinkField().registerChange(),t.remove(),e("#"+t.find(".btn").attr("aria-controls")).remove()}});default:return n}});u.a.render(c.a.createElement(v,{id:this.getLinkDataField().attr("name")+"_Popover",actions:n,container:this.closest("form")[0]}),this[0])}}),e("#"+g).entwine({isTinyMce:function(){return!this.hasClass(k)},getRequireLinkText:function(){if(this.isTinyMce())return this._super();var e=this.getLinkDataField();return void 0===e||void 0===e.data("showlinktext")||!!+e.data("showlinktext")},getLinkDataField:function(){var t=this.data("datafield-name");return e('input[name="'+t+'"]')},getDataFromLinkField:function(){var e=this.getLinkDataField(),t={};if(void 0!==e)try{t=JSON.parse(e.val())}catch(e){}return t||(t={}),t},setDataToLinkField:function(e){var t=this.getLinkDataField();if(t){var n={},i=Object.keys(e).filter(function(e){return["PageID","Anchor","Text","Description","TargetBlank"].includes(e)}).reduce(function(t,i){return n[i]=e[i],n},{});t.val(JSON.stringify(i))}},getModalTitle:function(){return e(".modal."+g).find(".modal-title")},updateModalTitle:function(e){this.getModalTitle().text(e)},getLinkAttributes:function(){var e=this.getDataFromLinkField();return{PageID:e.PageID||0,Anchor:e.Anchor||"",Text:e.Text||"",Description:e.Description||"",TargetBlank:e.TargetBlank||!1}},handleInsert:function(e){return this.isTinyMce()?this._super(e):(this.setDataToLinkField(e),this.close(),Promise.resolve())},getOriginalAttributes:function(){return this.isTinyMce()?this._super():this.getLinkAttributes()},updateFormField:function(){this.getLinkDataField().parent("div.block-link-field").registerChange()},close:function(){var e=this._super();return this.removeClass(k),this.updateFormField(),e}})})},function(e,t,n){n(4),n(0)},function(e,t,n){"use strict";var i=n(3),r=n.n(i);t.a={LINK_ACTIONS:[{value:"clear",label:r.a._t("BlockLinkField.ClearLink","Clear link"),className:"",destructive:!0,canApply:function(){return!0},callback:null}]}},function(e,t){e.exports=ReactDom},function(e,t){e.exports=classnames},function(e,t){e.exports=jQuery}]); \ No newline at end of file +!function(e){function t(o){if(n[o])return n[o].exports;var a=n[o]={i:o,l:!1,exports:{}};return e[o].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var n={};t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},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=10)}([function(e,t){e.exports=React},function(e,t,n){e.exports=n(18)()},function(e,t){e.exports=Injector},function(e,t){e.exports=classnames},function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){e.exports=ReactDom},function(e,t){e.exports=i18n},function(e,t,n){"use strict";var o=n(9),a=function(e){return e&&e.__esModule?e:{default:e}}(o);window.document.addEventListener("DOMContentLoaded",function(){(0,a.default)()})},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}var a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.Component=void 0;var l=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===t?"scrollTop":"scrollLeft",o=e.nodeName;if("BODY"===o||"HTML"===o){var a=e.ownerDocument.documentElement;return(e.ownerDocument.scrollingElement||a)[n]}return e[n]}function h(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=f(t,"top"),a=f(t,"left"),r=n?-1:1;return e.top+=o*r,e.bottom+=o*r,e.left+=a*r,e.right+=a*r,e}function m(e,t){var n="x"===t?"Left":"Top",o="Left"===n?"Right":"Bottom";return parseFloat(e["border"+n+"Width"],10)+parseFloat(e["border"+o+"Width"],10)}function g(e,t,n,o){return Math.max(t["offset"+e],t["scroll"+e],n["client"+e],n["offset"+e],n["scroll"+e],l(10)?parseInt(n["offset"+e])+parseInt(o["margin"+("Height"===e?"Top":"Left")])+parseInt(o["margin"+("Height"===e?"Bottom":"Right")]):0)}function v(e){var t=e.body,n=e.documentElement,o=l(10)&&getComputedStyle(n);return{height:g("Height",t,n,o),width:g("Width",t,n,o)}}function b(e){return Te({},e,{right:e.left+e.width,bottom:e.top+e.height})}function y(e){var t={};try{if(l(10)){t=e.getBoundingClientRect();var n=f(e,"top"),o=f(e,"left");t.top+=n,t.left+=o,t.bottom+=n,t.right+=o}else t=e.getBoundingClientRect()}catch(e){}var a={left:t.left,top:t.top,width:t.right-t.left,height:t.bottom-t.top},i="HTML"===e.nodeName?v(e.ownerDocument):{},s=i.width||e.clientWidth||a.right-a.left,c=i.height||e.clientHeight||a.bottom-a.top,u=e.offsetWidth-s,d=e.offsetHeight-c;if(u||d){var p=r(e);u-=m(p,"x"),d-=m(p,"y"),a.width-=u,a.height-=d}return b(a)}function T(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=l(10),a="HTML"===t.nodeName,i=y(e),c=y(t),u=s(e),d=r(t),p=parseFloat(d.borderTopWidth,10),f=parseFloat(d.borderLeftWidth,10);n&&a&&(c.top=Math.max(c.top,0),c.left=Math.max(c.left,0));var m=b({top:i.top-c.top-p,left:i.left-c.left-f,width:i.width,height:i.height});if(m.marginTop=0,m.marginLeft=0,!o&&a){var g=parseFloat(d.marginTop,10),v=parseFloat(d.marginLeft,10);m.top-=p-g,m.bottom-=p-g,m.left-=f-v,m.right-=f-v,m.marginTop=g,m.marginLeft=v}return(o&&!n?t.contains(u):t===u&&"BODY"!==u.nodeName)&&(m=h(m,t)),m}function N(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.ownerDocument.documentElement,o=T(e,n),a=Math.max(n.clientWidth,window.innerWidth||0),r=Math.max(n.clientHeight,window.innerHeight||0),i=t?0:f(n),s=t?0:f(n,"left");return b({top:i-o.top+o.marginTop,left:s-o.left+o.marginLeft,width:a,height:r})}function E(e){var t=e.nodeName;return"BODY"!==t&&"HTML"!==t&&("fixed"===r(e,"position")||E(i(e)))}function O(e){if(!e||!e.parentElement||l())return document.documentElement;for(var t=e.parentElement;t&&"none"===r(t,"transform");)t=t.parentElement;return t||document.documentElement}function k(e,t,n,o){var a=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r={top:0,left:0},l=a?O(e):p(e,t);if("viewport"===o)r=N(l,a);else{var c=void 0;"scrollParent"===o?(c=s(i(t)),"BODY"===c.nodeName&&(c=e.ownerDocument.documentElement)):c="window"===o?e.ownerDocument.documentElement:o;var u=T(c,l,a);if("HTML"!==c.nodeName||E(l))r=u;else{var d=v(e.ownerDocument),f=d.height,h=d.width;r.top+=u.top-u.marginTop,r.bottom=f+u.top,r.left+=u.left-u.marginLeft,r.right=h+u.left}}n=n||0;var m="number"==typeof n;return r.left+=m?n:n.left||0,r.top+=m?n:n.top||0,r.right-=m?n:n.right||0,r.bottom-=m?n:n.bottom||0,r}function x(e){return e.width*e.height}function M(e,t,n,o,a){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf("auto"))return e;var i=k(n,o,r,a),s={top:{width:i.width,height:t.top-i.top},right:{width:i.right-t.right,height:i.height},bottom:{width:i.width,height:i.bottom-t.bottom},left:{width:t.left-i.left,height:i.height}},l=Object.keys(s).map(function(e){return Te({key:e},s[e],{area:x(s[e])})}).sort(function(e,t){return t.area-e.area}),c=l.filter(function(e){var t=e.width,o=e.height;return t>=n.clientWidth&&o>=n.clientHeight}),u=c.length>0?c[0].key:l[0].key,d=e.split("-")[1];return u+(d?"-"+d:"")}function w(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return T(n,o?O(t):p(t,n),o)}function C(e){var t=getComputedStyle(e),n=parseFloat(t.marginTop)+parseFloat(t.marginBottom),o=parseFloat(t.marginLeft)+parseFloat(t.marginRight);return{width:e.offsetWidth+o,height:e.offsetHeight+n}}function _(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function P(e,t,n){n=n.split("-")[0];var o=C(e),a={width:o.width,height:o.height},r=-1!==["right","left"].indexOf(n),i=r?"top":"left",s=r?"left":"top",l=r?"height":"width",c=r?"width":"height";return a[i]=t[i]+t[l]/2-o[l]/2,a[s]=n===s?t[s]-o[c]:t[_(s)],a}function j(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function S(e,t,n){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===n});var o=j(e,function(e){return e[t]===n});return e.indexOf(o)}function I(e,t,n){return(void 0===n?e:e.slice(0,S(e,"name",n))).forEach(function(e){e.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=e.function||e.fn;e.enabled&&a(n)&&(t.offsets.popper=b(t.offsets.popper),t.offsets.reference=b(t.offsets.reference),t=n(t,e))}),t}function D(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=w(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=M(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=P(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",e=I(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function R(e,t){return e.some(function(e){var n=e.name;return e.enabled&&n===t})}function L(e){for(var t=[!1,"ms","Webkit","Moz","O"],n=e.charAt(0).toUpperCase()+e.slice(1),o=0;os[h]&&(e.offsets.popper[p]+=l[p]+m-s[h]),e.offsets.popper=b(e.offsets.popper);var g=l[p]+l[u]/2-m/2,v=r(e.instance.popper),y=parseFloat(v["margin"+d],10),T=parseFloat(v["border"+d+"Width"],10),N=g-e.offsets.popper[p]-y-T;return N=Math.max(Math.min(s[u]-m,N),0),e.arrowElement=o,e.offsets.arrow=(n={},ye(n,p,Math.round(N)),ye(n,f,""),n),e}function Q(e){return"end"===e?"start":"start"===e?"end":e}function Z(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Ee.indexOf(e),o=Ee.slice(n+1).concat(Ee.slice(0,n));return t?o.reverse():o}function ee(e,t){if(R(e.instance.modifiers,"inner"))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var n=k(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),o=e.placement.split("-")[0],a=_(o),r=e.placement.split("-")[1]||"",i=[];switch(t.behavior){case Oe.FLIP:i=[o,a];break;case Oe.CLOCKWISE:i=Z(o);break;case Oe.COUNTERCLOCKWISE:i=Z(o,!0);break;default:i=t.behavior}return i.forEach(function(s,l){if(o!==s||i.length===l+1)return e;o=e.placement.split("-")[0],a=_(o);var c=e.offsets.popper,u=e.offsets.reference,d=Math.floor,p="left"===o&&d(c.right)>d(u.left)||"right"===o&&d(c.left)d(u.top)||"bottom"===o&&d(c.top)d(n.right),m=d(c.top)d(n.bottom),v="left"===o&&f||"right"===o&&h||"top"===o&&m||"bottom"===o&&g,b=-1!==["top","bottom"].indexOf(o),y=!!t.flipVariations&&(b&&"start"===r&&f||b&&"end"===r&&h||!b&&"start"===r&&m||!b&&"end"===r&&g);(p||v||y)&&(e.flipped=!0,(p||v)&&(o=i[l+1]),y&&(r=Q(r)),e.placement=o+(r?"-"+r:""),e.offsets.popper=Te({},e.offsets.popper,P(e.instance.popper,e.offsets.reference,e.placement)),e=I(e.instance.modifiers,e,"flip"))}),e}function te(e){var t=e.offsets,n=t.popper,o=t.reference,a=e.placement.split("-")[0],r=Math.floor,i=-1!==["top","bottom"].indexOf(a),s=i?"right":"bottom",l=i?"left":"top",c=i?"width":"height";return n[s]r(o[s])&&(e.offsets.popper[l]=r(o[s])),e}function ne(e,t,n,o){var a=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+a[1],i=a[2];if(!r)return e;if(0===i.indexOf("%")){var s=void 0;switch(i){case"%p":s=n;break;case"%":case"%r":default:s=o}return b(s)[t]/100*r}if("vh"===i||"vw"===i){return("vh"===i?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*r}return r}function oe(e,t,n,o){var a=[0,0],r=-1!==["right","left"].indexOf(o),i=e.split(/(\+|\-)/).map(function(e){return e.trim()}),s=i.indexOf(j(i,function(e){return-1!==e.search(/,|\s/)}));i[s]&&-1===i[s].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,c=-1!==s?[i.slice(0,s).concat([i[s].split(l)[0]]),[i[s].split(l)[1]].concat(i.slice(s+1))]:[i];return c=c.map(function(e,o){var a=(1===o?!r:r)?"height":"width",i=!1;return e.reduce(function(e,t){return""===e[e.length-1]&&-1!==["+","-"].indexOf(t)?(e[e.length-1]=t,i=!0,e):i?(e[e.length-1]+=t,i=!1,e):e.concat(t)},[]).map(function(e){return ne(e,a,t,n)})}),c.forEach(function(e,t){e.forEach(function(n,o){W(n)&&(a[t]+=n*("-"===e[o-1]?-1:1))})}),a}function ae(e,t){var n=t.offset,o=e.placement,a=e.offsets,r=a.popper,i=a.reference,s=o.split("-")[0],l=void 0;return l=W(+n)?[+n,0]:oe(n,r,i,s),"left"===s?(r.top+=l[0],r.left-=l[1]):"right"===s?(r.top+=l[0],r.left+=l[1]):"top"===s?(r.left+=l[0],r.top-=l[1]):"bottom"===s&&(r.left+=l[0],r.top+=l[1]),e.popper=r,e}function re(e,t){var n=t.boundariesElement||c(e.instance.popper);e.instance.reference===n&&(n=c(n));var o=L("transform"),a=e.instance.popper.style,r=a.top,i=a.left,s=a[o];a.top="",a.left="",a[o]="";var l=k(e.instance.popper,e.instance.reference,t.padding,n,e.positionFixed);a.top=r,a.left=i,a[o]=s,t.boundaries=l;var u=t.priority,d=e.offsets.popper,p={primary:function(e){var n=d[e];return d[e]l[e]&&!t.escapeWithReference&&(o=Math.min(d[n],l[e]-("right"===e?d.width:d.height))),ye({},n,o)}};return u.forEach(function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";d=Te({},d,p[t](e))}),e.offsets.popper=d,e}function ie(e){var t=e.placement,n=t.split("-")[0],o=t.split("-")[1];if(o){var a=e.offsets,r=a.reference,i=a.popper,s=-1!==["bottom","top"].indexOf(n),l=s?"left":"top",c=s?"width":"height",u={start:ye({},l,r[l]),end:ye({},l,r[l]+r[c]-i[c])};e.offsets.popper=Te({},i,u[o])}return e}function se(e){if(!J(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=j(e.instance.modifiers,function(e){return"preventOverflow"===e.name}).boundaries;if(t.bottomn.right||t.top>n.bottom||t.right=0){de=1;break}var fe=ce&&window.Promise,he=fe?n:o,me=ce&&!(!window.MSInputMethodContext||!document.documentMode),ge=ce&&/MSIE 10/.test(navigator.userAgent),ve=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},be=function(){function e(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};ve(this,e),this.scheduleUpdate=function(){return requestAnimationFrame(o.update)},this.update=he(this.update.bind(this)),this.options=Te({},e.Defaults,r),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=t&&t.jquery?t[0]:t,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(Te({},e.Defaults.modifiers,r.modifiers)).forEach(function(t){o.options.modifiers[t]=Te({},e.Defaults.modifiers[t]||{},r.modifiers?r.modifiers[t]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return Te({name:e},o.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(e){e.enabled&&a(e.onLoad)&&e.onLoad(o.reference,o.popper,o.options,e,o.state)}),this.update();var i=this.options.eventsEnabled;i&&this.enableEventListeners(),this.state.eventsEnabled=i}return be(e,[{key:"update",value:function(){return D.call(this)}},{key:"destroy",value:function(){return A.call(this)}},{key:"enableEventListeners",value:function(){return H.call(this)}},{key:"disableEventListeners",value:function(){return q.call(this)}}]),e}();Me.Utils=("undefined"!=typeof window?window:e).PopperUtils,Me.placements=Ne,Me.Defaults=xe,t.default=Me}.call(t,n(4))},function(e,t,n){"use strict";function o(){}var a=n(19);e.exports=function(){function e(e,t,n,o,r,i){if(i!==a){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t};return n.checkPropTypes=o,n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){"use strict";function o(e,t){var n={};for(var o in e)t.indexOf(o)>=0||Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n}Object.defineProperty(t,"__esModule",{value:!0});var a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n}Object.defineProperty(t,"__esModule",{value:!0});var a=Object.assign||function(e){for(var t=1;t0?e+"px":null}function r(){return document.body.clientWidth0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:q;return t?e.split(" ").map(function(e){return t[e]||e}).join(" "):e}function u(e,t){var n={};return Object.keys(e).forEach(function(o){-1===t.indexOf(o)&&(n[o]=e[o])}),n}function d(e,t){for(var n=Array.isArray(t)?t:[t],o=n.length,a=void 0,r={};o>0;)o-=1,a=n[o],r[a]=e[a];return r}function p(e){W[e]||("undefined"!=typeof console&&console.error(e),W[e]=!0)}function f(e,t){return function(n,o,a){null!==n[o]&&void 0!==n[o]&&p('"'+o+'" property of "'+a+'" has been deprecated.\n'+t);for(var r=arguments.length,i=Array(r>3?r-3:0),s=3;s=0||Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n},re=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},ie={tag:j.a.oneOfType([j.a.func,j.a.string]),fluid:j.a.bool,className:j.a.string,cssModule:j.a.object},se={tag:"div"},le=function(e){var t=e.className,n=e.cssModule,o=e.fluid,a=e.tag,r=ae(e,["className","cssModule","fluid","tag"]),i=c(I()(t,o?"container-fluid":"container"),n);return _.a.createElement(a,ne({},r,{className:i}))};le.propTypes=ie,le.defaultProps=se;var ce={tag:j.a.oneOfType([j.a.func,j.a.string]),noGutters:j.a.bool,className:j.a.string,cssModule:j.a.object},ue={tag:"div"},de=function(e){var t=e.className,n=e.cssModule,o=e.noGutters,a=e.tag,r=ae(e,["className","cssModule","noGutters","tag"]),i=c(I()(t,o?"no-gutters":null,"row"),n);return _.a.createElement(a,ne({},r,{className:i}))};de.propTypes=ce,de.defaultProps=ue;var pe=["xs","sm","md","lg","xl"],fe=j.a.oneOfType([j.a.number,j.a.string]),he=j.a.oneOfType([j.a.bool,j.a.number,j.a.string,j.a.shape({size:j.a.oneOfType([j.a.bool,j.a.number,j.a.string]),push:f(fe,'Please use the prop "order"'),pull:f(fe,'Please use the prop "order"'),order:fe,offset:fe})]),me={tag:j.a.oneOfType([j.a.func,j.a.string]),xs:he,sm:he,md:he,lg:he,xl:he,className:j.a.string,cssModule:j.a.object,widths:j.a.array},ge={tag:"div",widths:pe},ve=function(e,t,n){return!0===n||""===n?e?"col":"col-"+t:"auto"===n?e?"col-auto":"col-"+t+"-auto":e?"col-"+n:"col-"+t+"-"+n},be=function(e){var t=e.className,n=e.cssModule,o=e.widths,a=e.tag,r=ae(e,["className","cssModule","widths","tag"]),i=[];o.forEach(function(t,o){var a=e[t];if(delete r[t],a||""===a){var s=!o;if(A()(a)){var l,u=s?"-":"-"+t+"-",d=ve(s,t,a.size);i.push(c(I()((l={},te(l,d,a.size||""===a.size),te(l,"order"+u+a.order,a.order||0===a.order),te(l,"offset"+u+a.offset,a.offset||0===a.offset),l)),n))}else{var p=ve(s,t,a);i.push(p)}}}),i.length||i.push("col");var s=c(I()(t,i),n);return _.a.createElement(a,ne({},r,{className:s}))};be.propTypes=me,be.defaultProps=ge;var ye={light:j.a.bool,dark:j.a.bool,inverse:f(j.a.bool,'Please use the prop "dark"'),full:j.a.bool,fixed:j.a.string,sticky:j.a.string,color:j.a.string,role:j.a.string,tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object,toggleable:f(j.a.oneOfType([j.a.bool,j.a.string]),'Please use the prop "expand"'),expand:j.a.oneOfType([j.a.bool,j.a.string])},Te={tag:"nav",expand:!1},Ne=function(e){return!1!==e&&(!0===e||"xs"===e?"navbar-expand":"navbar-expand-"+e)},Ee={xs:"sm",sm:"md",md:"lg",lg:"xl"},Oe=function(e){return void 0!==e&&"xl"!==e&&(!1===e?"navbar-expand":"navbar-expand-"+(!0===e?"sm":Ee[e]||e))},ke=function(e){var t,n=e.toggleable,o=e.expand,a=e.className,r=e.cssModule,i=e.light,s=e.dark,l=e.inverse,u=e.fixed,d=e.sticky,p=e.color,f=e.tag,h=ae(e,["toggleable","expand","className","cssModule","light","dark","inverse","fixed","sticky","color","tag"]),m=c(I()(a,"navbar",Ne(o)||Oe(n),(t={"navbar-light":i,"navbar-dark":l||s},te(t,"bg-"+p,p),te(t,"fixed-"+u,u),te(t,"sticky-"+d,d),t)),r);return _.a.createElement(f,ne({},h,{className:m}))};ke.propTypes=ye,ke.defaultProps=Te;var xe={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},Me={tag:"a"},we=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=ae(e,["className","cssModule","tag"]),r=c(I()(t,"navbar-brand"),n);return _.a.createElement(o,ne({},a,{className:r}))};we.propTypes=xe,we.defaultProps=Me;var Ce={tag:j.a.oneOfType([j.a.func,j.a.string]),type:j.a.string,className:j.a.string,cssModule:j.a.object,children:j.a.node},_e={tag:"button",type:"button"},Pe=function(e){var t=e.className,n=e.cssModule,o=e.children,a=e.tag,r=ae(e,["className","cssModule","children","tag"]),i=c(I()(t,"navbar-toggler"),n);return _.a.createElement(a,ne({},r,{className:i}),o||_.a.createElement("span",{className:c("navbar-toggler-icon",n)}))};Pe.propTypes=Ce,Pe.defaultProps=_e;var je={tabs:j.a.bool,pills:j.a.bool,vertical:j.a.oneOfType([j.a.bool,j.a.string]),horizontal:j.a.string,justified:j.a.bool,fill:j.a.bool,navbar:j.a.bool,card:j.a.bool,tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},Se={tag:"ul",vertical:!1},Ie=function(e){return!1!==e&&(!0===e||"xs"===e?"flex-column":"flex-"+e+"-column")},De=function(e){var t=e.className,n=e.cssModule,o=e.tabs,a=e.pills,r=e.vertical,i=e.horizontal,s=e.justified,l=e.fill,u=e.navbar,d=e.card,p=e.tag,f=ae(e,["className","cssModule","tabs","pills","vertical","horizontal","justified","fill","navbar","card","tag"]),h=c(I()(t,u?"navbar-nav":"nav",!!i&&"justify-content-"+i,Ie(r),{"nav-tabs":o,"card-header-tabs":d&&o,"nav-pills":a,"card-header-pills":d&&a,"nav-justified":s,"nav-fill":l}),n);return _.a.createElement(p,ne({},f,{className:h}))};De.propTypes=je,De.defaultProps=Se;var Re={tag:j.a.oneOfType([j.a.func,j.a.string]),active:j.a.bool,className:j.a.string,cssModule:j.a.object},Le={tag:"li"},Ae=function(e){var t=e.className,n=e.cssModule,o=e.active,a=e.tag,r=ae(e,["className","cssModule","active","tag"]),i=c(I()(t,"nav-item",!!o&&"active"),n);return _.a.createElement(a,ne({},r,{className:i}))};Ae.propTypes=Re,Ae.defaultProps=Le;var Fe={disabled:j.a.bool,dropup:f(j.a.bool,'Please use the prop "direction" with the value "up".'),direction:j.a.oneOf(["up","down","left","right"]),group:j.a.bool,isOpen:j.a.bool,nav:j.a.bool,active:j.a.bool,addonType:j.a.oneOfType([j.a.bool,j.a.oneOf(["prepend","append"])]),size:j.a.string,tag:j.a.string,toggle:j.a.func,children:j.a.node,className:j.a.string,cssModule:j.a.object,inNavbar:j.a.bool},Be={isOpen:!1,direction:"down",nav:!1,active:!1,addonType:!1,inNavbar:!1},Ue={toggle:j.a.func.isRequired,isOpen:j.a.bool.isRequired,direction:j.a.oneOf(["up","down","left","right"]).isRequired,inNavbar:j.a.bool.isRequired},He=function(e){function t(e){Z(this,t);var n=re(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.addEvents=n.addEvents.bind(n),n.handleDocumentClick=n.handleDocumentClick.bind(n),n.handleKeyDown=n.handleKeyDown.bind(n),n.removeEvents=n.removeEvents.bind(n),n.toggle=n.toggle.bind(n),n}return oe(t,e),ee(t,[{key:"getChildContext",value:function(){return{toggle:this.props.toggle,isOpen:this.props.isOpen,direction:"down"===this.props.direction&&this.props.dropup?"up":this.props.direction,inNavbar:this.props.inNavbar}}},{key:"componentDidMount",value:function(){this.handleProps()}},{key:"componentDidUpdate",value:function(e){this.props.isOpen!==e.isOpen&&this.handleProps()}},{key:"componentWillUnmount",value:function(){this.removeEvents()}},{key:"getContainer",value:function(){return B.a.findDOMNode(this)}},{key:"addEvents",value:function(){var e=this;["click","touchstart","keyup"].forEach(function(t){return document.addEventListener(t,e.handleDocumentClick,!0)})}},{key:"removeEvents",value:function(){var e=this;["click","touchstart","keyup"].forEach(function(t){return document.removeEventListener(t,e.handleDocumentClick,!0)})}},{key:"handleDocumentClick",value:function(e){if(!e||3!==e.which&&("keyup"!==e.type||e.which===V.tab)){var t=this.getContainer();(!t.contains(e.target)||t===e.target||"keyup"===e.type&&e.which!==V.tab)&&this.toggle(e)}}},{key:"handleKeyDown",value:function(e){if(!(-1===[V.esc,V.up,V.down,V.space].indexOf(e.which)||/button/i.test(e.target.tagName)&&e.which===V.space||/input|textarea/i.test(e.target.tagName)||(e.preventDefault(),this.props.disabled))){var t=this.getContainer();if(e.which===V.space&&this.props.isOpen&&t!==e.target&&e.target.click(),e.which===V.esc||!this.props.isOpen)return this.toggle(e),void t.querySelector("[aria-expanded]").focus();var n=c("dropdown-menu",this.props.cssModule),o=c("dropdown-item",this.props.cssModule),a=c("disabled",this.props.cssModule),r=t.querySelectorAll("."+n+" ."+o+":not(."+a+")");if(r.length){for(var i=-1,s=0;s0&&(i-=1),e.which===V.down&&i=0||Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==(void 0===t?"undefined":Q(t))&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+(void 0===t?"undefined":Q(t)));e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(){}t.__esModule=!0,t.EXITING=t.ENTERED=t.ENTERING=t.EXITED=t.UNMOUNTED=void 0;var l=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(j.a),c=n(_.a),u=n(B.a),d=t.UNMOUNTED="unmounted",p=t.EXITED="exited",f=t.ENTERING="entering",h=t.ENTERED="entered",m=t.EXITING="exiting",g=function(e){function t(n,o){a(this,t);var i=r(this,e.call(this,n,o)),s=o.transitionGroup,l=s&&!s.isMounting?n.enter:n.appear,c=void 0;return i.nextStatus=null,n.in?l?(c=p,i.nextStatus=f):c=h:c=n.unmountOnExit||n.mountOnEnter?d:p,i.state={status:c},i.nextCallback=null,i}return i(t,e),t.prototype.getChildContext=function(){return{transitionGroup:null}},t.prototype.componentDidMount=function(){this.updateStatus(!0)},t.prototype.componentWillReceiveProps=function(e){var t=this.pendingState||this.state,n=t.status;e.in?(n===d&&this.setState({status:p}),n!==f&&n!==h&&(this.nextStatus=f)):n!==f&&n!==h||(this.nextStatus=m)},t.prototype.componentDidUpdate=function(){this.updateStatus()},t.prototype.componentWillUnmount=function(){this.cancelNextCallback()},t.prototype.getTimeouts=function(){var e=this.props.timeout,t=void 0,n=void 0,o=void 0;return t=n=o=e,null!=e&&"number"!=typeof e&&(t=e.exit,n=e.enter,o=e.appear),{exit:t,enter:n,appear:o}},t.prototype.updateStatus=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.nextStatus;if(null!==t){this.nextStatus=null,this.cancelNextCallback();var n=u.default.findDOMNode(this);t===f?this.performEnter(n,e):this.performExit(n)}else this.props.unmountOnExit&&this.state.status===p&&this.setState({status:d})},t.prototype.performEnter=function(e,t){var n=this,o=this.props.enter,a=this.context.transitionGroup?this.context.transitionGroup.isMounting:t,r=this.getTimeouts();if(!t&&!o)return void this.safeSetState({status:h},function(){n.props.onEntered(e)});this.props.onEnter(e,a),this.safeSetState({status:f},function(){n.props.onEntering(e,a),n.onTransitionEnd(e,r.enter,function(){n.safeSetState({status:h},function(){n.props.onEntered(e,a)})})})},t.prototype.performExit=function(e){var t=this,n=this.props.exit,o=this.getTimeouts();if(!n)return void this.safeSetState({status:p},function(){t.props.onExited(e)});this.props.onExit(e),this.safeSetState({status:m},function(){t.props.onExiting(e),t.onTransitionEnd(e,o.exit,function(){t.safeSetState({status:p},function(){t.props.onExited(e)})})})},t.prototype.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},t.prototype.safeSetState=function(e,t){var n=this;this.pendingState=e,t=this.setNextCallback(t),this.setState(e,function(){n.pendingState=null,t()})},t.prototype.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(o){n&&(n=!1,t.nextCallback=null,e(o))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},t.prototype.onTransitionEnd=function(e,t,n){this.setNextCallback(n),e?(this.props.addEndListener&&this.props.addEndListener(e,this.nextCallback),null!=t&&setTimeout(this.nextCallback,t)):setTimeout(this.nextCallback,0)},t.prototype.render=function(){var e=this.state.status;if(e===d)return null;var t=this.props,n=t.children,a=o(t,["children"]);if(delete a.in,delete a.mountOnEnter,delete a.unmountOnExit,delete a.appear,delete a.enter,delete a.exit,delete a.timeout,delete a.addEndListener,delete a.onEnter,delete a.onEntering,delete a.onEntered,delete a.onExit,delete a.onExiting,delete a.onExited,"function"==typeof n)return n(e,a);var r=c.default.Children.only(n);return c.default.cloneElement(r,a)},t}(c.default.Component);g.contextTypes={transitionGroup:l.object},g.childContextTypes={transitionGroup:function(){}},g.propTypes={},g.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:s,onEntering:s,onEntered:s,onExit:s,onExiting:s,onExited:s},g.UNMOUNTED=0,g.EXITED=1,g.ENTERING=2,g.ENTERED=3,g.EXITING=4,t.default=g}),kt=v(Ot),xt=ne({},kt.propTypes,{children:j.a.oneOfType([j.a.arrayOf(j.a.node),j.a.node]),tag:j.a.oneOfType([j.a.string,j.a.func]),baseClass:j.a.string,baseClassActive:j.a.string,className:j.a.string,cssModule:j.a.object}),Mt=ne({},kt.defaultProps,{tag:"div",baseClass:"fade",baseClassActive:"show",timeout:G.Fade,appear:!0,enter:!0,exit:!0,in:!0});y.propTypes=xt,y.defaultProps=Mt;var wt={color:j.a.string,pill:j.a.bool,tag:j.a.oneOfType([j.a.func,j.a.string]),children:j.a.node,className:j.a.string,cssModule:j.a.object},Ct={color:"secondary",pill:!1,tag:"span"},_t=function(e){var t=e.className,n=e.cssModule,o=e.color,a=e.pill,r=e.tag,i=ae(e,["className","cssModule","color","pill","tag"]),s=c(I()(t,"badge","badge-"+o,!!a&&"badge-pill"),n);return i.href&&"span"===r&&(r="a"),_.a.createElement(r,ne({},i,{className:s}))};_t.propTypes=wt,_t.defaultProps=Ct;var Pt={tag:j.a.oneOfType([j.a.func,j.a.string]),inverse:j.a.bool,color:j.a.string,block:f(j.a.bool,'Please use the props "body"'),body:j.a.bool,outline:j.a.bool,className:j.a.string,cssModule:j.a.object},jt={tag:"div"},St=function(e){var t=e.className,n=e.cssModule,o=e.color,a=e.block,r=e.body,i=e.inverse,s=e.outline,l=e.tag,u=ae(e,["className","cssModule","color","block","body","inverse","outline","tag"]),d=c(I()(t,"card",!!i&&"text-white",!(!a&&!r)&&"card-body",!!o&&(s?"border":"bg")+"-"+o),n);return _.a.createElement(l,ne({},u,{className:d}))};St.propTypes=Pt,St.defaultProps=jt;var It={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},Dt={tag:"div"},Rt=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=ae(e,["className","cssModule","tag"]),r=c(I()(t,"card-group"),n);return _.a.createElement(o,ne({},a,{className:r}))};Rt.propTypes=It,Rt.defaultProps=Dt;var Lt={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},At={tag:"div"},Ft=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=ae(e,["className","cssModule","tag"]),r=c(I()(t,"card-deck"),n);return _.a.createElement(o,ne({},a,{className:r}))};Ft.propTypes=Lt,Ft.defaultProps=At;var Bt={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},Ut={tag:"div"},Ht=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=ae(e,["className","cssModule","tag"]),r=c(I()(t,"card-columns"),n);return _.a.createElement(o,ne({},a,{className:r}))};Ht.propTypes=Bt,Ht.defaultProps=Ut;var zt={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},qt={tag:"div"},Wt=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=ae(e,["className","cssModule","tag"]),r=c(I()(t,"card-body"),n);return _.a.createElement(o,ne({},a,{className:r}))};Wt.propTypes=zt,Wt.defaultProps=qt;var Gt={tag:j.a.oneOfType([j.a.func,j.a.string]),innerRef:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},Kt={tag:"a"},Xt=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=e.innerRef,r=ae(e,["className","cssModule","tag","innerRef"]),i=c(I()(t,"card-link"),n);return _.a.createElement(o,ne({},r,{ref:a,className:i}))};Xt.propTypes=Gt,Xt.defaultProps=Kt;var Vt={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},Yt={tag:"div"},Jt=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=ae(e,["className","cssModule","tag"]),r=c(I()(t,"card-footer"),n);return _.a.createElement(o,ne({},a,{className:r}))};Jt.propTypes=Vt,Jt.defaultProps=Yt;var $t={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},Qt={tag:"div"},Zt=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=ae(e,["className","cssModule","tag"]),r=c(I()(t,"card-header"),n);return _.a.createElement(o,ne({},a,{className:r}))};Zt.propTypes=$t,Zt.defaultProps=Qt;var en={tag:j.a.oneOfType([j.a.func,j.a.string]),top:j.a.bool,bottom:j.a.bool,className:j.a.string,cssModule:j.a.object},tn={tag:"img"},nn=function(e){var t=e.className,n=e.cssModule,o=e.top,a=e.bottom,r=e.tag,i=ae(e,["className","cssModule","top","bottom","tag"]),s="card-img";o&&(s="card-img-top"),a&&(s="card-img-bottom");var l=c(I()(t,s),n);return _.a.createElement(r,ne({},i,{className:l}))};nn.propTypes=en,nn.defaultProps=tn;var on={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},an={tag:"div"},rn=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=ae(e,["className","cssModule","tag"]),r=c(I()(t,"card-img-overlay"),n);return _.a.createElement(o,ne({},a,{className:r}))};rn.propTypes=on,rn.defaultProps=an;var sn=function(e){function t(e){Z(this,t);var n=re(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.state={startAnimation:!1},n.onEnter=n.onEnter.bind(n),n.onEntering=n.onEntering.bind(n),n.onExit=n.onExit.bind(n),n.onExiting=n.onExiting.bind(n),n.onExited=n.onExited.bind(n),n}return oe(t,e),ee(t,[{key:"onEnter",value:function(e,t){this.setState({startAnimation:!1}),this.props.onEnter(e,t)}},{key:"onEntering",value:function(e,t){var n=e.offsetHeight;return this.setState({startAnimation:!0}),this.props.onEntering(e,t),n}},{key:"onExit",value:function(e){this.setState({startAnimation:!1}),this.props.onExit(e)}},{key:"onExiting",value:function(e){this.setState({startAnimation:!0}),e.dispatchEvent(new CustomEvent("slide.bs.carousel")),this.props.onExiting(e)}},{key:"onExited",value:function(e){e.dispatchEvent(new CustomEvent("slid.bs.carousel")),this.props.onExited(e)}},{key:"render",value:function(){var e=this,t=this.props,n=t.in,o=t.children,a=t.cssModule,r=t.slide,i=t.tag,s=t.className,l=ae(t,["in","children","cssModule","slide","tag","className"]);return _.a.createElement(kt,ne({},l,{enter:r,exit:r,in:n,onEnter:this.onEnter,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}),function(t){var n=e.context.direction,r=t===X.ENTERED||t===X.EXITING,l=(t===X.ENTERING||t===X.EXITING)&&e.state.startAnimation&&("right"===n?"carousel-item-left":"carousel-item-right"),u=t===X.ENTERING&&("right"===n?"carousel-item-next":"carousel-item-prev"),d=c(I()(s,"carousel-item",r&&"active",l,u),a);return _.a.createElement(i,{className:d},o)})}}]),t}(_.a.Component);sn.propTypes=ne({},kt.propTypes,{tag:j.a.oneOfType([j.a.func,j.a.string]),in:j.a.bool,cssModule:j.a.object,children:j.a.node,slide:j.a.bool,className:j.a.string}),sn.defaultProps=ne({},kt.defaultProps,{tag:"div",timeout:G.Carousel,slide:!0}),sn.contextTypes={direction:j.a.string};var ln=function(e){function t(e){Z(this,t);var n=re(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.handleKeyPress=n.handleKeyPress.bind(n),n.renderItems=n.renderItems.bind(n),n.hoverStart=n.hoverStart.bind(n),n.hoverEnd=n.hoverEnd.bind(n),n.state={direction:"right",indicatorClicked:!1},n}return oe(t,e),ee(t,[{key:"getChildContext",value:function(){return{direction:this.state.direction}}},{key:"componentDidMount",value:function(){"carousel"===this.props.ride&&this.setInterval(),document.addEventListener("keyup",this.handleKeyPress)}},{key:"componentWillReceiveProps",value:function(e){this.setInterval(e),this.props.activeIndex+1===e.activeIndex?this.setState({direction:"right"}):this.props.activeIndex-1===e.activeIndex?this.setState({direction:"left"}):this.props.activeIndex>e.activeIndex?this.setState({direction:this.state.indicatorClicked?"left":"right"}):this.props.activeIndex!==e.activeIndex&&this.setState({direction:this.state.indicatorClicked?"right":"left"}),this.setState({indicatorClicked:!1})}},{key:"componentWillUnmount",value:function(){this.clearInterval(),document.removeEventListener("keyup",this.handleKeyPress)}},{key:"setInterval",value:function(e){function t(){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props;this.clearInterval(),e.interval&&(this.cycleInterval=setInterval(function(){e.next()},parseInt(e.interval,10)))})},{key:"clearInterval",value:function(e){function t(){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(){clearInterval(this.cycleInterval)})},{key:"hoverStart",value:function(){if("hover"===this.props.pause&&this.clearInterval(),this.props.mouseEnter){var e;(e=this.props).mouseEnter.apply(e,arguments)}}},{key:"hoverEnd",value:function(){if("hover"===this.props.pause&&this.setInterval(),this.props.mouseLeave){var e;(e=this.props).mouseLeave.apply(e,arguments)}}},{key:"handleKeyPress",value:function(e){this.props.keyboard&&(37===e.keyCode?this.props.previous():39===e.keyCode&&this.props.next())}},{key:"renderItems",value:function(e,t){var n=this,o=this.props.slide;return _.a.createElement("div",{role:"listbox",className:t},e.map(function(e,t){var a=t===n.props.activeIndex;return _.a.cloneElement(e,{in:a,slide:o})}))}},{key:"render",value:function(){var e=this,t=this.props,n=t.children,o=t.cssModule,a=t.slide,r=t.className,i=c(I()(r,"carousel",a&&"slide"),o),s=c(I()("carousel-inner"),o);if(n.every(function(e){return e.type===sn}))return _.a.createElement("div",{className:i,onMouseEnter:this.hoverStart,onMouseLeave:this.hoverEnd},this.renderItems(n,s));if(n[0]instanceof Array){var l=n[0],u=n[1],d=n[2];return _.a.createElement("div",{className:i,onMouseEnter:this.hoverStart,onMouseLeave:this.hoverEnd},this.renderItems(l,s),u,d)}var p=n[0],f=function(t){"function"==typeof p.props.onClickHandler&&e.setState({indicatorClicked:!0},function(){return p.props.onClickHandler(t)})},h=_.a.cloneElement(p,{onClickHandler:f}),m=n[1],g=n[2],v=n[3];return _.a.createElement("div",{className:i,onMouseEnter:this.hoverStart,onMouseLeave:this.hoverEnd},h,this.renderItems(m,s),g,v)}}]),t}(_.a.Component);ln.propTypes={activeIndex:j.a.number,next:j.a.func.isRequired,previous:j.a.func.isRequired,keyboard:j.a.bool,pause:j.a.oneOf(["hover",!1]),ride:j.a.oneOf(["carousel"]),interval:j.a.oneOfType([j.a.number,j.a.string,j.a.bool]),children:j.a.array,mouseEnter:j.a.func,mouseLeave:j.a.func,slide:j.a.bool,cssModule:j.a.object,className:j.a.string},ln.defaultProps={interval:5e3,pause:"hover",keyboard:!0,slide:!0},ln.childContextTypes={direction:j.a.string};var cn=function(e){var t=e.direction,n=e.onClickHandler,o=e.cssModule,a=e.directionText,r=e.className,i=c(I()(r,"carousel-control-"+t),o),s=c(I()("carousel-control-"+t+"-icon"),o),l=c(I()("sr-only"),o);return _.a.createElement("a",{className:i,role:"button",tabIndex:"0",onClick:function(e){e.preventDefault(),n()}},_.a.createElement("span",{className:s,"aria-hidden":"true"}),_.a.createElement("span",{className:l},a||t))};cn.propTypes={direction:j.a.oneOf(["prev","next"]).isRequired,onClickHandler:j.a.func.isRequired,cssModule:j.a.object,directionText:j.a.string,className:j.a.string};var un=function(e){var t=e.items,n=e.activeIndex,o=e.cssModule,a=e.onClickHandler,r=e.className,i=c(I()(r,"carousel-indicators"),o),s=t.map(function(e,t){var r=c(I()({active:n===t}),o);return _.a.createElement("li",{key:""+(e.key||e.src)+e.caption+e.altText,onClick:function(e){e.preventDefault(),a(t)},className:r})});return _.a.createElement("ol",{className:i},s)};un.propTypes={items:j.a.array.isRequired,activeIndex:j.a.number.isRequired,cssModule:j.a.object,onClickHandler:j.a.func.isRequired,className:j.a.string};var dn=function(e){var t=e.captionHeader,n=e.captionText,o=e.cssModule,a=e.className,r=c(I()(a,"carousel-caption","d-none","d-md-block"),o);return _.a.createElement("div",{className:r},_.a.createElement("h3",null,t),_.a.createElement("p",null,n))};dn.propTypes={captionHeader:j.a.string,captionText:j.a.string.isRequired,cssModule:j.a.object,className:j.a.string};var pn={items:j.a.array.isRequired,indicators:j.a.bool,controls:j.a.bool,autoPlay:j.a.bool,activeIndex:j.a.number,next:j.a.func,previous:j.a.func,goToIndex:j.a.func},fn=function(e){function t(e){Z(this,t);var n=re(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.animating=!1,n.state={activeIndex:0},n.next=n.next.bind(n),n.previous=n.previous.bind(n),n.goToIndex=n.goToIndex.bind(n),n.onExiting=n.onExiting.bind(n),n.onExited=n.onExited.bind(n),n}return oe(t,e),ee(t,[{key:"onExiting",value:function(){this.animating=!0}},{key:"onExited",value:function(){this.animating=!1}},{key:"next",value:function(){if(!this.animating){var e=this.state.activeIndex===this.props.items.length-1?0:this.state.activeIndex+1;this.setState({activeIndex:e})}}},{key:"previous",value:function(){if(!this.animating){var e=0===this.state.activeIndex?this.props.items.length-1:this.state.activeIndex-1;this.setState({activeIndex:e})}}},{key:"goToIndex",value:function(e){this.animating||this.setState({activeIndex:e})}},{key:"render",value:function(){var e=this,t=this.props,n=t.autoPlay,o=t.indicators,a=t.controls,r=t.items,i=t.goToIndex,s=ae(t,["autoPlay","indicators","controls","items","goToIndex"]),l=this.state.activeIndex,c=r.map(function(t){return _.a.createElement(sn,{onExiting:e.onExiting,onExited:e.onExited,key:t.src},_.a.createElement("img",{src:t.src,alt:t.altText}),_.a.createElement(dn,{captionText:t.caption,captionHeader:t.caption}))});return _.a.createElement(ln,ne({activeIndex:l,next:this.next,previous:this.previous,ride:n?"carousel":void 0},s),o&&_.a.createElement(un,{items:r,activeIndex:s.activeIndex||l,onClickHandler:i||this.goToIndex}),c,a&&_.a.createElement(cn,{direction:"prev",directionText:"Previous",onClickHandler:s.previous||this.previous}),a&&_.a.createElement(cn,{direction:"next",directionText:"Next",onClickHandler:s.next||this.next}))}}]),t}(C.Component);fn.propTypes=pn,fn.defaultProps={controls:!0,indicators:!0,autoPlay:!0};var hn={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},mn={tag:"h6"},gn=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=ae(e,["className","cssModule","tag"]),r=c(I()(t,"card-subtitle"),n);return _.a.createElement(o,ne({},a,{className:r}))};gn.propTypes=hn,gn.defaultProps=mn;var vn={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},bn={tag:"p"},yn=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=ae(e,["className","cssModule","tag"]),r=c(I()(t,"card-text"),n);return _.a.createElement(o,ne({},a,{className:r}))};yn.propTypes=vn,yn.defaultProps=bn;var Tn={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},Nn={tag:"h5"},En=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=ae(e,["className","cssModule","tag"]),r=c(I()(t,"card-title"),n);return _.a.createElement(o,ne({},a,{className:r}))};En.propTypes=Tn,En.defaultProps=Nn;var On={children:j.a.node.isRequired,className:j.a.string,placement:j.a.string,placementPrefix:j.a.string,hideArrow:j.a.bool,tag:j.a.string,isOpen:j.a.bool.isRequired,cssModule:j.a.object,offset:j.a.oneOfType([j.a.string,j.a.number]),fallbackPlacement:j.a.oneOfType([j.a.string,j.a.array]),flip:j.a.bool,container:j.a.oneOfType([j.a.string,j.a.func,h]),target:j.a.oneOfType([j.a.string,j.a.func,h]).isRequired,modifiers:j.a.object},kn={placement:"auto",hideArrow:!1,isOpen:!1,offset:0,fallbackPlacement:"flip",flip:!0,container:"body",modifiers:{}},xn={popperManager:j.a.object.isRequired},Mn=function(e){function t(e){Z(this,t);var n=re(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.handlePlacementChange=n.handlePlacementChange.bind(n),n.setTargetNode=n.setTargetNode.bind(n),n.getTargetNode=n.getTargetNode.bind(n),n.state={},n}return oe(t,e),ee(t,[{key:"getChildContext",value:function(){return{popperManager:{setTargetNode:this.setTargetNode,getTargetNode:this.getTargetNode}}}},{key:"componentDidMount",value:function(){this.handleProps()}},{key:"componentDidUpdate",value:function(e){this.props.isOpen!==e.isOpen?this.handleProps():this._element&&this.renderIntoSubtree()}},{key:"componentWillUnmount",value:function(){this.hide()}},{key:"setTargetNode",value:function(e){this.targetNode=e}},{key:"getTargetNode",value:function(){return this.targetNode}},{key:"getContainerNode",value:function(){return m(this.props.container)}},{key:"handlePlacementChange",value:function(e){return this.state.placement!==e.placement&&this.setState({placement:e.placement}),e}},{key:"handleProps",value:function(){"inline"!==this.props.container&&(this.props.isOpen?this.show():this.hide())}},{key:"hide",value:function(){this._element&&(this.getContainerNode().removeChild(this._element),B.a.unmountComponentAtNode(this._element),this._element=null)}},{key:"show",value:function(){this._element=document.createElement("div"),this.getContainerNode().appendChild(this._element),this.renderIntoSubtree(),this._element.childNodes&&this._element.childNodes[0]&&this._element.childNodes[0].focus&&this._element.childNodes[0].focus()}},{key:"renderIntoSubtree",value:function(){B.a.unstable_renderSubtreeIntoContainer(this,this.renderChildren(),this._element)}},{key:"renderChildren",value:function(){var e=this.props,t=e.cssModule,n=e.children,o=(e.isOpen,e.flip),a=(e.target,e.offset),r=e.fallbackPlacement,i=e.placementPrefix,s=e.hideArrow,l=e.className,u=e.tag,d=(e.container,e.modifiers),p=ae(e,["cssModule","children","isOpen","flip","target","offset","fallbackPlacement","placementPrefix","hideArrow","className","tag","container","modifiers"]),f=c("arrow",t),h=(this.state.placement||p.placement).split("-")[0],m=c(I()(l,i?i+"-"+h:h),this.props.cssModule),g=ne({offset:{offset:a},flip:{enabled:o,behavior:r},update:{enabled:!0,order:950,fn:this.handlePlacementChange}},d);return _.a.createElement(U.Popper,ne({modifiers:g},p,{component:u,className:m}),n,!s&&_.a.createElement(U.Arrow,{className:f}))}},{key:"render",value:function(){return this.setTargetNode(m(this.props.target)),"inline"===this.props.container&&this.props.isOpen?this.renderChildren():null}}]),t}(_.a.Component);Mn.propTypes=On,Mn.defaultProps=kn,Mn.childContextTypes=xn;var wn=function(e,t){return t.popperManager.setTargetNode(m(e.target)),null};wn.contextTypes={popperManager:j.a.object.isRequired},wn.propTypes={target:j.a.oneOfType([j.a.string,j.a.func,h]).isRequired};var Cn={placement:j.a.oneOf(Y),target:j.a.oneOfType([j.a.string,j.a.func,h]).isRequired,container:j.a.oneOfType([j.a.string,j.a.func,h]),isOpen:j.a.bool,disabled:j.a.bool,hideArrow:j.a.bool,className:j.a.string,innerClassName:j.a.string,placementPrefix:j.a.string,cssModule:j.a.object,toggle:j.a.func,delay:j.a.oneOfType([j.a.shape({show:j.a.number,hide:j.a.number}),j.a.number]),modifiers:j.a.object},_n={show:0,hide:0},Pn={isOpen:!1,hideArrow:!1,placement:"right",placementPrefix:"bs-popover",delay:_n,toggle:function(){}},jn=function(e){function t(e){Z(this,t);var n=re(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.addTargetEvents=n.addTargetEvents.bind(n),n.handleDocumentClick=n.handleDocumentClick.bind(n),n.removeTargetEvents=n.removeTargetEvents.bind(n),n.getRef=n.getRef.bind(n),n.toggle=n.toggle.bind(n),n.show=n.show.bind(n),n.hide=n.hide.bind(n),n}return oe(t,e),ee(t,[{key:"componentDidMount",value:function(){this._target=m(this.props.target),this.handleProps()}},{key:"componentDidUpdate",value:function(){this.handleProps()}},{key:"componentWillUnmount",value:function(){this.clearShowTimeout(),this.clearHideTimeout(),this.removeTargetEvents()}},{key:"getRef",value:function(e){this._popover=e}},{key:"getDelay",value:function(e){var t=this.props.delay;return"object"===(void 0===t?"undefined":Q(t))?isNaN(t[e])?_n[e]:t[e]:t}},{key:"handleProps",value:function(){this.props.isOpen?this.show():this.hide()}},{key:"show",value:function(){this.clearHideTimeout(),this.addTargetEvents(),this.props.isOpen||(this.clearShowTimeout(),this._showTimeout=setTimeout(this.toggle,this.getDelay("show")))}},{key:"hide",value:function(){this.clearShowTimeout(),this.removeTargetEvents(),this.props.isOpen&&(this.clearHideTimeout(),this._hideTimeout=setTimeout(this.toggle,this.getDelay("hide")))}},{key:"clearShowTimeout",value:function(){clearTimeout(this._showTimeout),this._showTimeout=void 0}},{key:"clearHideTimeout",value:function(){clearTimeout(this._hideTimeout),this._hideTimeout=void 0}},{key:"handleDocumentClick",value:function(e){e.target===this._target||this._target.contains(e.target)||e.target===this._popover||this._popover&&this._popover.contains(e.target)||(this._hideTimeout&&this.clearHideTimeout(),this.props.isOpen&&this.toggle(e))}},{key:"addTargetEvents",value:function(){var e=this;["click","touchstart"].forEach(function(t){return document.addEventListener(t,e.handleDocumentClick,!0)})}},{key:"removeTargetEvents",value:function(){var e=this;["click","touchstart"].forEach(function(t){return document.removeEventListener(t,e.handleDocumentClick,!0)})}},{key:"toggle",value:function(e){return this.props.disabled?e&&e.preventDefault():this.props.toggle(e)}},{key:"render",value:function(){if(!this.props.isOpen)return null;var e=u(this.props,Object.keys(Cn)),t=c(I()("popover-inner",this.props.innerClassName),this.props.cssModule),n=c(I()("popover","show",this.props.className),this.props.cssModule);return _.a.createElement(Mn,{className:n,target:this.props.target,isOpen:this.props.isOpen,hideArrow:this.props.hideArrow,placement:this.props.placement,placementPrefix:this.props.placementPrefix,container:this.props.container,modifiers:this.props.modifiers},_.a.createElement("div",ne({},e,{className:t,ref:this.getRef})))}}]),t}(_.a.Component);jn.propTypes=Cn,jn.defaultProps=Pn;var Sn={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},In={tag:"h3"},Dn=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=ae(e,["className","cssModule","tag"]),r=c(I()(t,"popover-header"),n);return _.a.createElement(o,ne({},a,{className:r}))};Dn.propTypes=Sn,Dn.defaultProps=In;var Rn={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},Ln={tag:"div"},An=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=ae(e,["className","cssModule","tag"]),r=c(I()(t,"popover-body"),n);return _.a.createElement(o,ne({},a,{className:r}))};An.propTypes=Rn,An.defaultProps=Ln;var Fn={children:j.a.node,bar:j.a.bool,multi:j.a.bool,tag:j.a.string,value:j.a.oneOfType([j.a.string,j.a.number]),max:j.a.oneOfType([j.a.string,j.a.number]),animated:j.a.bool,striped:j.a.bool,color:j.a.string,className:j.a.string,barClassName:j.a.string,cssModule:j.a.object},Bn={tag:"div",value:0,max:100},Un=function(e){var t=e.children,n=e.className,o=e.barClassName,a=e.cssModule,r=e.value,i=e.max,s=e.animated,l=e.striped,u=e.color,d=e.bar,p=e.multi,f=e.tag,h=ae(e,["children","className","barClassName","cssModule","value","max","animated","striped","color","bar","multi","tag"]),m=z()(r)/z()(i)*100,g=c(I()(n,"progress"),a),v=c(I()("progress-bar",d?n||o:o,s?"progress-bar-animated":null,u?"bg-"+u:null,l||s?"progress-bar-striped":null),a),b=p?t:_.a.createElement("div",{className:v,style:{width:m+"%"},role:"progressbar","aria-valuenow":r,"aria-valuemin":"0","aria-valuemax":i,children:t});return d?b:_.a.createElement(f,ne({},h,{className:g,children:b}))};Un.propTypes=Fn,Un.defaultProps=Bn;var Hn={children:j.a.node.isRequired,node:j.a.any},zn=function(e){function t(){return Z(this,t),re(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return oe(t,e),ee(t,[{key:"componentWillUnmount",value:function(){this.defaultNode&&document.body.removeChild(this.defaultNode),this.defaultNode=null}},{key:"render",value:function(){return J?(this.props.node||this.defaultNode||(this.defaultNode=document.createElement("div"),document.body.appendChild(this.defaultNode)),B.a.createPortal(this.props.children,this.props.node||this.defaultNode)):null}}]),t}(_.a.Component);zn.propTypes=Hn;var qn=j.a.shape(y.propTypes),Wn={isOpen:j.a.bool,autoFocus:j.a.bool,centered:j.a.bool,size:j.a.string,toggle:j.a.func,keyboard:j.a.bool,role:j.a.string,labelledBy:j.a.string,backdrop:j.a.oneOfType([j.a.bool,j.a.oneOf(["static"])]),onEnter:j.a.func,onExit:j.a.func,onOpened:j.a.func,onClosed:j.a.func,children:j.a.node,className:j.a.string,wrapClassName:j.a.string,modalClassName:j.a.string,backdropClassName:j.a.string,contentClassName:j.a.string,external:j.a.node,fade:j.a.bool,cssModule:j.a.object,zIndex:j.a.oneOfType([j.a.number,j.a.string]),backdropTransition:qn,modalTransition:qn},Gn=Object.keys(Wn),Kn={isOpen:!1,autoFocus:!0,centered:!1,role:"dialog",backdrop:!0,keyboard:!0,zIndex:1050,fade:!0,onOpened:O,onClosed:O,modalTransition:{timeout:G.Modal},backdropTransition:{mountOnEnter:!0,timeout:G.Fade}},Xn=function(e){function t(e){Z(this,t);var n=re(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n._element=null,n._originalBodyPadding=null,n.handleBackdropClick=n.handleBackdropClick.bind(n),n.handleEscape=n.handleEscape.bind(n),n.onOpened=n.onOpened.bind(n),n.onClosed=n.onClosed.bind(n),n.state={isOpen:e.isOpen},e.isOpen&&n.init(),n}return oe(t,e),ee(t,[{key:"componentDidMount",value:function(){this.props.onEnter&&this.props.onEnter(),this.state.isOpen&&this.props.autoFocus&&this.setFocus(),this._isMounted=!0}},{key:"componentWillReceiveProps",value:function(e){e.isOpen&&!this.props.isOpen&&this.setState({isOpen:e.isOpen})}},{key:"componentWillUpdate",value:function(e,t){t.isOpen&&!this.state.isOpen&&this.init()}},{key:"componentDidUpdate",value:function(e,t){this.props.autoFocus&&this.state.isOpen&&!t.isOpen&&this.setFocus()}},{key:"componentWillUnmount",value:function(){this.props.onExit&&this.props.onExit(),this.state.isOpen&&this.destroy(),this._isMounted=!1}},{key:"onOpened",value:function(e,t){this.props.onOpened(),(this.props.modalTransition.onEntered||O)(e,t)}},{key:"onClosed",value:function(e){this.props.onClosed(),(this.props.modalTransition.onExited||O)(e),this.destroy(),this._isMounted&&this.setState({isOpen:!1})}},{key:"setFocus",value:function(){this._dialog&&this._dialog.parentNode&&"function"==typeof this._dialog.parentNode.focus&&this._dialog.parentNode.focus()}},{key:"handleBackdropClick",value:function(e){if(e.stopPropagation(),this.props.isOpen&&!0===this.props.backdrop){var t=this._dialog;e.target&&!t.contains(e.target)&&this.props.toggle&&this.props.toggle(e)}}},{key:"handleEscape",value:function(e){this.props.isOpen&&this.props.keyboard&&27===e.keyCode&&this.props.toggle&&this.props.toggle(e)}},{key:"init",value:function(){this._element=document.createElement("div"),this._element.setAttribute("tabindex","-1"),this._element.style.position="relative",this._element.style.zIndex=this.props.zIndex,this._originalBodyPadding=i(),s(),document.body.appendChild(this._element),this.bodyClassAdded||(document.body.className=I()(document.body.className,c("modal-open",this.props.cssModule)),this.bodyClassAdded=!0)}},{key:"destroy",value:function(){if(this._element&&(document.body.removeChild(this._element),this._element=null),this.bodyClassAdded){var e=c("modal-open",this.props.cssModule),t=new RegExp("(^| )"+e+"( |$)");document.body.className=document.body.className.replace(t," ").trim(),this.bodyClassAdded=!1}a(this._originalBodyPadding)}},{key:"renderModalDialog",value:function(){var e,t=this,n=u(this.props,Gn);return _.a.createElement("div",ne({},n,{className:c(I()("modal-dialog",this.props.className,(e={},te(e,"modal-"+this.props.size,this.props.size),te(e,"modal-dialog-centered",this.props.centered),e)),this.props.cssModule),role:"document",ref:function(e){t._dialog=e}}),_.a.createElement("div",{className:c(I()("modal-content",this.props.contentClassName),this.props.cssModule)},this.props.children))}},{key:"render",value:function(){if(this.state.isOpen){var e=this.props,t=e.wrapClassName,n=e.modalClassName,o=e.backdropClassName,a=e.cssModule,r=e.isOpen,i=e.backdrop,s=e.role,l=e.labelledBy,u=e.external,d={onClick:this.handleBackdropClick,onKeyUp:this.handleEscape,style:{display:"block"},"aria-labelledby":l,role:s,tabIndex:"-1"},p=this.props.fade,f=ne({},y.defaultProps,this.props.modalTransition,{baseClass:p?this.props.modalTransition.baseClass:"",timeout:p?this.props.modalTransition.timeout:0}),h=ne({},y.defaultProps,this.props.backdropTransition,{baseClass:p?this.props.backdropTransition.baseClass:"",timeout:p?this.props.backdropTransition.timeout:0});return _.a.createElement(zn,{node:this._element},_.a.createElement("div",{className:c(t)},_.a.createElement(y,ne({},d,f,{in:r,onEntered:this.onOpened,onExited:this.onClosed,cssModule:a,className:c(I()("modal",n),a)}),u,this.renderModalDialog()),_.a.createElement(y,ne({},h,{in:r&&!!i,cssModule:a,className:c(I()("modal-backdrop",o),a)}))))}return null}}]),t}(_.a.Component);Xn.propTypes=Wn,Xn.defaultProps=Kn;var Vn={tag:j.a.oneOfType([j.a.func,j.a.string]),wrapTag:j.a.oneOfType([j.a.func,j.a.string]),toggle:j.a.func,className:j.a.string,cssModule:j.a.object,children:j.a.node,closeAriaLabel:j.a.string},Yn={tag:"h5",wrapTag:"div",closeAriaLabel:"Close"},Jn=function(e){var t=void 0,n=e.className,o=e.cssModule,a=e.children,r=e.toggle,i=e.tag,s=e.wrapTag,l=e.closeAriaLabel,u=ae(e,["className","cssModule","children","toggle","tag","wrapTag","closeAriaLabel"]),d=c(I()(n,"modal-header"),o);return r&&(t=_.a.createElement("button",{type:"button",onClick:r,className:c("close",o),"aria-label":l},_.a.createElement("span",{"aria-hidden":"true"},String.fromCharCode(215)))),_.a.createElement(s,ne({},u,{className:d}),_.a.createElement(i,{className:c("modal-title",o)},a),t)};Jn.propTypes=Vn,Jn.defaultProps=Yn;var $n={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},Qn={tag:"div"},Zn=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=ae(e,["className","cssModule","tag"]),r=c(I()(t,"modal-body"),n);return _.a.createElement(o,ne({},a,{className:r}))};Zn.propTypes=$n,Zn.defaultProps=Qn;var eo={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},to={tag:"div"},no=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=ae(e,["className","cssModule","tag"]),r=c(I()(t,"modal-footer"),n);return _.a.createElement(o,ne({},a,{className:r}))};no.propTypes=eo,no.defaultProps=to;var oo={placement:j.a.oneOf(Y),target:j.a.oneOfType([j.a.string,j.a.func,h]).isRequired,container:j.a.oneOfType([j.a.string,j.a.func,h]),isOpen:j.a.bool,disabled:j.a.bool,hideArrow:j.a.bool,className:j.a.string,innerClassName:j.a.string,cssModule:j.a.object,toggle:j.a.func,autohide:j.a.bool,placementPrefix:j.a.string,delay:j.a.oneOfType([j.a.shape({show:j.a.number,hide:j.a.number}),j.a.number]),modifiers:j.a.object},ao={show:0,hide:250},ro={isOpen:!1,hideArrow:!1,placement:"top",placementPrefix:"bs-tooltip",delay:ao,autohide:!0,toggle:function(){}},io=function(e){function t(e){Z(this,t);var n=re(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.addTargetEvents=n.addTargetEvents.bind(n),n.handleDocumentClick=n.handleDocumentClick.bind(n),n.removeTargetEvents=n.removeTargetEvents.bind(n),n.toggle=n.toggle.bind(n),n.onMouseOverTooltip=n.onMouseOverTooltip.bind(n),n.onMouseLeaveTooltip=n.onMouseLeaveTooltip.bind(n),n.onMouseOverTooltipContent=n.onMouseOverTooltipContent.bind(n),n.onMouseLeaveTooltipContent=n.onMouseLeaveTooltipContent.bind(n),n.show=n.show.bind(n),n.hide=n.hide.bind(n),n}return oe(t,e),ee(t,[{key:"componentDidMount",value:function(){this._target=m(this.props.target),this.addTargetEvents()}},{key:"componentWillUnmount",value:function(){this.removeTargetEvents()}},{key:"onMouseOverTooltip",value:function(){this._hideTimeout&&this.clearHideTimeout(),this._showTimeout=setTimeout(this.show,this.getDelay("show"))}},{key:"onMouseLeaveTooltip",value:function(){this._showTimeout&&this.clearShowTimeout(),this._hideTimeout=setTimeout(this.hide,this.getDelay("hide"))}},{key:"onMouseOverTooltipContent",value:function(){this.props.autohide||this._hideTimeout&&this.clearHideTimeout()}},{key:"onMouseLeaveTooltipContent",value:function(){this.props.autohide||(this._showTimeout&&this.clearShowTimeout(),this._hideTimeout=setTimeout(this.hide,this.getDelay("hide")))}},{key:"getDelay",value:function(e){var t=this.props.delay;return"object"===(void 0===t?"undefined":Q(t))?isNaN(t[e])?ao[e]:t[e]:t}},{key:"show",value:function(){this.props.isOpen||(this.clearShowTimeout(),this.toggle())}},{key:"hide",value:function(){this.props.isOpen&&(this.clearHideTimeout(),this.toggle())}},{key:"clearShowTimeout",value:function(){clearTimeout(this._showTimeout),this._showTimeout=void 0}},{key:"clearHideTimeout",value:function(){clearTimeout(this._hideTimeout),this._hideTimeout=void 0}},{key:"handleDocumentClick",value:function(e){(e.target===this._target||this._target.contains(e.target))&&(this._hideTimeout&&this.clearHideTimeout(),this.props.isOpen||this.toggle())}},{key:"addTargetEvents",value:function(){var e=this;this._target.addEventListener("mouseover",this.onMouseOverTooltip,!0),this._target.addEventListener("mouseout",this.onMouseLeaveTooltip,!0),["click","touchstart"].forEach(function(t){return document.addEventListener(t,e.handleDocumentClick,!0)})}},{key:"removeTargetEvents",value:function(){var e=this;this._target.removeEventListener("mouseover",this.onMouseOverTooltip,!0),this._target.removeEventListener("mouseout",this.onMouseLeaveTooltip,!0),["click","touchstart"].forEach(function(t){return document.removeEventListener(t,e.handleDocumentClick,!0)})}},{key:"toggle",value:function(e){return this.props.disabled?e&&e.preventDefault():this.props.toggle()}},{key:"render",value:function(){if(!this.props.isOpen)return null;var e=u(this.props,Object.keys(oo)),t=c(I()("tooltip-inner",this.props.innerClassName),this.props.cssModule),n=c(I()("tooltip","show",this.props.className),this.props.cssModule);return _.a.createElement(Mn,{className:n,target:this.props.target,isOpen:this.props.isOpen,hideArrow:this.props.hideArrow,placement:this.props.placement,placementPrefix:this.props.placementPrefix,container:this.props.container,modifiers:this.props.modifiers},_.a.createElement("div",ne({},e,{className:t,onMouseOver:this.onMouseOverTooltipContent,onMouseLeave:this.onMouseLeaveTooltipContent})))}}]),t}(_.a.Component);io.propTypes=oo,io.defaultProps=ro;var so={className:j.a.string,cssModule:j.a.object,size:j.a.string,bordered:j.a.bool,striped:j.a.bool,inverse:f(j.a.bool,'Please use the prop "dark"'),dark:j.a.bool,hover:j.a.bool,responsive:j.a.oneOfType([j.a.bool,j.a.string]),tag:j.a.oneOfType([j.a.func,j.a.string]),responsiveTag:j.a.oneOfType([j.a.func,j.a.string])},lo={tag:"table",responsiveTag:"div"},co=function(e){var t=e.className,n=e.cssModule,o=e.size,a=e.bordered,r=e.striped,i=e.inverse,s=e.dark,l=e.hover,u=e.responsive,d=e.tag,p=e.responsiveTag,f=ae(e,["className","cssModule","size","bordered","striped","inverse","dark","hover","responsive","tag","responsiveTag"]),h=c(I()(t,"table",!!o&&"table-"+o,!!a&&"table-bordered",!!r&&"table-striped",!(!s&&!i)&&"table-dark",!!l&&"table-hover"),n),m=_.a.createElement(d,ne({},f,{className:h}));if(u){var g=!0===u?"table-responsive":"table-responsive-"+u;return _.a.createElement(p,{className:g},m)}return m};co.propTypes=so,co.defaultProps=lo;var uo={tag:j.a.oneOfType([j.a.func,j.a.string]),flush:j.a.bool,className:j.a.string,cssModule:j.a.object},po={tag:"ul"},fo=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=e.flush,r=ae(e,["className","cssModule","tag","flush"]),i=c(I()(t,"list-group",!!a&&"list-group-flush"),n);return _.a.createElement(o,ne({},r,{className:i}))};fo.propTypes=uo,fo.defaultProps=po;var ho={children:j.a.node,inline:j.a.bool,tag:j.a.oneOfType([j.a.func,j.a.string]),innerRef:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},mo={tag:"form"},go=function(e){var t=e.className,n=e.cssModule,o=e.inline,a=e.tag,r=e.innerRef,i=ae(e,["className","cssModule","inline","tag","innerRef"]),s=c(I()(t,!!o&&"form-inline"),n);return _.a.createElement(a,ne({},i,{ref:r,className:s}))};go.propTypes=ho,go.defaultProps=mo;var vo={children:j.a.node,tag:j.a.string,className:j.a.string,cssModule:j.a.object,valid:j.a.bool},bo={tag:"div",valid:void 0},yo=function(e){var t=e.className,n=e.cssModule,o=e.valid,a=e.tag,r=ae(e,["className","cssModule","valid","tag"]),i=c(I()(t,o?"valid-feedback":"invalid-feedback"),n);return _.a.createElement(a,ne({},r,{className:i}))};yo.propTypes=vo,yo.defaultProps=bo;var To={children:j.a.node,row:j.a.bool,check:j.a.bool,inline:j.a.bool,disabled:j.a.bool,tag:j.a.string,className:j.a.string,cssModule:j.a.object},No={tag:"div"},Eo=function(e){var t=e.className,n=e.cssModule,o=e.row,a=e.disabled,r=e.check,i=e.inline,s=e.tag,l=ae(e,["className","cssModule","row","disabled","check","inline","tag"]),u=c(I()(t,!!o&&"row",r?"form-check":"form-group",!(!r||!i)&&"form-check-inline",!(!r||!a)&&"disabled"),n);return _.a.createElement(s,ne({},l,{className:u}))};Eo.propTypes=To,Eo.defaultProps=No;var Oo={children:j.a.node,inline:j.a.bool,tag:j.a.oneOfType([j.a.func,j.a.string]),color:j.a.string,className:j.a.string,cssModule:j.a.object},ko={tag:"small",color:"muted"},xo=function(e){var t=e.className,n=e.cssModule,o=e.inline,a=e.color,r=e.tag,i=ae(e,["className","cssModule","inline","color","tag"]),s=c(I()(t,!o&&"form-text",!!a&&"text-"+a),n);return _.a.createElement(r,ne({},i,{className:s}))};xo.propTypes=Oo,xo.defaultProps=ko;var Mo={children:j.a.node,type:j.a.string,size:j.a.string,bsSize:j.a.string,state:f(j.a.string,'Please use the props "valid" and "invalid" to indicate the state.'),valid:j.a.bool,invalid:j.a.bool,tag:j.a.oneOfType([j.a.func,j.a.string]),innerRef:j.a.oneOfType([j.a.func,j.a.string]),static:f(j.a.bool,'Please use the prop "plaintext"'),plaintext:j.a.bool,addon:j.a.bool,className:j.a.string,cssModule:j.a.object},wo={type:"text"},Co=function(e){function t(){return Z(this,t),re(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return oe(t,e),ee(t,[{key:"render",value:function(){var e=this.props,t=e.className,n=e.cssModule,o=e.type,a=e.bsSize,r=e.state,i=e.valid,s=e.invalid,l=e.tag,u=e.addon,d=e.static,f=e.plaintext,h=e.innerRef,m=ae(e,["className","cssModule","type","bsSize","state","valid","invalid","tag","addon","static","plaintext","innerRef"]),g=["radio","checkbox"].indexOf(o)>-1,v=new RegExp("\\D","g"),b="file"===o,y="textarea"===o,T="select"===o,N=l||(T||y?o:"input"),E="form-control";f||d?(E+="-plaintext",N=l||"p"):b?E+="-file":g&&(E=u?null:"form-check-input"),r&&void 0===i&&void 0===s&&("danger"===r?s=!0:"success"===r&&(i=!0)),m.size&&v.test(m.size)&&(p('Please use the prop "bsSize" instead of the "size" to bootstrap\'s input sizing.'),a=m.size,delete m.size);var O=c(I()(t,s&&"is-invalid",i&&"is-valid",!!a&&"form-control-"+a,E),n);return"input"!==N&&"string"==typeof l||(m.type=o),_.a.createElement(N,ne({},m,{ref:h,className:O}))}}]),t}(_.a.Component);Co.propTypes=Mo,Co.defaultProps=wo;var _o={tag:j.a.oneOfType([j.a.func,j.a.string]),size:j.a.string,className:j.a.string,cssModule:j.a.object},Po={tag:"div"},jo=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=e.size,r=ae(e,["className","cssModule","tag","size"]),i=c(I()(t,"input-group",a?"input-group-"+a:null),n);return _.a.createElement(o,ne({},r,{className:i}))};jo.propTypes=_o,jo.defaultProps=Po;var So={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object},Io={tag:"span"},Do=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=ae(e,["className","cssModule","tag"]),r=c(I()(t,"input-group-text"),n);return _.a.createElement(o,ne({},a,{className:r}))};Do.propTypes=So,Do.defaultProps=Io;var Ro={tag:j.a.oneOfType([j.a.func,j.a.string]),addonType:j.a.oneOf(["prepend","append"]).isRequired,children:j.a.node,className:j.a.string,cssModule:j.a.object},Lo={tag:"div"},Ao=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=e.addonType,r=e.children,i=ae(e,["className","cssModule","tag","addonType","children"]),s=c(I()(t,"input-group-"+a),n);return"string"==typeof r?_.a.createElement(o,ne({},i,{className:s}),_.a.createElement(Do,{children:r})):_.a.createElement(o,ne({},i,{className:s,children:r}))};Ao.propTypes=Ro,Ao.defaultProps=Lo;var Fo={tag:j.a.oneOfType([j.a.func,j.a.string]),addonType:j.a.oneOf(["prepend","append"]).isRequired,children:j.a.node,groupClassName:j.a.string,groupAttributes:j.a.object,className:j.a.string,cssModule:j.a.object},Bo=function(e){p('The "InputGroupButton" component has been deprecated.\nPlease use component "InputGroupAddon".');var t=e.children,n=e.groupClassName,o=e.groupAttributes,a=ae(e,["children","groupClassName","groupAttributes"]);if("string"==typeof t){var r=a.cssModule,i=a.tag,s=a.addonType,l=ae(a,["cssModule","tag","addonType"]),c=ne({},o,{cssModule:r,tag:i,addonType:s});return _.a.createElement(Ao,ne({},c,{className:n}),_.a.createElement(Ze,ne({},l,{children:t})))}return _.a.createElement(Ao,ne({},e,{children:t}))};Bo.propTypes=Fo;var Uo={addonType:j.a.oneOf(["prepend","append"]).isRequired,children:j.a.node},Ho=function(e){return _.a.createElement(He,e)};Ho.propTypes=Uo;var zo=["xs","sm","md","lg","xl"],qo=j.a.oneOfType([j.a.number,j.a.string]),Wo=j.a.oneOfType([j.a.string,j.a.number,j.a.shape({size:qo,push:f(qo,'Please use the prop "order"'),pull:f(qo,'Please use the prop "order"'),order:qo,offset:qo})]),Go={children:j.a.node,hidden:j.a.bool,check:j.a.bool,size:j.a.string,for:j.a.string,tag:j.a.string,className:j.a.string,cssModule:j.a.object,xs:Wo,sm:Wo,md:Wo,lg:Wo,xl:Wo,widths:j.a.array},Ko={tag:"label",widths:zo},Xo=function(e,t,n){return!0===n||""===n?e?"col":"col-"+t:"auto"===n?e?"col-auto":"col-"+t+"-auto":e?"col-"+n:"col-"+t+"-"+n},Vo=function(e){var t=e.className,n=e.cssModule,o=e.hidden,a=e.widths,r=e.tag,i=e.check,s=e.size,l=e.for,u=ae(e,["className","cssModule","hidden","widths","tag","check","size","for"]),d=[];a.forEach(function(t,o){var a=e[t];if(delete u[t],a||""===a){var r=!o,i=void 0;if(A()(a)){var s,l=r?"-":"-"+t+"-";i=Xo(r,t,a.size),d.push(c(I()((s={},te(s,i,a.size||""===a.size),te(s,"order"+l+a.order,a.order||0===a.order),te(s,"offset"+l+a.offset,a.offset||0===a.offset),s))),n)}else i=Xo(r,t,a),d.push(i)}});var p=c(I()(t,!!o&&"sr-only",!!i&&"form-check-label",!!s&&"col-form-label-"+s,d,!!d.length&&"col-form-label"),n);return _.a.createElement(r,ne({htmlFor:l},u,{className:p}))};Vo.propTypes=Go,Vo.defaultProps=Ko;var Yo={body:j.a.bool,bottom:j.a.bool,children:j.a.node,className:j.a.string,cssModule:j.a.object,heading:j.a.bool,left:j.a.bool,list:j.a.bool,middle:j.a.bool,object:j.a.bool,right:j.a.bool,tag:j.a.oneOfType([j.a.func,j.a.string]),top:j.a.bool},Jo=function(e){var t=e.body,n=e.bottom,o=e.className,a=e.cssModule,r=e.heading,i=e.left,s=e.list,l=e.middle,u=e.object,d=e.right,p=e.tag,f=e.top,h=ae(e,["body","bottom","className","cssModule","heading","left","list","middle","object","right","tag","top"]),m=void 0;m=r?"h4":i||d?"a":u?"img":s?"ul":"div";var g=p||m,v=c(I()(o,{"media-body":t,"media-heading":r,"media-left":i,"media-right":d,"media-top":f,"media-bottom":n,"media-middle":l,"media-object":u,"media-list":s,media:!(t||r||i||d||f||n||l||u||s)}),a);return _.a.createElement(g,ne({},h,{className:v}))};Jo.propTypes=Yo;var $o={children:j.a.node,className:j.a.string,cssModule:j.a.object,size:j.a.string,tag:j.a.oneOfType([j.a.func,j.a.string])},Qo={tag:"ul"},Zo=function(e){var t=e.className,n=e.cssModule,o=e.size,a=e.tag,r=ae(e,["className","cssModule","size","tag"]),i=c(I()(t,"pagination",te({},"pagination-"+o,!!o)),n);return _.a.createElement(a,ne({},r,{className:i}))};Zo.propTypes=$o,Zo.defaultProps=Qo;var ea={active:j.a.bool,children:j.a.node,className:j.a.string,cssModule:j.a.object,disabled:j.a.bool,tag:j.a.oneOfType([j.a.func,j.a.string])},ta={tag:"li"},na=function(e){var t=e.active,n=e.className,o=e.cssModule,a=e.disabled,r=e.tag,i=ae(e,["active","className","cssModule","disabled","tag"]),s=c(I()(n,"page-item",{active:t,disabled:a}),o);return _.a.createElement(r,ne({},i,{className:s}))};na.propTypes=ea,na.defaultProps=ta;var oa={"aria-label":j.a.string,children:j.a.node,className:j.a.string,cssModule:j.a.object,next:j.a.bool,previous:j.a.bool,tag:j.a.oneOfType([j.a.func,j.a.string])},aa={tag:"a"},ra=function(e){var t=e.className,n=e.cssModule,o=e.next,a=e.previous,r=e.tag,i=ae(e,["className","cssModule","next","previous","tag"]),s=c(I()(t,"page-link"),n),l=void 0;a?l="Previous":o&&(l="Next");var u=e["aria-label"]||l,d=void 0;a?d="«":o&&(d="»");var p=e.children;return p&&Array.isArray(p)&&0===p.length&&(p=null),(a||o)&&(p=[_.a.createElement("span",{"aria-hidden":"true",key:"caret"},p||d),_.a.createElement("span",{className:"sr-only",key:"sr"},u)]),_.a.createElement(r,ne({},i,{className:s,"aria-label":u}),p)};ra.propTypes=oa,ra.defaultProps=aa;var ia={tag:j.a.oneOfType([j.a.func,j.a.string]),activeTab:j.a.any,className:j.a.string,cssModule:j.a.object},sa={tag:"div"},la={activeTabId:j.a.any},ca=function(e){function t(e){Z(this,t);var n=re(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.state={activeTab:n.props.activeTab},n}return oe(t,e),ee(t,[{key:"getChildContext",value:function(){return{activeTabId:this.state.activeTab}}},{key:"componentWillReceiveProps",value:function(e){this.state.activeTab!==e.activeTab&&this.setState({activeTab:e.activeTab})}},{key:"render",value:function(){var e=this.props,t=e.className,n=e.cssModule,o=e.tag,a=u(this.props,Object.keys(ia)),r=c(I()("tab-content",t),n);return _.a.createElement(o,ne({},a,{className:r}))}}]),t}(C.Component);ca.propTypes=ia,ca.defaultProps=sa,ca.childContextTypes=la;var ua={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.string,cssModule:j.a.object,tabId:j.a.any},da={tag:"div"},pa={activeTabId:j.a.any};k.propTypes=ua,k.defaultProps=da,k.contextTypes=pa;var fa={tag:j.a.oneOfType([j.a.func,j.a.string]),fluid:j.a.bool,className:j.a.string,cssModule:j.a.object},ha={tag:"div"},ma=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=e.fluid,r=ae(e,["className","cssModule","tag","fluid"]),i=c(I()(t,"jumbotron",!!a&&"jumbotron-fluid"),n);return _.a.createElement(o,ne({},r,{className:i}))};ma.propTypes=fa,ma.defaultProps=ha;var ga={children:j.a.node,className:j.a.string,closeClassName:j.a.string,closeAriaLabel:j.a.string,cssModule:j.a.object,color:j.a.string,isOpen:j.a.bool,toggle:j.a.func,tag:j.a.oneOfType([j.a.func,j.a.string]),transition:j.a.shape(y.propTypes)},va={color:"success",isOpen:!0,tag:"div",closeAriaLabel:"Close",transition:ne({},y.defaultProps,{unmountOnExit:!0})};x.propTypes=ga,x.defaultProps=va;var ba,ya=ne({},kt.propTypes,{isOpen:j.a.bool,children:j.a.oneOfType([j.a.arrayOf(j.a.node),j.a.node]),tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.node,navbar:j.a.bool,cssModule:j.a.object}),Ta=ne({},kt.defaultProps,{isOpen:!1,appear:!1,enter:!0,exit:!0,tag:"div",timeout:G.Collapse}),Na=(ba={},te(ba,X.ENTERING,"collapsing"),te(ba,X.ENTERED,"collapse show"),te(ba,X.EXITING,"collapsing"),te(ba,X.EXITED,"collapse"),ba),Ea=function(e){function t(e){Z(this,t);var n=re(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.state={height:null},["onEntering","onEntered","onExit","onExiting","onExited"].forEach(function(e){n[e]=n[e].bind(n)}),n}return oe(t,e),ee(t,[{key:"onEntering",value:function(e,t){this.setState({height:w(e)}),this.props.onEntering(e,t)}},{key:"onEntered",value:function(e,t){this.setState({height:null}),this.props.onEntered(e,t)}},{key:"onExit",value:function(e){this.setState({height:w(e)}),this.props.onExit(e)}},{key:"onExiting",value:function(e){e.offsetHeight;this.setState({height:0}),this.props.onExiting(e)}},{key:"onExited",value:function(e){this.setState({height:null}),this.props.onExited(e)}},{key:"render",value:function(){var e=this.props,t=e.tag,n=e.isOpen,o=e.className,a=e.navbar,r=e.cssModule,i=e.children,s=ae(e,["tag","isOpen","className","navbar","cssModule","children"]),l=this.state.height,p=d(s,K),f=u(s,K);return _.a.createElement(kt,ne({},p,{in:n,onEntering:this.onEntering,onEntered:this.onEntered,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}),function(e){var n=M(e),s=c(I()(o,n,a&&"navbar-collapse"),r),u=null===l?null:{height:l};return _.a.createElement(t,ne({},f,{style:ne({},f.style,u),className:s}),i)})}}]),t}(C.Component);Ea.propTypes=ya,Ea.defaultProps=Ta;var Oa={tag:j.a.oneOfType([j.a.func,j.a.string]),active:j.a.bool,disabled:j.a.bool,color:j.a.string,action:j.a.bool,className:j.a.any,cssModule:j.a.object},ka={tag:"li"},xa=function(e){e.preventDefault()},Ma=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=e.active,r=e.disabled,i=e.action,s=e.color,l=ae(e,["className","cssModule","tag","active","disabled","action","color"]),u=c(I()(t,!!a&&"active",!!r&&"disabled",!!i&&"list-group-item-action",!!s&&"list-group-item-"+s,"list-group-item"),n);return r&&(l.onClick=xa),_.a.createElement(o,ne({},l,{className:u}))};Ma.propTypes=Oa,Ma.defaultProps=ka;var wa={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.any,cssModule:j.a.object},Ca={tag:"h5"},_a=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=ae(e,["className","cssModule","tag"]),r=c(I()(t,"list-group-item-heading"),n);return _.a.createElement(o,ne({},a,{className:r}))};_a.propTypes=wa,_a.defaultProps=Ca;var Pa={tag:j.a.oneOfType([j.a.func,j.a.string]),className:j.a.any,cssModule:j.a.object},ja={tag:"p"},Sa=function(e){var t=e.className,n=e.cssModule,o=e.tag,a=ae(e,["className","cssModule","tag"]),r=c(I()(t,"list-group-item-text"),n);return _.a.createElement(o,ne({},a,{className:r}))};Sa.propTypes=Pa,Sa.defaultProps=ja;var Ia=function(e){function t(e){Z(this,t);var n=re(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.state={isOpen:!0},n.toggle=n.toggle.bind(n),n}return oe(t,e),ee(t,[{key:"toggle",value:function(){this.setState({isOpen:!this.state.isOpen})}},{key:"render",value:function(){return _.a.createElement(x,ne({isOpen:this.state.isOpen,toggle:this.toggle},this.props))}}]),t}(C.Component),Da=function(e){function t(e){Z(this,t);var n=re(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.state={isOpen:!1},n.toggle=n.toggle.bind(n),n}return oe(t,e),ee(t,[{key:"toggle",value:function(){this.setState({isOpen:!this.state.isOpen})}},{key:"render",value:function(){return _.a.createElement(tt,ne({isOpen:this.state.isOpen,toggle:this.toggle},this.props))}}]),t}(C.Component),Ra=function(e){function t(e){Z(this,t);var n=re(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.state={isOpen:!1},n.toggle=n.toggle.bind(n),n}return oe(t,e),ee(t,[{key:"toggle",value:function(){this.setState({isOpen:!this.state.isOpen})}},{key:"render",value:function(){return _.a.createElement(He,ne({isOpen:this.state.isOpen,toggle:this.toggle},this.props))}}]),t}(C.Component),La=function(e){return p('The "UncontrolledNavDropdown" component has been deprecated.\nPlease use component "UncontrolledDropdown" with nav prop.'),_.a.createElement(Ra,ne({nav:!0},e))},Aa=function(e){function t(e){Z(this,t);var n=re(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.state={isOpen:!1},n.toggle=n.toggle.bind(n),n}return oe(t,e),ee(t,[{key:"toggle",value:function(){this.setState({isOpen:!this.state.isOpen})}},{key:"render",value:function(){return _.a.createElement(io,ne({isOpen:this.state.isOpen,toggle:this.toggle},this.props))}}]),t}(C.Component)},function(e,t){e.exports=FieldHolder},function(e,t){e.exports=InsertLinkModal},function(e,t){e.exports=jQuery}]); \ No newline at end of file diff --git a/client/dist/styles/bundle.css b/client/dist/styles/bundle.css index 5373ee1..df67da3 100644 --- a/client/dist/styles/bundle.css +++ b/client/dist/styles/bundle.css @@ -1 +1 @@ -.form__field-holder .block-link-field{box-shadow:none;-webkit-box-shadow:none}.form__field-holder .block-link-field:hover{background-color:#f0f4f7;cursor:pointer}.block-link-field__icon:before{content:"2";font-family:silverstripe;font-size:1.4772rem;left:6px;margin-right:18px;position:relative}.block-link-field__content--message{font-style:italic}.block-link-field__link{color:#0071c4}.block-link-field__title{margin-right:1.2308rem}@media (min-width:544px){.block-link-field__title{margin-right:6.154rem}} \ No newline at end of file +.form__field-holder .block-link-field{box-shadow:none;-webkit-box-shadow:none}.form__field-holder .block-link-field:hover{background-color:#f0f4f7;cursor:pointer}.block-link-field__icon:before{content:"2";font-family:silverstripe;font-size:1.4772rem;left:6px;margin-right:18px;position:relative}.block-link-field__content--message-modified{font-style:italic}.block-link-field__content--message-add-link,.block-link-field__link{color:#0071c4}.block-link-field__title{margin-right:1.2308rem}@media (min-width:544px){.block-link-field__title{margin-right:6.154rem}} \ No newline at end of file diff --git a/client/dist/styles/frontend-default.css b/client/dist/styles/frontend-default.css index c381a32..0512a7f 100644 --- a/client/dist/styles/frontend-default.css +++ b/client/dist/styles/frontend-default.css @@ -1 +1 @@ -.silverstripe__elementalbannerblock__block__bannerblock{position:relative;width:100%;display:-webkit-box;display:-webkit-flex;display:flex;height:200px;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.banner-element__image{background-color:#eee;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1;height:200px}.banner-element__image img{border:none;-o-object-fit:cover;object-fit:cover;width:100%}.banner-element__content{left:40px;position:absolute;width:90%}.banner-element__call-to-action{padding:10px;background:red;color:#fff!important;display:inline-block;text-decoration:none;margin-bottom:10px}.banner-element__call-to-action:hover{border:none!important} \ No newline at end of file +.silverstripe__elementalbannerblock__block__bannerblock{position:relative;width:100%;display:-webkit-box;display:-webkit-flex;display:flex;height:200px;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.banner-element__image{background-color:#eee;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1;height:200px}.banner-element__image img{border:0;-o-object-fit:cover;object-fit:cover;width:100%}.banner-element__content{left:40px;position:absolute;width:90%}.banner-element__call-to-action{padding:10px;background:red;color:#fff!important;display:inline-block;text-decoration:none;margin-bottom:10px}.banner-element__call-to-action:hover{border:0!important} \ No newline at end of file diff --git a/client/src/boot/index.js b/client/src/boot/index.js new file mode 100644 index 0000000..4e9a41b --- /dev/null +++ b/client/src/boot/index.js @@ -0,0 +1,7 @@ +/* global window */ + +import registerComponents from 'boot/registerComponents'; + +window.document.addEventListener('DOMContentLoaded', () => { + registerComponents(); +}); diff --git a/client/src/boot/registerComponents.js b/client/src/boot/registerComponents.js new file mode 100644 index 0000000..d509c8b --- /dev/null +++ b/client/src/boot/registerComponents.js @@ -0,0 +1,10 @@ +import Injector from 'lib/Injector'; +import BlockLinkField from 'components/BlockLinkField/BlockLinkField'; +import BlockLinkFieldActions from 'components/BlockLinkFieldActions/BlockLinkFieldActions'; + +export default () => { + Injector.component.registerMany({ + BlockLinkField, + BlockLinkFieldActions, + }); +}; diff --git a/client/src/bundles/bundle.js b/client/src/bundles/bundle.js index 35ec061..ea3051f 100644 --- a/client/src/bundles/bundle.js +++ b/client/src/bundles/bundle.js @@ -1,2 +1,2 @@ -require('../components/BlockLinkField/BlockLinkField.js'); -require('../components/BlockLinkFieldActions/BlockLinkFieldActions.js'); +require('../legacy/BlockLinkFieldEntwine'); +require('boot'); diff --git a/client/src/components/BannerBlock/Frontend.scss b/client/src/components/BannerBlock/Frontend.scss index 842adb2..fcc94fa 100644 --- a/client/src/components/BannerBlock/Frontend.scss +++ b/client/src/components/BannerBlock/Frontend.scss @@ -15,7 +15,7 @@ height: 200px; img { - border: none; + border: 0; object-fit: cover; width: 100%; } @@ -36,6 +36,6 @@ margin-bottom: 10px; &:hover { - border: none !important; + border: 0 !important; } } diff --git a/client/src/components/BlockLinkField/BlockLinkField.js b/client/src/components/BlockLinkField/BlockLinkField.js index 49dc5d1..0d69ade 100644 --- a/client/src/components/BlockLinkField/BlockLinkField.js +++ b/client/src/components/BlockLinkField/BlockLinkField.js @@ -1,340 +1,359 @@ -import jQuery from 'jquery'; -import i18n from 'i18n'; -import React from 'react'; -import ReactDOM from 'react-dom'; -import BlockLinkFieldActions from 'components/BlockLinkFieldActions/BlockLinkFieldActions'; +/* global window */ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import fieldHolder from 'components/FieldHolder/FieldHolder'; import CONSTANTS from 'constants/index'; -import { provideInjector } from 'lib/Injector'; +import i18n from 'i18n'; +import classnames from 'classnames'; +import { createInsertLinkModal } from 'containers/InsertLinkModal/InsertLinkModal'; +import { inject, loadComponent } from 'lib/Injector'; -const dialogWrapperClass = 'insert-link__dialog-wrapper'; -const internalDialogId = 'insert-link__dialog-wrapper--internal'; -const noTinyMceClass = `${internalDialogId}-no-tinymce`; -const InjectedBlockLinkFieldActions = provideInjector(BlockLinkFieldActions); +// Re-use the CMS page internal link form schema +const formName = 'editorInternalLink'; +const sectionConfigKey = 'SilverStripe\\CMS\\Controllers\\CMSPageEditController'; +const InjectedLinkModal = loadComponent(createInsertLinkModal(sectionConfigKey, formName)); /** - * The BlockLinkField allows you to add arbitrary links to a content block. They will be - * condensed into a BlockLinkField form field, which triggers an "insert link" modal popup. - * - * This logic layers on top of TinyMCE_sslink-internal.js to work outside of the TinyMCE - * context. + * BlockLinkField renders a summary of a link to another page on the current website, with a link + * title, description and whether to open it in a new window or not. The form for this is rendered + * using an InsertLinkModal component */ -jQuery.entwine('ss', ($) => { - $('.form__field-holder .block-link-field').entwine({ - /** - * Get the dialog wrapper element selector - * - * @return {Object} - */ - getDialogWrapper() { - return $(`#${internalDialogId}`); - }, - - /** - * Create a dialog wrapper element if one doesn't exist already - */ - createDialog() { - let dialog = this.getDialogWrapper(); - - if (!dialog.length) { - dialog = $(`
`) - .addClass(dialogWrapperClass); - - $('body').append(dialog); - } - }, - - /** - * Instantiate the "insert link" dialog when a BlockLinkField is added to a page - */ - onmatch() { - this.createDialog(); - }, - - /** - * Trigger an "insert link" dialog, outside of TinyMCE context - */ - onclick(e) { - // Don't interfere with buttons default behaviour inside the container - if (!$(e.target).is('button')) { - const linkName = this.attr('name'); - - this.getDialogWrapper() - .addClass(noTinyMceClass) - .data('datafield-name', linkName) - .renderModal(true); - - $(`#${internalDialogId}`).updateModalTitle($(this).find(`#${linkName}_Title`).val()); - } - }, - - /** - * Registering a change will replace the BlockLinkField content with a holding message - * to encourage the user to save the form to proceed with the new link data. - */ - registerChange() { - this.find('.block-link-field__content') - .empty() - .append( - $('') - .addClass('block-link-field__content--message') - .text(i18n._t('BlockLinkField.ModifiedMessage', 'Changes will be visible upon save')) - ); - }, - }); - - $('.js-injector-boot .block-link-field__actions').entwine({ - /** - * Get the BlockLinkField holder that owns the current actions popover - * - * @return {Object} - */ - getLinkField() { - return this.parent('.block-link-field'); - }, - - /** - * Get the hidden JSON data field from the containing BlockLinkField - * - * @return {Object} - */ - getLinkDataField() { - return this.getLinkField().find('input:hidden.block-link-field'); - }, - - /** - * If the BlockLinkField has some data set, render the actions popover to allow users - * to clear it. - */ - onmatch() { - const data = JSON.parse(this.getLinkDataField().val()); - - if (data && typeof data.PageID !== 'undefined') { - this.renderActionsMenu(); - } - }, - - /** - * Gather the actions for the popover menu and render it - */ - renderActionsMenu() { - const actions = CONSTANTS.LINK_ACTIONS.map((action) => { - if (action.callback) { - return action; - } - - switch (action.value) { - case 'clear': { - return { - ...action, - callback: () => { - // Remove the hidden JSON data object - this.getLinkDataField().val('{}'); - - // Register a change on the field, switching the content to a holding message - this.getLinkField().registerChange(); - - // Close the popover - this.remove(); - $(`#${this.find('.btn').attr('aria-controls')}`).remove(); - } - }; - } - default: { - return action; - } - } +class BlockLinkField extends Component { + constructor(props) { + super(props); + + this.handleCloseModal = this.handleCloseModal.bind(this); + this.handleClick = this.handleClick.bind(this); + this.handleKeyUp = this.handleKeyUp.bind(this); + this.handleSubmitModal = this.handleSubmitModal.bind(this); + + this.state = { + isDirty: false, + modalOpen: false, + value: {}, + }; + } + + /** + * When the component is mounted, parse the input value (provided as JSON) and store it + * in local state as a structured object. + */ + componentDidMount() { + const { value } = this.props; + + if (value) { + // See https://github.com/yannickcr/eslint-plugin-react/issues/1707 + this.setState({ // eslint-disable-line + value: JSON.parse(value), }); + } else { // JSON.parse fails on an empty string which is not valid JSON + this.setState({ // eslint-disable-line + value: {}, + }); + } + } + + /** + * @returns {string} + */ + getClassNames() { + const { extraClass } = this.props; + + return classnames( + 'form-control', + 'd-flex', + 'justify-content-start', + 'p-2', + 'align-items-center', + extraClass, + ); + } + + /** + * Returns the relative URL for the linked page, if one is set, with a leading slash + * + * @returns {string} + */ + getLinkRelativeUrl() { + const linkedPage = this.getLinkedPage(); + + if (linkedPage) { + const untrimmedSegment = linkedPage.URLSegment || linkedPage; + // Remove leading slashes from the existing URLSegment + const trimmedSegment = untrimmedSegment.replace(/^\/+/, ''); + return `/${trimmedSegment}`; + } - ReactDOM.render( - , - this[0] - ); - }, - }); - - $(`#${internalDialogId}`).entwine({ - /** - * Decide whether the dialog was triggered from TinyMCE or outside - * - * @return {Boolean} - */ - isTinyMce() { - return !this.hasClass(noTinyMceClass); - }, - - /** - * Show the "link text" field if the BlockLinkField has had setShowLinkText(true). This - * is used for call to action links, for example, but not for image links. - * - * @return {Boolean} - */ - getRequireLinkText() { - if (this.isTinyMce()) { - return this._super(); - } - - const linkDataField = this.getLinkDataField(); - if (typeof linkDataField === 'undefined' - || typeof linkDataField.data('showlinktext') === 'undefined' - ) { - return true; + return ''; + } + + /** + * Returns a list of the actions for the "more actions" menu, including a callback + * to perform when clicked. + * + * @returns {Object[]} + */ + getActions() { + return CONSTANTS.LINK_ACTIONS.map((action) => { + if (action.callback) { + return action; } - // Refer to BlockLinkField::setShowLinkText for data attribute name - return !!+linkDataField.data('showlinktext'); - }, - - /** - * Return a selector for the hidden input for the BlockLinkField that will have JSON data - * saved as its value - * - * @return {Object} - */ - getLinkDataField() { - const fieldName = this.data('datafield-name'); - return $(`input[name="${fieldName}"]`); - }, - - /** - * Get, parse and return the JSON data from the link data field if available - * - * @return {Object} - */ - getDataFromLinkField() { - const dataField = this.getLinkDataField(); - let linkData = {}; - - if (typeof dataField !== 'undefined') { - try { - linkData = JSON.parse(dataField.val()); - } catch (e) { - // no-op + switch (action.value) { + case 'clear': { + return { + ...action, + callback: () => { + // Clear the field value + this.setState({ + value: {}, + }); + } + }; + } + default: { + return action; } } + }); + } + + /** + * Enables this implementation to work within the Entwine or React context, as FormbuilderLoader + * stores the linkedPage in data. + * + * @returns {string} + */ + getLinkedPage() { + const { linkedPage, data } = this.props; + + if (data && (!linkedPage || !Object.keys(linkedPage).length)) { + return data.linkedPage; + } - if (!linkData) { - linkData = {}; - } + return linkedPage; + } + + /** + * When changed, we shouldn't show the content any longer, but show a message instead + */ + registerChange() { + this.setState({ + isDirty: true, + }); + } + + /** + * Triggers the insert link modal to open + */ + handleClick(event) { + if (event.target.type !== 'button') { + this.setState({ + modalOpen: true, + }); + } + } + + /** + * If pressing enter key, trigger click event + * + * @param {Object} event + */ + handleKeyUp(event) { + if (event.keyCode === 13) { + this.handleClick(event); + } + } + + /** + * Triggers the insert link modal to close + */ + handleCloseModal() { + this.setState({ + modalOpen: false, + }); + } + + /** + * Handles the insert link modal form submission + * + * @param {Object} data The submitted link information + */ + handleSubmitModal(data) { + const { + // Omit keys we don't need + SecurityID, // eslint-disable-line no-unused-vars + action_insert, // eslint-disable-line no-unused-vars + ...formData + } = data; + + this.setState({ + value: formData, + }); + + const { onChange } = this.props; + if (onChange) { + onChange(JSON.stringify(formData)); + } - return linkData; - }, + // We rely on some page data like URLSegment which we won't have if the page has been + // changed, so show a "save to continue" message + this.registerChange(); - /** - * Given a set of posted form data, find the link data field and set the data to it - * as JSON - * - * @param {Object} data - */ - setDataToLinkField(data) { - const dataField = this.getLinkDataField(); + this.handleCloseModal(); + } - if (!dataField) { - return; - } + /** + * @returns {BlockLinkFieldActionsComponent} + */ + renderActions() { + const { BlockLinkFieldActionsComponent } = this.props; - // Filter out keys that the field isn't interested in - const tempObj = {}; - const linkData = Object.keys(data) - .filter(key => ['PageID', 'Anchor', 'Text', 'Description', 'TargetBlank'].includes(key)) - .reduce((obj, key) => { - tempObj[key] = data[key]; - return tempObj; - }, {}); - - dataField.val(JSON.stringify(linkData)); - }, - - /** - * Get the modal title selector. The core API doesn't allow title to be dynamic yet, so we - * can use this selector to modify it ourselves. - * - * @return {Object} - */ - getModalTitle() { - return $(`.modal.${internalDialogId}`).find('.modal-title'); - }, - - /** - * Update the modal title with the BlockLinkField's form field title - * - * @param {String} newTitle - */ - updateModalTitle(newTitle) { - this.getModalTitle().text(newTitle); - }, - - /** - * Retrieve the link data from the JSON serialised hidden input for the current link. - * - * @return {Object} - */ - getLinkAttributes() { - const fieldData = this.getDataFromLinkField(); - - return { - PageID: fieldData.PageID || 0, - Anchor: fieldData.Anchor || '', - Text: fieldData.Text || '', - Description: fieldData.Description || '', - TargetBlank: fieldData.TargetBlank || false, - }; - }, - - /** - * If the trigger was an BlockLinkField (not TinyMCE) then call method to set it to the - * field, close the dialog and return the promise. - * - * @param {Object} data - Posted data - * @return {Object} - */ - handleInsert(data) { - if (this.isTinyMce()) { - return this._super(data); - } + const props = { + id: 'foo', + actions: this.getActions(), + }; - this.setDataToLinkField(data); - this.close(); - - return Promise.resolve(); - }, - - /** - * If the trigger was outside of TinyMCE, use the link attributes instead of the default - * TinyMCE attributes. - * - * @return {Object} - */ - getOriginalAttributes() { - if (this.isTinyMce()) { - return this._super(); - } - return this.getLinkAttributes(); - }, - - /** - * Update the form field labels, etc - */ - updateFormField() { - this.getLinkDataField() - .parent('div.block-link-field') - .registerChange(); - }, - - /** - * Remove the "no tinymce" class from the dialog when closing, to allow TinyMCE triggered - * link dialogs to function as normal. - */ - close() { - const parentReturn = this._super(); - - this.removeClass(noTinyMceClass); - this.updateFormField(); - - return parentReturn; + if (!BlockLinkFieldActionsComponent) { + return null; } - }); + + return ( +
+ +
+ ); + } + + /** + * @returns {DOMElement} + */ + renderLinkContent() { + const { isDirty, value } = this.state; + + const contentContainerClasses = classnames( + 'align-self-center', + 'block-link-field__content', + 'mr-auto', + 'd-flex', + 'justify-content-start' + ); + + if (isDirty) { + return ( + + + {i18n._t('BlockLinkField.ModifiedMessage', 'Changes will be visible upon save')} + + + ); + } + + const linkedPage = this.getLinkedPage(); + + // Check that a page ID is set in the field value, and that the linkedPage data is + // available as a prop + if (value.PageID && linkedPage.URLSegment) { + return ( + + {value.Text && ( + + {value.Text} + + )} + + {this.getLinkRelativeUrl()} + + + ); + } + + return ( + + + {i18n._t('BlockLinkField.AddLinkMessage', 'Add link')} + + + ); + } + + /** + * Renders a modal to insert or edit a link to a page on the current website. The schema + * is re-used from the "insert internal link" modal from the CMS, primarily used in the + * TinyMCE WYSIWYG editor. + * + * Whether the modal is open or not is controlled by the `modalOpen` state value. + * + * @returns {InsertLinkModal} + */ + renderModal() { + const { title, showLinkText, InsertModalLinkComponent } = this.props; + const { modalOpen, value } = this.state; + + return ( + + ); + } + + render() { + const { name } = this.props; + const { value } = this.state; + + return ( +
+ + {this.renderLinkContent()} + {this.renderActions()} + + + {this.renderModal()} +
+ ); + } +} + +const pageShape = PropTypes.shape({ + URLSegment: PropTypes.string, }); + +BlockLinkField.propTypes = { + BlockLinkFieldActionsComponent: PropTypes.oneOfType([PropTypes.node, PropTypes.func]), + extraClass: PropTypes.string, + linkedPage: pageShape, + showLinkText: PropTypes.bool, + onChange: PropTypes.func, + title: PropTypes.string, + value: PropTypes.string, +}; + +BlockLinkField.defaultProps = { + linkedPage: {}, + showLinkText: true, + value: '{}', + InsertModalLinkComponent: InjectedLinkModal, +}; + +export { BlockLinkField as Component }; + +export default inject( + ['BlockLinkFieldActions'], + (BlockLinkFieldActionsComponent) => ({ + BlockLinkFieldActionsComponent, + }), + () => 'ElementEditor.BlockLinkFieldComponent' +)(fieldHolder(BlockLinkField)); diff --git a/client/src/components/BlockLinkField/BlockLinkField.scss b/client/src/components/BlockLinkField/BlockLinkField.scss index 4444f5b..bc6b991 100644 --- a/client/src/components/BlockLinkField/BlockLinkField.scss +++ b/client/src/components/BlockLinkField/BlockLinkField.scss @@ -17,11 +17,12 @@ position: relative; } -.block-link-field__content--message { +.block-link-field__content--message-modified { font-style: italic; } -.block-link-field__link { +.block-link-field__link, +.block-link-field__content--message-add-link { color: $link-color; } diff --git a/client/src/components/BlockLinkField/tests/BlockLinkField-test.js b/client/src/components/BlockLinkField/tests/BlockLinkField-test.js new file mode 100644 index 0000000..e147ed7 --- /dev/null +++ b/client/src/components/BlockLinkField/tests/BlockLinkField-test.js @@ -0,0 +1,306 @@ +/* eslint-disable import/no-extraneous-dependencies */ +/* global jest, describe, it, expect */ + +import React from 'react'; +import { Component as BlockLinkField } from '../BlockLinkField'; +import Enzyme, { shallow } from 'enzyme'; +import Adapter from 'enzyme-adapter-react-15.4/build/index'; +import Injector from 'lib/Injector'; + +Injector.load(); +Enzyme.configure({ adapter: new Adapter() }); + +describe('BlockLinkField', () => { + const mockedBlockLinkFieldActionsComponent = () => +
; + let mockRegisterChange; + let mockHandleCloseModal; + let mockHandleClick; + let mockToggle; + let mockGetLinkedPage; + + beforeEach(() => { + mockRegisterChange = jest.fn(); + mockHandleCloseModal = jest.fn(); + mockHandleClick = jest.fn(); + mockToggle = jest.fn(); + mockGetLinkedPage = jest.fn(); + }); + + const props = { + extraClass: '', + linkedPage: {}, + showLinkText: true, + onChange: jest.fn(), + title: '', + value: '', + BlockLinkFieldActionsComponent: mockedBlockLinkFieldActionsComponent, + }; + + describe('render()', () => { + it('should render the class icon, the link, and the actions', () => { + const wrapper = shallow( + + ); + + expect(wrapper.find('.block-link-field__icon')).toHaveLength(1); + expect(wrapper.find('.block-link-field__content')).toHaveLength(1); + expect(wrapper.find('.block-link-field__actions')).toHaveLength(1); + }); + + it('should throw and error if no BlockLinkActionsComponent is given', () => { + // eslint-disable-next-line no-unused-vars + const { BlockLinkFieldActionsComponent, ...otherProps } = props; + const wrapper = shallow( + + ); + + expect(wrapper.instance().render()).toThrow(); + expect(wrapper.find('.block-link-field__icon')).toHaveLength(1); + expect(wrapper.find('.block-link-field__content')).toHaveLength(1); + expect(wrapper.find('.block-link-field__actions')).toHaveLength(0); + }); + }); + + describe('renderModal()', () => { + it('should render the given InsertModalLink component', () => { + const MockModalComponent = () =>
; + + const wrapper = shallow( + + ); + + expect(wrapper.find(MockModalComponent)).toHaveLength(1); + }); + }); + + describe('renderLinkContent()', () => { + it('renders a message if the state is dirty', () => { + const wrapper = shallow( + + ); + + expect(wrapper.find('.block-link-field__content--message-modified')).toHaveLength(0); + wrapper.setState({ isDirty: true }); + expect(wrapper.find('.block-link-field__content--message-modified')).toHaveLength(1); + }); + + it('renders the link and the title if provided', () => { + const wrapper = shallow( + + ); + + wrapper.setState({ isDirty: true }); + expect(wrapper.find('Changes will be visible upon save')).toHaveLength(0); + }); + }); + + describe('renderActions()', () => { + it('', () => { + const wrapper = shallow( + + ); + + expect(wrapper.find('.block-link-field__actions')).toHaveLength(1); + expect(wrapper.find(mockedBlockLinkFieldActionsComponent)).toHaveLength(1); + }); + }); + + describe('handleSubmitModal()', () => { + it('Handles the insert link modal form submission', () => { + const wrapper = shallow( + + ); + + wrapper.instance().handleCloseModal = mockHandleCloseModal; + wrapper.instance().registerChange = mockRegisterChange; + + const mockData = { + SecurityID: 1, + action_insert: false, + content: 'test-mock-data' + }; + + wrapper.setState({ value: { content: '' } }); + wrapper.instance().handleSubmitModal(mockData); + + expect(wrapper.state('value')).toEqual({ content: 'test-mock-data' }); + expect(mockRegisterChange).toHaveBeenCalled(); + expect(mockHandleCloseModal).toHaveBeenCalled(); + }); + }); + + describe('handleCloseModal()', () => { + it('triggers the insert link modal to close', () => { + const wrapper = shallow( + + ); + wrapper.setState({ modalOpen: true }); + wrapper.instance().handleCloseModal(); + + expect(wrapper.state('modalOpen')).toEqual(false); + }); + }); + + describe('handleKeyUp()', () => { + it('triggers the handleClick function', () => { + const wrapper = shallow( + + ); + + wrapper.instance().handleClick = mockHandleClick; + + const mockEvent = { + keyCode: 13 + }; + + wrapper.instance().handleKeyUp(mockEvent); + + expect(mockHandleClick).toHaveBeenCalledWith(mockEvent); + }); + }); + + describe('handleClick()', () => { + it('triggers the insert link modal to open', () => { + const wrapper = shallow( + + ); + + const event = { + target: { + type: 'div' + } + }; + wrapper.setState({ modalOpen: false }); + wrapper.instance().handleClick(event); + + expect(wrapper.state('modalOpen')).toEqual(true); + }); + + it('does not trigger the insert link modal to open on button click', () => { + const wrapper = shallow( + + ); + const event = { + target: { + type: 'button' + } + }; + + wrapper.setState({ modalOpen: false }); + wrapper.instance().handleClick(event); + + expect(wrapper.state('modalOpen')).toEqual(false); + }); + }); + + describe('registerChange()', () => { + it('', () => { + const wrapper = shallow( + + ); + + wrapper.setState({ isDirty: false }); + wrapper.instance().registerChange(); + + expect(wrapper.state('isDirty')).toEqual(true); + }); + }); + + describe('getLinkedPage()', () => { + it('should return the linked page within the Entwine context', () => { + const wrapper = shallow( + + ); + wrapper.setProps({ + linkedPage: {}, + data: { linkedPage: '/react' } + }); + + expect(wrapper.instance().getLinkedPage()).toEqual('/react'); + }); + + + it('should return the linked page within the React context', () => { + const wrapper = shallow( + + ); + wrapper.setProps({ linkedPage: { URLSegment: '/entwine' } }); + + expect(wrapper.instance().getLinkedPage()).toEqual({ URLSegment: '/entwine' }); + }); + }); + + describe('getLinkRelativeUrl()', () => { + it('returns relative URL for the linked page with a leading slash', () => { + const wrapper = shallow( + + ); + + wrapper.instance().getLinkedPage = mockGetLinkedPage.mockReturnValue('/mockUrlWithSlash'); + expect(wrapper.instance().getLinkRelativeUrl()).toEqual('/mockUrlWithSlash'); + + wrapper.instance().getLinkedPage = mockGetLinkedPage.mockReturnValue('/mockUrlWithOutSlash'); + expect(wrapper.instance().getLinkRelativeUrl()).toEqual('/mockUrlWithOutSlash'); + }); + + it('returns empty string if no relative URL provided', () => { + const wrapper = shallow( + + ); + + wrapper.instance().getLinkedPage = mockGetLinkedPage.mockReturnValue(null); + expect(wrapper.instance().getLinkRelativeUrl()).toEqual(''); + }); + }); + + describe('getClassNames()', () => { + it('fetches extra class names if provided', () => { + const wrapper = shallow( + + ); + + wrapper.setProps({ extraClass: 'test-class' }); + + expect(wrapper.instance().getClassNames()).toMatch('test-class'); + }); + }); +}); diff --git a/client/src/components/BlockLinkFieldActions/BlockLinkFieldActions.js b/client/src/components/BlockLinkFieldActions/BlockLinkFieldActions.js index 36372e6..1684865 100644 --- a/client/src/components/BlockLinkFieldActions/BlockLinkFieldActions.js +++ b/client/src/components/BlockLinkFieldActions/BlockLinkFieldActions.js @@ -1,6 +1,8 @@ import React, { Component } from 'react'; -import { inject } from 'lib/Injector'; +import PropTypes from 'prop-types'; import classnames from 'classnames'; +import { DropdownItem } from 'reactstrap'; +import { inject } from 'lib/Injector'; class BlockLinkFieldActions extends Component { constructor(props) { @@ -22,6 +24,8 @@ class BlockLinkFieldActions extends Component { * @returns {Promise|null} */ handleChangeValue(event) { + event.stopPropagation(); + let promise = null; // Make sure a valid option has been selected. @@ -42,41 +46,42 @@ class BlockLinkFieldActions extends Component { } else { promise = option.callback() || Promise.resolve(); } - return promise; } render() { + const { id, actions, ActionMenu } = this.props; + // eslint-disable-next-line arrow-body-style - const children = this.props.actions.map((action) => { + const children = actions.map((action) => { const className = classnames( 'block-link-field__action', 'dropdown-item', action.className || '', ); - return (); + return ( + + {action.label} + + ); }).filter(item => item); if (!children.length) { return null; } - const { ActionMenu } = this.props; return (
{children} @@ -86,17 +91,17 @@ class BlockLinkFieldActions extends Component { } BlockLinkFieldActions.propTypes = { - id: React.PropTypes.string.isRequired, - actions: React.PropTypes.arrayOf(React.PropTypes.shape({ - value: React.PropTypes.string.isRequired, - label: React.PropTypes.string.isRequired, - className: React.PropTypes.string, - destructive: React.PropTypes.bool, - callback: React.PropTypes.func, - canApply: React.PropTypes.func, - confirm: React.PropTypes.func, + id: PropTypes.string.isRequired, + actions: PropTypes.arrayOf(PropTypes.shape({ + value: PropTypes.string.isRequired, + label: PropTypes.string.isRequired, + className: PropTypes.string, + destructive: PropTypes.bool, + callback: PropTypes.func, + canApply: PropTypes.func, + confirm: PropTypes.func, })), - ActionMenu: React.PropTypes.oneOfType([React.PropTypes.node, React.PropTypes.func]), + ActionMenu: PropTypes.oneOfType([PropTypes.node, PropTypes.func]), }; BlockLinkFieldActions.defaultProps = { diff --git a/client/src/legacy/BlockLinkFieldEntwine.js b/client/src/legacy/BlockLinkFieldEntwine.js new file mode 100644 index 0000000..131ea14 --- /dev/null +++ b/client/src/legacy/BlockLinkFieldEntwine.js @@ -0,0 +1,56 @@ +/* global ss */ +import jQuery from 'jquery'; +import React from 'react'; +import ReactDOM from 'react-dom'; +import { loadComponent } from 'lib/Injector'; + +/** + * The BlockLinkField allows you to add arbitrary links to a content block. They will be + * condensed into a BlockLinkField form field, which triggers an "insert link" modal popup. + * + * This logic layers on top of TinyMCE_sslink-internal.js to work outside of the TinyMCE + * context. + */ +jQuery.entwine('ss', ($) => { + $('.js-injector-boot .form__field-holder .block-link-field[data-useEntwine]').entwine({ + /** + * Renders the equivalent React component for the BlockLinkField + */ + createReactComponent() { + const cmsContent = this.closest('.cms-content').attr('id'); + const context = (cmsContent) + ? { context: cmsContent } + : {}; + + const BlockLinkFieldComponent = loadComponent('BlockLinkField', context); + const schemaData = this.data('schema'); + const stateData = this.data('state'); + + const props = { + ...stateData, + ...schemaData.data, + // Don't allow React to re-render the form label when used in Entwine context + hideLabels: true, + }; + + ReactDOM.render( + , + this[0] + ); + }, + + /** + * Instantiate the "insert link" dialog when a BlockLinkField is added to a page + */ + onmatch() { + this.createReactComponent(); + }, + + /** + * Remove the component when unmatching + */ + onunmatch() { + ReactDOM.unmountComponentAtNode(this[0]); + }, + }); +}); diff --git a/package.json b/package.json index 3e0872a..0790bbb 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,13 @@ "version": "1.0.0", "description": "A collection of CMS blocks for the silverstripe-elemental module", "scripts": { - "build": "yarn && NODE_ENV=production webpack -p --bail --progress", + "build": "yarn && yarn lint && yarn test && NODE_ENV=production webpack -p --bail --progress", + "dev": "NODE_ENV=development webpack --progress", "watch": "yarn && NODE_ENV=development webpack --watch --progress", "css": "WEBPACK_CHILD=css npm run build", - "lint": "eslint client/src; sass-lint -v" + "test": "jest", + "lint": "eslint client/src; sass-lint -v", + "lint-js-fix": "eslint client/src --fix" }, "repository": { "type": "git", @@ -26,16 +29,21 @@ "dependencies": { "classnames": "^2.2.5", "jquery": "^3.2.1", - "react": "^16.0.0", - "react-dom": "^16.0.0" + "prop-types": "^15.6.2", + "react": "15.3.1", + "react-dom": "15.3.1", + "reactstrap": "^5.0.0-beta" }, "devDependencies": { "@silverstripe/webpack-config": "^0.4.0", "babel-core": "^6.24.1", + "babel-jest": "^20.0.3", "babel-loader": "^7.0.0", "babel-preset-env": "^1.6.0", "babel-preset-react": "^6.24.1", "css-loader": "^0.28.1", + "enzyme": "^3.3.0", + "enzyme-adapter-react-15.4": "^1.0.5", "eslint": "^4.6.1", "eslint-config-airbnb": "^15.1.0", "eslint-config-airbnb-base": "^12.0.0", @@ -43,8 +51,38 @@ "eslint-plugin-import": "^2.7.0", "eslint-plugin-jsx-a11y": "^5.1.1", "eslint-plugin-react": "^7.3.0", + "jest-cli": "^19.0.2", "webpack": "^2.6.1" }, + "jest": { + "roots": [ + "client/src" + ], + "moduleDirectories": [ + "client/src", + "node_modules", + "node_modules/@silverstripe/webpack-config/node_modules", + "../../admin/client/src", + "../../admin/node_modules", + "vendor/silverstripe/admin/client/src", + "vendor/silverstripe/admin/node_modules" + ], + "testMatch": [ + "**/tests/**/*-test.js?(x)" + ], + "transform": { + ".*": "babel-jest" + } + }, + "babel": { + "presets": [ + "env", + "react" + ], + "plugins": [ + "transform-object-rest-spread" + ] + }, "engines": { "node": "^6.x" } diff --git a/src/Form/BlockLinkField.php b/src/Form/BlockLinkField.php index 8f5e46e..13de448 100644 --- a/src/Form/BlockLinkField.php +++ b/src/Form/BlockLinkField.php @@ -10,6 +10,10 @@ class BlockLinkField extends FormField { + protected $schemaDataType = FormField::SCHEMA_DATA_TYPE_CUSTOM; + + protected $schemaComponent = 'BlockLinkField'; + /** * Cache for parsed value * @@ -51,21 +55,10 @@ public function getParsedValue() if ($this->parsedValue) { return $this->parsedValue; } - - $parsedValue = Convert::json2array($this->dataValue()); + $parsedValue = json_decode($this->dataValue(), true); return $this->parsedValue = ArrayData::create((array) $parsedValue); } - /** - * Get whether a {@link SiteTree} link has been defined on this link field - * - * @return bool - */ - public function getLinkDefined() - { - return (bool) $this->getParsedValue()->PageID; - } - /** * Get the linked {@link SiteTree} object, if available * @@ -77,7 +70,6 @@ public function getLinkPage() if (!$pageId) { return null; } - return DataObject::get_by_id(SiteTree::class, $pageId); } @@ -89,62 +81,60 @@ public function getLinkPage() public function getLinkRelativeUrl() { $page = $this->getLinkPage(); - return $page ? '/' . ltrim($page->URLSegment, '/') : ''; } /** - * Get the link text/title - * - * @return string - */ - public function getLinkText() - { - return trim($this->getParsedValue()->Text); - } - - /** - * Get the link "description", used for titles or alt text + * Set whether to display the link text field * - * @return string + * @param bool $showLinkText + * @return $this */ - public function getLinkDescription() + public function setShowLinkText($showLinkText) { - return $this->getParsedValue()->Description; + $this->showLinkText = (bool) $showLinkText; + return $this; } /** - * Get whether to open the link in a new window + * Get whether to display the link text field * * @return bool */ - public function getLinkTargetBlank() + public function getShowLinkText() { - return (bool) $this->getParsedValue()->TargetBlank; + return $this->showLinkText; } /** - * Set whether to display the link text field + * When not used in a React form factory context, this adds the schema and state data to SilverStripe + * template rendered attributes lists * - * @param bool $showLinkText - * @return $this + * @return array */ - public function setShowLinkText($showLinkText) + public function getAttributes() { - $this->showLinkText = (bool) $showLinkText; + $attributes = parent::getAttributes(); - $this->setAttribute('data-showlinktext', (int) $this->showLinkText); + $attributes['data-schema'] = json_encode($this->getSchemaData()); + $attributes['data-state'] = json_encode($this->getSchemaState()); - return $this; + return $attributes; } /** - * Get whether to display the link text field + * Add some extra props for the React component to work with * - * @return bool + * {@inheritDoc} */ - public function getShowLinkText() + public function getSchemaDataDefaults() { - return $this->showLinkText; + $schema = parent::getSchemaDataDefaults(); + $schema['data'] = array_merge($schema['data'], [ + 'showLinkText' => $this->getShowLinkText(), + 'linkedPage' => $this->getLinkPage() ? $this->getLinkPage()->toMap() : [], + 'title' => $this->Title(), + ]); + return $schema; } } diff --git a/templates/SilverStripe/ElementalBannerBlock/Form/BlockLinkField.ss b/templates/SilverStripe/ElementalBannerBlock/Form/BlockLinkField.ss index c848be6..80e4223 100644 --- a/templates/SilverStripe/ElementalBannerBlock/Form/BlockLinkField.ss +++ b/templates/SilverStripe/ElementalBannerBlock/Form/BlockLinkField.ss @@ -1,22 +1,3 @@ -
- - - <% if $LinkDefined %> - <% if $LinkText %> - $LinkText - <% end_if %> - $LinkRelativeUrl - <% else %> - - <%t SilverStripe\\ElementalBannerBlock\\Form\\BlockLinkField.Empty "Empty" %> - - <% end_if %> - - - - - - +
+ <%-- Rendered by the BlockLinkField React component --%>
diff --git a/tests/Behat/features/element-editor.feature b/tests/Behat/features/element-editor.feature index 435d493..7983c9c 100644 --- a/tests/Behat/features/element-editor.feature +++ b/tests/Behat/features/element-editor.feature @@ -1,4 +1,3 @@ -@unsavedChanges @javascript Feature: View types of elements in a report As a CMS user @@ -9,6 +8,7 @@ Feature: View types of elements in a report Given I add an extension "DNADesign\Elemental\Extensions\ElementalPageExtension" to the "Page" class And a "image" "Uploads/folder1/file1.jpg" And a "image" "Uploads/folder1/file2.jpg" + And a "image" "folder1/file2.jpg" And a "page" "Blocks Page" with a "Alice's Block" banner element with "Alice's sample content" content And a "page" "Blocks Page" with a "Bob's Block" banner element with "Some content II" content @@ -26,48 +26,61 @@ Feature: View types of elements in a report And I should see "Alice's sample content" as the summary for block 1 And I should see the thumbnail image for block 1 - Scenario: I can add elements to the page + # The "unsaved changes" dialog causes errors unless this is tagged with "@unsavedChanges" + @unsavedChanges + @modal + Scenario: I can add elements to the page When I see a list of blocks Then I press the "Add block" button And I press the "Banner" button in the add block popover - And I wait 1 second - And I fill in "Additional Banner Block" for "Title" - And I fill in the "Content" HTML field with "

Additional sample content

" + And I wait 5 second + Then I should see "Untitled Banner block" as the title for block 1 + + Given I click on block 1 + And I fill in "Additional Banner Block" for "Title" for block 1 + And I fill in "

Additional sample content

" for "Content" for block 1 And I press the "Add from files" button - And I select the file named "folder1" in the gallery + And I select the folder named "folder1" in the gallery And I click on the file named "file1" in the gallery And I press the "Insert" button - # Sometimes behat can be quicker than the time it takes the JS to remove the modal... + # Sometimes Behat can be quicker than the time it takes the JS to remove the modal... And I wait 1 second - And I press the "Create" button - Then I should see a "Saved banner" message + And I press the "Save" button in the actions menu for block 1 + And I wait 1 second + Then I should see a "Saved 'Additional Banner Block' successfully" notice + When I click on the caret button for block 1 + Then I should see "Additional sample content" - When I go to "/admin/pages/edit/show/6" - And I see a list of blocks + + When I see a list of blocks And I wait 1 second Then I should see "Additional Banner Block" - And I should see the thumbnail image for block 3 + # Uncomment the below once inline editing of files is enabled + # And I should see the thumbnail image for block 1 - Scenario: I can edit a block + # The "unsaved changes" dialog causes errors unless this is tagged with "@unsavedChanges" + @unsavedChanges + @modal + Scenario: I can edit a block Given I see a list of blocks And I should see block 1 + And I should see "Alice's Block" as the title for block 1 + And I should see "Alice's sample content" as the summary for block 1 And I click on block 1 - Then I should see "Alice's Block" - And the "Content" field for block 1 should contain "Alice's sample content" + Then I should see the edit form for block 1 Given I fill in "Eve's Block" for "Title" for block 1 - Given I fill in "

New sample content

" for "Content" for block 1 + And I fill in "

New sample content

" for "Content" for block 1 And I wait 1 second And I press the "Add from files" button - And I select the file named "folder1" in the gallery + And I select the folder named "folder1" in the gallery And I click on the file named "file2" in the gallery And I press the "Insert" button - # Sometimes behat can be quicker than the time it takes the JS to remove the modal... + # Sometimes Behat can be quicker than the time it takes the JS to remove the modal... And I wait 1 second When I press the "Save" button in the actions menu for block 1 And I wait 1 second Then I should see a "Saved 'Eve's Block' successfully" notice -# @modal Scenario: I can archive a block @@ -77,7 +90,7 @@ Feature: View types of elements in a report When I press the "Archive" button And I see the text "Are you sure you want to send this block to the archive?" in the alert And I confirm the dialog - # Sometimes behat can be quicker than the time it takes the JS to remove the row... + # Sometimes Behat can be quicker than the time it takes the JS to remove the element... And I wait 1 second And I see a list of blocks Then I should see "Bob's Block" @@ -86,6 +99,6 @@ Feature: View types of elements in a report Scenario: I can see the block type when I hover over an element's icon Given I wait until I see the ".element-editor__element" element When I hover over the icon of block 1 - # Sometimes behat can be quicker than the time it takes the JS to render the tooltip... + # Sometimes Behat can be quicker than the time it takes the JS to render the tooltip... And I wait 1 second Then I should see text matching "Banner" diff --git a/tests/Form/BlockLinkFieldTest.php b/tests/Form/BlockLinkFieldTest.php index c035908..73ddf12 100644 --- a/tests/Form/BlockLinkFieldTest.php +++ b/tests/Form/BlockLinkFieldTest.php @@ -2,7 +2,6 @@ namespace SilverStripe\ElementalBannerBlock\Tests\Form; -use SilverStripe\CMS\Model\SiteTree; use SilverStripe\Dev\SapphireTest; use SilverStripe\ElementalBannerBlock\Form\BlockLinkField; use SilverStripe\View\ArrayData; @@ -48,24 +47,6 @@ public function testParsedValueIsResetWhenSettingNewValue() $this->assertSame('baz', $result2->foo); } - public function testGetLinkMethods() - { - $this->assertFalse($this->field->getLinkDefined()); - - $this->field->setValue(json_encode([ - 'PageID' => $this->idFromFixture(SiteTree::class, 'a_page'), - 'Text' => 'My link', - 'Description' => 'Click here to see what happens next', - 'TargetBlank' => true, - ])); - - $this->assertTrue($this->field->getLinkDefined()); - $this->assertSame('/my-page', $this->field->getLinkRelativeUrl()); - $this->assertSame('My link', $this->field->getLinkText()); - $this->assertSame('Click here to see what happens next', $this->field->getLinkDescription()); - $this->assertTrue($this->field->getLinkTargetBlank()); - } - public function testGetLinkRelativeUrlReturnsEmptyStringOnInvalidPage() { $this->field->setValue(json_encode([ @@ -75,15 +56,6 @@ public function testGetLinkRelativeUrlReturnsEmptyStringOnInvalidPage() $this->assertSame('', $this->field->getLinkRelativeUrl()); } - public function testGetLinkTextIsTrimmed() - { - $this->field->setValue(json_encode([ - 'Text' => ' My text ', - ])); - - $this->assertSame('My text', $this->field->getLinkText()); - } - public function testGetSetShowLinkText() { $this->assertTrue($this->field->getShowLinkText(), 'Default to showing the link text field'); @@ -91,4 +63,19 @@ public function testGetSetShowLinkText() $this->field->setShowLinkText(false); $this->assertFalse($this->field->getShowLinkText(), 'Link text field can be disabled'); } + + public function testGetAttributes() + { + $attributes = $this->field->getAttributes(); + $this->assertArrayHasKey('data-schema', $attributes); + $this->assertArrayHasKey('data-state', $attributes); + } + + public function testGetSchemaDataDefault() + { + $schemaDataDefaults = $this->field->getSchemaDataDefaults(); + $this->assertArrayHasKey('showLinkText', $schemaDataDefaults['data']); + $this->assertArrayHasKey('linkedPage', $schemaDataDefaults['data']); + $this->assertArrayHasKey('title', $schemaDataDefaults['data']); + } } diff --git a/tests/Form/BlockLinkField_ReadonlyTest.php b/tests/Form/BlockLinkField_ReadonlyTest.php index 67e87fe..92c1a40 100644 --- a/tests/Form/BlockLinkField_ReadonlyTest.php +++ b/tests/Form/BlockLinkField_ReadonlyTest.php @@ -6,11 +6,6 @@ use SilverStripe\Dev\SapphireTest; use SilverStripe\ElementalBannerBlock\Form\BlockLinkField; use SilverStripe\ElementalBannerBlock\Form\BlockLinkField_Readonly; -use SilverStripe\Forms\CheckboxField_Readonly; -use SilverStripe\Forms\FieldList; -use SilverStripe\Forms\TextField; -use SilverStripe\Forms\ToggleCompositeField; -use SilverStripe\Forms\TreeDropdownField_Readonly; class BlockLinkField_ReadonlyTest extends SapphireTest { @@ -39,31 +34,4 @@ public function testReadonlyFieldIsReturnedFromTransformation() { $this->assertInstanceOf(BlockLinkField_Readonly::class, $this->field); } - - public function testFieldReturnsToggleComposite() - { - $result = $this->field->Field(); - $this->assertInstanceOf(ToggleCompositeField::class, $result, 'Composite fields are housed in a toggle field'); - } - - public function testFieldsByNameAreAccessibleAndCorrectType() - { - $readonlyField = $this->field->Field(); - - $pageId = $readonlyField->fieldByName('Foo_PageID'); - $this->assertInstanceOf(TreeDropdownField_Readonly::class, $pageId, 'Page selector is a tree dropdown'); - $this->assertSame($this->idFromFixture(SiteTree::class, 'a_page'), $pageId->Value()); - } - - public function testAllFieldsAreReadonly() - { - // There is no spoon - $fields = $this->field->Field()->FieldList(); - - $this->assertInstanceOf(FieldList::class, $fields); - - foreach ($fields as $field) { - $this->assertTrue($field->isReadonly()); - } - } } diff --git a/yarn.lock b/yarn.lock index edbd40c..3b5b0d0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -37,6 +37,14 @@ url-loader "^0.5.8" webpack "^2.6.1" +"@types/node@*": + version "10.12.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.0.tgz#ea6dcbddbc5b584c83f06c60e82736d8fbb0c235" + +abab@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -47,6 +55,12 @@ acorn-dynamic-import@^2.0.0: dependencies: acorn "^4.0.3" +acorn-globals@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + dependencies: + acorn "^4.0.4" + acorn-jsx@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" @@ -57,7 +71,7 @@ acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -acorn@^4.0.3: +acorn@^4.0.3, acorn@^4.0.4: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" @@ -77,6 +91,32 @@ adjust-sourcemap-loader@^1.1.0: object-path "^0.9.2" regex-parser "^2.2.1" +agent-base@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + dependencies: + es6-promisify "^5.0.0" + +airbnb-js-shims@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-2.1.1.tgz#a509611480db7e6d9db62fe2acfaeb473b6842ac" + dependencies: + array-includes "^3.0.3" + array.prototype.flat "^1.2.1" + array.prototype.flatmap "^1.2.1" + es5-shim "^4.5.10" + es6-shim "^0.35.3" + function.prototype.name "^1.1.0" + object.entries "^1.0.4" + object.fromentries "^1.0.0" + object.getownpropertydescriptors "^2.0.3" + object.values "^1.0.4" + promise.prototype.finally "^3.1.0" + string.prototype.matchall "^3.0.0" + string.prototype.padend "^3.0.0" + string.prototype.padstart "^3.0.0" + symbol.prototype.description "^1.0.0" + ajv-keywords@^1.0.0, ajv-keywords@^1.1.1: version "1.5.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" @@ -101,6 +141,15 @@ ajv@^5.0.0, ajv@^5.1.0, ajv@^5.2.0, ajv@^5.2.3: json-schema-traverse "^0.3.0" json-stable-stringify "^1.0.1" +ajv@^5.3.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -117,7 +166,7 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -ansi-escapes@^1.1.0: +ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -125,7 +174,7 @@ ansi-escapes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" -ansi-regex@^2.0.0: +ansi-regex@^2.0.0, ansi-regex@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -137,6 +186,12 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +ansi-styles@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" + ansi-styles@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" @@ -150,6 +205,12 @@ anymatch@^1.3.0: micromatch "^2.1.5" normalize-path "^2.0.0" +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -190,6 +251,10 @@ arr-flatten@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -215,7 +280,23 @@ array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" -arrify@^1.0.0: +array.prototype.flat@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz#812db8f02cad24d3fab65dd67eabe3b8903494a4" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.10.0" + function-bind "^1.1.1" + +array.prototype.flatmap@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.1.tgz#3103cd4826ef90019c9b0a4839b2535fa6faf4e9" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.10.0" + function-bind "^1.1.1" + +arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -267,6 +348,12 @@ async@^2.1.2, async@^2.1.5: dependencies: lodash "^4.14.0" +async@^2.1.4, async@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" + dependencies: + lodash "^4.17.10" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -302,6 +389,10 @@ aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + axobject-query@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" @@ -316,6 +407,30 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" +babel-core@^6.0.0: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + babel-core@^6.24.1, babel-core@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" @@ -340,6 +455,19 @@ babel-core@^6.24.1, babel-core@^6.26.0: slash "^1.0.0" source-map "^0.5.6" +babel-generator@^6.18.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + babel-generator@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" @@ -462,6 +590,22 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" +babel-jest@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-19.0.0.tgz#59323ced99a3a84d359da219ca881074ffc6ce3f" + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^19.0.0" + +babel-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671" + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^20.0.3" + babel-loader@^7.0.0: version "7.1.2" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126" @@ -482,6 +626,23 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-istanbul@^4.0.0: + version "4.1.6" + resolved "http://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.13.0" + find-up "^2.1.0" + istanbul-lib-instrument "^1.10.1" + test-exclude "^4.2.1" + +babel-plugin-jest-hoist@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-19.0.0.tgz#4ae2a04ea612a6e73651f3fde52c178991304bea" + +babel-plugin-jest-hoist@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767" + babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" @@ -498,7 +659,7 @@ babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" -babel-plugin-syntax-object-rest-spread@^6.8.0: +babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" @@ -745,6 +906,14 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" +babel-polyfill@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + babel-preset-env@^1.6.0: version "1.6.1" resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" @@ -786,6 +955,18 @@ babel-preset-flow@^6.23.0: dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" +babel-preset-jest@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-19.0.0.tgz#22d67201d02324a195811288eb38294bb3cac396" + dependencies: + babel-plugin-jest-hoist "^19.0.0" + +babel-preset-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a" + dependencies: + babel-plugin-jest-hoist "^20.0.3" + babel-preset-react@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" @@ -816,7 +997,7 @@ babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: core-js "^2.4.0" regenerator-runtime "^0.11.0" -babel-template@^6.24.1, babel-template@^6.26.0: +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" dependencies: @@ -826,7 +1007,7 @@ babel-template@^6.24.1, babel-template@^6.26.0: babylon "^6.18.0" lodash "^4.17.4" -babel-traverse@^6.24.1, babel-traverse@^6.26.0: +babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" dependencies: @@ -840,7 +1021,7 @@ babel-traverse@^6.24.1, babel-traverse@^6.26.0: invariant "^2.2.2" lodash "^4.17.4" -babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" dependencies: @@ -889,6 +1070,10 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + boom@2.x.x: version "2.10.1" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" @@ -926,6 +1111,12 @@ brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" +browser-resolve@^1.11.2: + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + dependencies: + resolve "1.1.7" + browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.0.tgz#1d2ad62a8b479f23f0ab631c1be86a82dbccbe48" @@ -992,6 +1183,18 @@ browserslist@^2.1.2: caniuse-lite "^1.0.30000744" electron-to-chromium "^1.3.24" +bser@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" + dependencies: + node-int64 "^0.4.0" + +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -1022,6 +1225,10 @@ callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -1091,6 +1298,17 @@ chalk@^2.0.0, chalk@^2.1.0: escape-string-regexp "^1.0.5" supports-color "^4.0.0" +cheerio@^1.0.0-rc.2: + version "1.0.0-rc.2" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash "^4.15.0" + parse5 "^3.0.1" + chokidar@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" @@ -1106,6 +1324,10 @@ chokidar@^1.7.0: optionalDependencies: fsevents "^1.0.0" +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -1123,10 +1345,25 @@ clap@^1.0.9: dependencies: chalk "^1.1.3" +classnames@^2.2.3: + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + classnames@^2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" +cli-color@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.4.0.tgz#7d10738f48526824f8fe7da51857cb0f572fe01f" + dependencies: + ansi-regex "^2.1.1" + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + memoizee "^0.4.14" + timers-ext "^0.1.5" + cli-cursor@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" @@ -1218,6 +1455,10 @@ colormin@^1.0.5: css-color-names "0.0.4" has "^1.0.1" +colors@0.5.x: + version "0.5.1" + resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" + colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -1228,10 +1469,24 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" + dependencies: + delayed-stream "~1.0.0" + +commander@^2.11.0, commander@^2.9.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + commander@^2.8.1: version "2.11.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" +commander@~2.17.1: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -1266,6 +1521,10 @@ contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" +content-type-parser@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" + convert-source-map@^0.3.3: version "0.3.5" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" @@ -1274,6 +1533,12 @@ convert-source-map@^1.1.1, convert-source-map@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" +convert-source-map@^1.5.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + dependencies: + safe-buffer "~5.1.1" + core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" @@ -1390,6 +1655,15 @@ css-loader@^0.28.1: postcss-value-parser "^3.3.0" source-list-map "^2.0.0" +css-select@~1.2.0: + version "1.2.0" + resolved "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + css-selector-tokenizer@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" @@ -1398,6 +1672,10 @@ css-selector-tokenizer@^0.7.0: fastparse "^1.1.1" regexpu-core "^1.0.0" +css-what@2.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.2.tgz#c0876d9d0480927d7d4920dcd72af3595649554d" + css@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/css/-/css-2.2.1.tgz#73a4c81de85db664d4ee674f7d47085e3b2d55dc" @@ -1455,6 +1733,16 @@ csso@~2.3.1: clap "^1.0.9" source-map "^0.5.3" +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" + +"cssstyle@>= 0.2.37 < 0.3.0": + version "0.2.37" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + dependencies: + cssom "0.3.x" + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -1481,7 +1769,7 @@ date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -debug@^2.1.1, debug@^2.2.0, debug@^2.6.8: +debug@^2.1.1, debug@^2.2.0, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -1493,6 +1781,12 @@ debug@^3.0.1: dependencies: ms "2.0.0" +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + dependencies: + ms "^2.1.1" + decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1505,6 +1799,12 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + dependencies: + strip-bom "^2.0.0" + define-properties@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" @@ -1549,6 +1849,10 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" +diff@^3.0.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + diffie-hellman@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" @@ -1557,6 +1861,10 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +discontinuous-range@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" + doctrine@1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.2.3.tgz#6aec6bbd62cf89dd498cae70c0ed9f49da873a6a" @@ -1578,10 +1886,53 @@ doctrine@^2.0.0: esutils "^2.0.2" isarray "^1.0.0" +dom-helpers@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6" + +dom-serializer@0, dom-serializer@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + domain-browser@^1.1.1: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" +domelementtype@1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.2.1.tgz#578558ef23befac043a1abb0db07635509393479" + +domelementtype@^1.3.0: + version "1.3.0" + resolved "http://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + dependencies: + dom-serializer "0" + domelementtype "1" + ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" @@ -1627,18 +1978,93 @@ enhanced-resolve@^3.3.0: object-assign "^4.0.1" tapable "^0.2.7" +entities@^1.1.1, entities@~1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + +enzyme-adapter-react-15.4@^1.0.5: + version "1.1.1" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-15.4/-/enzyme-adapter-react-15.4-1.1.1.tgz#c5e54f04e18de29b91681fcff08d8557b5eedd59" + dependencies: + enzyme-adapter-react-helper "^1.3.0" + enzyme-adapter-utils "^1.8.0" + object.assign "^4.1.0" + object.values "^1.0.4" + prop-types "^15.6.2" + react-is "^16.5.2" + +enzyme-adapter-react-helper@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-helper/-/enzyme-adapter-react-helper-1.3.1.tgz#11afe1afe9042972ee8e4c64f0a8803a29bdfe13" + dependencies: + airbnb-js-shims "^2.1.1" + install-peerdeps "^1.8.0" + npm-run "^5.0.1" + object.assign "^4.1.0" + object.getownpropertydescriptors "^2.0.3" + rimraf "^2.6.2" + semver "^5.5.1" + +enzyme-adapter-utils@^1.8.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.8.1.tgz#a927d840ce2c14b42892a533aec836809d4e022b" + dependencies: + function.prototype.name "^1.1.0" + object.assign "^4.1.0" + prop-types "^15.6.2" + +enzyme@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.7.0.tgz#9b499e8ca155df44fef64d9f1558961ba1385a46" + dependencies: + array.prototype.flat "^1.2.1" + cheerio "^1.0.0-rc.2" + function.prototype.name "^1.1.0" + has "^1.0.3" + is-boolean-object "^1.0.0" + is-callable "^1.1.4" + is-number-object "^1.0.3" + is-string "^1.0.4" + is-subset "^0.1.1" + lodash.escape "^4.0.1" + lodash.isequal "^4.5.0" + object-inspect "^1.6.0" + object-is "^1.0.1" + object.assign "^4.1.0" + object.entries "^1.0.4" + object.values "^1.0.4" + raf "^3.4.0" + rst-selector-parser "^2.2.3" + string.prototype.trim "^1.1.2" + errno@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" dependencies: prr "~0.0.0" +errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + dependencies: + prr "~1.0.1" + error-ex@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" dependencies: is-arrayish "^0.2.1" +es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.4.3, es-abstract@^1.5.0, es-abstract@^1.5.1, es-abstract@^1.6.1, es-abstract@^1.9.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + es-abstract@^1.7.0: version "1.9.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.9.0.tgz#690829a07cae36b222e7fd9b75c0d0573eb25227" @@ -1664,7 +2090,19 @@ es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: es6-iterator "~2.0.1" es6-symbol "~3.1.1" -es6-iterator@^2.0.1, es6-iterator@~2.0.1: +es5-ext@^0.10.45, es5-ext@^0.10.46, es5-ext@~0.10.2, es5-ext@~0.10.46: + version "0.10.46" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.46.tgz#efd99f67c5a7ec789baa3daa7f79870388f7f572" + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.1" + next-tick "1" + +es5-shim@^4.5.10: + version "4.5.12" + resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.12.tgz#508c13dda1c87dd3df1b50e69e7b96b82149b649" + +es6-iterator@^2.0.1, es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" dependencies: @@ -1683,6 +2121,16 @@ es6-map@^0.1.3: es6-symbol "~3.1.1" event-emitter "~0.3.5" +es6-promise@^4.0.3: + version "4.2.5" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054" + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + dependencies: + es6-promise "^4.0.3" + es6-set@~0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" @@ -1693,6 +2141,10 @@ es6-set@~0.1.5: es6-symbol "3.1.1" event-emitter "~0.3.5" +es6-shim@^0.35.3: + version "0.35.3" + resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.3.tgz#9bfb7363feffff87a6cdb6cd93e405ec3c4b6f26" + es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" @@ -1700,7 +2152,7 @@ es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: d "1" es5-ext "~0.10.14" -es6-weak-map@^2.0.1: +es6-weak-map@^2.0.1, es6-weak-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" dependencies: @@ -1713,6 +2165,17 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" +escodegen@^1.6.1: + version "1.11.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + escope@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" @@ -1902,6 +2365,10 @@ esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" +esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + esprima@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" @@ -1927,7 +2394,7 @@ esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -event-emitter@~0.3.5: +event-emitter@^0.3.5, event-emitter@~0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" dependencies: @@ -1945,6 +2412,12 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +exec-sh@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" + dependencies: + merge "^1.2.0" + exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" @@ -1969,6 +2442,10 @@ extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + external-editor@^2.0.4: version "2.0.5" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.5.tgz#52c249a3981b9ba187c7cacf5beb50bf1d91a6bc" @@ -2000,6 +2477,10 @@ fast-deep-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" @@ -2008,6 +2489,18 @@ fastparse@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" +fb-watchman@^1.8.0: + version "1.9.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" + dependencies: + bser "1.0.2" + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + fbjs@^0.8.16: version "0.8.16" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" @@ -2020,6 +2513,18 @@ fbjs@^0.8.16: setimmediate "^1.0.5" ua-parser-js "^0.7.9" +fbjs@^0.8.4: + version "0.8.17" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + figures@^1.3.5: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -2061,6 +2566,13 @@ filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + fill-range@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" @@ -2161,6 +2673,14 @@ form-data@~2.3.1: combined-stream "^1.0.5" mime-types "^2.1.12" +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + front-matter@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-2.1.2.tgz#f75983b9f2f413be658c93dfd7bd8ce4078f5cdb" @@ -2203,10 +2723,18 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2, function-bind@^1.1.1: +function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" +function.prototype.name@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.0.tgz#8bd763cc0af860a859cc5d49384d74b932cd2327" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + is-callable "^1.1.3" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" @@ -2311,6 +2839,20 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + +handlebars@^4.0.3: + version "4.0.12" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5" + dependencies: + async "^2.5.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + har-schema@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" @@ -2333,6 +2875,13 @@ har-validator@~5.0.3: ajv "^5.1.0" har-schema "^2.0.0" +har-validator@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29" + dependencies: + ajv "^5.3.0" + har-schema "^2.0.0" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -2347,6 +2896,10 @@ has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -2357,6 +2910,12 @@ has@^1.0.1: dependencies: function-bind "^1.0.2" +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + dependencies: + function-bind "^1.1.1" + hash-base@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" @@ -2426,6 +2985,23 @@ html-comment-regex@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" +html-encoding-sniffer@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + dependencies: + whatwg-encoding "^1.0.1" + +htmlparser2@^3.9.1: + version "3.10.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.0.6" + http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" @@ -2446,7 +3022,20 @@ https-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" -iconv-lite@^0.4.17, iconv-lite@~0.4.13: +https-proxy-agent@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" + dependencies: + agent-base "^4.1.0" + debug "^3.1.0" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.4.17, iconv-lite@~0.4.13: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" @@ -2553,6 +3142,19 @@ inquirer@^3.0.6: strip-ansi "^4.0.0" through "^2.3.6" +install-peerdeps@^1.8.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/install-peerdeps/-/install-peerdeps-1.9.0.tgz#e1ddd427afa99af74fcece04dbf40f4ba0867c64" + dependencies: + babel-polyfill "^6.26.0" + cli-color "^1.2.0" + commander "^2.11.0" + https-proxy-agent "^2.2.1" + promptly "^2.1.0" + request "^2.83.0" + request-promise-native "^1.0.5" + semver "^5.5.0" + interpret@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0" @@ -2581,6 +3183,10 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-boolean-object@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" + is-buffer@^1.0.2, is-buffer@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" @@ -2595,6 +3201,16 @@ is-callable@^1.1.1, is-callable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" +is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + +is-ci@^1.0.9: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + dependencies: + ci-info "^1.5.0" + is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" @@ -2652,6 +3268,10 @@ is-my-json-valid@^2.10.0: jsonpointer "^4.0.0" xtend "^4.0.0" +is-number-object@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" + is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -2698,7 +3318,7 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" -is-promise@^2.1.0: +is-promise@^2.1, is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" @@ -2722,6 +3342,14 @@ is-stream@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +is-string@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" + +is-subset@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" + is-svg@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" @@ -2769,6 +3397,265 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" +istanbul-api@^1.1.0-alpha.1: + version "1.3.7" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa" + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.2.1" + istanbul-lib-hook "^1.2.2" + istanbul-lib-instrument "^1.10.2" + istanbul-lib-report "^1.1.5" + istanbul-lib-source-maps "^1.2.6" + istanbul-reports "^1.5.1" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" + +istanbul-lib-hook@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.18.0" + istanbul-lib-coverage "^1.2.1" + semver "^5.3.0" + +istanbul-lib-report@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" + dependencies: + istanbul-lib-coverage "^1.2.1" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" + dependencies: + debug "^3.1.0" + istanbul-lib-coverage "^1.2.1" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" + dependencies: + handlebars "^4.0.3" + +jest-changed-files@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-19.0.2.tgz#16c54c84c3270be408e06d2e8af3f3e37a885824" + +jest-cli@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-19.0.2.tgz#cc3620b62acac5f2d93a548cb6ef697d4ec85443" + dependencies: + ansi-escapes "^1.4.0" + callsites "^2.0.0" + chalk "^1.1.1" + graceful-fs "^4.1.6" + is-ci "^1.0.9" + istanbul-api "^1.1.0-alpha.1" + istanbul-lib-coverage "^1.0.0" + istanbul-lib-instrument "^1.1.1" + jest-changed-files "^19.0.2" + jest-config "^19.0.2" + jest-environment-jsdom "^19.0.2" + jest-haste-map "^19.0.0" + jest-jasmine2 "^19.0.2" + jest-message-util "^19.0.0" + jest-regex-util "^19.0.0" + jest-resolve-dependencies "^19.0.0" + jest-runtime "^19.0.2" + jest-snapshot "^19.0.2" + jest-util "^19.0.2" + micromatch "^2.3.11" + node-notifier "^5.0.1" + slash "^1.0.0" + string-length "^1.0.1" + throat "^3.0.0" + which "^1.1.1" + worker-farm "^1.3.1" + yargs "^6.3.0" + +jest-config@^19.0.2: + version "19.0.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-19.0.4.tgz#42980211d46417e91ca7abffd086c270234f73fd" + dependencies: + chalk "^1.1.1" + jest-environment-jsdom "^19.0.2" + jest-environment-node "^19.0.2" + jest-jasmine2 "^19.0.2" + jest-regex-util "^19.0.0" + jest-resolve "^19.0.2" + jest-validate "^19.0.2" + pretty-format "^19.0.0" + +jest-diff@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-19.0.0.tgz#d1563cfc56c8b60232988fbc05d4d16ed90f063c" + dependencies: + chalk "^1.1.3" + diff "^3.0.0" + jest-matcher-utils "^19.0.0" + pretty-format "^19.0.0" + +jest-environment-jsdom@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-19.0.2.tgz#ceda859c4a4b94ab35e4de7dab54b926f293e4a3" + dependencies: + jest-mock "^19.0.0" + jest-util "^19.0.2" + jsdom "^9.11.0" + +jest-environment-node@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-19.0.2.tgz#6e84079db87ed21d0c05e1f9669f207b116fe99b" + dependencies: + jest-mock "^19.0.0" + jest-util "^19.0.2" + +jest-file-exists@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-19.0.0.tgz#cca2e587a11ec92e24cfeab3f8a94d657f3fceb8" + +jest-haste-map@^19.0.0: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-19.0.2.tgz#286484c3a16e86da7872b0877c35dce30c3d6f07" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.6" + micromatch "^2.3.11" + sane "~1.5.0" + worker-farm "^1.3.1" + +jest-jasmine2@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-19.0.2.tgz#167991ac825981fb1a800af126e83afcca832c73" + dependencies: + graceful-fs "^4.1.6" + jest-matcher-utils "^19.0.0" + jest-matchers "^19.0.0" + jest-message-util "^19.0.0" + jest-snapshot "^19.0.2" + +jest-matcher-utils@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-19.0.0.tgz#5ecd9b63565d2b001f61fbf7ec4c7f537964564d" + dependencies: + chalk "^1.1.3" + pretty-format "^19.0.0" + +jest-matchers@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-19.0.0.tgz#c74ecc6ebfec06f384767ba4d6fa4a42d6755754" + dependencies: + jest-diff "^19.0.0" + jest-matcher-utils "^19.0.0" + jest-message-util "^19.0.0" + jest-regex-util "^19.0.0" + +jest-message-util@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-19.0.0.tgz#721796b89c0e4d761606f9ba8cb828a3b6246416" + dependencies: + chalk "^1.1.1" + micromatch "^2.3.11" + +jest-mock@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-19.0.0.tgz#67038641e9607ab2ce08ec4a8cb83aabbc899d01" + +jest-regex-util@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-19.0.0.tgz#b7754587112aede1456510bb1f6afe74ef598691" + +jest-resolve-dependencies@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-19.0.0.tgz#a741ad1fa094140e64ecf2642a504f834ece22ee" + dependencies: + jest-file-exists "^19.0.0" + +jest-resolve@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-19.0.2.tgz#5793575de4f07aec32f7d7ff0c6c181963eefb3c" + dependencies: + browser-resolve "^1.11.2" + jest-haste-map "^19.0.0" + resolve "^1.2.0" + +jest-runtime@^19.0.2: + version "19.0.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-19.0.4.tgz#f167d9f1347752f2027361067926485349fcc245" + dependencies: + babel-core "^6.0.0" + babel-jest "^19.0.0" + babel-plugin-istanbul "^4.0.0" + chalk "^1.1.3" + graceful-fs "^4.1.6" + jest-config "^19.0.2" + jest-file-exists "^19.0.0" + jest-haste-map "^19.0.0" + jest-regex-util "^19.0.0" + jest-resolve "^19.0.2" + jest-util "^19.0.2" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + strip-bom "3.0.0" + yargs "^6.3.0" + +jest-snapshot@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-19.0.2.tgz#9c1b216214f7187c38bfd5c70b1efab16b0ff50b" + dependencies: + chalk "^1.1.3" + jest-diff "^19.0.0" + jest-file-exists "^19.0.0" + jest-matcher-utils "^19.0.0" + jest-util "^19.0.2" + natural-compare "^1.4.0" + pretty-format "^19.0.0" + +jest-util@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-19.0.2.tgz#e0a0232a2ab9e6b2b53668bdb3534c2b5977ed41" + dependencies: + chalk "^1.1.1" + graceful-fs "^4.1.6" + jest-file-exists "^19.0.0" + jest-message-util "^19.0.0" + jest-mock "^19.0.0" + jest-validate "^19.0.2" + leven "^2.0.0" + mkdirp "^0.5.1" + +jest-validate@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-19.0.2.tgz#dc534df5f1278d5b63df32b14241d4dbf7244c0c" + dependencies: + chalk "^1.1.1" + jest-matcher-utils "^19.0.0" + leven "^2.0.0" + pretty-format "^19.0.0" + jquery@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.2.1.tgz#5c4d9de652af6cd0a770154a631bba12b015c787" @@ -2781,6 +3668,10 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.5.4, js-yaml@^3.9.1: version "3.10.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" @@ -2788,6 +3679,13 @@ js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.5.4, js-yaml@^3.9.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.7.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@~3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" @@ -2803,6 +3701,30 @@ jschardet@^1.4.2: version "1.5.1" resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.5.1.tgz#c519f629f86b3a5bedba58a88d311309eec097f9" +jsdom@^9.11.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" + dependencies: + abab "^1.0.3" + acorn "^4.0.4" + acorn-globals "^3.1.0" + array-equal "^1.0.0" + content-type-parser "^1.0.1" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + escodegen "^1.6.1" + html-encoding-sniffer "^1.0.1" + nwmatcher ">= 1.3.9 < 2.0.0" + parse5 "^1.5.1" + request "^2.79.0" + sax "^1.2.1" + symbol-tree "^3.2.1" + tough-cookie "^2.3.2" + webidl-conversions "^4.0.0" + whatwg-encoding "^1.0.1" + whatwg-url "^4.3.0" + xml-name-validator "^2.0.1" + jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" @@ -2906,6 +3828,10 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +leven@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -3037,6 +3963,14 @@ lodash.defaults@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" +lodash.escape@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" + +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" @@ -3045,6 +3979,18 @@ lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + +lodash.isfunction@^3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" + +lodash.isobject@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" + lodash.kebabcase@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" @@ -3073,6 +4019,10 @@ lodash.tail@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" +lodash.tonumber@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/lodash.tonumber/-/lodash.tonumber-4.0.3.tgz#0b96b31b35672793eb7f5a63ee791f1b9e9025d9" + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -3081,6 +4031,10 @@ lodash@4.17.4, lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.3.0, lod version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" +lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" @@ -3091,6 +4045,12 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: dependencies: js-tokens "^3.0.0" +loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" @@ -3105,6 +4065,12 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" +lru-queue@0.1: + version "0.1.0" + resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" + dependencies: + es5-ext "~0.10.2" + macaddress@^0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" @@ -3115,6 +4081,12 @@ make-dir@^1.0.0: dependencies: pify "^2.3.0" +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" @@ -3130,6 +4102,19 @@ md5.js@^1.3.4: hash-base "^3.0.0" inherits "^2.0.1" +memoizee@^0.4.14: + version "0.4.14" + resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.14.tgz#07a00f204699f9a95c2d9e77218271c7cd610d57" + dependencies: + d "1" + es5-ext "^0.10.45" + es6-weak-map "^2.0.2" + event-emitter "^0.3.5" + is-promise "^2.1" + lru-queue "0.1" + next-tick "1" + timers-ext "^0.1.5" + memory-fs@^0.4.0, memory-fs@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -3156,7 +4141,7 @@ merge@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" -micromatch@^2.1.5: +micromatch@^2.1.5, micromatch@^2.3.11: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: @@ -3185,12 +4170,22 @@ mime-db@~1.30.0: version "1.30.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" +mime-db@~1.37.0: + version "1.37.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" + mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.7: version "2.1.17" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" dependencies: mime-db "~1.30.0" +mime-types@~2.1.19: + version "2.1.21" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" + dependencies: + mime-db "~1.37.0" + mime@1.3.x: version "1.3.6" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0" @@ -3221,10 +4216,14 @@ minimist@1.1.x: version "1.1.3" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" -minimist@^1.1.3, minimist@^1.2.0: +minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" +minimist@~0.0.1: + version "0.0.10" + resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + mixin-object@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" @@ -3255,15 +4254,23 @@ modernizr@^3.5.0: requirejs "2.1.22" yargs "7.0.2" +moo@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/moo/-/moo-0.4.3.tgz#3f847a26f31cf625a956a87f2b10fbc013bfd10e" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + mute-stream@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" -mute-stream@0.0.7: +mute-stream@0.0.7, mute-stream@~0.0.4: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -3275,6 +4282,20 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" +nearley@^2.7.10: + version "2.15.1" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.15.1.tgz#965e4e6ec9ed6b80fc81453e161efbcebb36d247" + dependencies: + moo "^0.4.3" + nomnom "~1.6.2" + railroad-diagrams "^1.0.0" + randexp "0.4.6" + semver "^5.4.1" + +next-tick@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -3300,6 +4321,10 @@ node-gyp@^3.3.1: tar "^2.0.0" which "1" +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + node-libs-browser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" @@ -3328,6 +4353,15 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" +node-notifier@^5.0.1: + version "5.3.0" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.3.0.tgz#c77a4a7b84038733d5fb351aafd8a268bfe19a01" + dependencies: + growly "^1.3.0" + semver "^5.5.0" + shellwords "^0.1.1" + which "^1.3.0" + node-pre-gyp@^0.6.36: version "0.6.38" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.38.tgz#e92a20f83416415bb4086f6d1fb78b3da73d113d" @@ -3366,6 +4400,13 @@ node-sass@^4.5.3: sass-graph "^2.1.1" stdout-stream "^1.4.0" +nomnom@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.6.2.tgz#84a66a260174408fc5b77a18f888eccc44fb6971" + dependencies: + colors "0.5.x" + underscore "~1.4.4" + "nopt@2 || 3": version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -3407,6 +4448,29 @@ normalize-url@^1.4.0: query-string "^4.1.0" sort-keys "^1.0.0" +npm-path@^2.0.2, npm-path@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" + dependencies: + which "^1.2.10" + +npm-run@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npm-run/-/npm-run-5.0.1.tgz#1baea93389b50ae25a32382c8ca322398e50cd16" + dependencies: + minimist "^1.2.0" + npm-path "^2.0.4" + npm-which "^3.0.1" + serializerr "^1.0.3" + +npm-which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + dependencies: + commander "^2.9.0" + npm-path "^2.0.2" + which "^1.2.10" + "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -3416,6 +4480,12 @@ normalize-url@^1.4.0: gauge "~2.7.3" set-blocking "~2.0.0" +nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + dependencies: + boolbase "~1.0.0" + num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" @@ -3424,10 +4494,18 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" +"nwmatcher@>= 1.3.9 < 2.0.0": + version "1.4.4" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" + oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -3436,6 +4514,18 @@ object-hash@^1.1.4: version "1.2.0" resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.2.0.tgz#e96af0e96981996a1d47f88ead8f74f1ebc4422b" +object-inspect@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" + +object-is@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" + +object-keys@^1.0.11: + version "1.0.12" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" + object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" @@ -3444,6 +4534,40 @@ object-path@^0.9.2: version "0.9.2" resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.9.2.tgz#0fd9a74fc5fad1ae3968b586bda5c632bd6c05a5" +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.entries@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + +object.fromentries@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-1.0.0.tgz#e90ec27445ec6e37f48be9af9077d9aa8bef0d40" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.11.0" + function-bind "^1.1.1" + has "^1.0.1" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -3451,7 +4575,16 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" -once@^1.3.0, once@^1.3.3: +object.values@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + +once@^1.3.0, once@^1.3.3, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -3467,6 +4600,13 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" @@ -3542,6 +4682,16 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse5@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + +parse5@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + dependencies: + "@types/node" "*" + path-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" @@ -3638,6 +4788,10 @@ pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" +popper.js@^1.12.9: + version "1.14.4" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.4.tgz#8eec1d8ff02a5a3a152dd43414a15c7b79fd69b6" + postcss-calc@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" @@ -3928,7 +5082,13 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -private@^0.1.6, private@^0.1.7: +pretty-format@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-19.0.0.tgz#56530d32acb98a3fa4851c4e2b9d37b420684c84" + dependencies: + ansi-styles "^3.0.0" + +private@^0.1.6, private@^0.1.7, private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -3948,13 +5108,27 @@ progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" +promise.prototype.finally@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.0.tgz#66f161b1643636e50e7cf201dc1b84a857f3864e" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.9.0" + function-bind "^1.1.1" + promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" dependencies: asap "~2.0.3" -prop-types@^15.5.10, prop-types@^15.6.0: +promptly@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/promptly/-/promptly-2.2.0.tgz#2a13fa063688a2a5983b161fff0108a07d26fc74" + dependencies: + read "^1.0.4" + +prop-types@^15.5.10: version "15.6.0" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" dependencies: @@ -3962,14 +5136,33 @@ prop-types@^15.5.10, prop-types@^15.6.0: loose-envify "^1.3.1" object-assign "^4.1.1" +prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2: + version "15.6.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" + dependencies: + loose-envify "^1.3.1" + object-assign "^4.1.1" + +protochain@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/protochain/-/protochain-1.0.5.tgz#991c407e99de264aadf8f81504b5e7faf7bfa260" + prr@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" +psl@^1.1.24: + version "1.1.29" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" + public-encrypt@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" @@ -4000,6 +5193,10 @@ qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + query-string@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" @@ -4015,6 +5212,23 @@ querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" +raf@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" + dependencies: + performance-now "^2.1.0" + +railroad-diagrams@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" + +randexp@0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" + dependencies: + discontinuous-range "1.0.0" + ret "~0.1.10" + randomatic@^1.1.3: version "1.1.7" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" @@ -4041,23 +5255,53 @@ rc@^1.1.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@^16.0.0: - version "16.0.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.0.0.tgz#9cc3079c3dcd70d4c6e01b84aab2a7e34c303f58" +react-dom@15.3.1: + version "15.3.1" + resolved "http://registry.npmjs.org/react-dom/-/react-dom-15.3.1.tgz#6d42cd2b64c8c5e0b693f3ffaec301e6e627e24e" + +react-is@^16.5.2: + version "16.6.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.6.0.tgz#456645144581a6e99f6816ae2bd24ee94bdd0c01" + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + +react-popper@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-0.8.3.tgz#0f73333137c9fb0af6ec4074d2d0585a0a0461e1" dependencies: - fbjs "^0.8.16" - loose-envify "^1.1.0" - object-assign "^4.1.1" + popper.js "^1.12.9" prop-types "^15.6.0" -react@^16.0.0: - version "16.0.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.0.0.tgz#ce7df8f1941b036f02b2cca9dbd0cb1f0e855e2d" +react-transition-group@^2.2.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.5.0.tgz#70bca0e3546102c4dc5cf3f5f57f73447cce6874" dependencies: - fbjs "^0.8.16" + dom-helpers "^3.3.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + react-lifecycles-compat "^3.0.4" + +react@15.3.1: + version "15.3.1" + resolved "http://registry.npmjs.org/react/-/react-15.3.1.tgz#f78501ed8c2ec6e6e31c3223652e97f1369d2bd6" + dependencies: + fbjs "^0.8.4" loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.0" + object-assign "^4.1.0" + +reactstrap@^5.0.0-beta: + version "5.0.0" + resolved "http://registry.npmjs.org/reactstrap/-/reactstrap-5.0.0.tgz#d8948534df4816eddfb162a51643a499388e9228" + dependencies: + classnames "^2.2.3" + lodash.isfunction "^3.0.9" + lodash.isobject "^3.0.2" + lodash.tonumber "^4.0.3" + prop-types "^15.5.8" + react-popper "^0.8.3" + react-transition-group "^2.2.1" read-pkg-up@^1.0.1: version "1.0.1" @@ -4089,6 +5333,12 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" +read@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + dependencies: + mute-stream "~0.0.4" + readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.6: version "2.3.3" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" @@ -4101,6 +5351,14 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable string_decoder "~1.0.3" util-deprecate "~1.0.1" +readable-stream@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.0.6.tgz#351302e4c68b5abd6a2ed55376a7f9a25be3057a" + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readdirp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" @@ -4143,6 +5401,10 @@ regenerate@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + regenerator-runtime@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" @@ -4165,6 +5427,12 @@ regex-parser@^2.2.1: version "2.2.8" resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.8.tgz#da4c0cda5a828559094168930f455f532b6ffbac" +regexp.prototype.flags@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c" + dependencies: + define-properties "^1.1.2" + regexpu-core@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" @@ -4216,6 +5484,20 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +request-promise-core@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + dependencies: + lodash "^4.13.1" + +request-promise-native@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" + dependencies: + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" + request@2, request@^2.79.0: version "2.83.0" resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" @@ -4270,6 +5552,31 @@ request@2.81.0: tunnel-agent "^0.6.0" uuid "^3.0.0" +request@^2.83.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -4315,6 +5622,10 @@ resolve-url@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + resolve@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" @@ -4335,6 +5646,10 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + rework-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" @@ -4352,7 +5667,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -4365,6 +5680,13 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^2.0.0" inherits "^2.0.1" +rst-selector-parser@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" + dependencies: + lodash.flattendeep "^4.4.0" + nearley "^2.7.10" + run-async@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" @@ -4395,6 +5717,26 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" +safe-buffer@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + +sane@~1.5.0: + version "1.5.0" + resolved "http://registry.npmjs.org/sane/-/sane-1.5.0.tgz#a4adeae764d048621ecb27d5f9ecf513101939f3" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^1.8.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.10.0" + sass-graph@^2.1.1: version "2.2.4" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" @@ -4433,7 +5775,7 @@ sass-loader@^6.0.5: lodash.tail "^4.1.1" pify "^3.0.0" -sax@~1.2.1: +sax@^1.2.1, sax@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -4460,10 +5802,20 @@ scss-tokenizer@^0.2.3: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" +semver@^5.4.1, semver@^5.5.0, semver@^5.5.1: + version "5.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" +serializerr@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/serializerr/-/serializerr-1.0.3.tgz#12d4c5aa1c3ffb8f6d1dc5f395aa9455569c3f91" + dependencies: + protochain "^1.0.5" + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -4506,6 +5858,10 @@ shelljs@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8" +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -4577,11 +5933,11 @@ source-map@^0.4.2: dependencies: amdefine ">=0.0.4" -source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: +source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" -source-map@^0.6.1: +source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -4623,6 +5979,10 @@ stdout-stream@^1.4.0: dependencies: readable-stream "^2.0.1" +stealthy-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + stream-browserify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" @@ -4644,6 +6004,12 @@ strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" +string-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" + dependencies: + strip-ansi "^3.0.0" + string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -4659,10 +6025,50 @@ string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string.prototype.matchall@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-3.0.0.tgz#66f4d8dd5c6c6cea4dffb55ec5f3184a8dd0dd59" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has-symbols "^1.0.0" + regexp.prototype.flags "^1.2.0" + +string.prototype.padend@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.4.3" + function-bind "^1.0.2" + +string.prototype.padstart@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz#5bcfad39f4649bb2d031292e19bcf0b510d4b242" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.4.3" + function-bind "^1.0.2" + +string.prototype.trim@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.0" + function-bind "^1.0.2" + string_decoder@^0.10.25: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" +string_decoder@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + dependencies: + safe-buffer "~5.1.0" + string_decoder@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" @@ -4685,16 +6091,16 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-bom@3.0.0, strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" dependencies: is-utf8 "^0.2.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" @@ -4713,7 +6119,7 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^3.1.0, supports-color@^3.2.3: +supports-color@^3.1.0, supports-color@^3.1.2, supports-color@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" dependencies: @@ -4737,6 +6143,16 @@ svgo@^0.7.0: sax "~1.2.1" whet.extend "~0.9.9" +symbol-tree@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +symbol.prototype.description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.0.tgz#6e355660eb1e44ca8ad53a68fdb72ef131ca4b12" + dependencies: + has-symbols "^1.0.0" + table@^3.7.8: version "3.8.3" resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" @@ -4784,10 +6200,24 @@ tar@^2.0.0, tar@^2.2.1: fstream "^1.0.2" inherits "2" +test-exclude@^4.2.1: + version "4.2.3" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" + dependencies: + arrify "^1.0.1" + micromatch "^2.3.11" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" +throat@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-3.2.0.tgz#50cb0670edbc40237b9e347d7e1f88e4620af836" + through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -4798,12 +6228,23 @@ timers-browserify@^2.0.2: dependencies: setimmediate "^1.0.4" +timers-ext@^0.1.5: + version "0.1.7" + resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" + dependencies: + es5-ext "~0.10.46" + next-tick "1" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" dependencies: os-tmpdir "~1.0.2" +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -4812,12 +6253,23 @@ to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" +tough-cookie@>=2.3.3, tough-cookie@^2.3.2, tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" dependencies: punycode "^1.4.1" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -4854,6 +6306,10 @@ typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" +ua-parser-js@^0.7.18: + version "0.7.18" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" + ua-parser-js@^0.7.9: version "0.7.17" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" @@ -4867,6 +6323,13 @@ uglify-js@^2.8.27: optionalDependencies: uglify-to-browserify "~1.0.0" +uglify-js@^3.1.4: + version "3.4.9" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" + dependencies: + commander "~2.17.1" + source-map "~0.6.1" + uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" @@ -4879,6 +6342,10 @@ underscore.string@~2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.4.0.tgz#8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b" +underscore@~1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" + underscore@~1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" @@ -4925,7 +6392,7 @@ user-home@^2.0.0: dependencies: os-homedir "^1.0.0" -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -4939,6 +6406,10 @@ uuid@^3.0.0, uuid@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" +uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" @@ -4964,6 +6435,16 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" + +watch@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" + watchpack@^1.3.1: version "1.4.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" @@ -4972,6 +6453,14 @@ watchpack@^1.3.1: chokidar "^1.7.0" graceful-fs "^4.1.2" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + +webidl-conversions@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + webpack-sources@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.1.tgz#c7356436a4d13123be2e2426a05d1dad9cbe65cf" @@ -5005,10 +6494,23 @@ webpack@^2.6.1: webpack-sources "^1.0.1" yargs "^6.0.0" +whatwg-encoding@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + dependencies: + iconv-lite "0.4.24" + whatwg-fetch@>=0.10.0: version "2.0.3" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" +whatwg-url@^4.3.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + whet.extend@~0.9.9: version "0.9.9" resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" @@ -5023,6 +6525,12 @@ which@1, which@^1.2.9: dependencies: isexe "^2.0.0" +which@^1.1.1, which@^1.2.10, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" @@ -5037,10 +6545,20 @@ wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" +worker-farm@^1.3.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" + dependencies: + errno "~0.1.7" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -5058,6 +6576,10 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" +xml-name-validator@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" + xtend@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -5100,7 +6622,7 @@ yargs@7.0.2: y18n "^3.2.1" yargs-parser "^5.0.0" -yargs@^6.0.0: +yargs@^6.0.0, yargs@^6.3.0: version "6.6.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" dependencies: