From ce2f7537cdabf7fa18bc9842f7f61546f989038c Mon Sep 17 00:00:00 2001 From: Steve Boyd Date: Fri, 26 Jul 2024 12:38:30 +1200 Subject: [PATCH] API Standardise endpoints --- client/dist/js/bundle.js | 15962 +++++++++++++++- client/dist/styles/bundle.css | 259 +- .../components/HistoryViewer/HistoryViewer.js | 39 +- .../HistoryViewer/HistoryViewerEntwine.js | 2 + .../CMSPageHistoryViewerController.php | 40 +- src/Forms/HistoryViewerField.php | 1 - 6 files changed, 16294 insertions(+), 9 deletions(-) diff --git a/client/dist/js/bundle.js b/client/dist/js/bundle.js index c8c4cd41..9e4e8e94 100644 --- a/client/dist/js/bundle.js +++ b/client/dist/js/bundle.js @@ -1 +1,15961 @@ -!function(){var e={2038:function(e,t,n){"use strict";var r=s(n(4121)),o=s(n(420));function s(e){return e&&e.__esModule?e:{default:e}}window.document.addEventListener("DOMContentLoaded",(()=>{(0,r.default)(),(0,o.default)()}))},4121:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=d(n(5207)),o=d(n(5249)),s=d(n(495)),i=d(n(3694)),a=d(n(1749)),l=d(n(488)),u=d(n(6937)),c=d(n(8375)),p=d(n(7900));function d(e){return e&&e.__esModule?e:{default:e}}t.default=()=>{r.default.component.registerMany({HistoryViewer:o.default,HistoryViewerHeading:s.default,HistoryViewerToolbar:i.default,HistoryViewerVersion:a.default,HistoryViewerVersionDetail:l.default,HistoryViewerVersionList:u.default,HistoryViewerVersionState:c.default,HistoryViewerCompareWarning:p.default})}},420:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(5207)),o=n(9367),s=i(n(8330));function i(e){return e&&e.__esModule?e:{default:e}}t.default=()=>{r.default.reducer.register("versionedAdmin",(0,o.combineReducers)({historyViewer:s.default}))}},5249:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.Component=void 0;var r=b(n(1594)),o=n(9367),s=n(9040),i=y(n(9888)),a=y(n(1887)),l=y(n(5815)),u=n(5207),c=y(n(7089)),p=n(5525),d=n(1339),f=n(2348),h=y(n(6923)),m=y(n(9923)),g=b(n(9032)),v=y(n(6935));function y(e){return e&&e.__esModule?e:{default:e}}function C(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(C=function(e){return e?n:t})(e)}function b(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=C(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&{}.hasOwnProperty.call(e,s)){var i=o?Object.getOwnPropertyDescriptor(e,s):null;i&&(i.get||i.set)?Object.defineProperty(r,s,i):r[s]=e[s]}return r.default=e,n&&n.set(e,r),r}class w extends r.Component{constructor(e){super(e),this.handleSetPage=this.handleSetPage.bind(this),this.handleNextPage=this.handleNextPage.bind(this),this.handlePrevPage=this.handlePrevPage.bind(this)}componentDidUpdate(e){if(!this.props.actions||!this.props.actions.versions)return;const{page:t}=e,{page:n}=this.props,{actions:{versions:r}}=this.props;t!==n&&"function"==typeof r.goToPage&&r.goToPage(n)}componentWillUnmount(){const{onSelect:e}=this.props;"function"==typeof e&&e(0)}getVersions(){const{versions:e}=this.props;return e&&e.versions&&e.versions.nodes?e.versions.nodes:[]}getContainerClasses(){const{compare:e,isInGridField:t}=this.props;return(0,h.default)("history-viewer","fill-height","panel--scrollable",{"history-viewer__compare-mode":e,"history-viewer--no-margins":t&&!this.isListView()})}getLatestVersion(){const{currentVersion:e}=this.props;if(e&&!0===e.latestDraftVersion)return e;const t=this.getVersions().filter((e=>!0===e.latestDraftVersion));return t.length?t[0]:null}isListView(){const{compare:e,currentVersion:t}=this.props;return!t||!!e&&!(!e.versionFrom||e.versionTo)}handleSetPage(e){const{onSetPage:t}=this.props;"function"==typeof t&&t(e+1)}handleNextPage(){const{page:e}=this.props;this.handleSetPage(e)}handlePrevPage(){const{page:e}=this.props,t=e-1;t<1?this.handleSetPage(t):this.handleSetPage(t-1)}compareModeAvailable(){return this.getVersions().length>1}renderVersionDetail(){const{currentVersion:e,isPreviewable:t,isRevertable:n,recordId:o,recordClass:s,schemaUrl:i,VersionDetailComponent:a,compare:l,compare:{versionFrom:u=!1,versionTo:c=!1},previewState:p}=this.props,d={":id":o,":class":s,":version":e.version},f={":id":o,":class":s,":from":u.version||0,":to":c.version||0},h=l?/:id|:class|:from|:to/g:/:id|:class|:version/g,g=l?f:d,v=l?u:e,y=this.getLatestVersion(),C={isLatestVersion:!l&&y&&y.version===v.version,isPreviewable:t,isRevertable:n,recordId:o,schemaUrl:i.replace(h,(e=>g[e])),version:v,compare:l,compareModeAvailable:this.compareModeAvailable(),previewState:p};return r.default.createElement(m.default,{className:this.getContainerClasses(),onResize:e=>{let{width:t}=e;return this.props.onResize(t)}},r.default.createElement(a,C))}renderPagination(){const{limit:e,page:t,versions:n}=this.props;if(!n)return null;const o=n.versions?n.versions.pageInfo.totalCount:0;if(o<=e)return null;const s={setPage:this.handleSetPage,maxPage:Math.ceil(o/e),next:this.handleNextPage,nextText:l.default._t("HistoryViewer.NEXT","Next"),previous:this.handlePrevPage,previousText:l.default._t("HistoryViewer.PREVIOUS","Previous"),currentPage:t-1,useGriddleStyles:!1};return r.default.createElement("div",{className:"griddle-footer"},r.default.createElement(i.default.GridPagination,s))}renderComparisonSelectionList(){const{compare:{versionFrom:e},ListComponent:t}=this.props;if(!e)return null;const n=(0,h.default)("history-viewer__table","history-viewer__table--comparison-selected");return r.default.createElement(t,{versions:[e],extraClass:n})}renderVersionList(){const{isInGridField:e,ListComponent:t,CompareWarningComponent:n,compare:o,compare:{versionFrom:s}}=this.props;return r.default.createElement("div",{className:this.getContainerClasses()},r.default.createElement(n,null),r.default.createElement("div",{className:e?"":"panel panel--padded panel--scrollable"},this.renderComparisonSelectionList(),r.default.createElement(t,{versions:this.getVersions(),showHeader:!o||o&&!s,compareModeAvailable:this.compareModeAvailable()}),r.default.createElement("div",{className:"history-viewer__pagination"},this.renderPagination())))}renderCompareMode(){const{compare:e}=this.props;return e&&e.versionFrom&&e.versionTo?this.renderVersionDetail():this.renderVersionList()}render(){const{loading:e,compare:t,currentVersion:n,recordId:o}=this.props;return o?e?r.default.createElement(c.default,null):this.compareModeAvailable()&&t?this.renderCompareMode():n?this.renderVersionDetail():this.renderVersionList():null}}t.Component=w,w.propTypes={contextKey:v.default.string,limit:v.default.number,ListComponent:v.default.elementType.isRequired,offset:v.default.number,recordId:v.default.number,currentVersion:v.default.oneOfType([v.default.bool,d.versionType]),compare:f.compareType,isInGridField:v.default.bool,isPreviewable:v.default.bool,isRevertable:v.default.bool,VersionDetailComponent:v.default.elementType.isRequired,CompareWarningComponent:v.default.elementType.isRequired,versions:v.default.shape({versions:v.default.shape({pageInfo:v.default.shape({totalCount:v.default.number}),nodes:v.default.arrayOf(d.versionType)})}),page:v.default.number,schemaUrl:v.default.string,previewState:v.default.oneOf(["edit","preview","split"]),actions:v.default.object,onSelect:v.default.func,onSetPage:v.default.func,onResize:v.default.func},w.defaultProps={compare:{},contextKey:"",currentVersion:!1,isInGridField:!1,isPreviewable:!1,schemaUrl:"",versions:{versions:{pageInfo:{totalCount:0},nodes:[]}}};t.default=(0,o.compose)((0,s.connect)((function(e){const{currentPage:t,currentVersion:n,compare:r}=e.versionedAdmin.historyViewer,{activeState:o}=e.viewMode;return{page:t,currentVersion:n,compare:r,previewState:o}}),(function(e){return{onSelect(t){e((0,p.showVersion)(t)),e((0,p.clearMessages)())},onSetPage(t){e((0,p.setCurrentPage)(t))},onResize(t){e(g.enableOrDisableSplitMode(t))}}})),a.default,(0,u.inject)(["HistoryViewerVersionList","HistoryViewerVersionDetail","HistoryViewerCompareWarning"],((e,t,n)=>({ListComponent:e,VersionDetailComponent:t,CompareWarningComponent:n})),(e=>{let{contextKey:t}=e;return`VersionedAdmin.HistoryViewer.${t}`})))(w)},7900:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.Component=void 0;var r=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=u(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&{}.hasOwnProperty.call(e,s)){var i=o?Object.getOwnPropertyDescriptor(e,s):null;i&&(i.get||i.set)?Object.defineProperty(r,s,i):r[s]=e[s]}return r.default=e,n&&n.set(e,r),r}(n(1594)),o=l(n(6935)),s=n(9040),i=l(n(5815)),a=n(5525);function l(e){return e&&e.__esModule?e:{default:e}}function u(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(u=function(e){return e?n:t})(e)}class c extends r.Component{constructor(e){super(e),this.handleDismissCompare=this.handleDismissCompare.bind(this)}handleDismissCompare(){this.props.onDismissCompare()}render(){return this.props.isCompare?r.default.createElement("div",{className:"history-viewer__compare-notice alert alert-info"},r.default.createElement("span",{className:"notice-message"},r.default.createElement("strong",null,i.default._t("HistoryViewer.COMPARE_MODE","Compare mode"),": "),i.default._t("HistoryViewer.SELECT_PROMPT","Select two versions")),r.default.createElement("button",{className:"btn dismiss-button font-icon-cancel",onClick:this.handleDismissCompare},i.default._t("HistoryViewer.EXIT","Exit"))):null}}t.Component=c,c.propTypes={isCompare:o.default.bool.isRequired};t.default=(0,s.connect)((function(e){const{compare:t}=e.versionedAdmin.historyViewer;return{isCompare:!!t}}),(function(e){return{onDismissCompare(){e((0,a.setCompareMode)(!1))}}}))(c)},495:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.Component=void 0;var r=p(n(5815)),o=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=c(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&{}.hasOwnProperty.call(e,s)){var i=o?Object.getOwnPropertyDescriptor(e,s):null;i&&(i.get||i.set)?Object.defineProperty(r,s,i):r[s]=e[s]}return r.default=e,n&&n.set(e,r),r}(n(1594)),s=n(3556),i=n(5525),a=n(9367),l=n(9040),u=p(n(6935));function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(c=function(e){return e?n:t})(e)}function p(e){return e&&e.__esModule?e:{default:e}}class d extends o.Component{constructor(e){super(e),this.toggle=this.toggle.bind(this),this.handleCompareModeChange=this.handleCompareModeChange.bind(this),this.state={dropdownOpen:!1}}toggle(){this.setState((e=>({dropdownOpen:!e.dropdownOpen})))}handleCompareModeChange(){const{compareModeSelected:e,onCompareModeUnselect:t,onCompareModeSelect:n}=this.props;e?t():n()}renderDropdown(){const{compareModeAvailable:e,compareModeSelected:t}=this.props,{dropdownOpen:n}=this.state;return e?o.default.createElement(s.Dropdown,{isOpen:n,toggle:this.toggle,className:"history-viewer__actions-dropdown"},o.default.createElement(s.DropdownToggle,{className:"font-icon-sliders"}),o.default.createElement(s.DropdownMenu,{right:!0},o.default.createElement("div",{className:"form-check"},o.default.createElement("input",{id:"history-viewer-compare-two",type:"checkbox",className:"no-change-track history-viewer-heading__compare-mode-checkbox",checked:t,onChange:this.handleCompareModeChange}),o.default.createElement("label",{className:"form-check-label",htmlFor:"history-viewer-compare-two"},r.default._t("HistoryViewerHeading.COMPARE_VERSIONS","Compare two versions"))))):null}render(){return o.default.createElement("li",{className:"history-viewer__heading",role:"row"},o.default.createElement("span",{className:"history-viewer__version-no",role:"columnheader"},"#"),o.default.createElement("span",{className:"history-viewer__version-state",role:"columnheader"},r.default._t("HistoryViewer.Record","Record")),o.default.createElement("span",{className:"history-viewer__author",role:"columnheader"},r.default._t("HistoryViewer.Author","Author")),o.default.createElement("span",{className:"history-viewer__actions",role:"columnheader"},this.renderDropdown()))}}t.Component=d,d.propTypes={compareModeAvailable:u.default.bool,compareModeSelected:u.default.bool,onCompareModeSelect:u.default.func,onCompareModeUnselect:u.default.func},d.defaultProps={compareModeAvailable:!0};t.default=(0,a.compose)((0,l.connect)((function(e){return{compareModeSelected:!!e.versionedAdmin.historyViewer.compare}}),(function(e){return{onCompareModeSelect(){e((0,i.setCompareMode)(!0))},onCompareModeUnselect(){e((0,i.setCompareMode)(!1))}}})))(d)},3694:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.Component=void 0;var r=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=p(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&{}.hasOwnProperty.call(e,s)){var i=o?Object.getOwnPropertyDescriptor(e,s):null;i&&(i.get||i.set)?Object.defineProperty(r,s,i):r[s]=e[s]}return r.default=e,n&&n.set(e,r),r}(n(1594)),o=c(n(6935)),s=n(9367),i=n(9040),a=c(n(5815)),l=n(5207),u=n(5525);function c(e){return e&&e.__esModule?e:{default:e}}function p(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(p=function(e){return e?n:t})(e)}class d extends r.Component{constructor(e){super(e),this.handleRevert=this.handleRevert.bind(this),this.state={isReverting:!1}}handleRevert(){const{actions:{revertToVersion:e},onAfterRevert:t,recordId:n,versionId:r}=this.props;this.setState({isReverting:!0});const o="function"==typeof t?t:()=>{};return e(n,r,"DRAFT","DRAFT").then((()=>o(r)))}render(){const{FormActionComponent:e,ViewModeComponent:t,isLatestVersion:n,isPreviewable:o,isRevertable:s}=this.props,{isReverting:i}=this.state;let l="";return i?l=a.default._t("HistoryViewerToolbar.REVERT_IN_PROGRESS","Revert in progress..."):n&&(l=a.default._t("HistoryViewerToolbar.REVERT_UNAVAILABLE","Unavailable for the current version")),r.default.createElement("div",{className:"toolbar toolbar--south"},r.default.createElement("div",{className:"btn-toolbar"},s&&r.default.createElement(e,{onClick:this.handleRevert,icon:"back-in-time",name:"revert",attributes:{title:l},data:{buttonStyle:"warning"},disabled:n||i,loading:i,title:a.default._t("HistoryViewerToolbar.REVERT_TO_VERSION","Revert to this version")}),o&&r.default.createElement(t,{id:"history-viewer-edit-mode",area:"edit"})))}}t.Component=d,d.propTypes={actions:o.default.shape({revertToVersion:o.default.func.isRequired}),FormActionComponent:o.default.elementType.isRequired,ViewModeComponent:o.default.elementType.isRequired,isLatestVersion:o.default.bool,isPreviewable:o.default.bool,isRevertable:o.default.bool,onAfterRevert:o.default.func,recordId:o.default.number.isRequired,versionId:o.default.number.isRequired},d.defaultProps={isLatestVersion:!1,isPreviewable:!1,isRevertable:!1};t.default=(0,s.compose)((0,i.connect)(null,(function(e){return{onAfterRevert(t){e((0,u.addMessage)(a.default.sprintf(a.default._t("HistoryViewerToolbar.REVERTED_MESSAGE","Successfully reverted to version %s"),t))),e((0,u.showList)())}}})),(0,l.inject)(["FormAction","ViewModeToggle"],((e,t)=>({FormActionComponent:e,ViewModeComponent:t})),(()=>"VersionedAdmin.HistoryViewer.Toolbar")))(d)},1749:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.Component=void 0;var r=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=h(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&{}.hasOwnProperty.call(e,s)){var i=o?Object.getOwnPropertyDescriptor(e,s):null;i&&(i.get||i.set)?Object.defineProperty(r,s,i):r[s]=e[s]}return r.default=e,n&&n.set(e,r),r}(n(1594)),o=f(n(6935)),s=n(9367),i=n(9040),a=n(5207),l=n(1339),u=n(2348),c=f(n(5815)),p=f(n(6923)),d=n(5525);function f(e){return e&&e.__esModule?e:{default:e}}function h(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(h=function(e){return e?n:t})(e)}class m extends r.Component{constructor(e){super(e),this.handleClick=this.handleClick.bind(this),this.handleClose=this.handleClose.bind(this),this.handleCompare=this.handleCompare.bind(this),this.handleKeyUp=this.handleKeyUp.bind(this)}getAuthor(){const{version:e}=this.props;let t={};return e.published&&e.publisher?t=e.publisher:e.author&&(t=e.author),`${t.firstName||""} ${t.surname||""}`}getClassNames(){const{extraClass:e,isActive:t,compare:n,compare:{compareFrom:r,compareTo:o}}=this.props,s={"history-viewer__row":!0,"history-viewer__row--current":t,"history-viewer__row--comparison-selected":n&&!(r&&o)};return(0,p.default)(s,e)}handleKeyUp(e){13===e.keyCode&&this.handleClick()}handleClick(){const{onSelect:e,version:t,isActive:n,compare:r}=this.props;return n||e(t,r),!1}handleCompare(){const{onCompareMode:e,version:t}=this.props;e(t)}handleClose(){const{onSelect:e,version:t,compare:n,compare:{versionFrom:r}}=this.props;r&&r.version===t.version&&delete n.versionFrom,e(0,n)}renderCompareButton(){const{compareModeAvailable:e,compare:t,FormActionComponent:n}=this.props,o=c.default._t("HistoryViewerVersion.COMPARE","Compare");return!e||t?null:r.default.createElement(n,{onClick:this.handleCompare,title:o,buttonStyle:"outline-light",extraClass:"history-viewer__compare-button"},o)}renderClearButton(){const{FormActionComponent:e,isActive:t}=this.props;return t?r.default.createElement(e,{onClick:this.handleClose,icon:"cancel",attributes:{title:c.default._t("HistoryViewerVersion.CLOSE","Close")},title:null,buttonStyle:"outline-light",extraClass:"history-viewer__close-button"}):null}renderSelectedMessage(){const{isActive:e}=this.props;return e?r.default.createElement("span",{className:"history-viewer__selected-message"},c.default._t("HistoryViewerVersion.SELECTED","Already selected")):null}renderActions(){const{isActive:e,compare:t}=this.props;return e||t?r.default.createElement("span",{className:"history-viewer__actions",role:"cell"},this.renderCompareButton(),this.renderSelectedMessage(),this.renderClearButton()):r.default.createElement("span",{className:"history-viewer__actions",role:"cell"})}render(){const{version:e,isActive:t,StateComponent:n}=this.props,o=c.default._t("HistoryViewerVersion.GO_TO_VERSION","Go to version {version}");return r.default.createElement("li",{className:this.getClassNames(),role:"row"},r.default.createElement("span",{className:"history-viewer__version-link",role:"button",title:c.default.inject(o,{version:e.Version}),onClick:this.handleClick,onKeyUp:this.handleKeyUp,tabIndex:0},r.default.createElement("span",{className:"history-viewer__version-no",role:"cell"},e.version),r.default.createElement(n,{version:e,isActive:t}),r.default.createElement("span",{className:"history-viewer__author",role:"cell"},this.getAuthor()),this.renderActions()))}}t.Component=m,m.propTypes={extraClass:o.default.oneOfType([o.default.string,o.default.array,o.default.object]),version:l.versionType,isActive:o.default.bool,onSelect:o.default.func,onCompareMode:o.default.func,compare:u.compareType,compareModeAvailable:o.default.bool,StateComponent:o.default.elementType.isRequired,FormActionComponent:o.default.elementType.isRequired},m.defaultProps={isActive:!1,version:l.defaultVersion,compare:!1,compareModeAvailable:!0};t.default=(0,s.compose)((0,i.connect)(null,(function(e){return{onSelect(t,n){const{versionFrom:r}=n;n?e(r?(0,d.setCompareTo)(t):(0,d.setCompareFrom)(t)):(e((0,d.showVersion)(t)),e((0,d.clearMessages)()))},onCompareMode(t){e((0,d.setCompareFrom)(t)),e((0,d.setCompareMode)(!0))}}})),(0,a.inject)(["HistoryViewerVersionState","FormAction"],((e,t)=>({StateComponent:e,FormActionComponent:t})),(e=>{let{version:t}=e,n="VersionedAdmin.HistoryViewer.HistoryViewerVersion";return t&&(n+=`.${t.version}`),n})))(m)},488:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.Component=void 0;var r=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=d(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&{}.hasOwnProperty.call(e,s)){var i=o?Object.getOwnPropertyDescriptor(e,s):null;i&&(i.get||i.set)?Object.defineProperty(r,s,i):r[s]=e[s]}return r.default=e,n&&n.set(e,r),r}(n(1594)),o=p(n(6923)),s=p(n(55)),i=n(5207),a=n(1339),l=p(n(6935)),u=p(n(7008)),c=p(n(7675));function p(e){return e&&e.__esModule?e:{default:e}}function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(d=function(e){return e?n:t})(e)}class f extends r.PureComponent{componentDidMount(){this.toggleToolbarClass(!0)}componentDidUpdate(){this.toggleToolbarClass("split"===this.props.previewState)}componentWillUnmount(){this.toggleToolbarClass(!1)}getListVersions(){const{compare:e,version:t}=this.props;return this.isCompareMode()?[e.versionTo,e.versionFrom]:[t]}isPreviewable(){const{isPreviewable:e}=this.props;return e&&!this.isCompareMode()}isCompareMode(){const{compare:e}=this.props;return e&&e.versionFrom&&e.versionTo}toggleToolbarClass(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];const t=document.querySelector(".CMSPageHistoryViewerController div:not(.cms-content-tools) .cms-content-header"),n="history-viewer__toolbar--condensed";t&&this.isPreviewable()&&(e?t.classList.add(n):t.classList.remove(n))}renderPreview(){const{version:{absoluteLink:e,lastEdited:t,version:n},PreviewComponent:o,previewState:s}=this.props;if(!this.isPreviewable()||"edit"===s)return null;const i=u.default.parse(e),a=c.default.parse(i.query);a.archiveDate=t;const l=u.default.format({...i,search:c.default.stringify(a)});return r.default.createElement(o,{className:"history-viewer__preview flexbox-area-grow",itemLinks:{preview:{Stage:{href:l,type:"text/html"}}},itemId:n})}renderToolbar(){const{ToolbarComponent:e,isLatestVersion:t,isRevertable:n,recordId:o,version:s}=this.props;return this.isCompareMode()?null:r.default.createElement(e,{identifier:"HistoryViewer.VersionDetail.Toolbar",isLatestVersion:t,recordId:o,versionId:s.version,isPreviewable:this.isPreviewable(),isRevertable:n})}renderDetails(){const{compareModeAvailable:e,ListComponent:t,schemaUrl:n,CompareWarningComponent:i,previewState:a}=this.props;if(this.isPreviewable()&&"preview"===a)return null;const l={"history-viewer__table":!0,"history-viewer__table--current":!0,"history-viewer__table--compare":this.isCompareMode()},u={"history-viewer__version-detail":!0,"history-viewer__version-detail--compare":this.isCompareMode()};return r.default.createElement("div",{className:"flexbox-area-grow fill-height"},r.default.createElement(i,{fixed:!0}),r.default.createElement("div",{className:(0,o.default)(["flexbox-area-grow","panel","panel--scrollable","panel--padded","panel--padded-side"])},r.default.createElement(t,{extraClass:(0,o.default)(l),versions:this.getListVersions(),compareModeAvailable:e}),r.default.createElement("div",{className:(0,o.default)(u)},r.default.createElement(s.default,{identifier:"HistoryViewer.VersionDetail",schemaUrl:n}))),this.renderToolbar())}render(){return r.default.createElement("div",{className:"flexbox-area-grow fill-width"},this.renderDetails(),this.renderPreview())}}t.Component=f,f.propTypes={isLatestVersion:l.default.bool,isPreviewable:l.default.bool,isRevertable:l.default.bool,ListComponent:l.default.elementType.isRequired,PreviewComponent:l.default.elementType,recordId:l.default.number.isRequired,schemaUrl:l.default.string.isRequired,ToolbarComponent:l.default.elementType.isRequired,version:a.versionType,compare:l.default.oneOfType([l.default.shape({versionFrom:a.versionType,versionTo:a.versionType}),l.default.bool]),previewState:l.default.oneOf(["edit","preview","split"])},f.defaultProps={isLatestVersion:!1,isPreviewable:!1,isRevertable:!1,compare:!1};t.default=(0,i.inject)(["HistoryViewerVersionList","HistoryViewerToolbar","Preview","HistoryViewerCompareWarning"],((e,t,n,r)=>({ListComponent:e,ToolbarComponent:t,PreviewComponent:n,CompareWarningComponent:r})),((e,t)=>{let{version:n}=e;return`${t}.HistoryViewerVersionDetail.${n.Version}`}))(f)},6937:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.Component=void 0;var r=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=h(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&{}.hasOwnProperty.call(e,s)){var i=o?Object.getOwnPropertyDescriptor(e,s):null;i&&(i.get||i.set)?Object.defineProperty(r,s,i):r[s]=e[s]}return r.default=e,n&&n.set(e,r),r}(n(1594)),o=f(n(6935)),s=f(n(6923)),i=f(n(5815)),a=n(9040),l=n(9367),u=n(5207),c=n(6076),p=n(1339),d=n(2348);function f(e){return e&&e.__esModule?e:{default:e}}function h(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(h=function(e){return e?n:t})(e)}class m extends r.PureComponent{getClassNames(){const{extraClass:e,showHeader:t}=this.props;return(0,s.default)(e,{table:!0,"history-viewer__table--headerless":!t})}isVersionActive(e){const{currentVersion:t,compare:n,compare:{versionFrom:r,versionTo:o}}=this.props,s=t&&t.version===e.version,i=r&&r.version===e.version,a=o&&o.version===e.version;return!n&&s||i||a}renderMessages(){const{FormAlertComponent:e,messages:t}=this.props;return t.length?r.default.createElement("div",{className:"history-viewer__messages"},t.map((t=>r.default.createElement(e,{key:t.id,type:t.type,value:t.message,closeLabel:i.default._t("HistoryViewerVersionList.CLOSE","Close")})))):null}renderHeader(){const{showHeader:e,HeadingComponent:t,compareModeAvailable:n}=this.props;if(!e)return null;const o={compareModeAvailable:n};return r.default.createElement(t,o)}render(){const{VersionComponent:e,versions:t,compareModeAvailable:n,compare:o}=this.props;return r.default.createElement("div",{className:"history-viewer__list"},this.renderMessages(),r.default.createElement("ul",{className:this.getClassNames(),role:"table"},this.renderHeader(),t.map((t=>r.default.createElement(e,{key:t.version,isActive:this.isVersionActive(t),version:t,compare:o,compareModeAvailable:n})))))}}t.Component=m,m.propTypes={extraClass:o.default.oneOfType([o.default.string,o.default.array,o.default.object]),showHeader:o.default.bool,FormAlertComponent:o.default.elementType.isRequired,HeadingComponent:o.default.elementType.isRequired,messages:o.default.arrayOf(c.messageType),VersionComponent:o.default.elementType.isRequired,versions:o.default.arrayOf(p.versionType),compare:d.compareType,compareModeAvailable:o.default.bool},m.defaultProps={compareModeAvailable:!0,extraClass:"history-viewer__table",messages:[],showHeader:!0,versions:[]};t.default=(0,l.compose)((0,a.connect)((function(e){const{messages:t,compare:n,currentVersion:r}=e.versionedAdmin.historyViewer;return{messages:t,compare:n,currentVersion:r}})),(0,u.inject)(["FormAlert","HistoryViewerHeading","HistoryViewerVersion"],((e,t,n)=>({FormAlertComponent:e,HeadingComponent:t,VersionComponent:n})),(()=>"VersionedAdmin.HistoryViewer.HistoryViewerVersionList")))(m)},8375:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.Component=void 0;var r=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=p(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&{}.hasOwnProperty.call(e,s)){var i=o?Object.getOwnPropertyDescriptor(e,s):null;i&&(i.get||i.set)?Object.defineProperty(r,s,i):r[s]=e[s]}return r.default=e,n&&n.set(e,r),r}(n(1594)),o=c(n(6923)),s=c(n(5815)),i=c(n(8123)),a=n(1339),l=n(5207),u=c(n(6935));function c(e){return e&&e.__esModule?e:{default:e}}function p(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(p=function(e){return e?n:t})(e)}class d extends r.Component{getClassNames(){const{extraClass:e}=this.props;return(0,o.default)("history-viewer__version-state",e)}getPublishedState(){const{version:e}=this.props;return 1===e.version?s.default._t("HistoryViewer.Created","Created"):e.published?e.deleted?e.draft?s.default._t("HistoryViewer.Archived","Archived"):s.default._t("HistoryViewer.Unpublished","Unpublished"):s.default._t("HistoryViewer.Published","Published"):s.default._t("HistoryViewer.Saved","Saved")}getDate(){return i.default.locale(s.default.detectLocale()),(0,i.default)(this.props.version.lastEdited).format("L LT")}getBadges(){const{version:e,isActive:t,BadgeComponent:n}=this.props;return e.liveVersion?r.default.createElement(n,{status:"success",message:s.default._t("HistoryViewer.BadgeLive","Live"),className:"",inverted:t}):""}render(){return r.default.createElement("span",{className:this.getClassNames(),role:"cell"},this.getPublishedState()," ",r.default.createElement("small",{className:"text-muted"},this.getDate()),this.getBadges())}}t.Component=d,d.propTypes={version:a.versionType,extraClass:u.default.string,isActive:u.default.bool,BadgeComponent:u.default.oneOfType([u.default.node,u.default.func]).isRequired},d.defaultProps={version:a.defaultVersion,extraClass:"",isActive:!1};t.default=(0,l.inject)(["Badge"],(e=>({BadgeComponent:e})),(e=>{let{version:t}=e;return`HistoryViewer.HistoryViewerVersionState.${t.Version}`}))(d)},1887:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(1594)),o=i(n(6177)),s=n(5207);function i(e){return e&&e.__esModule?e:{default:e}}t.default=e=>{class t extends r.default.Component{getConfig(){return o.default.getSection("SilverStripe\\VersionedAdmin\\Controllers\\HistoryViewerController")}getSchemaUrlDetails(){const{compare:e}=this.props;return e?{formName:"compareForm",queryParts:["RecordVersionFrom=:from","RecordVersionTo=:to"]}:{formName:"versionForm",queryParts:["RecordVersion=:version"]}}getSchemaUrl(){const e=this.getConfig(),{formName:t,queryParts:n}=this.getSchemaUrlDetails();return`${`${e.form[t].schemaUrl}/:id`}?${n.concat("RecordClass=:class&RecordID=:id").join("&")}`}render(){const t={...this.props,config:this.getConfig(),HistoryViewer:e,schemaUrl:this.getSchemaUrl()};return r.default.createElement(e,t)}}return(0,s.inject)(["HistoryViewer"])(t)}},9786:function(e,t,n){"use strict";var r,o=(r=n(1669))&&r.__esModule?r:{default:r},s=n(5125);o.default.entwine("ss",(e=>{e(".ArchiveAdmin__action--restore").entwine({onmatch(){e(this).attr("readonly",!1),e(this).attr("disabled",!1)}}),e(".ArchiveAdmin .other-model-selector select").entwine({onchange(t){t.preventDefault();let n=e(this).val();const r=e(this).data("others-archive-url");if(n){n=n.replace(/\\/g,"-");const t=(0,s.joinUrlPaths)(r,n);e(".cms-container").loadPanel(t,"",{pjax:"CurrentForm"})}}})}))},5140:function(e,t,n){"use strict";var r=a(n(1669)),o=a(n(1594)),s=n(5145),i=n(5207);function a(e){return e&&e.__esModule?e:{default:e}}r.default.entwine("ss",(e=>{e(".js-injector-boot .history-viewer__container").entwine({ReactRoot:null,onmatch(){const e=this.closest(".cms-content").attr("id"),t=e?{context:e}:{},n=(0,i.loadComponent)("HistoryViewer",t),r=this.data("schema"),a={...r.data,isInGridField:r.data.isInGridField||!this.hasClass("history-viewer--standalone")},l=(0,s.createRoot)(this[0]);l.render(o.default.createElement(n,a)),this.setReactRoot(l)},onunmatch(){const e=this.getReactRoot();e&&(e.unmount(),this.setReactRoot(null))}}),e(".history-viewer__version-detail .nav-link").entwine({onclick(e){e.preventDefault(),this._super(e)}}),e(".tab.tab--history-viewer[aria-hidden=false]").entwine({onmatch(){e(".toolbar--south.cms-content-actions").hide()},onunmatch(){e(".toolbar--south.cms-content-actions").show()}}),e(".tab.tab--history-viewer .history-viewer__version-detail").entwine({onmatch(){this.parent().css("padding-bottom","3rem").next(".toolbar--south").css({position:"absolute",bottom:0,left:0,right:0})}})}))},5086:function(e,t,n){"use strict";var r=o(n(5815));function o(e){return e&&e.__esModule?e:{default:e}}o(n(1669)).default.entwine("ss",(e=>{e(".cms-edit-form .btn-toolbar #Form_ItemEditForm_action_doUnpublish").entwine({onclick(e){const t=r.default._t("VersionedEditForm.PUBLISH_CONFIRM_MESSAGE","Are you sure you want to remove your record from the published site?\n\nThis record will still be available in the CMS as draft.");return!!confirm(t)&&(this.parents("form:first").addClass("loading"),this._super(e))}}),e(".cms-edit-form .btn-toolbar #Form_ItemEditForm_action_doArchive").entwine({onclick(e){const t=r.default._t("VersionedEditForm.ARCHIVE_CONFIRM_MESSAGE","Warning: This record will be unpublished before being sent to the archive.\n\nAre you sure you want to proceed?");return!!confirm(t)&&(this.parents("form:first").addClass("loading"),this._super(e))}})}))},2413:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=["SHOW_VERSION","SHOW_LIST","SET_CURRENT_PAGE","ADD_MESSAGE","CLEAR_MESSAGES","SET_COMPARE_MODE","SET_COMPARE_FROM","SET_COMPARE_TO"].reduce(((e,t)=>Object.assign(e,{[t]:`HISTORY_VIEWER.${t}`})),{})},5525:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addMessage=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success";return{type:s.default.ADD_MESSAGE,payload:{id:(0,o.v1)(),message:e,type:t}}},t.clearMessages=function(){return{type:s.default.CLEAR_MESSAGES}},t.setCompareFrom=function(e){return{type:s.default.SET_COMPARE_FROM,payload:{version:e}}},t.setCompareMode=function(e){return{type:s.default.SET_COMPARE_MODE,payload:{enabled:e}}},t.setCompareTo=function(e){return{type:s.default.SET_COMPARE_TO,payload:{version:e}}},t.setCurrentPage=function(e){return{type:s.default.SET_CURRENT_PAGE,payload:{page:e}}},t.showList=function(){return{type:s.default.SHOW_LIST}},t.showVersion=function(e){return{type:s.default.SHOW_VERSION,payload:{version:e}}};var r,o=n(2831),s=(r=n(2413))&&r.__esModule?r:{default:r}},8330:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i,{type:t,payload:n}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};switch(t){case s.default.SET_CURRENT_PAGE:return{...e,currentPage:n.page};case s.default.SHOW_VERSION:return{...e,currentVersion:n.version};case s.default.SHOW_LIST:return{...e,currentVersion:0,currentPage:0};case s.default.ADD_MESSAGE:return{...e,messages:[n,...e.messages]};case s.default.CLEAR_MESSAGES:return{...e,messages:[]};case s.default.SET_COMPARE_MODE:{const t={versionFrom:!1,versionTo:!1,...e.compare};return{...e,compare:!!n.enabled&&t}}case s.default.SET_COMPARE_FROM:{let{compare:{versionFrom:t,versionTo:r}}=e;return t=n.version||!1,t||(t=r,r=!1),{...e,currentVersion:t,compare:{versionFrom:t,versionTo:r}}}case s.default.SET_COMPARE_TO:{let{compare:{versionFrom:t,versionTo:r}}=e;return r=n.version||!1,r&&t&&r.version0}},{key:"getMetadataColumnProperty",value:function(e,t,n){var r=this.getColumnMetadataByName(e);return null==r?n:r.hasOwnProperty(t)?r[t]:n}},{key:"orderColumns",value:function(e){var t=this;return a(e,(function(e){var n=i(t.columnMetadata,{columnName:e});return null==n||isNaN(n.order)?100:n.order}))}},{key:"getColumns",value:function(){var e=0===this.filteredColumns.length?this.allColumns:this.filteredColumns;return e=l(e,this.metadataColumns),e=this.orderColumns(e)}}]),e}();e.exports=u},3715:function(e,t,n){"use strict";var r=n(1594),o=n(2306)({getDefaultProps:function(){return{placeholderText:""}},render:function(){return"function"!=typeof this.props.customFilterComponent?(console.log("Couldn't find valid template."),r.createElement("div",null)):r.createElement(this.props.customFilterComponent,{changeFilter:this.props.changeFilter,results:this.props.results,currentResults:this.props.currentResults,placeholderText:this.props.placeholderText})}});e.exports=o},8465:function(e,t,n){"use strict";var r=Object.assign||function(e){for(var t=1;t0&&(e=r.createElement("button",{type:"button",onClick:this.props.previous,style:this.props.useGriddleStyles?{color:"#222",border:"none",background:"none",margin:"0 0 0 10px"}:null},this.props.previousIconComponent,this.props.previousText)),this.props.currentPage!==this.props.maxPage-1&&(t=r.createElement("button",{type:"button",onClick:this.props.next,style:this.props.useGriddleStyles?{color:"#222",border:"none",background:"none",margin:"0 10px 0 0"}:null},this.props.nextText,this.props.nextIconComponent));var n=null,o=null,i=null;if(!0===this.props.useGriddleStyles){var a={float:"left",minHeight:"1px",marginTop:"5px"};i=s({textAlign:"right",width:"34%"},a),o=s({textAlign:"center",width:"33%"},a),n=s({width:"33%"},a)}for(var l=[],u=1;u<=this.props.maxPage;u++)l.push(r.createElement("option",{value:u,key:u},u));return r.createElement("div",{style:this.props.useGriddleStyles?{minHeight:"35px"}:null},r.createElement("div",{className:this.props.previousClassName,style:n},e),r.createElement("div",{className:"griddle-page",style:o},r.createElement("select",{value:this.props.currentPage+1,onChange:this.pageChange},l)," / ",this.props.maxPage),r.createElement("div",{className:this.props.nextClassName,style:i},t))}});e.exports=i},1507:function(e,t,n){"use strict";var r=n(1594),o=n(2306),s=(n(493),n(9280)),i=n(1882),a=n(7248),l=n(6139),u=n(4684),c=n(8938),p=n(1648),d=o({getDefaultProps:function(){return{isChildRow:!1,showChildren:!1,data:{},columnSettings:null,rowSettings:null,hasChildren:!1,useGriddleStyles:!0,useGriddleIcons:!0,isSubGriddle:!1,paddingHeight:null,rowHeight:null,parentRowCollapsedClassName:"parent-row",parentRowExpandedClassName:"parent-row expanded",parentRowCollapsedComponent:"▶",parentRowExpandedComponent:"▼",onRowClick:null,multipleSelectionSettings:null,onRowMouseEnter:null,onRowMouseLeave:null,onRowWillMount:null,onRowWillUnmount:null}},componentWillMount:function(){null!==this.props.onRowWillMount&&i(this.props.onRowWillMount)&&this.props.onRowWillMount(this)},componentWillUnmount:function(){null!==this.props.onRowWillUnmount&&i(this.props.onRowWillUnmount)&&this.props.onRowWillUnmount(this)},handleClick:function(e){null!==this.props.onRowClick&&i(this.props.onRowClick)?this.props.onRowClick(this,e):this.props.hasChildren&&this.props.toggleChildren()},handleMouseEnter:function(e){null!==this.props.onRowMouseEnter&&i(this.props.onRowMouseEnter)&&this.props.onRowMouseEnter(this,e)},handleMouseLeave:function(e){null!==this.props.onRowMouseLeave&&i(this.props.onRowMouseLeave)&&this.props.onRowMouseLeave(this,e)},handleSelectionChange:function(e){},handleSelectClick:function(e){this.props.multipleSelectionSettings.isMultipleSelection&&("checkbox"===e.target.type?this.props.multipleSelectionSettings.toggleSelectRow(this.props.data,this.refs.selected.checked):this.props.multipleSelectionSettings.toggleSelectRow(this.props.data,!this.refs.selected.checked))},verifyProps:function(){null===this.props.columnSettings&&console.error("gridRow: The columnSettings prop is null and it shouldn't be")},formatData:function(e){return"boolean"==typeof e?String(e):e},render:function(){var e=this;this.verifyProps();var t=this,n=null;this.props.useGriddleStyles&&(n={margin:"0px",padding:t.props.paddingHeight+"px 5px "+t.props.paddingHeight+"px 5px",height:t.props.rowHeight?this.props.rowHeight-2*t.props.paddingHeight+"px":null,backgroundColor:"#FFF",borderTopColor:"#DDD",color:"#222"});var o=this.props.columnSettings.getColumns(),d=a(o,[]),f=l({},this.props.data);u(f,d);var h,m,g=c(s.pick(f,p(o,"children"))).map((function(t,o){var s=null,i=e.props.columnSettings.getColumnMetadataByName(t[0]),a=0===o&&e.props.hasChildren&&!1===e.props.showChildren&&e.props.useGriddleIcons?r.createElement("span",{style:e.props.useGriddleStyles?{fontSize:"10px",marginRight:"5px"}:null},e.props.parentRowCollapsedComponent):0===o&&e.props.hasChildren&&e.props.showChildren&&e.props.useGriddleIcons?r.createElement("span",{style:e.props.useGriddleStyles?{fontSize:"10px"}:null},e.props.parentRowExpandedComponent):"";if(0===o&&e.props.isChildRow&&e.props.useGriddleStyles&&(n=l(n,{paddingLeft:10})),e.props.columnSettings.hasColumnMetadata()&&null!=i)if(void 0!==i.customComponent&&null!==i.customComponent){var u=r.createElement(i.customComponent,{data:t[1],rowData:f,metadata:i});s=r.createElement("td",{onClick:e.handleClick,onMouseEnter:e.handleMouseEnter,onMouseLeave:e.handleMouseLeave,className:i.cssClassName,key:o,style:n},u)}else s=r.createElement("td",{onClick:e.handleClick,onMouseEnter:e.handleMouseEnter,onMouseLeave:e.handleMouseLeave,className:i.cssClassName,key:o,style:n},a,e.formatData(t[1]));return s||r.createElement("td",{onClick:e.handleClick,onMouseEnter:e.handleMouseEnter,onMouseLeave:e.handleMouseLeave,key:o,style:n},a,t[1])}));if(null!==this.props.onRowClick&&i(this.props.onRowClick)?(h=null,m=this.handleSelectClick):this.props.multipleSelectionSettings&&this.props.multipleSelectionSettings.isMultipleSelection?(h=this.handleSelectClick,m=null):(h=null,m=null),g&&this.props.multipleSelectionSettings&&this.props.multipleSelectionSettings.isMultipleSelection){this.props.multipleSelectionSettings.getSelectedRowIds();g.unshift(r.createElement("td",{key:"selection",style:n,className:"griddle-select griddle-select-cell",onClick:m},r.createElement("input",{type:"checkbox",checked:this.props.multipleSelectionSettings.getIsRowChecked(f),onChange:this.handleSelectionChange,ref:"selected"})))}var v=t.props.rowSettings&&t.props.rowSettings.getBodyRowMetadataClass(t.props.data)||"standard-row";return t.props.isChildRow?v="child-row":t.props.hasChildren&&(v=t.props.showChildren?this.props.parentRowExpandedClassName:this.props.parentRowCollapsedClassName),r.createElement("tr",{onClick:h,className:v},g)}});e.exports=d},4734:function(e,t,n){"use strict";var r=n(1594),o=n(2306),s=(n(493),n(4383)),i=o({getDefaultProps:function(){return{useGriddleStyles:!0,useGriddleIcons:!0,isSubGriddle:!1,columnSettings:null,rowSettings:null,paddingHeight:null,rowHeight:null,parentRowCollapsedClassName:"parent-row",parentRowExpandedClassName:"parent-row expanded",parentRowCollapsedComponent:"▶",parentRowExpandedComponent:"▼",onRowClick:null,onRowMouseEnter:null,onRowMouseLeave:null,onRowWillMount:null,onRowWillUnmount:null,multipleSelectionSettings:null}},getInitialState:function(){return{data:{},showChildren:!1}},componentWillReceiveProps:function(){this.setShowChildren(!1)},toggleChildren:function(){this.setShowChildren(!1===this.state.showChildren)},setShowChildren:function(e){this.setState({showChildren:e})},verifyProps:function(){null===this.props.columnSettings&&console.error("gridRowContainer: The columnSettings prop is null and it shouldn't be")},render:function(){this.verifyProps();var e=this;if(void 0===this.props.data)return r.createElement("tbody",null);var t=[],n=this.props.columnSettings.getColumns();t.push(r.createElement(this.props.rowSettings.rowComponent,{useGriddleStyles:this.props.useGriddleStyles,isSubGriddle:this.props.isSubGriddle,data:this.props.rowSettings.isCustom?s(this.props.data,n):this.props.data,rowData:this.props.rowSettings.isCustom?this.props.data:null,columnSettings:this.props.columnSettings,rowSettings:this.props.rowSettings,hasChildren:e.props.hasChildren,toggleChildren:e.toggleChildren,showChildren:e.state.showChildren,key:e.props.uniqueId+"_base_row",useGriddleIcons:e.props.useGriddleIcons,parentRowExpandedClassName:this.props.parentRowExpandedClassName,parentRowCollapsedClassName:this.props.parentRowCollapsedClassName,parentRowExpandedComponent:this.props.parentRowExpandedComponent,parentRowCollapsedComponent:this.props.parentRowCollapsedComponent,paddingHeight:e.props.paddingHeight,rowHeight:e.props.rowHeight,onRowClick:e.props.onRowClick,onRowMouseEnter:e.props.onRowMouseEnter,onRowMouseLeave:e.props.onRowMouseLeave,multipleSelectionSettings:this.props.multipleSelectionSettings,onRowWillMount:e.props.onRowWillMount,onRowWillUnmount:e.props.onRowWillUnmount}));var o=null;return e.state.showChildren&&(o=e.props.hasChildren&&this.props.data.children.map((function(t,n){var o=e.props.rowSettings.getRowKey(t,n);if(void 0!==t.children){var s=e.constructor.Griddle;return r.createElement("tr",{key:o,style:{paddingLeft:5}},r.createElement("td",{colSpan:e.props.columnSettings.getVisibleColumnCount(),className:"griddle-parent",style:e.props.useGriddleStyles?{border:"none",padding:"0 0 0 5px"}:null},r.createElement(s,{rowMetadata:{key:"id"},isSubGriddle:!0,results:[t],columns:e.props.columnSettings.getColumns(),tableClassName:e.props.tableClassName,parentRowExpandedClassName:e.props.parentRowExpandedClassName,parentRowCollapsedClassName:e.props.parentRowCollapsedClassName,showTableHeading:!1,showPager:!1,columnMetadata:e.props.columnSettings.columnMetadata,parentRowExpandedComponent:e.props.parentRowExpandedComponent,parentRowCollapsedComponent:e.props.parentRowCollapsedComponent,paddingHeight:e.props.paddingHeight,rowHeight:e.props.rowHeight})))}return r.createElement(e.props.rowSettings.rowComponent,{useGriddleStyles:e.props.useGriddleStyles,isSubGriddle:e.props.isSubGriddle,data:t,columnSettings:e.props.columnSettings,isChildRow:!0,columnMetadata:e.props.columnSettings.columnMetadata,key:o})}))),!1===e.props.hasChildren?t[0]:r.createElement("tbody",null,e.state.showChildren?t.concat(o):t)}});e.exports=i},4376:function(e,t,n){"use strict";var r=n(1594),o=n(2306),s=n(9859),i=n(1648),a=n(7309),l=o({getDefaultProps:function(){return{columns:[],columnMetadata:[],selectedColumns:[],settingsText:"",maxRowsText:"",resultsPerPage:0,enableToggleCustom:!1,useCustomComponent:!1,useGriddleStyles:!0,toggleCustomComponent:function(){}}},setPageSize:function(e){var t=parseInt(e.target.value,10);this.props.setPageSize(t)},handleChange:function(e){var t=e.target.dataset?e.target.dataset.name:e.target.getAttribute("data-name");!0===e.target.checked&&!1===s(this.props.selectedColumns,t)?(this.props.selectedColumns.push(t),this.props.setColumns(this.props.selectedColumns)):this.props.setColumns(i(this.props.selectedColumns,t))},render:function(){var e=this,t=[];!1===e.props.useCustomComponent&&(t=this.props.columns.map((function(t,n){var o=s(e.props.selectedColumns,t),i=a(e.props.columnMetadata,{columnName:t}),l=t;return void 0!==i&&void 0!==i.displayName&&null!=i.displayName&&(l=i.displayName),void 0!==i&&null!=i&&i.locked?r.createElement("div",{className:"column checkbox"},r.createElement("label",null,r.createElement("input",{type:"checkbox",disabled:!0,name:"check",checked:o,"data-name":t}),l)):void 0!==i&&null!=i&&void 0!==i.visible&&!1===i.visible?null:r.createElement("div",{className:"griddle-column-selection checkbox",key:t,style:e.props.useGriddleStyles?{float:"left",width:"20%"}:null},r.createElement("label",null,r.createElement("input",{type:"checkbox",name:"check",onChange:e.handleChange,checked:o,"data-name":t}),l))})));var n=e.props.enableToggleCustom?r.createElement("div",{className:"form-group"},r.createElement("label",{htmlFor:"maxRows"},r.createElement("input",{type:"checkbox",checked:this.props.useCustomComponent,onChange:this.props.toggleCustomComponent})," ",this.props.enableCustomFormatText)):"",o=this.props.showSetPageSize?r.createElement("div",null,r.createElement("label",{htmlFor:"maxRows"},this.props.maxRowsText,":",r.createElement("select",{onChange:this.setPageSize,value:this.props.resultsPerPage},r.createElement("option",{value:"5"},"5"),r.createElement("option",{value:"10"},"10"),r.createElement("option",{value:"25"},"25"),r.createElement("option",{value:"50"},"50"),r.createElement("option",{value:"100"},"100")))):"";return r.createElement("div",{className:"griddle-settings",style:this.props.useGriddleStyles?{backgroundColor:"#FFF",border:"1px solid #DDD",color:"#222",padding:"10px",marginBottom:"10px"}:null},r.createElement("h6",null,this.props.settingsText),r.createElement("div",{className:"griddle-columns",style:this.props.useGriddleStyles?{clear:"both",display:"table",width:"100%",borderBottom:"1px solid #EDEDED",marginBottom:"10px"}:null},t),o,n)}});e.exports=l},2991:function(e,t,n){"use strict";var r=n(1594),o=n(2306),s=n(9593),i=n(4734),a=(n(493),n(1545),o({getDefaultProps:function(){return{data:[],columnSettings:null,rowSettings:null,sortSettings:null,multipleSelectionSettings:null,className:"",enableInfiniteScroll:!1,nextPage:null,hasMorePages:!1,useFixedHeader:!1,useFixedLayout:!0,paddingHeight:null,rowHeight:null,filterByColumn:null,infiniteScrollLoadTreshold:null,bodyHeight:null,useGriddleStyles:!0,useGriddleIcons:!0,isSubGriddle:!1,parentRowCollapsedClassName:"parent-row",parentRowExpandedClassName:"parent-row expanded",parentRowCollapsedComponent:"▶",parentRowExpandedComponent:"▼",externalLoadingComponent:null,externalIsLoading:!1,onRowClick:null,onRowMouseEnter:null,onRowMouseLeave:null,onRowWillMount:null,onRowWillUnmount:null}},getInitialState:function(){return{scrollTop:0,scrollHeight:this.props.bodyHeight,clientHeight:this.props.bodyHeight}},componentDidMount:function(){this.gridScroll()},componentDidUpdate:function(e,t){this.gridScroll()},gridScroll:function(){if(this.props.enableInfiniteScroll&&!this.props.externalIsLoading){var e=this.refs.scrollable,t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;if(null!==this.props.rowHeight&&this.state.scrollTop!==t&&Math.abs(this.state.scrollTop-t)>=this.getAdjustedRowHeight()){var o={scrollTop:t,scrollHeight:n,clientHeight:r};this.setState(o)}.6*(n-(t+r)-this.props.infiniteScrollLoadTreshold)<=this.props.infiniteScrollLoadTreshold&&this.props.nextPage()}},verifyProps:function(){null===this.props.columnSettings&&console.error("gridTable: The columnSettings prop is null and it shouldn't be"),null===this.props.rowSettings&&console.error("gridTable: The rowSettings prop is null and it shouldn't be")},getAdjustedRowHeight:function(){return this.props.rowHeight+2*this.props.paddingHeight},getNodeContent:function(){this.verifyProps();var e=this,t=!1;if(!this.props.externalIsLoading||this.props.enableInfiniteScroll){var n=e.props.data,o=null,s=null;if(this.props.enableInfiniteScroll&&null!==this.props.rowHeight&&void 0!==this.refs.scrollable){var a=e.getAdjustedRowHeight(),l=Math.ceil(e.state.clientHeight/a),u=Math.max(0,Math.floor(e.state.scrollTop/a)-.25*l),c=Math.min(u+1.25*l,this.props.data.length-1);n=n.slice(u,c+1);var p={height:u*a+"px"};o=r.createElement("tr",{key:"above-"+p.height,style:p});var d={height:(this.props.data.length-c)*a+"px"};s=r.createElement("tr",{key:"below-"+d.height,style:d})}var f=n.map((function(n,o){var s=void 0!==n.children&&n.children.length>0,a=e.props.rowSettings.getRowKey(n,o);return s&&(t=s),r.createElement(i,{useGriddleStyles:e.props.useGriddleStyles,isSubGriddle:e.props.isSubGriddle,parentRowExpandedClassName:e.props.parentRowExpandedClassName,parentRowCollapsedClassName:e.props.parentRowCollapsedClassName,parentRowExpandedComponent:e.props.parentRowExpandedComponent,parentRowCollapsedComponent:e.props.parentRowCollapsedComponent,data:n,key:a+"-container",uniqueId:a,columnSettings:e.props.columnSettings,rowSettings:e.props.rowSettings,paddingHeight:e.props.paddingHeight,multipleSelectionSettings:e.props.multipleSelectionSettings,rowHeight:e.props.rowHeight,hasChildren:s,tableClassName:e.props.className,onRowClick:e.props.onRowClick,onRowMouseEnter:e.props.onRowMouseEnter,onRowMouseLeave:e.props.onRowMouseLeave,onRowWillMount:e.props.onRowWillMount,onRowWillUnmount:e.props.onRowWillUnmount})}));if(this.props.showNoData){var h=this.props.columnSettings.getVisibleColumnCount();f.push(r.createElement("tr",{key:"no-data-section"},r.createElement("td",{colSpan:h},this.props.noDataSection)))}return o&&f.unshift(o),s&&f.push(s),{nodes:f,anyHasChildren:t}}return null},render:function(){var e=[],t=!1,n=this.getNodeContent();n&&(e=n.nodes,t=n.anyHasChildren);var o=null,i=null,a={width:"100%"};if(this.props.useFixedLayout&&(a.tableLayout="fixed"),this.props.enableInfiniteScroll&&(o={position:"relative",overflowY:"scroll",height:this.props.bodyHeight+"px",width:"100%"}),this.props.externalIsLoading){var l,u=null;this.props.useGriddleStyles&&(u={textAlign:"center",paddingBottom:"40px"}),l=this.props.columnSettings.getVisibleColumnCount();var c=this.props.externalLoadingComponent?r.createElement(this.props.externalLoadingComponent,null):r.createElement("div",null,"Loading...");i=r.createElement("tbody",null,r.createElement("tr",null,r.createElement("td",{style:u,colSpan:l},c)))}var p=this.props.showTableHeading?r.createElement(s,{useGriddleStyles:this.props.useGriddleStyles,useGriddleIcons:this.props.useGriddleIcons,sortSettings:this.props.sortSettings,multipleSelectionSettings:this.props.multipleSelectionSettings,columnSettings:this.props.columnSettings,filterByColumn:this.props.filterByColumn,rowSettings:this.props.rowSettings}):void 0;t||(e=r.createElement("tbody",null,e));var d=r.createElement("tbody",null);if(this.props.showPager){var f=this.props.useGriddleStyles?{padding:"0px",backgroundColor:"#EDEDED",border:"0px",color:"#222",height:this.props.showNoData?"20px":null}:null;d=r.createElement("tbody",null,r.createElement("tr",null,r.createElement("td",{colSpan:this.props.multipleSelectionSettings.isMultipleSelection?this.props.columnSettings.getVisibleColumnCount()+1:this.props.columnSettings.getVisibleColumnCount(),style:f,className:"footer-container"},this.props.showNoData?null:this.props.pagingContent)))}return this.props.useFixedHeader?(this.props.useGriddleStyles&&(a.tableLayout="fixed"),r.createElement("div",null,r.createElement("table",{className:this.props.className,style:this.props.useGriddleStyles&&a||null},p),r.createElement("div",{ref:"scrollable",onScroll:this.gridScroll,style:o},r.createElement("table",{className:this.props.className,style:this.props.useGriddleStyles&&a||null},e,i,d)))):r.createElement("div",{ref:"scrollable",onScroll:this.gridScroll,style:o},r.createElement("table",{className:this.props.className,style:this.props.useGriddleStyles&&a||null},p,e,i,d))}}));e.exports=a},9593:function(e,t,n){"use strict";var r=Object.assign||function(e){for(var t=1;t=0)return!0}return!1}))},defaultColumnFilter:function(e,t,n){var r=A(M(n)?n:[n],(function(e){return(e||"").toLowerCase()}));return V(C.getObjectValues(t),(function(e){return e=e.toString().toLowerCase(),V(r,(function(t){return e.indexOf(t)>=0}))}))},filterByColumnFilters:function(e){var t=this.props.columnFilterFunc||this.defaultColumnFilter,n=Object.keys(e).reduce((function(n,r){return D(n,(function(n){var o=C.getAt(n,r||""),s=e[r];return t(r||"",o,s)}))}),this.props.results),r={columnFilters:e};e?(r.filteredResults=n,r.maxPage=this.getMaxPage(r.filteredResults)):this.state.filter?r.filteredResults=this.props.useCustomFilterer?this.props.customFilterer(this.props.results,filter):this.defaultFilter(this.props.results,filter):r.filteredResults=null,this.setState(r)},filterByColumn:function(e,t){var n=this.state.columnFilters;if(n.hasOwnProperty(t)&&!e)n=N(n,t);else{var r={};r[t]=e,n=T({},n,r)}this.filterByColumnFilters(n)},setFilter:function(e){var t=arguments.length<=1||void 0===arguments[1]?null:arguments[1];if(this.props.useExternal)this.props.externalSetFilter(e);else{var n={page:0,filter:e};n.filteredResults=this.props.useCustomFilterer?this.props.customFilterer(t||this.props.results,e):this.defaultFilter(t||this.props.results,e),n.maxPage=this.getMaxPage(n.filteredResults),(j(e)||O(e)||R(e))&&(n.filter=e,n.filteredResults=null),this.setState(n),this._resetSelectedRows()}},setPageSize:function(e){if(this.props.useExternal)return this.setState({resultsPerPage:e}),void this.props.externalSetPageSize(e);this.state.resultsPerPage=e,this.setMaxPage()},toggleColumnChooser:function(){this.setState({showColumnChooser:!this.state.showColumnChooser})},isNullOrUndefined:function(e){return null==e},shouldUseCustomRowComponent:function(){return this.isNullOrUndefined(this.state.useCustomRowComponent)?this.props.useCustomRowComponent:this.state.useCustomRowComponent},shouldUseCustomGridComponent:function(){return this.isNullOrUndefined(this.state.useCustomGridComponent)?this.props.useCustomGridComponent:this.state.useCustomGridComponent},toggleCustomComponent:function(){"grid"===this.state.customComponentType?this.setState({useCustomGridComponent:!this.shouldUseCustomGridComponent()}):"row"===this.state.customComponentType&&this.setState({useCustomRowComponent:!this.shouldUseCustomRowComponent()})},getMaxPage:function(e,t){return this.props.useExternal?this.props.externalMaxPage:(t||(t=(e||this.getCurrentResults()).length),Math.ceil(t/this.state.resultsPerPage))},setMaxPage:function(e){var t=this.getMaxPage(e);this.state.maxPage!==t&&this.setState({page:0,maxPage:t,filteredColumns:this.columnSettings.filteredColumns})},setPage:function(e){if(this.props.useExternal)this.props.externalSetPage(e);else{if(e*this.state.resultsPerPage<=this.state.resultsPerPage*this.state.maxPage){var t={page:e};this.setState(t)}this.props.enableInfiniteScroll&&this.setState({isSelectAllChecked:!1})}},setColumns:function(e){this.columnSettings.filteredColumns=M(e)?e:[e],this.setState({filteredColumns:this.columnSettings.filteredColumns})},nextPage:function(){var e=this.getCurrentPage();e0&&this.setPage(e-1)},changeSort:function(e){if(!1!==this.props.enableSort){if(this.props.useExternal){var t=this.props.externalSortColumn!==e||!this.props.externalSortAscending;return this.setState({sortColumn:e,sortDirection:t?"asc":"desc"}),void this.props.externalChangeSort(e,t)}var n=x(this.props.columnMetadata,{columnName:e})||{},r=n.sortDirectionCycle?n.sortDirectionCycle:[null,"asc","desc"],o=r.indexOf(this.state.sortDirection&&e===this.state.sortColumn?this.state.sortDirection:null),s={page:0,sortColumn:e,sortDirection:r[o=(o+1)%r.length]?r[o]:null};this.setState(s)}},componentWillReceiveProps:function(e){if(e.results!==this.props.results&&this.setFilter(this.state.filter,e.results),this.setMaxPage(e.results),e.resultsPerPage!==this.props.resultsPerPage&&this.setPageSize(e.resultsPerPage),this.columnSettings.columnMetadata=e.columnMetadata,e.results.length>0){var t=C.keys(e.results[0]);this.columnSettings.allColumns.length==t.length&&this.columnSettings.allColumns.every((function(e,n){return e===t[n]}))||(this.columnSettings.allColumns=t)}else this.columnSettings.allColumns.length>0&&(this.columnSettings.allColumns=[]);if(e.selectedRowIds){var n=this.getDataForRender(this.getCurrentResults(e.results),this.columnSettings.getColumns(),!0);this.setState({isSelectAllChecked:this._getAreAllRowsChecked(e.selectedRowIds,A(n,this.props.uniqueIdentifier)),selectedRowIds:e.selectedRowIds})}},getInitialState:function(){return{maxPage:0,page:0,filteredResults:null,filteredColumns:[],filter:"",columnFilters:{},resultsPerPage:this.props.resultsPerPage||5,showColumnChooser:!1,isSelectAllChecked:!1,selectedRowIds:this.props.selectedRowIds}},componentWillMount:function(){this.verifyExternal(),this.verifyCustom(),this.columnSettings=new v(this.props.results.length>0?C.keys(this.props.results[0]):[],this.props.columns,this.props.childrenColumnName,this.props.columnMetadata,this.props.metadataColumns),this.rowSettings=new y(this.props.rowMetadata,this.props.useCustomTableRowComponent&&this.props.customTableRowComponent?this.props.customTableRowComponent:d,this.props.useCustomTableRowComponent),this.props.initialSort&&(this.props.useExternal?this.setState({sortColumn:this.props.externalSortColumn,sortDirection:this.props.externalSortAscending?"asc":"desc"}):this.changeSort(this.props.initialSort)),this.setMaxPage(),this.shouldUseCustomGridComponent()?this.setState({customComponentType:"grid"}):this.shouldUseCustomRowComponent()?this.setState({customComponentType:"row"}):this.setState({filteredColumns:this.columnSettings.filteredColumns})},componentDidMount:function(){if(this.props.componentDidMount&&"function"==typeof this.props.componentDidMount)return this.props.componentDidMount()},componentDidUpdate:function(){if(this.props.componentDidUpdate&&"function"==typeof this.props.componentDidUpdate)return this.props.componentDidUpdate(this.state)},verifyExternal:function(){!0===this.props.useExternal&&(null===this.props.externalSetPage&&console.error("useExternal is set to true but there is no externalSetPage function specified."),null===this.props.externalChangeSort&&console.error("useExternal is set to true but there is no externalChangeSort function specified."),null===this.props.externalSetFilter&&console.error("useExternal is set to true but there is no externalSetFilter function specified."),null===this.props.externalSetPageSize&&console.error("useExternal is set to true but there is no externalSetPageSize function specified."),null===this.props.externalMaxPage&&console.error("useExternal is set to true but externalMaxPage is not set."),null===this.props.externalCurrentPage&&console.error("useExternal is set to true but externalCurrentPage is not set. Griddle will not page correctly without that property when using external data."))},verifyCustom:function(){!0===this.props.useCustomGridComponent&&null===this.props.customGridComponent&&console.error("useCustomGridComponent is set to true but no custom component was specified."),!0===this.props.useCustomRowComponent&&null===this.props.customRowComponent&&console.error("useCustomRowComponent is set to true but no custom component was specified."),!0===this.props.useCustomGridComponent&&!0===this.props.useCustomRowComponent&&console.error("Cannot currently use both customGridComponent and customRowComponent."),!0===this.props.useCustomFilterer&&null===this.props.customFilterer&&console.error("useCustomFilterer is set to true but no custom filter function was specified."),!0===this.props.useCustomFilterComponent&&null===this.props.customFilterComponent&&console.error("useCustomFilterComponent is set to true but no customFilterComponent was specified.")},getDataForRender:function(e,t,n){var r=this,o=this;if(!this.props.useExternal){if(""!==this.state.sortColumn){var s,i=this.state.sortColumn,a=D(this.props.columnMetadata,{columnName:i}),l={columns:[],orders:[]};if(a.length>0&&(s=a[0].hasOwnProperty("customCompareFn")&&a[0].customCompareFn,a[0].multiSort&&(l=a[0].multiSort)),this.state.sortDirection)if("function"==typeof s)2===s.length?(e=e.sort((function(e,t){return s(F(e,i),F(t,i))})),"desc"===this.state.sortDirection&&e.reverse()):1===s.length&&(e=I(e,(function(e){return s(F(e,i))}),[this.state.sortDirection]));else{var u=[function(e){return(F(e,i)||"").toString().toLowerCase()}],c=[this.state.sortDirection];l.columns.forEach((function(e,t){u.push((function(t){return(F(t,e)||"").toString().toLowerCase()})),"asc"===l.orders[t]||"desc"===l.orders[t]?c.push(l.orders[t]):c.push(r.state.sortDirection)})),e=I(e,u,c)}}var p=this.getCurrentPage();if(!this.props.useExternal&&n&&this.state.resultsPerPage*(p+1)<=this.state.resultsPerPage*this.state.maxPage&&p>=0)if(this.isInfiniteScrollEnabled())e=S(e,(p+1)*this.state.resultsPerPage);else{var d=b(e,p*this.state.resultsPerPage);e=(w||E)(d,d.length-this.state.resultsPerPage)}}for(var f=[],h=0;h0&&(m.children=o.getDataForRender(m[o.props.childrenColumnName],t,!1),"children"!==o.props.childrenColumnName&&delete m[o.props.childrenColumnName]),f.push(m)}return f},getCurrentResults:function(e){return this.state.filteredResults||e||this.props.results},getCurrentPage:function(){return this.props.externalCurrentPage||this.state.page},getCurrentSort:function(){return this.props.useExternal?this.props.externalSortColumn:this.state.sortColumn},getCurrentSortAscending:function(){return this.props.useExternal?this.props.externalSortAscending:"asc"===this.state.sortDirection},getCurrentMaxPage:function(){return this.props.useExternal?this.props.externalMaxPage:this.state.maxPage},getSortObject:function(){return{enableSort:this.props.enableSort,changeSort:this.changeSort,sortColumn:this.getCurrentSort(),sortAscending:this.getCurrentSortAscending(),sortDirection:this.state.sortDirection,sortAscendingClassName:this.props.sortAscendingClassName,sortDescendingClassName:this.props.sortDescendingClassName,sortAscendingComponent:this.props.sortAscendingComponent,sortDescendingComponent:this.props.sortDescendingComponent,sortDefaultComponent:this.props.sortDefaultComponent}},_toggleSelectAll:function(){var e=this.getDataForRender(this.getCurrentResults(),this.columnSettings.getColumns(),!0),t=!this.state.isSelectAllChecked,n=JSON.parse(JSON.stringify(this.state.selectedRowIds)),r=this;_(e,(function(e){r._updateSelectedRowIds(e[r.props.uniqueIdentifier],n,t)}),this),this.setState({isSelectAllChecked:t,selectedRowIds:n}),this.props.onSelectionChange&&this.props.onSelectionChange(n,t)},_toggleSelectRow:function(e,t){var n=this.getDataForRender(this.getCurrentResults(),this.columnSettings.getColumns(),!0),r=JSON.parse(JSON.stringify(this.state.selectedRowIds));this._updateSelectedRowIds(e[this.props.uniqueIdentifier],r,t);var o=this._getAreAllRowsChecked(r,A(n,this.props.uniqueIdentifier));this.setState({isSelectAllChecked:o,selectedRowIds:r}),this.props.onSelectionChange&&this.props.onSelectionChange(r,o)},_updateSelectedRowIds:function(e,t,n){n?void 0===x(t,(function(t){return e===t}))&&t.push(e):t.splice(t.indexOf(e),1)},_getIsSelectAllChecked:function(){return this.state.isSelectAllChecked},_getAreAllRowsChecked:function(e,t){return t.length===P(t,e).length},_getIsRowChecked:function(e){return this.state.selectedRowIds.indexOf(e[this.props.uniqueIdentifier])>-1},getSelectedRowIds:function(){return this.state.selectedRowIds},_resetSelectedRows:function(){this.setState({isSelectAllChecked:!1,selectedRowIds:[]})},getMultipleSelectionObject:function(){return{isMultipleSelection:!x(this.props.results,(function(e){return"children"in e}))&&this.props.isMultipleSelection,toggleSelectAll:this._toggleSelectAll,getIsSelectAllChecked:this._getIsSelectAllChecked,toggleSelectRow:this._toggleSelectRow,getSelectedRowIds:this.getSelectedRowIds,getIsRowChecked:this._getIsRowChecked}},isInfiniteScrollEnabled:function(){return!this.props.useCustomPagerComponent&&this.props.enableInfiniteScroll},getClearFixStyles:function(){return{clear:"both",display:"table",width:"100%"}},getSettingsStyles:function(){return{float:"left",width:"50%",textAlign:"right"}},getFilterStyles:function(){return{float:"left",width:"50%",textAlign:"left",color:"#222",minHeight:"1px"}},getFilter:function(){return this.props.showFilter&&!1===this.shouldUseCustomGridComponent()?this.props.useCustomFilterComponent?o.createElement(g,{changeFilter:this.setFilter,placeholderText:this.props.filterPlaceholderText,customFilterComponent:this.props.customFilterComponent,results:this.props.results,currentResults:this.getCurrentResults()}):o.createElement(l,{changeFilter:this.setFilter,placeholderText:this.props.filterPlaceholderText}):""},getSettings:function(){return this.props.showSettings?o.createElement("button",{type:"button",className:this.props.settingsToggleClassName,onClick:this.toggleColumnChooser,style:this.props.useGriddleStyles?{background:"none",border:"none",padding:0,margin:0,fontSize:14}:null},this.props.settingsText,this.props.settingsIconComponent):""},getTopSection:function(e,t){if(!1===this.props.showFilter&&!1===this.props.showSettings)return"";var n=null,r=null,s=null;return this.props.useGriddleStyles&&(n=this.getFilterStyles(),r=this.getSettingsStyles(),s=this.getClearFixStyles()),o.createElement("div",{className:"top-section",style:s},o.createElement("div",{className:"griddle-filter",style:n},e),o.createElement("div",{className:"griddle-settings-toggle",style:r},t))},getPagingSection:function(e,t){if(!1!==(this.props.showPager&&!this.isInfiniteScrollEnabled()&&!this.shouldUseCustomGridComponent()))return o.createElement("div",{className:"griddle-footer"},this.props.useCustomPagerComponent?o.createElement(m,{customPagerComponentOptions:this.props.customPagerComponentOptions,next:this.nextPage,previous:this.previousPage,currentPage:e,maxPage:t,setPage:this.setPage,nextText:this.props.nextText,previousText:this.props.previousText,customPagerComponent:this.props.customPagerComponent}):o.createElement(u,{useGriddleStyles:this.props.useGriddleStyles,next:this.nextPage,previous:this.previousPage,nextClassName:this.props.nextClassName,nextIconComponent:this.props.nextIconComponent,previousClassName:this.props.previousClassName,previousIconComponent:this.props.previousIconComponent,currentPage:e,maxPage:t,setPage:this.setPage,nextText:this.props.nextText,previousText:this.props.previousText}))},getColumnSelectorSection:function(e,t){return this.state.showColumnChooser?o.createElement(c,{columns:e,selectedColumns:t,setColumns:this.setColumns,settingsText:this.props.settingsText,settingsIconComponent:this.props.settingsIconComponent,maxRowsText:this.props.maxRowsText,setPageSize:this.setPageSize,showSetPageSize:!this.shouldUseCustomGridComponent(),resultsPerPage:this.state.resultsPerPage,enableToggleCustom:this.props.enableToggleCustom,toggleCustomComponent:this.toggleCustomComponent,useCustomComponent:this.shouldUseCustomRowComponent()||this.shouldUseCustomGridComponent(),useGriddleStyles:this.props.useGriddleStyles,enableCustomFormatText:this.props.enableCustomFormatText,columnMetadata:this.props.columnMetadata}):""},getCustomGridSection:function(){return o.createElement(this.props.customGridComponent,r({data:this.props.results,className:this.props.customGridComponentClassName},this.props.gridMetadata))},getCustomRowSection:function(e,t,n,r,s){return o.createElement("div",null,o.createElement(h,{data:e,columns:t,metadataColumns:n,globalData:s,className:this.props.customRowComponentClassName,customComponent:this.props.customRowComponent,style:this.props.useGriddleStyles?this.getClearFixStyles():null}),this.props.showPager&&r)},getStandardGridSection:function(e,t,n,r,s){var i=this.getSortObject(),l=this.getMultipleSelectionObject(),u=this.shouldShowNoDataSection(e),c=this.getNoDataSection();return o.createElement("div",{className:"griddle-body"},o.createElement(a,{useGriddleStyles:this.props.useGriddleStyles,noDataSection:c,showNoData:u,columnSettings:this.columnSettings,rowSettings:this.rowSettings,sortSettings:i,multipleSelectionSettings:l,filterByColumn:this.filterByColumn,isSubGriddle:this.props.isSubGriddle,useGriddleIcons:this.props.useGriddleIcons,useFixedLayout:this.props.useFixedLayout,showPager:this.props.showPager,pagingContent:r,data:e,className:this.props.tableClassName,enableInfiniteScroll:this.isInfiniteScrollEnabled(),nextPage:this.nextPage,showTableHeading:this.props.showTableHeading,useFixedHeader:this.props.useFixedHeader,parentRowCollapsedClassName:this.props.parentRowCollapsedClassName,parentRowExpandedClassName:this.props.parentRowExpandedClassName,parentRowCollapsedComponent:this.props.parentRowCollapsedComponent,parentRowExpandedComponent:this.props.parentRowExpandedComponent,bodyHeight:this.props.bodyHeight,paddingHeight:this.props.paddingHeight,rowHeight:this.props.rowHeight,infiniteScrollLoadTreshold:this.props.infiniteScrollLoadTreshold,externalLoadingComponent:this.props.externalLoadingComponent,externalIsLoading:this.props.externalIsLoading,hasMorePages:s,onRowClick:this.props.onRowClick,onRowMouseEnter:this.props.onRowMouseEnter,onRowMouseLeave:this.props.onRowMouseLeave,onRowWillMount:this.props.onRowWillMount,onRowWillUnmount:this.props.onRowWillUnmount}))},getContentSection:function(e,t,n,r,o,s){return this.shouldUseCustomGridComponent()&&null!==this.props.customGridComponent?this.getCustomGridSection():this.shouldUseCustomRowComponent()?this.getCustomRowSection(e,t,n,r,s):this.getStandardGridSection(e,t,n,r,o)},getNoDataSection:function(){return null!=this.props.customNoDataComponent?o.createElement("div",{className:this.props.noDataClassName},o.createElement(this.props.customNoDataComponent,this.props.customNoDataComponentProps)):o.createElement(p,{noDataMessage:this.props.noDataMessage})},shouldShowNoDataSection:function(e){return!this.props.allowEmptyGrid&&(!1===this.props.useExternal&&(void 0===e||0===e.length)||!0===this.props.useExternal&&!1===this.props.externalIsLoading&&0===e.length)},render:function(){var e=this.getCurrentResults(),t=(this.props.tableClassName,this.getFilter()),n=this.getSettings(),r=this.getTopSection(t,n),s=[],i=this.columnSettings.getColumns(),a=this.getDataForRender(e,i,!0),l=this.columnSettings.getMetadataColumns();this.props.columnMetadata?_(this.props.columnMetadata,(function(e){"boolean"==typeof e.visible&&!1===e.visible||s.push(e.columnName)})):s=C.keys(N(e[0],l)),s=this.columnSettings.orderColumns(s);var u=this.getCurrentPage(),c=this.getCurrentMaxPage(),p=u+10?"griddle "+this.props.gridClassName:"griddle";return m+=this.shouldUseCustomRowComponent()?" griddle-custom":"",o.createElement("div",{className:m},r,h,o.createElement("div",{className:"griddle-container",style:this.props.useGriddleStyles&&!this.props.isSubGriddle?{border:"1px solid #DDD"}:null},f))}});f.Griddle=e.exports=k},1545:function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n-1}},9905:function(e){e.exports=function(e,t,n){for(var r=-1,o=null==e?0:e.length;++r=200&&(p=l,d=!1,t=new r(t));e:for(;++c0&&s(c)?n>1?e(c,n-1,s,i,a):r(a,c):i||(a[a.length]=c)}return a}},6649:function(e,t,n){var r=n(3221)();e.exports=r},641:function(e,t,n){var r=n(6649),o=n(5950);e.exports=function(e,t){return e&&r(e,t,o)}},7422:function(e,t,n){var r=n(1769),o=n(7797);e.exports=function(e,t){for(var n=0,s=(t=r(t,e)).length;null!=e&&n=120&&v.length>=120)?new r(f&&v):void 0}v=e[0];var y=-1,C=h[0];e:for(;++yo?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var s=Array(o);++rt||i&&a&&u&&!l&&!c||o&&a&&u||!n&&u||!s)return 1;if(!o&&!i&&!c&&e=l?u:u*("desc"==n[o]?-1:1)}return e.index-t.index}},3007:function(e){e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n1?n[s-1]:void 0,a=s>2?n[2]:void 0;for(i=e.length>3&&"function"==typeof i?(s--,i):void 0,a&&o(n[0],n[1],a)&&(i=s<3?void 0:i,s=1),t=Object(t);++r-1?a[l?t[u]:u]:void 0}}},2963:function(e,t,n){var r=n(1372),o=n(5861),s=n(317),i=n(799);e.exports=function(e){return function(t){var n=o(t);return"[object Map]"==n?s(t):"[object Set]"==n?i(t):r(t,e(t))}}},3138:function(e,t,n){var r=n(1331);e.exports=function(e){return r(e)?void 0:e}},3243:function(e,t,n){var r=n(6110),o=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=o},5911:function(e,t,n){var r=n(8859),o=n(4248),s=n(9219);e.exports=function(e,t,n,i,a,l){var u=1&n,c=e.length,p=t.length;if(c!=p&&!(u&&p>c))return!1;var d=l.get(e),f=l.get(t);if(d&&f)return d==t&&f==e;var h=-1,m=!0,g=2&n?new r:void 0;for(l.set(e,t),l.set(t,e);++h-1&&e%1==0&&e-1}},1175:function(e,t,n){var r=n(6025);e.exports=function(e,t){var n=this.__data__,o=r(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}},3040:function(e,t,n){var r=n(1549),o=n(79),s=n(8223);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(s||o),string:new r}}},7670:function(e,t,n){var r=n(2651);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},289:function(e,t,n){var r=n(2651);e.exports=function(e){return r(this,e).get(e)}},4509:function(e,t,n){var r=n(2651);e.exports=function(e){return r(this,e).has(e)}},2949:function(e,t,n){var r=n(2651);e.exports=function(e,t){var n=r(this,e),o=n.size;return n.set(e,t),this.size+=n.size==o?0:1,this}},317:function(e){e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},7197:function(e){e.exports=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}},2224:function(e,t,n){var r=n(104);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},1042:function(e,t,n){var r=n(6110)(Object,"create");e.exports=r},3650:function(e,t,n){var r=n(4335)(Object.keys,Object);e.exports=r},181:function(e){e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},6009:function(e,t,n){e=n.nmd(e);var r=n(4840),o=t&&!t.nodeType&&t,s=o&&e&&!e.nodeType&&e,i=s&&s.exports===o&&r.process,a=function(){try{var e=s&&s.require&&s.require("util").types;return e||i&&i.binding&&i.binding("util")}catch(e){}}();e.exports=a},9350:function(e){var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},4335:function(e){e.exports=function(e,t){return function(n){return e(t(n))}}},6757:function(e,t,n){var r=n(1033),o=Math.max;e.exports=function(e,t,n){return t=o(void 0===t?e.length-1:t,0),function(){for(var s=arguments,i=-1,a=o(s.length-t,0),l=Array(a);++i0){if(++n>=800)return arguments[0]}else n=0;return e.apply(void 0,arguments)}}},1420:function(e,t,n){var r=n(79);e.exports=function(){this.__data__=new r,this.size=0}},938:function(e){e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},3605:function(e){e.exports=function(e){return this.__data__.get(e)}},9817:function(e){e.exports=function(e){return this.__data__.has(e)}},945:function(e,t,n){var r=n(79),o=n(8223),s=n(3661);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var i=n.__data__;if(!o||i.length<199)return i.push([e,t]),this.size=++n.size,this;n=this.__data__=new s(i)}return n.set(e,t),this.size=n.size,this}},6959:function(e){e.exports=function(e,t,n){for(var r=n-1,o=e.length;++r2?t[2]:void 0;for(u&&s(t[0],t[1],u)&&(r=1);++n-1:!!c&&r(e,t,n)>-1}},3424:function(e,t,n){var r=n(5160);e.exports=function(e){return(null==e?0:e.length)?r(e,0,-1):[]}},5287:function(e,t,n){var r=n(4932),o=n(7185),s=n(9302),i=n(741),a=s((function(e){var t=r(e,i);return t.length&&t[0]===e[0]?o(t):[]}));e.exports=a},2428:function(e,t,n){var r=n(7534),o=n(346),s=Object.prototype,i=s.hasOwnProperty,a=s.propertyIsEnumerable,l=r(function(){return arguments}())?r:function(e){return o(e)&&i.call(e,"callee")&&!a.call(e,"callee")};e.exports=l},6449:function(e){var t=Array.isArray;e.exports=t},4894:function(e,t,n){var r=n(1882),o=n(294);e.exports=function(e){return null!=e&&o(e.length)&&!r(e)}},3693:function(e,t,n){var r=n(4894),o=n(346);e.exports=function(e){return o(e)&&r(e)}},3656:function(e,t,n){e=n.nmd(e);var r=n(9325),o=n(9935),s=t&&!t.nodeType&&t,i=s&&e&&!e.nodeType&&e,a=i&&i.exports===s?r.Buffer:void 0,l=(a?a.isBuffer:void 0)||o;e.exports=l},2193:function(e,t,n){var r=n(8984),o=n(5861),s=n(2428),i=n(6449),a=n(4894),l=n(3656),u=n(5527),c=n(7167),p=Object.prototype.hasOwnProperty;e.exports=function(e){if(null==e)return!0;if(a(e)&&(i(e)||"string"==typeof e||"function"==typeof e.splice||l(e)||c(e)||s(e)))return!e.length;var t=o(e);if("[object Map]"==t||"[object Set]"==t)return!e.size;if(u(e))return!r(e).length;for(var n in e)if(p.call(e,n))return!1;return!0}},1882:function(e,t,n){var r=n(2552),o=n(3805);e.exports=function(e){if(!o(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},294:function(e){e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},7730:function(e,t,n){var r=n(9172),o=n(7301),s=n(6009),i=s&&s.isMap,a=i?o(i):r;e.exports=a},5187:function(e){e.exports=function(e){return null===e}},3805:function(e){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},346:function(e){e.exports=function(e){return null!=e&&"object"==typeof e}},1331:function(e,t,n){var r=n(2552),o=n(8879),s=n(346),i=Function.prototype,a=Object.prototype,l=i.toString,u=a.hasOwnProperty,c=l.call(Object);e.exports=function(e){if(!s(e)||"[object Object]"!=r(e))return!1;var t=o(e);if(null===t)return!0;var n=u.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&l.call(n)==c}},8440:function(e,t,n){var r=n(6038),o=n(7301),s=n(6009),i=s&&s.isSet,a=i?o(i):r;e.exports=a},5015:function(e,t,n){var r=n(2552),o=n(6449),s=n(346);e.exports=function(e){return"string"==typeof e||!o(e)&&s(e)&&"[object String]"==r(e)}},4394:function(e,t,n){var r=n(2552),o=n(346);e.exports=function(e){return"symbol"==typeof e||o(e)&&"[object Symbol]"==r(e)}},7167:function(e,t,n){var r=n(4901),o=n(7301),s=n(6009),i=s&&s.isTypedArray,a=i?o(i):r;e.exports=a},2216:function(e){e.exports=function(e){return void 0===e}},5950:function(e,t,n){var r=n(695),o=n(8984),s=n(4894);e.exports=function(e){return s(e)?r(e):o(e)}},7241:function(e,t,n){var r=n(695),o=n(2903),s=n(4894);e.exports=function(e){return s(e)?r(e,!0):o(e)}},8090:function(e){e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},5378:function(e,t,n){var r=n(4932),o=n(5389),s=n(5128),i=n(6449);e.exports=function(e,t){return(i(e)?r:s)(e,o(t,3))}},104:function(e,t,n){var r=n(3661);function o(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],s=n.cache;if(s.has(o))return s.get(o);var i=e.apply(this,r);return n.cache=s.set(o,i)||s,i};return n.cache=new(o.Cache||r),n}o.Cache=r,e.exports=o},179:function(e,t,n){var r=n(4932),o=n(9999),s=n(9931),i=n(1769),a=n(1791),l=n(3138),u=n(8816),c=n(3349),p=u((function(e,t){var n={};if(null==e)return n;var u=!1;t=r(t,(function(t){return t=i(t,e),u||(u=t.length>1),t})),a(e,c(e),n),u&&(n=o(n,7,l));for(var p=t.length;p--;)s(n,t[p]);return n}));e.exports=p},2877:function(e,t,n){var r=n(6155),o=n(6449);e.exports=function(e,t,n,s){return null==e?[]:(o(t)||(t=null==t?[]:[t]),o(n=s?void 0:n)||(n=null==n?[]:[n]),r(e,t,n))}},4383:function(e,t,n){var r=n(6001),o=n(8816)((function(e,t){return null==e?{}:r(e,t)}));e.exports=o},583:function(e,t,n){var r=n(7237),o=n(7255),s=n(8586),i=n(7797);e.exports=function(e){return s(e)?r(i(e)):o(e)}},2426:function(e,t,n){var r=n(4248),o=n(5389),s=n(916),i=n(6449),a=n(6800);e.exports=function(e,t,n){var l=i(e)?r:s;return n&&a(e,t,n)&&(t=void 0),l(e,o(t,3))}},3031:function(e,t,n){var r=n(3120),o=n(6155),s=n(9302),i=n(6800),a=s((function(e,t){if(null==e)return[];var n=t.length;return n>1&&i(e,t[0],t[1])?t=[]:n>2&&i(t[0],t[1],t[2])&&(t=[t[0]]),o(e,r(t,1),[])}));e.exports=a},3345:function(e){e.exports=function(){return[]}},9935:function(e){e.exports=function(){return!1}},4921:function(e,t,n){var r=n(5160),o=n(1489);e.exports=function(e,t,n){return e&&e.length?(t=n||void 0===t?1:o(t),r(e,0,t<0?0:t)):[]}},7400:function(e,t,n){var r=n(9374),o=1/0;e.exports=function(e){return e?(e=r(e))===o||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}},1489:function(e,t,n){var r=n(7400);e.exports=function(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}},9374:function(e,t,n){var r=n(4128),o=n(3805),s=n(4394),i=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,l=/^0o[0-7]+$/i,u=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(s(e))return NaN;if(o(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=r(e);var n=a.test(e);return n||l.test(e)?u(e.slice(2),n?2:8):i.test(e)?NaN:+e}},8938:function(e,t,n){var r=n(2963)(n(5950));e.exports=r},3222:function(e,t,n){var r=n(7556);e.exports=function(e){return null==e?"":r(e)}},7200:function(e,t,n){var r=n(3222),o=0;e.exports=function(e){var t=++o;return r(e)+t}},5880:function(e,t,n){var r=n(514),o=n(5950);e.exports=function(e){return null==e?[]:r(e,o(e))}},1648:function(e,t,n){var r=n(3915),o=n(9302),s=n(3693),i=o((function(e,t){return s(e)?r(e,t):[]}));e.exports=i},7248:function(e,t,n){var r=n(6547),o=n(1234);e.exports=function(e,t){return o(e||[],t||[],r)}},5228:function(e){"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,o){for(var s,i,a=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),l=1;l>>9<<4)+1}function r(e,t){const n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function o(e,t,n,o,s,i){return r((a=r(r(t,e),r(o,i)))<<(l=s)|a>>>32-l,n);var a,l}function s(e,t,n,r,s,i,a){return o(t&n|~t&r,e,t,s,i,a)}function i(e,t,n,r,s,i,a){return o(t&r|n&~r,e,t,s,i,a)}function a(e,t,n,r,s,i,a){return o(t^n^r,e,t,s,i,a)}function l(e,t,n,r,s,i,a){return o(n^(t|~r),e,t,s,i,a)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var u=function(e){if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(let n=0;n>5]>>>o%32&255,s=parseInt(r.charAt(n>>>4&15)+r.charAt(15&n),16);t.push(s)}return t}(function(e,t){e[t>>5]|=128<>5]|=(255&e[n/8])<>>24,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n[4]=(t=parseInt(e.slice(9,13),16))>>>8,n[5]=255&t,n[6]=(t=parseInt(e.slice(14,18),16))>>>8,n[7]=255&t,n[8]=(t=parseInt(e.slice(19,23),16))>>>8,n[9]=255&t,n[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,n[11]=t/4294967296&255,n[12]=t>>>24&255,n[13]=t>>>16&255,n[14]=t>>>8&255,n[15]=255&t,n};t.default=s},7656:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i},2858:function(e,t){"use strict";let n;Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){if(!n&&(n="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!n))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return n(r)};const r=new Uint8Array(16)},9042:function(e,t){"use strict";function n(e,t,n,r){switch(e){case 0:return t&n^~t&r;case 1:case 3:return t^n^r;case 2:return t&n^t&r^n&r}}function r(e,t){return e<>>32-t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=function(e){const t=[1518500249,1859775393,2400959708,3395469782],o=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=[];for(let n=0;n>>0;p=c,c=u,u=r(l,30)>>>0,l=i,i=a}o[0]=o[0]+i>>>0,o[1]=o[1]+l>>>0,o[2]=o[2]+u>>>0,o[3]=o[3]+c>>>0,o[4]=o[4]+p>>>0}return[o[0]>>24&255,o[0]>>16&255,o[0]>>8&255,255&o[0],o[1]>>24&255,o[1]>>16&255,o[1]>>8&255,255&o[1],o[2]>>24&255,o[2]>>16&255,o[2]>>8&255,255&o[2],o[3]>>24&255,o[3]>>16&255,o[3]>>8&255,255&o[3],o[4]>>24&255,o[4]>>16&255,o[4]>>8&255,255&o[4]]};t.default=o},9910:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.unsafeStringify=i;var r,o=(r=n(7037))&&r.__esModule?r:{default:r};const s=[];for(let e=0;e<256;++e)s.push((e+256).toString(16).slice(1));function i(e,t=0){return s[e[t+0]]+s[e[t+1]]+s[e[t+2]]+s[e[t+3]]+"-"+s[e[t+4]]+s[e[t+5]]+"-"+s[e[t+6]]+s[e[t+7]]+"-"+s[e[t+8]]+s[e[t+9]]+"-"+s[e[t+10]]+s[e[t+11]]+s[e[t+12]]+s[e[t+13]]+s[e[t+14]]+s[e[t+15]]}var a=function(e,t=0){const n=i(e,t);if(!(0,o.default)(n))throw TypeError("Stringified UUID is invalid");return n};t.default=a},3518:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(2858))&&r.__esModule?r:{default:r},s=n(9910);let i,a,l=0,u=0;var c=function(e,t,n){let r=t&&n||0;const c=t||new Array(16);let p=(e=e||{}).node||i,d=void 0!==e.clockseq?e.clockseq:a;if(null==p||null==d){const t=e.random||(e.rng||o.default)();null==p&&(p=i=[1|t[0],t[1],t[2],t[3],t[4],t[5]]),null==d&&(d=a=16383&(t[6]<<8|t[7]))}let f=void 0!==e.msecs?e.msecs:Date.now(),h=void 0!==e.nsecs?e.nsecs:u+1;const m=f-l+(h-u)/1e4;if(m<0&&void 0===e.clockseq&&(d=d+1&16383),(m<0||f>l)&&void 0===e.nsecs&&(h=0),h>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");l=f,u=h,a=d,f+=122192928e5;const g=(1e4*(268435455&f)+h)%4294967296;c[r++]=g>>>24&255,c[r++]=g>>>16&255,c[r++]=g>>>8&255,c[r++]=255&g;const v=f/4294967296*1e4&268435455;c[r++]=v>>>8&255,c[r++]=255&v,c[r++]=v>>>24&15|16,c[r++]=v>>>16&255,c[r++]=d>>>8|128,c[r++]=255&d;for(let e=0;e<6;++e)c[r+e]=p[e];return t||(0,s.unsafeStringify)(c)};t.default=c},4948:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=s(n(9025)),o=s(n(2311));function s(e){return e&&e.__esModule?e:{default:e}}var i=(0,r.default)("v3",48,o.default);t.default=i},9025:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.URL=t.DNS=void 0,t.default=function(e,t,n){function r(e,r,i,a){var l;if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));const t=[];for(let n=0;n { + (0, _registerComponents.default)(); + (0, _registerReducers.default)(); +}); + +/***/ }), + +/***/ "./client/src/boot/registerComponents.js": +/*!***********************************************!*\ + !*** ./client/src/boot/registerComponents.js ***! + \***********************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; +var _Injector = _interopRequireDefault(__webpack_require__(/*! lib/Injector */ "lib/Injector")); +var _HistoryViewer = _interopRequireDefault(__webpack_require__(/*! components/HistoryViewer/HistoryViewer */ "./client/src/components/HistoryViewer/HistoryViewer.js")); +var _HistoryViewerHeading = _interopRequireDefault(__webpack_require__(/*! components/HistoryViewer/HistoryViewerHeading */ "./client/src/components/HistoryViewer/HistoryViewerHeading.js")); +var _HistoryViewerToolbar = _interopRequireDefault(__webpack_require__(/*! components/HistoryViewer/HistoryViewerToolbar */ "./client/src/components/HistoryViewer/HistoryViewerToolbar.js")); +var _HistoryViewerVersion = _interopRequireDefault(__webpack_require__(/*! components/HistoryViewer/HistoryViewerVersion */ "./client/src/components/HistoryViewer/HistoryViewerVersion.js")); +var _HistoryViewerVersionDetail = _interopRequireDefault(__webpack_require__(/*! components/HistoryViewer/HistoryViewerVersionDetail */ "./client/src/components/HistoryViewer/HistoryViewerVersionDetail.js")); +var _HistoryViewerVersionList = _interopRequireDefault(__webpack_require__(/*! components/HistoryViewer/HistoryViewerVersionList */ "./client/src/components/HistoryViewer/HistoryViewerVersionList.js")); +var _HistoryViewerVersionState = _interopRequireDefault(__webpack_require__(/*! components/HistoryViewer/HistoryViewerVersionState */ "./client/src/components/HistoryViewer/HistoryViewerVersionState.js")); +var _HistoryViewerCompareWarning = _interopRequireDefault(__webpack_require__(/*! components/HistoryViewer/HistoryViewerCompareWarning */ "./client/src/components/HistoryViewer/HistoryViewerCompareWarning.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var _default = () => { + _Injector.default.component.registerMany({ + HistoryViewer: _HistoryViewer.default, + HistoryViewerHeading: _HistoryViewerHeading.default, + HistoryViewerToolbar: _HistoryViewerToolbar.default, + HistoryViewerVersion: _HistoryViewerVersion.default, + HistoryViewerVersionDetail: _HistoryViewerVersionDetail.default, + HistoryViewerVersionList: _HistoryViewerVersionList.default, + HistoryViewerVersionState: _HistoryViewerVersionState.default, + HistoryViewerCompareWarning: _HistoryViewerCompareWarning.default + }); +}; +exports["default"] = _default; + +/***/ }), + +/***/ "./client/src/boot/registerReducers.js": +/*!*********************************************!*\ + !*** ./client/src/boot/registerReducers.js ***! + \*********************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; +var _Injector = _interopRequireDefault(__webpack_require__(/*! lib/Injector */ "lib/Injector")); +var _redux = __webpack_require__(/*! redux */ "redux"); +var _HistoryViewerReducer = _interopRequireDefault(__webpack_require__(/*! state/historyviewer/HistoryViewerReducer */ "./client/src/state/historyviewer/HistoryViewerReducer.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const registerReducers = () => { + _Injector.default.reducer.register('versionedAdmin', (0, _redux.combineReducers)({ + historyViewer: _HistoryViewerReducer.default + })); +}; +var _default = exports["default"] = registerReducers; + +/***/ }), + +/***/ "./client/src/components/HistoryViewer/HistoryViewer.js": +/*!****************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0]!./client/src/components/HistoryViewer/HistoryViewer.js ***! + \****************************************************************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = exports.Component = void 0; +var _react = _interopRequireWildcard(__webpack_require__(/*! react */ "react")); +var _redux = __webpack_require__(/*! redux */ "redux"); +var _reactRedux = __webpack_require__(/*! react-redux */ "react-redux"); +var _griddleReact = _interopRequireDefault(__webpack_require__(/*! griddle-react */ "./node_modules/griddle-react/modules/griddle.jsx.js")); +var _HistoryViewerConfig = _interopRequireDefault(__webpack_require__(/*! containers/HistoryViewer/HistoryViewerConfig */ "./client/src/containers/HistoryViewer/HistoryViewerConfig.js")); +var _i18n = _interopRequireDefault(__webpack_require__(/*! i18n */ "i18n")); +var _Injector = __webpack_require__(/*! lib/Injector */ "lib/Injector"); +var _Backend = _interopRequireDefault(__webpack_require__(/*! lib/Backend */ "lib/Backend")); +var _Loading = _interopRequireDefault(__webpack_require__(/*! components/Loading/Loading */ "components/Loading/Loading")); +var _HistoryViewerActions = __webpack_require__(/*! state/historyviewer/HistoryViewerActions */ "./client/src/state/historyviewer/HistoryViewerActions.js"); +var _versionType = __webpack_require__(/*! types/versionType */ "./client/src/types/versionType.js"); +var _compareType = __webpack_require__(/*! types/compareType */ "./client/src/types/compareType.js"); +var _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ "classnames")); +var _ResizeAware = _interopRequireDefault(__webpack_require__(/*! components/ResizeAware/ResizeAware */ "components/ResizeAware/ResizeAware")); +var viewModeActions = _interopRequireWildcard(__webpack_require__(/*! state/viewMode/ViewModeActions */ "state/viewMode/ViewModeActions")); +var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "prop-types")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +const useRPC = true; +class HistoryViewer extends _react.Component { + constructor(props) { + super(props); + console.log('contextKey=', this.props.contextKey); + this.handleSetPage = this.handleSetPage.bind(this); + this.handleNextPage = this.handleNextPage.bind(this); + this.handlePrevPage = this.handlePrevPage.bind(this); + this.refreshVersions = this.refreshVersions.bind(this); + this.state = { + versions: [] + }; + } + componentDidMount() { + this.refreshVersions(); + } + componentDidUpdate(prevProps) { + if (!this.props.actions || !this.props.actions.versions) { + return; + } + const { + page: prevPage + } = prevProps; + const { + page: currentPage + } = this.props; + const { + actions: { + versions + } + } = this.props; + if (prevPage !== currentPage && typeof versions.goToPage === 'function') { + versions.goToPage(currentPage); + } + } + componentWillUnmount() { + const { + onSelect + } = this.props; + if (typeof onSelect === 'function') { + onSelect(0); + } + } + refreshVersions() { + if (useRPC) { + const url = `/admin/pages/history/api/readHistory/${this.props.recordId}?recordClass=Page`; + _Backend.default.get(url).then(response => response.json()).then(responseJson => { + this.setState({ + versions: responseJson.versions + }); + }); + } else { + const { + versions + } = this.props; + const nodes = versions && versions.versions && versions.versions.nodes ? versions.versions.nodes : []; + this.setState({ + versions: nodes + }); + } + } + getVersions() { + return this.state.versions; + } + getContainerClasses() { + const { + compare, + isInGridField + } = this.props; + return (0, _classnames.default)('history-viewer', 'fill-height', 'panel--scrollable', { + 'history-viewer__compare-mode': compare, + 'history-viewer--no-margins': isInGridField && !this.isListView() + }); + } + getLatestVersion() { + const { + currentVersion + } = this.props; + if (currentVersion && currentVersion.latestDraftVersion === true) { + return currentVersion; + } + const latestDraftVersion = this.getVersions().filter(version => version.latestDraftVersion === true); + if (latestDraftVersion.length) { + return latestDraftVersion[0]; + } + return null; + } + isListView() { + const { + compare, + currentVersion + } = this.props; + if (!currentVersion) { + return true; + } + if (!compare) { + return false; + } + if (compare.versionFrom && !compare.versionTo) { + return true; + } + return false; + } + handleSetPage(page) { + const { + onSetPage + } = this.props; + if (typeof onSetPage === 'function') { + onSetPage(page + 1); + } + } + handleNextPage() { + const { + page + } = this.props; + this.handleSetPage(page); + } + handlePrevPage() { + const { + page + } = this.props; + const currentPage = page - 1; + if (currentPage < 1) { + this.handleSetPage(currentPage); + return; + } + this.handleSetPage(currentPage - 1); + } + compareModeAvailable() { + return this.getVersions().length > 1; + } + renderVersionDetail() { + const { + currentVersion, + isPreviewable, + isRevertable, + recordId, + recordClass, + schemaUrl, + VersionDetailComponent, + compare, + compare: { + versionFrom = false, + versionTo = false + }, + previewState + } = this.props; + const schemaVersionReplacements = { + ':id': recordId, + ':class': recordClass, + ':version': currentVersion.version + }; + const schemaCompareReplacements = { + ':id': recordId, + ':class': recordClass, + ':from': versionFrom.version || 0, + ':to': versionTo.version || 0 + }; + const schemaSearch = compare ? /:id|:class|:from|:to/g : /:id|:class|:version/g; + const schemaReplacements = compare ? schemaCompareReplacements : schemaVersionReplacements; + const version = compare ? versionFrom : currentVersion; + const latestVersion = this.getLatestVersion(); + const props = { + isLatestVersion: !compare && latestVersion && latestVersion.version === version.version, + isPreviewable, + isRevertable, + recordId, + schemaUrl: schemaUrl.replace(schemaSearch, match => schemaReplacements[match]), + version, + compare, + compareModeAvailable: this.compareModeAvailable(), + previewState + }; + return _react.default.createElement(_ResizeAware.default, { + className: this.getContainerClasses(), + onResize: _ref => { + let { + width + } = _ref; + return this.props.onResize(width); + } + }, _react.default.createElement(VersionDetailComponent, props)); + } + renderPagination() { + const { + limit, + page, + versions + } = this.props; + if (!versions) { + return null; + } + const totalVersions = versions.versions ? versions.versions.pageInfo.totalCount : 0; + if (totalVersions <= limit) { + return null; + } + const props = { + setPage: this.handleSetPage, + maxPage: Math.ceil(totalVersions / limit), + next: this.handleNextPage, + nextText: _i18n.default._t('HistoryViewer.NEXT', 'Next'), + previous: this.handlePrevPage, + previousText: _i18n.default._t('HistoryViewer.PREVIOUS', 'Previous'), + currentPage: page - 1, + useGriddleStyles: false + }; + return _react.default.createElement("div", { + className: "griddle-footer" + }, _react.default.createElement(_griddleReact.default.GridPagination, props)); + } + renderComparisonSelectionList() { + const { + compare: { + versionFrom + }, + ListComponent + } = this.props; + if (!versionFrom) { + return null; + } + const selectionListClasses = (0, _classnames.default)('history-viewer__table', 'history-viewer__table--comparison-selected'); + return _react.default.createElement(ListComponent, { + versions: [versionFrom], + extraClass: selectionListClasses + }); + } + renderVersionList() { + const { + isInGridField, + ListComponent, + CompareWarningComponent, + compare, + compare: { + versionFrom: hasVersionFrom + } + } = this.props; + return _react.default.createElement("div", { + className: this.getContainerClasses() + }, _react.default.createElement(CompareWarningComponent, null), _react.default.createElement("div", { + className: isInGridField ? '' : 'panel panel--padded panel--scrollable' + }, this.renderComparisonSelectionList(), _react.default.createElement(ListComponent, { + versions: this.getVersions(), + showHeader: !compare || compare && !hasVersionFrom, + compareModeAvailable: this.compareModeAvailable() + }), _react.default.createElement("div", { + className: "history-viewer__pagination" + }, this.renderPagination()))); + } + renderCompareMode() { + const { + compare + } = this.props; + if (compare && compare.versionFrom && compare.versionTo) { + return this.renderVersionDetail(); + } + return this.renderVersionList(); + } + render() { + const { + loading, + compare, + currentVersion, + recordId + } = this.props; + if (!recordId) { + return null; + } + if (loading) { + return _react.default.createElement(_Loading.default, null); + } + if (this.compareModeAvailable() && compare) { + return this.renderCompareMode(); + } + if (currentVersion) { + return this.renderVersionDetail(); + } + return this.renderVersionList(); + } +} +exports.Component = HistoryViewer; +HistoryViewer.propTypes = { + contextKey: _propTypes.default.string, + limit: _propTypes.default.number, + ListComponent: _propTypes.default.elementType.isRequired, + offset: _propTypes.default.number, + recordId: _propTypes.default.number, + currentVersion: _propTypes.default.oneOfType([_propTypes.default.bool, _versionType.versionType]), + compare: _compareType.compareType, + isInGridField: _propTypes.default.bool, + isPreviewable: _propTypes.default.bool, + isRevertable: _propTypes.default.bool, + VersionDetailComponent: _propTypes.default.elementType.isRequired, + CompareWarningComponent: _propTypes.default.elementType.isRequired, + versions: _propTypes.default.shape({ + versions: _propTypes.default.shape({ + pageInfo: _propTypes.default.shape({ + totalCount: _propTypes.default.number + }), + nodes: _propTypes.default.arrayOf(_versionType.versionType) + }) + }), + page: _propTypes.default.number, + schemaUrl: _propTypes.default.string, + previewState: _propTypes.default.oneOf(['edit', 'preview', 'split']), + actions: _propTypes.default.object, + onSelect: _propTypes.default.func, + onSetPage: _propTypes.default.func, + onResize: _propTypes.default.func +}; +HistoryViewer.defaultProps = { + compare: {}, + contextKey: '', + currentVersion: false, + isInGridField: false, + isPreviewable: false, + schemaUrl: '', + versions: { + versions: { + pageInfo: { + totalCount: 0 + }, + nodes: [] + } + } +}; +function mapStateToProps(state) { + const { + currentPage, + currentVersion, + compare + } = state.versionedAdmin.historyViewer; + const { + activeState + } = state.viewMode; + return { + page: currentPage, + currentVersion, + compare, + previewState: activeState + }; +} +function mapDispatchToProps(dispatch) { + return { + onSelect(id) { + dispatch((0, _HistoryViewerActions.showVersion)(id)); + dispatch((0, _HistoryViewerActions.clearMessages)()); + }, + onSetPage(page) { + dispatch((0, _HistoryViewerActions.setCurrentPage)(page)); + }, + onResize(panelWidth) { + dispatch(viewModeActions.enableOrDisableSplitMode(panelWidth)); + } + }; +} +var _default = exports["default"] = (0, _redux.compose)((0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps), _HistoryViewerConfig.default, (0, _Injector.inject)(['HistoryViewerVersionList', 'HistoryViewerVersionDetail', 'HistoryViewerCompareWarning'], (ListComponent, VersionDetailComponent, CompareWarningComponent) => ({ + ListComponent, + VersionDetailComponent, + CompareWarningComponent +}), _ref2 => { + let { + contextKey + } = _ref2; + return `VersionedAdmin.HistoryViewer.${contextKey}`; +}))(HistoryViewer); + +/***/ }), + +/***/ "./client/src/components/HistoryViewer/HistoryViewerCompareWarning.js": +/*!****************************************************************************!*\ + !*** ./client/src/components/HistoryViewer/HistoryViewerCompareWarning.js ***! + \****************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = exports.Component = void 0; +var _react = _interopRequireWildcard(__webpack_require__(/*! react */ "react")); +var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "prop-types")); +var _reactRedux = __webpack_require__(/*! react-redux */ "react-redux"); +var _i18n = _interopRequireDefault(__webpack_require__(/*! i18n */ "i18n")); +var _HistoryViewerActions = __webpack_require__(/*! state/historyviewer/HistoryViewerActions */ "./client/src/state/historyviewer/HistoryViewerActions.js"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +class HistoryViewerCompareWarning extends _react.Component { + constructor(props) { + super(props); + this.handleDismissCompare = this.handleDismissCompare.bind(this); + } + handleDismissCompare() { + this.props.onDismissCompare(); + } + render() { + if (!this.props.isCompare) { + return null; + } + return _react.default.createElement("div", { + className: "history-viewer__compare-notice alert alert-info" + }, _react.default.createElement("span", { + className: "notice-message" + }, _react.default.createElement("strong", null, _i18n.default._t('HistoryViewer.COMPARE_MODE', 'Compare mode'), ": "), _i18n.default._t('HistoryViewer.SELECT_PROMPT', 'Select two versions')), _react.default.createElement("button", { + className: "btn dismiss-button font-icon-cancel", + onClick: this.handleDismissCompare + }, _i18n.default._t('HistoryViewer.EXIT', 'Exit'))); + } +} +exports.Component = HistoryViewerCompareWarning; +HistoryViewerCompareWarning.propTypes = { + isCompare: _propTypes.default.bool.isRequired +}; +function mapStateToProps(state) { + const { + compare + } = state.versionedAdmin.historyViewer; + return { + isCompare: !!compare + }; +} +function mapDispatchToProps(dispatch) { + return { + onDismissCompare() { + dispatch((0, _HistoryViewerActions.setCompareMode)(false)); + } + }; +} +var _default = exports["default"] = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(HistoryViewerCompareWarning); + +/***/ }), + +/***/ "./client/src/components/HistoryViewer/HistoryViewerHeading.js": +/*!*********************************************************************!*\ + !*** ./client/src/components/HistoryViewer/HistoryViewerHeading.js ***! + \*********************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = exports.Component = void 0; +var _i18n = _interopRequireDefault(__webpack_require__(/*! i18n */ "i18n")); +var _react = _interopRequireWildcard(__webpack_require__(/*! react */ "react")); +var _reactstrap = __webpack_require__(/*! reactstrap */ "reactstrap"); +var _HistoryViewerActions = __webpack_require__(/*! state/historyviewer/HistoryViewerActions */ "./client/src/state/historyviewer/HistoryViewerActions.js"); +var _redux = __webpack_require__(/*! redux */ "redux"); +var _reactRedux = __webpack_require__(/*! react-redux */ "react-redux"); +var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "prop-types")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +class HistoryViewerHeading extends _react.Component { + constructor(props) { + super(props); + this.toggle = this.toggle.bind(this); + this.handleCompareModeChange = this.handleCompareModeChange.bind(this); + this.state = { + dropdownOpen: false + }; + } + toggle() { + this.setState(prevState => ({ + dropdownOpen: !prevState.dropdownOpen + })); + } + handleCompareModeChange() { + const { + compareModeSelected, + onCompareModeUnselect, + onCompareModeSelect + } = this.props; + if (compareModeSelected) { + onCompareModeUnselect(); + } else { + onCompareModeSelect(); + } + } + renderDropdown() { + const { + compareModeAvailable, + compareModeSelected + } = this.props; + const { + dropdownOpen + } = this.state; + if (!compareModeAvailable) { + return null; + } + return _react.default.createElement(_reactstrap.Dropdown, { + isOpen: dropdownOpen, + toggle: this.toggle, + className: "history-viewer__actions-dropdown" + }, _react.default.createElement(_reactstrap.DropdownToggle, { + className: "font-icon-sliders" + }), _react.default.createElement(_reactstrap.DropdownMenu, { + right: true + }, _react.default.createElement("div", { + className: "form-check" + }, _react.default.createElement("input", { + id: "history-viewer-compare-two", + type: "checkbox", + className: "no-change-track history-viewer-heading__compare-mode-checkbox", + checked: compareModeSelected, + onChange: this.handleCompareModeChange + }), _react.default.createElement("label", { + className: "form-check-label", + htmlFor: "history-viewer-compare-two" + }, _i18n.default._t('HistoryViewerHeading.COMPARE_VERSIONS', 'Compare two versions'))))); + } + render() { + return _react.default.createElement("li", { + className: "history-viewer__heading", + role: "row" + }, _react.default.createElement("span", { + className: "history-viewer__version-no", + role: "columnheader" + }, "#"), _react.default.createElement("span", { + className: "history-viewer__version-state", + role: "columnheader" + }, _i18n.default._t('HistoryViewer.Record', 'Record')), _react.default.createElement("span", { + className: "history-viewer__author", + role: "columnheader" + }, _i18n.default._t('HistoryViewer.Author', 'Author')), _react.default.createElement("span", { + className: "history-viewer__actions", + role: "columnheader" + }, this.renderDropdown())); + } +} +exports.Component = HistoryViewerHeading; +HistoryViewerHeading.propTypes = { + compareModeAvailable: _propTypes.default.bool, + compareModeSelected: _propTypes.default.bool, + onCompareModeSelect: _propTypes.default.func, + onCompareModeUnselect: _propTypes.default.func +}; +HistoryViewerHeading.defaultProps = { + compareModeAvailable: true +}; +function mapStateToProps(state) { + return { + compareModeSelected: !!state.versionedAdmin.historyViewer.compare + }; +} +function mapDispatchToProps(dispatch) { + return { + onCompareModeSelect() { + dispatch((0, _HistoryViewerActions.setCompareMode)(true)); + }, + onCompareModeUnselect() { + dispatch((0, _HistoryViewerActions.setCompareMode)(false)); + } + }; +} +var _default = exports["default"] = (0, _redux.compose)((0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps))(HistoryViewerHeading); + +/***/ }), + +/***/ "./client/src/components/HistoryViewer/HistoryViewerToolbar.js": +/*!*********************************************************************!*\ + !*** ./client/src/components/HistoryViewer/HistoryViewerToolbar.js ***! + \*********************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = exports.Component = void 0; +var _react = _interopRequireWildcard(__webpack_require__(/*! react */ "react")); +var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "prop-types")); +var _redux = __webpack_require__(/*! redux */ "redux"); +var _reactRedux = __webpack_require__(/*! react-redux */ "react-redux"); +var _i18n = _interopRequireDefault(__webpack_require__(/*! i18n */ "i18n")); +var _Injector = __webpack_require__(/*! lib/Injector */ "lib/Injector"); +var _HistoryViewerActions = __webpack_require__(/*! state/historyviewer/HistoryViewerActions */ "./client/src/state/historyviewer/HistoryViewerActions.js"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +class HistoryViewerToolbar extends _react.Component { + constructor(props) { + super(props); + this.handleRevert = this.handleRevert.bind(this); + this.state = { + isReverting: false + }; + } + handleRevert() { + const { + actions: { + revertToVersion + }, + onAfterRevert, + recordId, + versionId + } = this.props; + this.setState({ + isReverting: true + }); + const handler = typeof onAfterRevert === 'function' ? onAfterRevert : () => {}; + return revertToVersion(recordId, versionId, 'DRAFT', 'DRAFT').then(() => handler(versionId)); + } + render() { + const { + FormActionComponent, + ViewModeComponent, + isLatestVersion, + isPreviewable, + isRevertable + } = this.props; + const { + isReverting + } = this.state; + let revertButtonTitle = ''; + if (isReverting) { + revertButtonTitle = _i18n.default._t('HistoryViewerToolbar.REVERT_IN_PROGRESS', 'Revert in progress...'); + } else if (isLatestVersion) { + revertButtonTitle = _i18n.default._t('HistoryViewerToolbar.REVERT_UNAVAILABLE', 'Unavailable for the current version'); + } + return _react.default.createElement("div", { + className: "toolbar toolbar--south" + }, _react.default.createElement("div", { + className: "btn-toolbar" + }, isRevertable && _react.default.createElement(FormActionComponent, { + onClick: this.handleRevert, + icon: "back-in-time", + name: "revert", + attributes: { + title: revertButtonTitle + }, + data: { + buttonStyle: 'warning' + }, + disabled: isLatestVersion || isReverting, + loading: isReverting, + title: _i18n.default._t('HistoryViewerToolbar.REVERT_TO_VERSION', 'Revert to this version') + }), isPreviewable && _react.default.createElement(ViewModeComponent, { + id: "history-viewer-edit-mode", + area: "edit" + }))); + } +} +exports.Component = HistoryViewerToolbar; +HistoryViewerToolbar.propTypes = { + actions: _propTypes.default.shape({ + revertToVersion: _propTypes.default.func.isRequired + }), + FormActionComponent: _propTypes.default.elementType.isRequired, + ViewModeComponent: _propTypes.default.elementType.isRequired, + isLatestVersion: _propTypes.default.bool, + isPreviewable: _propTypes.default.bool, + isRevertable: _propTypes.default.bool, + onAfterRevert: _propTypes.default.func, + recordId: _propTypes.default.number.isRequired, + versionId: _propTypes.default.number.isRequired +}; +HistoryViewerToolbar.defaultProps = { + isLatestVersion: false, + isPreviewable: false, + isRevertable: false +}; +function mapDispatchToProps(dispatch) { + return { + onAfterRevert(versionId) { + dispatch((0, _HistoryViewerActions.addMessage)(_i18n.default.sprintf(_i18n.default._t('HistoryViewerToolbar.REVERTED_MESSAGE', 'Successfully reverted to version %s'), versionId))); + dispatch((0, _HistoryViewerActions.showList)()); + } + }; +} +var _default = exports["default"] = (0, _redux.compose)((0, _reactRedux.connect)(null, mapDispatchToProps), (0, _Injector.inject)(['FormAction', 'ViewModeToggle'], (FormActionComponent, ViewModeComponent) => ({ + FormActionComponent, + ViewModeComponent +}), () => 'VersionedAdmin.HistoryViewer.Toolbar'))(HistoryViewerToolbar); + +/***/ }), + +/***/ "./client/src/components/HistoryViewer/HistoryViewerVersion.js": +/*!*********************************************************************!*\ + !*** ./client/src/components/HistoryViewer/HistoryViewerVersion.js ***! + \*********************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = exports.Component = void 0; +var _react = _interopRequireWildcard(__webpack_require__(/*! react */ "react")); +var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "prop-types")); +var _redux = __webpack_require__(/*! redux */ "redux"); +var _reactRedux = __webpack_require__(/*! react-redux */ "react-redux"); +var _Injector = __webpack_require__(/*! lib/Injector */ "lib/Injector"); +var _versionType = __webpack_require__(/*! types/versionType */ "./client/src/types/versionType.js"); +var _compareType = __webpack_require__(/*! types/compareType */ "./client/src/types/compareType.js"); +var _i18n = _interopRequireDefault(__webpack_require__(/*! i18n */ "i18n")); +var _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ "classnames")); +var _HistoryViewerActions = __webpack_require__(/*! state/historyviewer/HistoryViewerActions */ "./client/src/state/historyviewer/HistoryViewerActions.js"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +class HistoryViewerVersion extends _react.Component { + constructor(props) { + super(props); + this.handleClick = this.handleClick.bind(this); + this.handleClose = this.handleClose.bind(this); + this.handleCompare = this.handleCompare.bind(this); + this.handleKeyUp = this.handleKeyUp.bind(this); + } + getAuthor() { + const { + version + } = this.props; + let member = {}; + if (version.published && version.publisher) { + member = version.publisher; + } else if (version.author) { + member = version.author; + } + return `${member.firstName || ''} ${member.surname || ''}`; + } + getClassNames() { + const { + extraClass, + isActive, + compare, + compare: { + compareFrom, + compareTo + } + } = this.props; + const defaultClasses = { + 'history-viewer__row': true, + 'history-viewer__row--current': isActive, + 'history-viewer__row--comparison-selected': compare && !(compareFrom && compareTo) + }; + return (0, _classnames.default)(defaultClasses, extraClass); + } + handleKeyUp(event) { + if (event.keyCode === 13) { + this.handleClick(); + } + } + handleClick() { + const { + onSelect, + version, + isActive, + compare + } = this.props; + if (isActive) { + return false; + } + onSelect(version, compare); + return false; + } + handleCompare() { + const { + onCompareMode, + version + } = this.props; + onCompareMode(version); + } + handleClose() { + const { + onSelect, + version, + compare, + compare: { + versionFrom + } + } = this.props; + if (versionFrom && versionFrom.version === version.version) { + delete compare.versionFrom; + } + onSelect(0, compare); + } + renderCompareButton() { + const { + compareModeAvailable, + compare, + FormActionComponent + } = this.props; + const translatedText = _i18n.default._t('HistoryViewerVersion.COMPARE', 'Compare'); + if (!compareModeAvailable || compare) { + return null; + } + return _react.default.createElement(FormActionComponent, { + onClick: this.handleCompare, + title: translatedText, + buttonStyle: "outline-light", + extraClass: "history-viewer__compare-button" + }, translatedText); + } + renderClearButton() { + const { + FormActionComponent, + isActive + } = this.props; + if (!isActive) { + return null; + } + return _react.default.createElement(FormActionComponent, { + onClick: this.handleClose, + icon: "cancel", + attributes: { + title: _i18n.default._t('HistoryViewerVersion.CLOSE', 'Close') + }, + title: null, + buttonStyle: "outline-light", + extraClass: "history-viewer__close-button" + }); + } + renderSelectedMessage() { + const { + isActive + } = this.props; + if (!isActive) { + return null; + } + return _react.default.createElement("span", { + className: "history-viewer__selected-message" + }, _i18n.default._t('HistoryViewerVersion.SELECTED', 'Already selected')); + } + renderActions() { + const { + isActive, + compare + } = this.props; + if (!isActive && !compare) { + return _react.default.createElement("span", { + className: "history-viewer__actions", + role: "cell" + }); + } + return _react.default.createElement("span", { + className: "history-viewer__actions", + role: "cell" + }, this.renderCompareButton(), this.renderSelectedMessage(), this.renderClearButton()); + } + render() { + const { + version, + isActive, + StateComponent + } = this.props; + const rowTitle = _i18n.default._t('HistoryViewerVersion.GO_TO_VERSION', 'Go to version {version}'); + return _react.default.createElement("li", { + className: this.getClassNames(), + role: "row" + }, _react.default.createElement("span", { + className: "history-viewer__version-link", + role: "button", + title: _i18n.default.inject(rowTitle, { + version: version.Version + }), + onClick: this.handleClick, + onKeyUp: this.handleKeyUp, + tabIndex: 0 + }, _react.default.createElement("span", { + className: "history-viewer__version-no", + role: "cell" + }, version.version), _react.default.createElement(StateComponent, { + version: version, + isActive: isActive + }), _react.default.createElement("span", { + className: "history-viewer__author", + role: "cell" + }, this.getAuthor()), this.renderActions())); + } +} +exports.Component = HistoryViewerVersion; +HistoryViewerVersion.propTypes = { + extraClass: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.array, _propTypes.default.object]), + version: _versionType.versionType, + isActive: _propTypes.default.bool, + onSelect: _propTypes.default.func, + onCompareMode: _propTypes.default.func, + compare: _compareType.compareType, + compareModeAvailable: _propTypes.default.bool, + StateComponent: _propTypes.default.elementType.isRequired, + FormActionComponent: _propTypes.default.elementType.isRequired +}; +HistoryViewerVersion.defaultProps = { + isActive: false, + version: _versionType.defaultVersion, + compare: false, + compareModeAvailable: true +}; +function mapDispatchToProps(dispatch) { + return { + onSelect(selectedVersion, compare) { + const { + versionFrom + } = compare; + if (compare) { + if (!versionFrom) { + dispatch((0, _HistoryViewerActions.setCompareFrom)(selectedVersion)); + } else { + dispatch((0, _HistoryViewerActions.setCompareTo)(selectedVersion)); + } + } else { + dispatch((0, _HistoryViewerActions.showVersion)(selectedVersion)); + dispatch((0, _HistoryViewerActions.clearMessages)()); + } + }, + onCompareMode(version) { + dispatch((0, _HistoryViewerActions.setCompareFrom)(version)); + dispatch((0, _HistoryViewerActions.setCompareMode)(true)); + } + }; +} +var _default = exports["default"] = (0, _redux.compose)((0, _reactRedux.connect)(null, mapDispatchToProps), (0, _Injector.inject)(['HistoryViewerVersionState', 'FormAction'], (StateComponent, FormActionComponent) => ({ + StateComponent, + FormActionComponent +}), _ref => { + let { + version + } = _ref; + let context = 'VersionedAdmin.HistoryViewer.HistoryViewerVersion'; + if (version) { + context += `.${version.version}`; + } + return context; +}))(HistoryViewerVersion); + +/***/ }), + +/***/ "./client/src/components/HistoryViewer/HistoryViewerVersionDetail.js": +/*!***************************************************************************!*\ + !*** ./client/src/components/HistoryViewer/HistoryViewerVersionDetail.js ***! + \***************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = exports.Component = void 0; +var _react = _interopRequireWildcard(__webpack_require__(/*! react */ "react")); +var _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ "classnames")); +var _FormBuilderLoader = _interopRequireDefault(__webpack_require__(/*! containers/FormBuilderLoader/FormBuilderLoader */ "containers/FormBuilderLoader/FormBuilderLoader")); +var _Injector = __webpack_require__(/*! lib/Injector */ "lib/Injector"); +var _versionType = __webpack_require__(/*! types/versionType */ "./client/src/types/versionType.js"); +var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "prop-types")); +var _url = _interopRequireDefault(__webpack_require__(/*! url */ "url")); +var _qs = _interopRequireDefault(__webpack_require__(/*! qs */ "qs")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +class HistoryViewerVersionDetail extends _react.PureComponent { + componentDidMount() { + this.toggleToolbarClass(true); + } + componentDidUpdate() { + this.toggleToolbarClass(this.props.previewState === 'split'); + } + componentWillUnmount() { + this.toggleToolbarClass(false); + } + getListVersions() { + const { + compare, + version + } = this.props; + if (this.isCompareMode()) { + return [compare.versionTo, compare.versionFrom]; + } + return [version]; + } + isPreviewable() { + const { + isPreviewable + } = this.props; + return isPreviewable && !this.isCompareMode(); + } + isCompareMode() { + const { + compare + } = this.props; + return compare && compare.versionFrom && compare.versionTo; + } + toggleToolbarClass() { + let add = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + const selector = document.querySelector('.CMSPageHistoryViewerController div:not(.cms-content-tools) .cms-content-header'); + const className = 'history-viewer__toolbar--condensed'; + if (selector && this.isPreviewable()) { + if (add) { + selector.classList.add(className); + } else { + selector.classList.remove(className); + } + } + } + renderPreview() { + const { + version: { + absoluteLink, + lastEdited, + version + }, + PreviewComponent, + previewState + } = this.props; + if (!this.isPreviewable() || previewState === 'edit') { + return null; + } + const parsedURL = _url.default.parse(absoluteLink); + const parsedQs = _qs.default.parse(parsedURL.query); + parsedQs.archiveDate = lastEdited; + const href = _url.default.format({ + ...parsedURL, + search: _qs.default.stringify(parsedQs) + }); + return _react.default.createElement(PreviewComponent, { + className: "history-viewer__preview flexbox-area-grow", + itemLinks: { + preview: { + Stage: { + href, + type: 'text/html' + } + } + }, + itemId: version + }); + } + renderToolbar() { + const { + ToolbarComponent, + isLatestVersion, + isRevertable, + recordId, + version + } = this.props; + if (this.isCompareMode()) { + return null; + } + return _react.default.createElement(ToolbarComponent, { + identifier: "HistoryViewer.VersionDetail.Toolbar", + isLatestVersion: isLatestVersion, + recordId: recordId, + versionId: version.version, + isPreviewable: this.isPreviewable(), + isRevertable: isRevertable + }); + } + renderDetails() { + const { + compareModeAvailable, + ListComponent, + schemaUrl, + CompareWarningComponent, + previewState + } = this.props; + if (this.isPreviewable() && previewState === 'preview') { + return null; + } + const containerClasses = ['flexbox-area-grow', 'panel', 'panel--scrollable', 'panel--padded', 'panel--padded-side']; + const extraListClasses = { + 'history-viewer__table': true, + 'history-viewer__table--current': true, + 'history-viewer__table--compare': this.isCompareMode() + }; + const formClasses = { + 'history-viewer__version-detail': true, + 'history-viewer__version-detail--compare': this.isCompareMode() + }; + return _react.default.createElement("div", { + className: "flexbox-area-grow fill-height" + }, _react.default.createElement(CompareWarningComponent, { + fixed: true + }), _react.default.createElement("div", { + className: (0, _classnames.default)(containerClasses) + }, _react.default.createElement(ListComponent, { + extraClass: (0, _classnames.default)(extraListClasses), + versions: this.getListVersions(), + compareModeAvailable: compareModeAvailable + }), _react.default.createElement("div", { + className: (0, _classnames.default)(formClasses) + }, _react.default.createElement(_FormBuilderLoader.default, { + identifier: "HistoryViewer.VersionDetail", + schemaUrl: schemaUrl + }))), this.renderToolbar()); + } + render() { + return _react.default.createElement("div", { + className: "flexbox-area-grow fill-width" + }, this.renderDetails(), this.renderPreview()); + } +} +exports.Component = HistoryViewerVersionDetail; +HistoryViewerVersionDetail.propTypes = { + isLatestVersion: _propTypes.default.bool, + isPreviewable: _propTypes.default.bool, + isRevertable: _propTypes.default.bool, + ListComponent: _propTypes.default.elementType.isRequired, + PreviewComponent: _propTypes.default.elementType, + recordId: _propTypes.default.number.isRequired, + schemaUrl: _propTypes.default.string.isRequired, + ToolbarComponent: _propTypes.default.elementType.isRequired, + version: _versionType.versionType, + compare: _propTypes.default.oneOfType([_propTypes.default.shape({ + versionFrom: _versionType.versionType, + versionTo: _versionType.versionType + }), _propTypes.default.bool]), + previewState: _propTypes.default.oneOf(['edit', 'preview', 'split']) +}; +HistoryViewerVersionDetail.defaultProps = { + isLatestVersion: false, + isPreviewable: false, + isRevertable: false, + compare: false +}; +var _default = exports["default"] = (0, _Injector.inject)(['HistoryViewerVersionList', 'HistoryViewerToolbar', 'Preview', 'HistoryViewerCompareWarning'], (ListComponent, ToolbarComponent, PreviewComponent, CompareWarningComponent) => ({ + ListComponent, + ToolbarComponent, + PreviewComponent, + CompareWarningComponent +}), (_ref, context) => { + let { + version + } = _ref; + return `${context}.HistoryViewerVersionDetail.${version.Version}`; +})(HistoryViewerVersionDetail); + +/***/ }), + +/***/ "./client/src/components/HistoryViewer/HistoryViewerVersionList.js": +/*!*************************************************************************!*\ + !*** ./client/src/components/HistoryViewer/HistoryViewerVersionList.js ***! + \*************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = exports.Component = void 0; +var _react = _interopRequireWildcard(__webpack_require__(/*! react */ "react")); +var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "prop-types")); +var _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ "classnames")); +var _i18n = _interopRequireDefault(__webpack_require__(/*! i18n */ "i18n")); +var _reactRedux = __webpack_require__(/*! react-redux */ "react-redux"); +var _redux = __webpack_require__(/*! redux */ "redux"); +var _Injector = __webpack_require__(/*! lib/Injector */ "lib/Injector"); +var _messageType = __webpack_require__(/*! types/messageType */ "./client/src/types/messageType.js"); +var _versionType = __webpack_require__(/*! types/versionType */ "./client/src/types/versionType.js"); +var _compareType = __webpack_require__(/*! types/compareType */ "./client/src/types/compareType.js"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +class HistoryViewerVersionList extends _react.PureComponent { + getClassNames() { + const { + extraClass, + showHeader + } = this.props; + return (0, _classnames.default)(extraClass, { + table: true, + 'history-viewer__table--headerless': !showHeader + }); + } + isVersionActive(version) { + const { + currentVersion, + compare, + compare: { + versionFrom, + versionTo + } + } = this.props; + const isCurrent = currentVersion && currentVersion.version === version.version; + const isCompareFrom = versionFrom && versionFrom.version === version.version; + const isCompareTo = versionTo && versionTo.version === version.version; + return !compare && isCurrent || isCompareFrom || isCompareTo; + } + renderMessages() { + const { + FormAlertComponent, + messages + } = this.props; + if (!messages.length) { + return null; + } + return _react.default.createElement("div", { + className: "history-viewer__messages" + }, messages.map(data => _react.default.createElement(FormAlertComponent, { + key: data.id, + type: data.type, + value: data.message, + closeLabel: _i18n.default._t('HistoryViewerVersionList.CLOSE', 'Close') + }))); + } + renderHeader() { + const { + showHeader, + HeadingComponent, + compareModeAvailable + } = this.props; + if (!showHeader) { + return null; + } + const headingProps = { + compareModeAvailable + }; + return _react.default.createElement(HeadingComponent, headingProps); + } + render() { + const { + VersionComponent, + versions, + compareModeAvailable, + compare + } = this.props; + return _react.default.createElement("div", { + className: "history-viewer__list" + }, this.renderMessages(), _react.default.createElement("ul", { + className: this.getClassNames(), + role: "table" + }, this.renderHeader(), versions.map(version => _react.default.createElement(VersionComponent, { + key: version.version, + isActive: this.isVersionActive(version), + version: version, + compare: compare, + compareModeAvailable: compareModeAvailable + })))); + } +} +exports.Component = HistoryViewerVersionList; +HistoryViewerVersionList.propTypes = { + extraClass: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.array, _propTypes.default.object]), + showHeader: _propTypes.default.bool, + FormAlertComponent: _propTypes.default.elementType.isRequired, + HeadingComponent: _propTypes.default.elementType.isRequired, + messages: _propTypes.default.arrayOf(_messageType.messageType), + VersionComponent: _propTypes.default.elementType.isRequired, + versions: _propTypes.default.arrayOf(_versionType.versionType), + compare: _compareType.compareType, + compareModeAvailable: _propTypes.default.bool +}; +HistoryViewerVersionList.defaultProps = { + compareModeAvailable: true, + extraClass: 'history-viewer__table', + messages: [], + showHeader: true, + versions: [] +}; +function mapStateToProps(state) { + const { + messages, + compare, + currentVersion + } = state.versionedAdmin.historyViewer; + return { + messages, + compare, + currentVersion + }; +} +var _default = exports["default"] = (0, _redux.compose)((0, _reactRedux.connect)(mapStateToProps), (0, _Injector.inject)(['FormAlert', 'HistoryViewerHeading', 'HistoryViewerVersion'], (FormAlert, HistoryViewerHeading, HistoryViewerVersion) => ({ + FormAlertComponent: FormAlert, + HeadingComponent: HistoryViewerHeading, + VersionComponent: HistoryViewerVersion +}), () => 'VersionedAdmin.HistoryViewer.HistoryViewerVersionList'))(HistoryViewerVersionList); + +/***/ }), + +/***/ "./client/src/components/HistoryViewer/HistoryViewerVersionState.js": +/*!**************************************************************************!*\ + !*** ./client/src/components/HistoryViewer/HistoryViewerVersionState.js ***! + \**************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = exports.Component = void 0; +var _react = _interopRequireWildcard(__webpack_require__(/*! react */ "react")); +var _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ "classnames")); +var _i18n = _interopRequireDefault(__webpack_require__(/*! i18n */ "i18n")); +var _moment = _interopRequireDefault(__webpack_require__(/*! moment */ "moment")); +var _versionType = __webpack_require__(/*! types/versionType */ "./client/src/types/versionType.js"); +var _Injector = __webpack_require__(/*! lib/Injector */ "lib/Injector"); +var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "prop-types")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +class HistoryViewerVersionState extends _react.Component { + getClassNames() { + const { + extraClass + } = this.props; + return (0, _classnames.default)('history-viewer__version-state', extraClass); + } + getPublishedState() { + const { + version + } = this.props; + if (version.version === 1) { + return _i18n.default._t('HistoryViewer.Created', 'Created'); + } + if (version.published) { + if (version.deleted) { + if (version.draft) { + return _i18n.default._t('HistoryViewer.Archived', 'Archived'); + } + return _i18n.default._t('HistoryViewer.Unpublished', 'Unpublished'); + } + return _i18n.default._t('HistoryViewer.Published', 'Published'); + } + return _i18n.default._t('HistoryViewer.Saved', 'Saved'); + } + getDate() { + _moment.default.locale(_i18n.default.detectLocale()); + return (0, _moment.default)(this.props.version.lastEdited).format('L LT'); + } + getBadges() { + const { + version, + isActive, + BadgeComponent + } = this.props; + if (version.liveVersion) { + return _react.default.createElement(BadgeComponent, { + status: "success", + message: _i18n.default._t('HistoryViewer.BadgeLive', 'Live'), + className: "", + inverted: isActive + }); + } + return ''; + } + render() { + return _react.default.createElement("span", { + className: this.getClassNames(), + role: "cell" + }, this.getPublishedState(), " ", _react.default.createElement("small", { + className: "text-muted" + }, this.getDate()), this.getBadges()); + } +} +exports.Component = HistoryViewerVersionState; +HistoryViewerVersionState.propTypes = { + version: _versionType.versionType, + extraClass: _propTypes.default.string, + isActive: _propTypes.default.bool, + BadgeComponent: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.func]).isRequired +}; +HistoryViewerVersionState.defaultProps = { + version: _versionType.defaultVersion, + extraClass: '', + isActive: false +}; +var _default = exports["default"] = (0, _Injector.inject)(['Badge'], BadgeComponent => ({ + BadgeComponent +}), _ref => { + let { + version + } = _ref; + return `HistoryViewer.HistoryViewerVersionState.${version.Version}`; +})(HistoryViewerVersionState); + +/***/ }), + +/***/ "./client/src/containers/HistoryViewer/HistoryViewerConfig.js": +/*!********************************************************************!*\ + !*** ./client/src/containers/HistoryViewer/HistoryViewerConfig.js ***! + \********************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; +var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react")); +var _Config = _interopRequireDefault(__webpack_require__(/*! lib/Config */ "lib/Config")); +var _Injector = __webpack_require__(/*! lib/Injector */ "lib/Injector"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const historyViewerConfig = HistoryViewer => { + class HistoryViewerConfigProvider extends _react.default.Component { + getConfig() { + const sectionKey = 'SilverStripe\\VersionedAdmin\\Controllers\\HistoryViewerController'; + return _Config.default.getSection(sectionKey); + } + getSchemaUrlDetails() { + const { + compare + } = this.props; + if (compare) { + return { + formName: 'compareForm', + queryParts: ['RecordVersionFrom=:from', 'RecordVersionTo=:to'] + }; + } + return { + formName: 'versionForm', + queryParts: ['RecordVersion=:version'] + }; + } + getSchemaUrl() { + const config = this.getConfig(); + const { + formName, + queryParts + } = this.getSchemaUrlDetails(); + const schemaUrlBase = `${config.form[formName].schemaUrl}/:id`; + const schemaUrlQuery = queryParts.concat('RecordClass=:class&RecordID=:id').join('&'); + return `${schemaUrlBase}?${schemaUrlQuery}`; + } + render() { + const props = { + ...this.props, + config: this.getConfig(), + HistoryViewer, + schemaUrl: this.getSchemaUrl() + }; + return _react.default.createElement(HistoryViewer, props); + } + } + return (0, _Injector.inject)(['HistoryViewer'])(HistoryViewerConfigProvider); +}; +var _default = exports["default"] = historyViewerConfig; + +/***/ }), + +/***/ "./client/src/legacy/ArchiveAdmin/ArchiveAdmin.js": +/*!********************************************************!*\ + !*** ./client/src/legacy/ArchiveAdmin/ArchiveAdmin.js ***! + \********************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _jquery = _interopRequireDefault(__webpack_require__(/*! jquery */ "jquery")); +var _urls = __webpack_require__(/*! lib/urls */ "lib/urls"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_jquery.default.entwine('ss', $ => { + $('.ArchiveAdmin__action--restore').entwine({ + onmatch() { + $(this).attr('readonly', false); + $(this).attr('disabled', false); + } + }); + $('.ArchiveAdmin .other-model-selector select').entwine({ + onchange(e) { + e.preventDefault(); + let targetClassName = $(this).val(); + const othersArchiveUrl = $(this).data('others-archive-url'); + if (targetClassName) { + targetClassName = targetClassName.replace(/\\/g, '-'); + const url = (0, _urls.joinUrlPaths)(othersArchiveUrl, targetClassName); + $('.cms-container').loadPanel(url, '', { + pjax: 'CurrentForm' + }); + } + } + }); +}); + +/***/ }), + +/***/ "./client/src/legacy/HistoryViewer/HistoryViewerEntwine.js": +/*!*****************************************************************!*\ + !*** ./client/src/legacy/HistoryViewer/HistoryViewerEntwine.js ***! + \*****************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _jquery = _interopRequireDefault(__webpack_require__(/*! jquery */ "jquery")); +var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react")); +var _client = __webpack_require__(/*! react-dom/client */ "react-dom/client"); +var _Injector = __webpack_require__(/*! lib/Injector */ "lib/Injector"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_jquery.default.entwine('ss', $ => { + $('.js-injector-boot .history-viewer__container').entwine({ + ReactRoot: null, + onmatch() { + const cmsContent = this.closest('.cms-content').attr('id'); + const context = cmsContent ? { + context: cmsContent + } : {}; + console.log('entwine context=', context); + const HistoryViewerComponent = (0, _Injector.loadComponent)('HistoryViewer', context); + const schemaData = this.data('schema'); + const props = { + ...schemaData.data, + isInGridField: schemaData.data.isInGridField || !this.hasClass('history-viewer--standalone') + }; + const root = (0, _client.createRoot)(this[0]); + root.render(_react.default.createElement(HistoryViewerComponent, props)); + this.setReactRoot(root); + }, + onunmatch() { + const root = this.getReactRoot(); + if (root) { + root.unmount(); + this.setReactRoot(null); + } + } + }); + $('.history-viewer__version-detail .nav-link').entwine({ + onclick(e) { + e.preventDefault(); + this._super(e); + } + }); + $('.tab.tab--history-viewer[aria-hidden=false]').entwine({ + onmatch() { + $('.toolbar--south.cms-content-actions').hide(); + }, + onunmatch() { + $('.toolbar--south.cms-content-actions').show(); + } + }); + $('.tab.tab--history-viewer .history-viewer__version-detail').entwine({ + onmatch() { + this.parent().css('padding-bottom', '3rem').next('.toolbar--south').css({ + position: 'absolute', + bottom: 0, + left: 0, + right: 0 + }); + } + }); +}); + +/***/ }), + +/***/ "./client/src/legacy/VersionedEditForm/VersionedEditForm.js": +/*!******************************************************************!*\ + !*** ./client/src/legacy/VersionedEditForm/VersionedEditForm.js ***! + \******************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _i18n = _interopRequireDefault(__webpack_require__(/*! i18n */ "i18n")); +var _jquery = _interopRequireDefault(__webpack_require__(/*! jquery */ "jquery")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_jquery.default.entwine('ss', $ => { + $('.cms-edit-form .btn-toolbar #Form_ItemEditForm_action_doUnpublish').entwine({ + onclick(e) { + const message = _i18n.default._t('VersionedEditForm.PUBLISH_CONFIRM_MESSAGE', 'Are you sure you want to remove your record from the published site?\n\nThis record will still be available in the CMS as draft.'); + if (confirm(message)) { + this.parents('form:first').addClass('loading'); + return this._super(e); + } + return false; + } + }); + $('.cms-edit-form .btn-toolbar #Form_ItemEditForm_action_doArchive').entwine({ + onclick(e) { + const message = _i18n.default._t('VersionedEditForm.ARCHIVE_CONFIRM_MESSAGE', 'Warning: This record will be unpublished before being sent to the archive.\n\nAre you sure you want to proceed?'); + if (confirm(message)) { + this.parents('form:first').addClass('loading'); + return this._super(e); + } + return false; + } + }); +}); + +/***/ }), + +/***/ "./client/src/state/historyviewer/HistoryViewerActionTypes.js": +/*!********************************************************************!*\ + !*** ./client/src/state/historyviewer/HistoryViewerActionTypes.js ***! + \********************************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; +var _default = exports["default"] = ['SHOW_VERSION', 'SHOW_LIST', 'SET_CURRENT_PAGE', 'ADD_MESSAGE', 'CLEAR_MESSAGES', 'SET_COMPARE_MODE', 'SET_COMPARE_FROM', 'SET_COMPARE_TO'].reduce((obj, item) => Object.assign(obj, { + [item]: `HISTORY_VIEWER.${item}` +}), {}); + +/***/ }), + +/***/ "./client/src/state/historyviewer/HistoryViewerActions.js": +/*!****************************************************************!*\ + !*** ./client/src/state/historyviewer/HistoryViewerActions.js ***! + \****************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.addMessage = addMessage; +exports.clearMessages = clearMessages; +exports.setCompareFrom = setCompareFrom; +exports.setCompareMode = setCompareMode; +exports.setCompareTo = setCompareTo; +exports.setCurrentPage = setCurrentPage; +exports.showList = showList; +exports.showVersion = showVersion; +var _uuid = __webpack_require__(/*! uuid */ "./node_modules/uuid/dist/commonjs-browser/index.js"); +var _HistoryViewerActionTypes = _interopRequireDefault(__webpack_require__(/*! ./HistoryViewerActionTypes */ "./client/src/state/historyviewer/HistoryViewerActionTypes.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function showVersion(version) { + return { + type: _HistoryViewerActionTypes.default.SHOW_VERSION, + payload: { + version + } + }; +} +function showList() { + return { + type: _HistoryViewerActionTypes.default.SHOW_LIST + }; +} +function setCurrentPage(page) { + return { + type: _HistoryViewerActionTypes.default.SET_CURRENT_PAGE, + payload: { + page + } + }; +} +function addMessage(message) { + let type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'success'; + return { + type: _HistoryViewerActionTypes.default.ADD_MESSAGE, + payload: { + id: (0, _uuid.v1)(), + message, + type + } + }; +} +function clearMessages() { + return { + type: _HistoryViewerActionTypes.default.CLEAR_MESSAGES + }; +} +function setCompareMode(enabled) { + return { + type: _HistoryViewerActionTypes.default.SET_COMPARE_MODE, + payload: { + enabled + } + }; +} +function setCompareFrom(version) { + return { + type: _HistoryViewerActionTypes.default.SET_COMPARE_FROM, + payload: { + version + } + }; +} +function setCompareTo(version) { + return { + type: _HistoryViewerActionTypes.default.SET_COMPARE_TO, + payload: { + version + } + }; +} + +/***/ }), + +/***/ "./client/src/state/historyviewer/HistoryViewerReducer.js": +/*!****************************************************************!*\ + !*** ./client/src/state/historyviewer/HistoryViewerReducer.js ***! + \****************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = historyViewerReducer; +var _compareType = __webpack_require__(/*! types/compareType */ "./client/src/types/compareType.js"); +var _HistoryViewerActionTypes = _interopRequireDefault(__webpack_require__(/*! ./HistoryViewerActionTypes */ "./client/src/state/historyviewer/HistoryViewerActionTypes.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const initialState = { + currentPage: 1, + currentVersion: false, + compare: _compareType.defaultCompare, + loading: false, + messages: [] +}; +function historyViewerReducer() { + let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; + let { + type, + payload + } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + switch (type) { + case _HistoryViewerActionTypes.default.SET_CURRENT_PAGE: + { + return { + ...state, + currentPage: payload.page + }; + } + case _HistoryViewerActionTypes.default.SHOW_VERSION: + { + return { + ...state, + currentVersion: payload.version + }; + } + case _HistoryViewerActionTypes.default.SHOW_LIST: + { + return { + ...state, + currentVersion: 0, + currentPage: 0 + }; + } + case _HistoryViewerActionTypes.default.ADD_MESSAGE: + { + return { + ...state, + messages: [payload, ...state.messages] + }; + } + case _HistoryViewerActionTypes.default.CLEAR_MESSAGES: + { + return { + ...state, + messages: [] + }; + } + case _HistoryViewerActionTypes.default.SET_COMPARE_MODE: + { + const initialCompare = { + versionFrom: false, + versionTo: false, + ...state.compare + }; + return { + ...state, + compare: payload.enabled ? initialCompare : false + }; + } + case _HistoryViewerActionTypes.default.SET_COMPARE_FROM: + { + let { + compare: { + versionFrom, + versionTo + } + } = state; + versionFrom = payload.version || false; + if (!versionFrom) { + versionFrom = versionTo; + versionTo = false; + } + return { + ...state, + currentVersion: versionFrom, + compare: { + versionFrom, + versionTo + } + }; + } + case _HistoryViewerActionTypes.default.SET_COMPARE_TO: + { + let { + compare: { + versionFrom, + versionTo + } + } = state; + versionTo = payload.version || false; + if (versionTo && versionFrom && versionTo.version < versionFrom.version) { + versionFrom = versionTo; + versionTo = state.compare.versionFrom; + } + return { + ...state, + currentVersion: versionFrom, + compare: { + versionFrom, + versionTo + } + }; + } + default: + return state; + } +} + +/***/ }), + +/***/ "./client/src/types/compareType.js": +/*!*****************************************!*\ + !*** ./client/src/types/compareType.js ***! + \*****************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.defaultCompare = exports.compareType = void 0; +var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "prop-types")); +var _versionType = __webpack_require__(/*! ./versionType */ "./client/src/types/versionType.js"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const compareType = exports.compareType = _propTypes.default.oneOfType([_propTypes.default.bool, _propTypes.default.shape({ + versionFrom: _versionType.versionType, + versionTo: _versionType.versionType +})]); +const defaultCompare = exports.defaultCompare = false; + +/***/ }), + +/***/ "./client/src/types/messageType.js": +/*!*****************************************!*\ + !*** ./client/src/types/messageType.js ***! + \*****************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.messageType = void 0; +var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "prop-types")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const messageType = exports.messageType = _propTypes.default.shape({ + id: _propTypes.default.string, + message: _propTypes.default.string, + type: _propTypes.default.oneOf(['error', 'info', 'success', 'warning']) +}); + +/***/ }), + +/***/ "./client/src/types/versionType.js": +/*!*******************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0]!./client/src/types/versionType.js ***! + \*******************************************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.versionType = exports.defaultVersion = void 0; +var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "prop-types")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const memberShape = _propTypes.default.shape({ + firstName: _propTypes.default.string, + surname: _propTypes.default.string +}); +const versionType = exports.versionType = _propTypes.default.shape({ + version: _propTypes.default.number, + absoluteLink: _propTypes.default.string, + lastEdited: _propTypes.default.string, + published: _propTypes.default.bool, + draft: _propTypes.default.bool, + deleted: _propTypes.default.bool, + liveVersion: _propTypes.default.bool, + latestDraftVersion: _propTypes.default.bool, + publisher: memberShape, + author: memberShape +}); +const defaultVersion = exports.defaultVersion = { + version: 0, + absoluteLink: '', + lastEdited: '', + published: false, + draft: true, + deleted: false, + liveVersion: false, + latestDraftVersion: false, + publisher: { + firstName: '', + surname: '' + }, + author: { + firstName: '', + surname: '' + } +}; + +/***/ }), + +/***/ "./node_modules/create-react-class/factory.js": +/*!****************************************************!*\ + !*** ./node_modules/create-react-class/factory.js ***! + \****************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + + + +var _assign = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js"); + +// -- Inlined from fbjs -- + +var emptyObject = {}; + +if (true) { + Object.freeze(emptyObject); +} + +var validateFormat = function validateFormat(format) {}; + +if (true) { + validateFormat = function validateFormat(format) { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + }; +} + +function _invariant(condition, format, a, b, c, d, e, f) { + validateFormat(format); + + if (!condition) { + var error; + if (format === undefined) { + error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error(format.replace(/%s/g, function () { + return args[argIndex++]; + })); + error.name = 'Invariant Violation'; + } + + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; + } +} + +var warning = function(){}; + +if (true) { + var printWarning = function printWarning(format) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var argIndex = 0; + var message = 'Warning: ' + format.replace(/%s/g, function () { + return args[argIndex++]; + }); + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; + + warning = function warning(condition, format) { + if (format === undefined) { + throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); + } + + if (format.indexOf('Failed Composite propType: ') === 0) { + return; // Ignore CompositeComponent proptype check. + } + + if (!condition) { + for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + args[_key2 - 2] = arguments[_key2]; + } + + printWarning.apply(undefined, [format].concat(args)); + } + }; +} + +// /-- Inlined from fbjs -- + +var MIXINS_KEY = 'mixins'; + +// Helper function to allow the creation of anonymous functions which do not +// have .name set to the name of the variable being assigned to. +function identity(fn) { + return fn; +} + +var ReactPropTypeLocationNames; +if (true) { + ReactPropTypeLocationNames = { + prop: 'prop', + context: 'context', + childContext: 'child context' + }; +} else {} + +function factory(ReactComponent, isValidElement, ReactNoopUpdateQueue) { + /** + * Policies that describe methods in `ReactClassInterface`. + */ + + var injectedMixins = []; + + /** + * Composite components are higher-level components that compose other composite + * or host components. + * + * To create a new type of `ReactClass`, pass a specification of + * your new class to `React.createClass`. The only requirement of your class + * specification is that you implement a `render` method. + * + * var MyComponent = React.createClass({ + * render: function() { + * return
Hello World
; + * } + * }); + * + * The class specification supports a specific protocol of methods that have + * special meaning (e.g. `render`). See `ReactClassInterface` for + * more the comprehensive protocol. Any other properties and methods in the + * class specification will be available on the prototype. + * + * @interface ReactClassInterface + * @internal + */ + var ReactClassInterface = { + /** + * An array of Mixin objects to include when defining your component. + * + * @type {array} + * @optional + */ + mixins: 'DEFINE_MANY', + + /** + * An object containing properties and methods that should be defined on + * the component's constructor instead of its prototype (static methods). + * + * @type {object} + * @optional + */ + statics: 'DEFINE_MANY', + + /** + * Definition of prop types for this component. + * + * @type {object} + * @optional + */ + propTypes: 'DEFINE_MANY', + + /** + * Definition of context types for this component. + * + * @type {object} + * @optional + */ + contextTypes: 'DEFINE_MANY', + + /** + * Definition of context types this component sets for its children. + * + * @type {object} + * @optional + */ + childContextTypes: 'DEFINE_MANY', + + // ==== Definition methods ==== + + /** + * Invoked when the component is mounted. Values in the mapping will be set on + * `this.props` if that prop is not specified (i.e. using an `in` check). + * + * This method is invoked before `getInitialState` and therefore cannot rely + * on `this.state` or use `this.setState`. + * + * @return {object} + * @optional + */ + getDefaultProps: 'DEFINE_MANY_MERGED', + + /** + * Invoked once before the component is mounted. The return value will be used + * as the initial value of `this.state`. + * + * getInitialState: function() { + * return { + * isOn: false, + * fooBaz: new BazFoo() + * } + * } + * + * @return {object} + * @optional + */ + getInitialState: 'DEFINE_MANY_MERGED', + + /** + * @return {object} + * @optional + */ + getChildContext: 'DEFINE_MANY_MERGED', + + /** + * Uses props from `this.props` and state from `this.state` to render the + * structure of the component. + * + * No guarantees are made about when or how often this method is invoked, so + * it must not have side effects. + * + * render: function() { + * var name = this.props.name; + * return
Hello, {name}!
; + * } + * + * @return {ReactComponent} + * @required + */ + render: 'DEFINE_ONCE', + + // ==== Delegate methods ==== + + /** + * Invoked when the component is initially created and about to be mounted. + * This may have side effects, but any external subscriptions or data created + * by this method must be cleaned up in `componentWillUnmount`. + * + * @optional + */ + componentWillMount: 'DEFINE_MANY', + + /** + * Invoked when the component has been mounted and has a DOM representation. + * However, there is no guarantee that the DOM node is in the document. + * + * Use this as an opportunity to operate on the DOM when the component has + * been mounted (initialized and rendered) for the first time. + * + * @param {DOMElement} rootNode DOM element representing the component. + * @optional + */ + componentDidMount: 'DEFINE_MANY', + + /** + * Invoked before the component receives new props. + * + * Use this as an opportunity to react to a prop transition by updating the + * state using `this.setState`. Current props are accessed via `this.props`. + * + * componentWillReceiveProps: function(nextProps, nextContext) { + * this.setState({ + * likesIncreasing: nextProps.likeCount > this.props.likeCount + * }); + * } + * + * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop + * transition may cause a state change, but the opposite is not true. If you + * need it, you are probably looking for `componentWillUpdate`. + * + * @param {object} nextProps + * @optional + */ + componentWillReceiveProps: 'DEFINE_MANY', + + /** + * Invoked while deciding if the component should be updated as a result of + * receiving new props, state and/or context. + * + * Use this as an opportunity to `return false` when you're certain that the + * transition to the new props/state/context will not require a component + * update. + * + * shouldComponentUpdate: function(nextProps, nextState, nextContext) { + * return !equal(nextProps, this.props) || + * !equal(nextState, this.state) || + * !equal(nextContext, this.context); + * } + * + * @param {object} nextProps + * @param {?object} nextState + * @param {?object} nextContext + * @return {boolean} True if the component should update. + * @optional + */ + shouldComponentUpdate: 'DEFINE_ONCE', + + /** + * Invoked when the component is about to update due to a transition from + * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState` + * and `nextContext`. + * + * Use this as an opportunity to perform preparation before an update occurs. + * + * NOTE: You **cannot** use `this.setState()` in this method. + * + * @param {object} nextProps + * @param {?object} nextState + * @param {?object} nextContext + * @param {ReactReconcileTransaction} transaction + * @optional + */ + componentWillUpdate: 'DEFINE_MANY', + + /** + * Invoked when the component's DOM representation has been updated. + * + * Use this as an opportunity to operate on the DOM when the component has + * been updated. + * + * @param {object} prevProps + * @param {?object} prevState + * @param {?object} prevContext + * @param {DOMElement} rootNode DOM element representing the component. + * @optional + */ + componentDidUpdate: 'DEFINE_MANY', + + /** + * Invoked when the component is about to be removed from its parent and have + * its DOM representation destroyed. + * + * Use this as an opportunity to deallocate any external resources. + * + * NOTE: There is no `componentDidUnmount` since your component will have been + * destroyed by that point. + * + * @optional + */ + componentWillUnmount: 'DEFINE_MANY', + + /** + * Replacement for (deprecated) `componentWillMount`. + * + * @optional + */ + UNSAFE_componentWillMount: 'DEFINE_MANY', + + /** + * Replacement for (deprecated) `componentWillReceiveProps`. + * + * @optional + */ + UNSAFE_componentWillReceiveProps: 'DEFINE_MANY', + + /** + * Replacement for (deprecated) `componentWillUpdate`. + * + * @optional + */ + UNSAFE_componentWillUpdate: 'DEFINE_MANY', + + // ==== Advanced methods ==== + + /** + * Updates the component's currently mounted DOM representation. + * + * By default, this implements React's rendering and reconciliation algorithm. + * Sophisticated clients may wish to override this. + * + * @param {ReactReconcileTransaction} transaction + * @internal + * @overridable + */ + updateComponent: 'OVERRIDE_BASE' + }; + + /** + * Similar to ReactClassInterface but for static methods. + */ + var ReactClassStaticInterface = { + /** + * This method is invoked after a component is instantiated and when it + * receives new props. Return an object to update state in response to + * prop changes. Return null to indicate no change to state. + * + * If an object is returned, its keys will be merged into the existing state. + * + * @return {object || null} + * @optional + */ + getDerivedStateFromProps: 'DEFINE_MANY_MERGED' + }; + + /** + * Mapping from class specification keys to special processing functions. + * + * Although these are declared like instance properties in the specification + * when defining classes using `React.createClass`, they are actually static + * and are accessible on the constructor instead of the prototype. Despite + * being static, they must be defined outside of the "statics" key under + * which all other static methods are defined. + */ + var RESERVED_SPEC_KEYS = { + displayName: function(Constructor, displayName) { + Constructor.displayName = displayName; + }, + mixins: function(Constructor, mixins) { + if (mixins) { + for (var i = 0; i < mixins.length; i++) { + mixSpecIntoComponent(Constructor, mixins[i]); + } + } + }, + childContextTypes: function(Constructor, childContextTypes) { + if (true) { + validateTypeDef(Constructor, childContextTypes, 'childContext'); + } + Constructor.childContextTypes = _assign( + {}, + Constructor.childContextTypes, + childContextTypes + ); + }, + contextTypes: function(Constructor, contextTypes) { + if (true) { + validateTypeDef(Constructor, contextTypes, 'context'); + } + Constructor.contextTypes = _assign( + {}, + Constructor.contextTypes, + contextTypes + ); + }, + /** + * Special case getDefaultProps which should move into statics but requires + * automatic merging. + */ + getDefaultProps: function(Constructor, getDefaultProps) { + if (Constructor.getDefaultProps) { + Constructor.getDefaultProps = createMergedResultFunction( + Constructor.getDefaultProps, + getDefaultProps + ); + } else { + Constructor.getDefaultProps = getDefaultProps; + } + }, + propTypes: function(Constructor, propTypes) { + if (true) { + validateTypeDef(Constructor, propTypes, 'prop'); + } + Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes); + }, + statics: function(Constructor, statics) { + mixStaticSpecIntoComponent(Constructor, statics); + }, + autobind: function() {} + }; + + function validateTypeDef(Constructor, typeDef, location) { + for (var propName in typeDef) { + if (typeDef.hasOwnProperty(propName)) { + // use a warning instead of an _invariant so components + // don't show up in prod but only in __DEV__ + if (true) { + warning( + typeof typeDef[propName] === 'function', + '%s: %s type `%s` is invalid; it must be a function, usually from ' + + 'React.PropTypes.', + Constructor.displayName || 'ReactClass', + ReactPropTypeLocationNames[location], + propName + ); + } + } + } + } + + function validateMethodOverride(isAlreadyDefined, name) { + var specPolicy = ReactClassInterface.hasOwnProperty(name) + ? ReactClassInterface[name] + : null; + + // Disallow overriding of base class methods unless explicitly allowed. + if (ReactClassMixin.hasOwnProperty(name)) { + _invariant( + specPolicy === 'OVERRIDE_BASE', + 'ReactClassInterface: You are attempting to override ' + + '`%s` from your class specification. Ensure that your method names ' + + 'do not overlap with React methods.', + name + ); + } + + // Disallow defining methods more than once unless explicitly allowed. + if (isAlreadyDefined) { + _invariant( + specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED', + 'ReactClassInterface: You are attempting to define ' + + '`%s` on your component more than once. This conflict may be due ' + + 'to a mixin.', + name + ); + } + } + + /** + * Mixin helper which handles policy validation and reserved + * specification keys when building React classes. + */ + function mixSpecIntoComponent(Constructor, spec) { + if (!spec) { + if (true) { + var typeofSpec = typeof spec; + var isMixinValid = typeofSpec === 'object' && spec !== null; + + if (true) { + warning( + isMixinValid, + "%s: You're attempting to include a mixin that is either null " + + 'or not an object. Check the mixins included by the component, ' + + 'as well as any mixins they include themselves. ' + + 'Expected object but got %s.', + Constructor.displayName || 'ReactClass', + spec === null ? null : typeofSpec + ); + } + } + + return; + } + + _invariant( + typeof spec !== 'function', + "ReactClass: You're attempting to " + + 'use a component class or function as a mixin. Instead, just use a ' + + 'regular object.' + ); + _invariant( + !isValidElement(spec), + "ReactClass: You're attempting to " + + 'use a component as a mixin. Instead, just use a regular object.' + ); + + var proto = Constructor.prototype; + var autoBindPairs = proto.__reactAutoBindPairs; + + // By handling mixins before any other properties, we ensure the same + // chaining order is applied to methods with DEFINE_MANY policy, whether + // mixins are listed before or after these methods in the spec. + if (spec.hasOwnProperty(MIXINS_KEY)) { + RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins); + } + + for (var name in spec) { + if (!spec.hasOwnProperty(name)) { + continue; + } + + if (name === MIXINS_KEY) { + // We have already handled mixins in a special case above. + continue; + } + + var property = spec[name]; + var isAlreadyDefined = proto.hasOwnProperty(name); + validateMethodOverride(isAlreadyDefined, name); + + if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) { + RESERVED_SPEC_KEYS[name](Constructor, property); + } else { + // Setup methods on prototype: + // The following member methods should not be automatically bound: + // 1. Expected ReactClass methods (in the "interface"). + // 2. Overridden methods (that were mixed in). + var isReactClassMethod = ReactClassInterface.hasOwnProperty(name); + var isFunction = typeof property === 'function'; + var shouldAutoBind = + isFunction && + !isReactClassMethod && + !isAlreadyDefined && + spec.autobind !== false; + + if (shouldAutoBind) { + autoBindPairs.push(name, property); + proto[name] = property; + } else { + if (isAlreadyDefined) { + var specPolicy = ReactClassInterface[name]; + + // These cases should already be caught by validateMethodOverride. + _invariant( + isReactClassMethod && + (specPolicy === 'DEFINE_MANY_MERGED' || + specPolicy === 'DEFINE_MANY'), + 'ReactClass: Unexpected spec policy %s for key %s ' + + 'when mixing in component specs.', + specPolicy, + name + ); + + // For methods which are defined more than once, call the existing + // methods before calling the new property, merging if appropriate. + if (specPolicy === 'DEFINE_MANY_MERGED') { + proto[name] = createMergedResultFunction(proto[name], property); + } else if (specPolicy === 'DEFINE_MANY') { + proto[name] = createChainedFunction(proto[name], property); + } + } else { + proto[name] = property; + if (true) { + // Add verbose displayName to the function, which helps when looking + // at profiling tools. + if (typeof property === 'function' && spec.displayName) { + proto[name].displayName = spec.displayName + '_' + name; + } + } + } + } + } + } + } + + function mixStaticSpecIntoComponent(Constructor, statics) { + if (!statics) { + return; + } + + for (var name in statics) { + var property = statics[name]; + if (!statics.hasOwnProperty(name)) { + continue; + } + + var isReserved = name in RESERVED_SPEC_KEYS; + _invariant( + !isReserved, + 'ReactClass: You are attempting to define a reserved ' + + 'property, `%s`, that shouldn\'t be on the "statics" key. Define it ' + + 'as an instance property instead; it will still be accessible on the ' + + 'constructor.', + name + ); + + var isAlreadyDefined = name in Constructor; + if (isAlreadyDefined) { + var specPolicy = ReactClassStaticInterface.hasOwnProperty(name) + ? ReactClassStaticInterface[name] + : null; + + _invariant( + specPolicy === 'DEFINE_MANY_MERGED', + 'ReactClass: You are attempting to define ' + + '`%s` on your component more than once. This conflict may be ' + + 'due to a mixin.', + name + ); + + Constructor[name] = createMergedResultFunction(Constructor[name], property); + + return; + } + + Constructor[name] = property; + } + } + + /** + * Merge two objects, but throw if both contain the same key. + * + * @param {object} one The first object, which is mutated. + * @param {object} two The second object + * @return {object} one after it has been mutated to contain everything in two. + */ + function mergeIntoWithNoDuplicateKeys(one, two) { + _invariant( + one && two && typeof one === 'object' && typeof two === 'object', + 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.' + ); + + for (var key in two) { + if (two.hasOwnProperty(key)) { + _invariant( + one[key] === undefined, + 'mergeIntoWithNoDuplicateKeys(): ' + + 'Tried to merge two objects with the same key: `%s`. This conflict ' + + 'may be due to a mixin; in particular, this may be caused by two ' + + 'getInitialState() or getDefaultProps() methods returning objects ' + + 'with clashing keys.', + key + ); + one[key] = two[key]; + } + } + return one; + } + + /** + * Creates a function that invokes two functions and merges their return values. + * + * @param {function} one Function to invoke first. + * @param {function} two Function to invoke second. + * @return {function} Function that invokes the two argument functions. + * @private + */ + function createMergedResultFunction(one, two) { + return function mergedResult() { + var a = one.apply(this, arguments); + var b = two.apply(this, arguments); + if (a == null) { + return b; + } else if (b == null) { + return a; + } + var c = {}; + mergeIntoWithNoDuplicateKeys(c, a); + mergeIntoWithNoDuplicateKeys(c, b); + return c; + }; + } + + /** + * Creates a function that invokes two functions and ignores their return vales. + * + * @param {function} one Function to invoke first. + * @param {function} two Function to invoke second. + * @return {function} Function that invokes the two argument functions. + * @private + */ + function createChainedFunction(one, two) { + return function chainedFunction() { + one.apply(this, arguments); + two.apply(this, arguments); + }; + } + + /** + * Binds a method to the component. + * + * @param {object} component Component whose method is going to be bound. + * @param {function} method Method to be bound. + * @return {function} The bound method. + */ + function bindAutoBindMethod(component, method) { + var boundMethod = method.bind(component); + if (true) { + boundMethod.__reactBoundContext = component; + boundMethod.__reactBoundMethod = method; + boundMethod.__reactBoundArguments = null; + var componentName = component.constructor.displayName; + var _bind = boundMethod.bind; + boundMethod.bind = function(newThis) { + for ( + var _len = arguments.length, + args = Array(_len > 1 ? _len - 1 : 0), + _key = 1; + _key < _len; + _key++ + ) { + args[_key - 1] = arguments[_key]; + } + + // User is trying to bind() an autobound method; we effectively will + // ignore the value of "this" that the user is trying to use, so + // let's warn. + if (newThis !== component && newThis !== null) { + if (true) { + warning( + false, + 'bind(): React component methods may only be bound to the ' + + 'component instance. See %s', + componentName + ); + } + } else if (!args.length) { + if (true) { + warning( + false, + 'bind(): You are binding a component method to the component. ' + + 'React does this for you automatically in a high-performance ' + + 'way, so you can safely remove this call. See %s', + componentName + ); + } + return boundMethod; + } + var reboundMethod = _bind.apply(boundMethod, arguments); + reboundMethod.__reactBoundContext = component; + reboundMethod.__reactBoundMethod = method; + reboundMethod.__reactBoundArguments = args; + return reboundMethod; + }; + } + return boundMethod; + } + + /** + * Binds all auto-bound methods in a component. + * + * @param {object} component Component whose method is going to be bound. + */ + function bindAutoBindMethods(component) { + var pairs = component.__reactAutoBindPairs; + for (var i = 0; i < pairs.length; i += 2) { + var autoBindKey = pairs[i]; + var method = pairs[i + 1]; + component[autoBindKey] = bindAutoBindMethod(component, method); + } + } + + var IsMountedPreMixin = { + componentDidMount: function() { + this.__isMounted = true; + } + }; + + var IsMountedPostMixin = { + componentWillUnmount: function() { + this.__isMounted = false; + } + }; + + /** + * Add more to the ReactClass base class. These are all legacy features and + * therefore not already part of the modern ReactComponent. + */ + var ReactClassMixin = { + /** + * TODO: This will be deprecated because state should always keep a consistent + * type signature and the only use case for this, is to avoid that. + */ + replaceState: function(newState, callback) { + this.updater.enqueueReplaceState(this, newState, callback); + }, + + /** + * Checks whether or not this composite component is mounted. + * @return {boolean} True if mounted, false otherwise. + * @protected + * @final + */ + isMounted: function() { + if (true) { + warning( + this.__didWarnIsMounted, + '%s: isMounted is deprecated. Instead, make sure to clean up ' + + 'subscriptions and pending requests in componentWillUnmount to ' + + 'prevent memory leaks.', + (this.constructor && this.constructor.displayName) || + this.name || + 'Component' + ); + this.__didWarnIsMounted = true; + } + return !!this.__isMounted; + } + }; + + var ReactClassComponent = function() {}; + _assign( + ReactClassComponent.prototype, + ReactComponent.prototype, + ReactClassMixin + ); + + /** + * Creates a composite component class given a class specification. + * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass + * + * @param {object} spec Class specification (which must define `render`). + * @return {function} Component constructor function. + * @public + */ + function createClass(spec) { + // To keep our warnings more understandable, we'll use a little hack here to + // ensure that Constructor.name !== 'Constructor'. This makes sure we don't + // unnecessarily identify a class without displayName as 'Constructor'. + var Constructor = identity(function(props, context, updater) { + // This constructor gets overridden by mocks. The argument is used + // by mocks to assert on what gets mounted. + + if (true) { + warning( + this instanceof Constructor, + 'Something is calling a React component directly. Use a factory or ' + + 'JSX instead. See: https://fb.me/react-legacyfactory' + ); + } + + // Wire up auto-binding + if (this.__reactAutoBindPairs.length) { + bindAutoBindMethods(this); + } + + this.props = props; + this.context = context; + this.refs = emptyObject; + this.updater = updater || ReactNoopUpdateQueue; + + this.state = null; + + // ReactClasses doesn't have constructors. Instead, they use the + // getInitialState and componentWillMount methods for initialization. + + var initialState = this.getInitialState ? this.getInitialState() : null; + if (true) { + // We allow auto-mocks to proceed as if they're returning null. + if ( + initialState === undefined && + this.getInitialState._isMockFunction + ) { + // This is probably bad practice. Consider warning here and + // deprecating this convenience. + initialState = null; + } + } + _invariant( + typeof initialState === 'object' && !Array.isArray(initialState), + '%s.getInitialState(): must return an object or null', + Constructor.displayName || 'ReactCompositeComponent' + ); + + this.state = initialState; + }); + Constructor.prototype = new ReactClassComponent(); + Constructor.prototype.constructor = Constructor; + Constructor.prototype.__reactAutoBindPairs = []; + + injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor)); + + mixSpecIntoComponent(Constructor, IsMountedPreMixin); + mixSpecIntoComponent(Constructor, spec); + mixSpecIntoComponent(Constructor, IsMountedPostMixin); + + // Initialize the defaultProps property after all mixins have been merged. + if (Constructor.getDefaultProps) { + Constructor.defaultProps = Constructor.getDefaultProps(); + } + + if (true) { + // This is a tag to indicate that the use of these method names is ok, + // since it's used with createClass. If it's not, then it's likely a + // mistake so we'll warn you to use the static property, property + // initializer or constructor respectively. + if (Constructor.getDefaultProps) { + Constructor.getDefaultProps.isReactClassApproved = {}; + } + if (Constructor.prototype.getInitialState) { + Constructor.prototype.getInitialState.isReactClassApproved = {}; + } + } + + _invariant( + Constructor.prototype.render, + 'createClass(...): Class specification must implement a `render` method.' + ); + + if (true) { + warning( + !Constructor.prototype.componentShouldUpdate, + '%s has a method called ' + + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + + 'The name is phrased as a question because the function is ' + + 'expected to return a value.', + spec.displayName || 'A component' + ); + warning( + !Constructor.prototype.componentWillRecieveProps, + '%s has a method called ' + + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', + spec.displayName || 'A component' + ); + warning( + !Constructor.prototype.UNSAFE_componentWillRecieveProps, + '%s has a method called UNSAFE_componentWillRecieveProps(). ' + + 'Did you mean UNSAFE_componentWillReceiveProps()?', + spec.displayName || 'A component' + ); + } + + // Reduce time spent doing lookups by setting these on the prototype. + for (var methodName in ReactClassInterface) { + if (!Constructor.prototype[methodName]) { + Constructor.prototype[methodName] = null; + } + } + + return Constructor; + } + + return createClass; +} + +module.exports = factory; + + +/***/ }), + +/***/ "./node_modules/create-react-class/index.js": +/*!**************************************************!*\ + !*** ./node_modules/create-react-class/index.js ***! + \**************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + + + +var React = __webpack_require__(/*! react */ "react"); +var factory = __webpack_require__(/*! ./factory */ "./node_modules/create-react-class/factory.js"); + +if (typeof React === 'undefined') { + throw Error( + 'create-react-class could not find the React object. If you are using script tags, ' + + 'make sure that React is being loaded before create-react-class.' + ); +} + +// Hack to grab NoopUpdateQueue from isomorphic React +var ReactNoopUpdateQueue = new React.Component().updater; + +module.exports = factory( + React.Component, + React.isValidElement, + ReactNoopUpdateQueue +); + + +/***/ }), + +/***/ "./node_modules/expose-loader/dist/cjs.js?exposes=HistoryViewer!./client/src/components/HistoryViewer/HistoryViewer-exposed.js": +/*!*************************************************************************************************************************************!*\ + !*** ./node_modules/expose-loader/dist/cjs.js?exposes=HistoryViewer!./client/src/components/HistoryViewer/HistoryViewer-exposed.js ***! + \*************************************************************************************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var ___EXPOSE_LOADER_IMPORT___ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0]!./HistoryViewer.js */ "./client/src/components/HistoryViewer/HistoryViewer.js"); +var ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = __webpack_require__(/*! ../../../../node_modules/expose-loader/dist/runtime/getGlobalThis.js */ "./node_modules/expose-loader/dist/runtime/getGlobalThis.js"); +var ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___; +if (typeof ___EXPOSE_LOADER_GLOBAL_THIS___["HistoryViewer"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___["HistoryViewer"] = ___EXPOSE_LOADER_IMPORT___; +else throw new Error('[exposes-loader] The "HistoryViewer" value exists in the global scope, it may not be safe to overwrite it, use the "override" option') +module.exports = ___EXPOSE_LOADER_IMPORT___; + + +/***/ }), + +/***/ "./node_modules/expose-loader/dist/cjs.js?exposes=versionType!./client/src/types/versionType.js": +/*!**************************************************************************************************************!*\ + !*** ./node_modules/expose-loader/dist/cjs.js?exposes=versionType!./client/src/types/versionType-exposed.js ***! + \**************************************************************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var ___EXPOSE_LOADER_IMPORT___ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0]!./versionType.js */ "./client/src/types/versionType.js"); +var ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = __webpack_require__(/*! ../../../node_modules/expose-loader/dist/runtime/getGlobalThis.js */ "./node_modules/expose-loader/dist/runtime/getGlobalThis.js"); +var ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___; +if (typeof ___EXPOSE_LOADER_GLOBAL_THIS___["versionType"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___["versionType"] = ___EXPOSE_LOADER_IMPORT___; +else throw new Error('[exposes-loader] The "versionType" value exists in the global scope, it may not be safe to overwrite it, use the "override" option') +module.exports = ___EXPOSE_LOADER_IMPORT___; + + +/***/ }), + +/***/ "./node_modules/expose-loader/dist/runtime/getGlobalThis.js": +/*!******************************************************************!*\ + !*** ./node_modules/expose-loader/dist/runtime/getGlobalThis.js ***! + \******************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// eslint-disable-next-line func-names +module.exports = function () { + if (typeof globalThis === "object") { + return globalThis; + } + var g; + try { + // This works if eval is allowed (see CSP) + // eslint-disable-next-line no-new-func + g = this || new Function("return this")(); + } catch (e) { + // This works if the window reference is available + if (typeof window === "object") { + return window; + } + + // This works if the self reference is available + if (typeof self === "object") { + return self; + } + + // This works if the global reference is available + if (typeof __webpack_require__.g !== "undefined") { + return __webpack_require__.g; + } + } + return g; +}(); + +/***/ }), + +/***/ "./node_modules/griddle-react/modules/columnProperties.js": +/*!****************************************************************!*\ + !*** ./node_modules/griddle-react/modules/columnProperties.js ***! + \****************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + +var map = __webpack_require__(/*! lodash/map */ "./node_modules/lodash/map.js"); +var filter = __webpack_require__(/*! lodash/filter */ "./node_modules/lodash/filter.js"); +var find = __webpack_require__(/*! lodash/find */ "./node_modules/lodash/find.js"); +var sortBy = __webpack_require__(/*! lodash/sortBy */ "./node_modules/lodash/sortBy.js"); +var difference = __webpack_require__(/*! lodash/difference */ "./node_modules/lodash/difference.js"); + +var ColumnProperties = (function () { + function ColumnProperties() { + var allColumns = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0]; + var filteredColumns = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1]; + var childrenColumnName = arguments.length <= 2 || arguments[2] === undefined ? "children" : arguments[2]; + var columnMetadata = arguments.length <= 3 || arguments[3] === undefined ? [] : arguments[3]; + var metadataColumns = arguments.length <= 4 || arguments[4] === undefined ? [] : arguments[4]; + + _classCallCheck(this, ColumnProperties); + + this.allColumns = allColumns; + this.filteredColumns = filteredColumns; + this.childrenColumnName = childrenColumnName; + this.columnMetadata = columnMetadata; + this.metadataColumns = metadataColumns; + } + + _createClass(ColumnProperties, [{ + key: 'getMetadataColumns', + value: function getMetadataColumns() { + var meta = map(filter(this.columnMetadata, { visible: false }), function (item) { + return item.columnName; + }); + if (meta.indexOf(this.childrenColumnName) < 0) { + meta.push(this.childrenColumnName); + } + return meta.concat(this.metadataColumns); + } + }, { + key: 'getVisibleColumnCount', + value: function getVisibleColumnCount() { + return this.getColumns().length; + } + }, { + key: 'getColumnMetadataByName', + value: function getColumnMetadataByName(name) { + return find(this.columnMetadata, { columnName: name }); + } + }, { + key: 'hasColumnMetadata', + value: function hasColumnMetadata() { + return this.columnMetadata !== null && this.columnMetadata.length > 0; + } + }, { + key: 'getMetadataColumnProperty', + value: function getMetadataColumnProperty(columnName, propertyName, defaultValue) { + var meta = this.getColumnMetadataByName(columnName); + + //send back the default value if meta isn't there + if (typeof meta === "undefined" || meta === null) return defaultValue; + + return meta.hasOwnProperty(propertyName) ? meta[propertyName] : defaultValue; + } + }, { + key: 'orderColumns', + value: function orderColumns(cols) { + var _this = this; + + var ORDER_MAX = 100; + + var orderedColumns = sortBy(cols, function (item) { + var metaItem = find(_this.columnMetadata, { columnName: item }); + + if (typeof metaItem === 'undefined' || metaItem === null || isNaN(metaItem.order)) { + return ORDER_MAX; + } + + return metaItem.order; + }); + + return orderedColumns; + } + }, { + key: 'getColumns', + value: function getColumns() { + //if we didn't set default or filter + var filteredColumns = this.filteredColumns.length === 0 ? this.allColumns : this.filteredColumns; + + filteredColumns = difference(filteredColumns, this.metadataColumns); + + filteredColumns = this.orderColumns(filteredColumns); + + return filteredColumns; + } + }]); + + return ColumnProperties; +})(); + +module.exports = ColumnProperties; + + +/***/ }), + +/***/ "./node_modules/griddle-react/modules/customFilterContainer.jsx.js": +/*!*************************************************************************!*\ + !*** ./node_modules/griddle-react/modules/customFilterContainer.jsx.js ***! + \*************************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +/* + See License / Disclaimer https://raw.githubusercontent.com/DynamicTyped/Griddle/master/LICENSE +*/ + + +var React = __webpack_require__(/*! react */ "react"); +var createReactClass = __webpack_require__(/*! create-react-class */ "./node_modules/create-react-class/index.js"); + +var CustomFilterContainer = createReactClass({ + getDefaultProps: function getDefaultProps() { + return { + "placeholderText": "" + }; + }, + render: function render() { + var that = this; + + if (typeof that.props.customFilterComponent !== 'function') { + console.log("Couldn't find valid template."); + return React.createElement('div', null); + } + + return React.createElement(that.props.customFilterComponent, { + changeFilter: this.props.changeFilter, + results: this.props.results, + currentResults: this.props.currentResults, + placeholderText: this.props.placeholderText }); + } +}); + +module.exports = CustomFilterContainer; + + +/***/ }), + +/***/ "./node_modules/griddle-react/modules/customPaginationContainer.jsx.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/griddle-react/modules/customPaginationContainer.jsx.js ***! + \*****************************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +/* + Griddle - Simple Grid Component for React + https://github.com/DynamicTyped/Griddle + Copyright (c) 2014 Ryan Lanciaux | DynamicTyped + + See License / Disclaimer https://raw.githubusercontent.com/DynamicTyped/Griddle/master/LICENSE +*/ + + +var _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i];for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + }return target; +}; + +var React = __webpack_require__(/*! react */ "react"); +var createReactClass = __webpack_require__(/*! create-react-class */ "./node_modules/create-react-class/index.js"); + +var CustomPaginationContainer = createReactClass({ + getDefaultProps: function getDefaultProps() { + return { + "maxPage": 0, + "nextText": "", + "previousText": "", + "currentPage": 0, + "customPagerComponent": {}, + "customPagerComponentOptions": {} + }; + }, + render: function render() { + var that = this; + + if (typeof that.props.customPagerComponent !== 'function') { + console.log("Couldn't find valid template."); + return React.createElement('div', null); + } + + return React.createElement(that.props.customPagerComponent, _extends({}, this.props.customPagerComponentOptions, { maxPage: this.props.maxPage, nextText: this.props.nextText, previousText: this.props.previousText, currentPage: this.props.currentPage, setPage: this.props.setPage, previous: this.props.previous, next: this.props.next })); + } +}); + +module.exports = CustomPaginationContainer; + + +/***/ }), + +/***/ "./node_modules/griddle-react/modules/customRowComponentContainer.jsx.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/griddle-react/modules/customRowComponentContainer.jsx.js ***! + \*******************************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +/* + Griddle - Simple Grid Component for React + https://github.com/DynamicTyped/Griddle + Copyright (c) 2014 Ryan Lanciaux | DynamicTyped + + See License / Disclaimer https://raw.githubusercontent.com/DynamicTyped/Griddle/master/LICENSE +*/ + + +var React = __webpack_require__(/*! react */ "react"); +var createReactClass = __webpack_require__(/*! create-react-class */ "./node_modules/create-react-class/index.js"); + +var CustomRowComponentContainer = createReactClass({ + getDefaultProps: function getDefaultProps() { + return { + "data": [], + "metadataColumns": [], + "className": "", + "customComponent": {}, + "globalData": {} + }; + }, + render: function render() { + var that = this; + + if (typeof that.props.customComponent !== 'function') { + console.log("Couldn't find valid template."); + return React.createElement('div', { className: this.props.className }); + } + + var nodes = this.props.data.map(function (row, index) { + return React.createElement(that.props.customComponent, { data: row, metadataColumns: that.props.metadataColumns, key: index, globalData: that.props.globalData }); + }); + + var footer = this.props.showPager && this.props.pagingContent; + return React.createElement('div', { className: this.props.className, style: this.props.style }, nodes); + } +}); + +module.exports = CustomRowComponentContainer; + + +/***/ }), + +/***/ "./node_modules/griddle-react/modules/deep.js": +/*!****************************************************!*\ + !*** ./node_modules/griddle-react/modules/deep.js ***! + \****************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var forEach = __webpack_require__(/*! lodash/forEach */ "./node_modules/lodash/forEach.js"); +var isObject = __webpack_require__(/*! lodash/isObject */ "./node_modules/lodash/isObject.js"); +var isArray = __webpack_require__(/*! lodash/isArray */ "./node_modules/lodash/isArray.js"); +var isFunction = __webpack_require__(/*! lodash/isFunction */ "./node_modules/lodash/isFunction.js"); +var isPlainObject = __webpack_require__(/*! lodash/isPlainObject */ "./node_modules/lodash/isPlainObject.js"); +var forOwn = __webpack_require__(/*! lodash/forOwn */ "./node_modules/lodash/forOwn.js"); + +// Credits: https://github.com/documentcloud/underscore-contrib +// Sub module: underscore.object.selectors +// License: MIT (https://github.com/documentcloud/underscore-contrib/blob/master/LICENSE) +// https://github.com/documentcloud/underscore-contrib/blob/master/underscore.object.selectors.js + +// Will take a path like 'element[0][1].subElement["Hey!.What?"]["[hey]"]' +// and return ["element", "0", "1", "subElement", "Hey!.What?", "[hey]"] +function keysFromPath(path) { + // from http://codereview.stackexchange.com/a/63010/8176 + /** + * Repeatedly capture either: + * - a bracketed expression, discarding optional matching quotes inside, or + * - an unbracketed expression, delimited by a dot or a bracket. + */ + var re = /\[("|')(.+)\1\]|([^.\[\]]+)/g; + + var elements = []; + var result; + while ((result = re.exec(path)) !== null) { + elements.push(result[2] || result[3]); + } + return elements; +} + +// Gets the value at any depth in a nested object based on the +// path described by the keys given. Keys may be given as an array +// or as a dot-separated string. +function getPath(obj, ks) { + if (typeof ks == "string") { + if (obj[ks] !== undefined) { + return obj[ks]; + } + ks = keysFromPath(ks); + } + + var i = -1, + length = ks.length; + + // If the obj is null or undefined we have to break as + // a TypeError will result trying to access any property + // Otherwise keep incrementally access the next property in + // ks until complete + while (++i < length && obj != null) { + obj = obj[ks[i]]; + } + return i === length ? obj : void 0; +} + +// Based on the origin underscore _.pick function +// Credit: https://github.com/jashkenas/underscore/blob/master/underscore.js +function powerPick(object, keys) { + var result = {}, + obj = object, + iteratee; + iteratee = function (key, obj) { + return key in obj; + }; + + obj = Object(obj); + + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i]; + if (iteratee(key, obj)) result[key] = getPath(obj, key); + } + + return result; +} + +// Gets all the keys for a flattened object structure. +// Doesn't flatten arrays. +// Input: +// { +// a: { +// x: 1, +// y: 2 +// }, +// b: [3, 4], +// c: 5 +// } +// Output: +// [ +// "a.x", +// "a.y", +// "b", +// "c" +// ] +function getKeys(obj, prefix) { + var keys = []; + + forEach(obj, function (value, key) { + var fullKey = prefix ? prefix + "." + key : key; + if (isObject(value) && !isArray(value) && !isFunction(value) && !(value instanceof Date)) { + keys = keys.concat(getKeys(value, fullKey)); + } else { + keys.push(fullKey); + } + }); + + return keys; +} + +// Recursivly traverse plain objects and arrays calling `fn` on each +// non-object/non-array leaf node. +function iterObject(thing, fn) { + if (isArray(thing)) { + forEach(thing, function (item) { + iterObject(item, fn); + }); + } else if (isPlainObject(thing)) { + forOwn(thing, function (item) { + iterObject(item, fn); + }); + } else { + fn(thing); + } +} + +// Recursivly traverse plain objects and arrays and build a list of all +// non-object/non-array leaf nodes. +// +// Input: +// { "array": [1, "two", {"tree": 3}], "string": "a string" } +// +// Output: +// [1, 'two', 3, 'a string'] +// +function getObjectValues(thing) { + var results = []; + iterObject(thing, function (value) { + results.push(value); + }); + return results; +} + +module.exports = { + pick: powerPick, + getAt: getPath, + keys: getKeys, + getObjectValues: getObjectValues +}; + + +/***/ }), + +/***/ "./node_modules/griddle-react/modules/gridFilter.jsx.js": +/*!**************************************************************!*\ + !*** ./node_modules/griddle-react/modules/gridFilter.jsx.js ***! + \**************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +/* + See License / Disclaimer https://raw.githubusercontent.com/DynamicTyped/Griddle/master/LICENSE +*/ + + +var React = __webpack_require__(/*! react */ "react"); +var createReactClass = __webpack_require__(/*! create-react-class */ "./node_modules/create-react-class/index.js"); + +var GridFilter = createReactClass({ + getDefaultProps: function getDefaultProps() { + return { + "placeholderText": "" + }; + }, + handleChange: function handleChange(event) { + this.props.changeFilter(event.target.value); + }, + render: function render() { + return React.createElement('div', { className: 'filter-container' }, React.createElement('input', { type: 'text', name: 'filter', placeholder: this.props.placeholderText, className: 'form-control', onChange: this.handleChange })); + } +}); + +module.exports = GridFilter; + + +/***/ }), + +/***/ "./node_modules/griddle-react/modules/gridNoData.jsx.js": +/*!**************************************************************!*\ + !*** ./node_modules/griddle-react/modules/gridNoData.jsx.js ***! + \**************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +/* + See License / Disclaimer https://raw.githubusercontent.com/DynamicTyped/Griddle/master/LICENSE +*/ + + +var React = __webpack_require__(/*! react */ "react"); +var createReactClass = __webpack_require__(/*! create-react-class */ "./node_modules/create-react-class/index.js"); + +var GridNoData = createReactClass({ + getDefaultProps: function getDefaultProps() { + return { + "noDataMessage": "No Data" + }; + }, + render: function render() { + var that = this; + + return React.createElement('div', null, this.props.noDataMessage); + } +}); + +module.exports = GridNoData; + + +/***/ }), + +/***/ "./node_modules/griddle-react/modules/gridPagination.jsx.js": +/*!******************************************************************!*\ + !*** ./node_modules/griddle-react/modules/gridPagination.jsx.js ***! + \******************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +/* + See License / Disclaimer https://raw.githubusercontent.com/DynamicTyped/Griddle/master/LICENSE +*/ + + +var React = __webpack_require__(/*! react */ "react"); +var createReactClass = __webpack_require__(/*! create-react-class */ "./node_modules/create-react-class/index.js"); +var assign = __webpack_require__(/*! lodash/assign */ "./node_modules/lodash/assign.js"); + +//needs props maxPage, currentPage, nextFunction, prevFunction +var GridPagination = createReactClass({ + getDefaultProps: function getDefaultProps() { + return { + "maxPage": 0, + "nextText": "", + "previousText": "", + "currentPage": 0, + "useGriddleStyles": true, + "nextClassName": "griddle-next", + "previousClassName": "griddle-previous", + "nextIconComponent": null, + "previousIconComponent": null + }; + }, + pageChange: function pageChange(event) { + this.props.setPage(parseInt(event.target.value, 10) - 1); + }, + render: function render() { + var previous = ""; + var next = ""; + + if (this.props.currentPage > 0) { + previous = React.createElement('button', { type: 'button', onClick: this.props.previous, style: this.props.useGriddleStyles ? { "color": "#222", border: "none", background: "none", margin: "0 0 0 10px" } : null }, this.props.previousIconComponent, this.props.previousText); + } + + if (this.props.currentPage !== this.props.maxPage - 1) { + next = React.createElement('button', { type: 'button', onClick: this.props.next, style: this.props.useGriddleStyles ? { "color": "#222", border: "none", background: "none", margin: "0 10px 0 0" } : null }, this.props.nextText, this.props.nextIconComponent); + } + + var leftStyle = null; + var middleStyle = null; + var rightStyle = null; + + if (this.props.useGriddleStyles === true) { + var baseStyle = { + "float": "left", + minHeight: "1px", + marginTop: "5px" + }; + + rightStyle = assign({ textAlign: "right", width: "34%" }, baseStyle); + middleStyle = assign({ textAlign: "center", width: "33%" }, baseStyle); + leftStyle = assign({ width: "33%" }, baseStyle); + } + + var options = []; + + for (var i = 1; i <= this.props.maxPage; i++) { + options.push(React.createElement('option', { value: i, key: i }, i)); + } + + return React.createElement('div', { style: this.props.useGriddleStyles ? { minHeight: "35px" } : null }, React.createElement('div', { className: this.props.previousClassName, style: leftStyle }, previous), React.createElement('div', { className: 'griddle-page', style: middleStyle }, React.createElement('select', { value: this.props.currentPage + 1, onChange: this.pageChange }, options), ' / ', this.props.maxPage), React.createElement('div', { className: this.props.nextClassName, style: rightStyle }, next)); + } +}); + +module.exports = GridPagination; + + +/***/ }), + +/***/ "./node_modules/griddle-react/modules/gridRow.jsx.js": +/*!***********************************************************!*\ + !*** ./node_modules/griddle-react/modules/gridRow.jsx.js ***! + \***********************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +/* + See License / Disclaimer https://raw.githubusercontent.com/DynamicTyped/Griddle/master/LICENSE +*/ + + +var React = __webpack_require__(/*! react */ "react"); +var createReactClass = __webpack_require__(/*! create-react-class */ "./node_modules/create-react-class/index.js"); +var ColumnProperties = __webpack_require__(/*! ./columnProperties.js */ "./node_modules/griddle-react/modules/columnProperties.js"); +var deep = __webpack_require__(/*! ./deep.js */ "./node_modules/griddle-react/modules/deep.js"); +var isFunction = __webpack_require__(/*! lodash/isFunction */ "./node_modules/lodash/isFunction.js"); +var zipObject = __webpack_require__(/*! lodash/zipObject */ "./node_modules/lodash/zipObject.js"); +var assign = __webpack_require__(/*! lodash/assign */ "./node_modules/lodash/assign.js"); +var defaults = __webpack_require__(/*! lodash/defaults */ "./node_modules/lodash/defaults.js"); +var toPairs = __webpack_require__(/*! lodash/toPairs */ "./node_modules/lodash/toPairs.js"); +var without = __webpack_require__(/*! lodash/without */ "./node_modules/lodash/without.js"); + +var GridRow = createReactClass({ + getDefaultProps: function getDefaultProps() { + return { + "isChildRow": false, + "showChildren": false, + "data": {}, + "columnSettings": null, + "rowSettings": null, + "hasChildren": false, + "useGriddleStyles": true, + "useGriddleIcons": true, + "isSubGriddle": false, + "paddingHeight": null, + "rowHeight": null, + "parentRowCollapsedClassName": "parent-row", + "parentRowExpandedClassName": "parent-row expanded", + "parentRowCollapsedComponent": "▶", + "parentRowExpandedComponent": "▼", + "onRowClick": null, + "multipleSelectionSettings": null, + "onRowMouseEnter": null, + "onRowMouseLeave": null, + "onRowWillMount": null, + "onRowWillUnmount": null + }; + }, + componentWillMount: function componentWillMount() { + if (this.props.onRowWillMount !== null && isFunction(this.props.onRowWillMount)) { + this.props.onRowWillMount(this); + } + }, + componentWillUnmount: function componentWillUnmount() { + if (this.props.onRowWillUnmount !== null && isFunction(this.props.onRowWillUnmount)) { + this.props.onRowWillUnmount(this); + } + }, + handleClick: function handleClick(e) { + if (this.props.onRowClick !== null && isFunction(this.props.onRowClick)) { + this.props.onRowClick(this, e); + } else if (this.props.hasChildren) { + this.props.toggleChildren(); + } + }, + handleMouseEnter: function handleMouseEnter(e) { + if (this.props.onRowMouseEnter !== null && isFunction(this.props.onRowMouseEnter)) { + this.props.onRowMouseEnter(this, e); + } + }, + handleMouseLeave: function handleMouseLeave(e) { + if (this.props.onRowMouseLeave !== null && isFunction(this.props.onRowMouseLeave)) { + this.props.onRowMouseLeave(this, e); + } + }, + handleSelectionChange: function handleSelectionChange(e) { + //hack to get around warning that's not super useful in this case + return; + }, + handleSelectClick: function handleSelectClick(e) { + if (this.props.multipleSelectionSettings.isMultipleSelection) { + if (e.target.type === "checkbox") { + this.props.multipleSelectionSettings.toggleSelectRow(this.props.data, this.refs.selected.checked); + } else { + this.props.multipleSelectionSettings.toggleSelectRow(this.props.data, !this.refs.selected.checked); + } + } + }, + verifyProps: function verifyProps() { + if (this.props.columnSettings === null) { + console.error("gridRow: The columnSettings prop is null and it shouldn't be"); + } + }, + formatData: function formatData(data) { + if (typeof data === 'boolean') { + return String(data); + } + return data; + }, + render: function render() { + var _this = this; + + this.verifyProps(); + var that = this; + var columnStyles = null; + + if (this.props.useGriddleStyles) { + columnStyles = { + margin: "0px", + padding: that.props.paddingHeight + "px 5px " + that.props.paddingHeight + "px 5px", + height: that.props.rowHeight ? this.props.rowHeight - that.props.paddingHeight * 2 + "px" : null, + backgroundColor: "#FFF", + borderTopColor: "#DDD", + color: "#222" + }; + } + + var columns = this.props.columnSettings.getColumns(); + + // make sure that all the columns we need have default empty values + // otherwise they will get clipped + var defaultValues = zipObject(columns, []); + + // creates a 'view' on top the data so we will not alter the original data but will allow us to add default values to missing columns + var dataView = assign({}, this.props.data); + + defaults(dataView, defaultValues); + var data = toPairs(deep.pick(dataView, without(columns, 'children'))); + var nodes = data.map(function (col, index) { + var returnValue = null; + var meta = _this.props.columnSettings.getColumnMetadataByName(col[0]); + + //todo: Make this not as ridiculous looking + var firstColAppend = index === 0 && _this.props.hasChildren && _this.props.showChildren === false && _this.props.useGriddleIcons ? React.createElement('span', { style: _this.props.useGriddleStyles ? { fontSize: "10px", marginRight: "5px" } : null }, _this.props.parentRowCollapsedComponent) : index === 0 && _this.props.hasChildren && _this.props.showChildren && _this.props.useGriddleIcons ? React.createElement('span', { style: _this.props.useGriddleStyles ? { fontSize: "10px" } : null }, _this.props.parentRowExpandedComponent) : ""; + + if (index === 0 && _this.props.isChildRow && _this.props.useGriddleStyles) { + columnStyles = assign(columnStyles, { paddingLeft: 10 }); + } + + if (_this.props.columnSettings.hasColumnMetadata() && typeof meta !== 'undefined' && meta !== null) { + if (typeof meta.customComponent !== 'undefined' && meta.customComponent !== null) { + var customComponent = React.createElement(meta.customComponent, { data: col[1], rowData: dataView, metadata: meta }); + returnValue = React.createElement('td', { onClick: _this.handleClick, onMouseEnter: _this.handleMouseEnter, onMouseLeave: _this.handleMouseLeave, className: meta.cssClassName, key: index, style: columnStyles }, customComponent); + } else { + returnValue = React.createElement('td', { onClick: _this.handleClick, onMouseEnter: _this.handleMouseEnter, onMouseLeave: _this.handleMouseLeave, className: meta.cssClassName, key: index, style: columnStyles }, firstColAppend, _this.formatData(col[1])); + } + } + + return returnValue || React.createElement('td', { onClick: _this.handleClick, onMouseEnter: _this.handleMouseEnter, onMouseLeave: _this.handleMouseLeave, key: index, style: columnStyles }, firstColAppend, col[1]); + }); + + // Don't compete with onRowClick, but if no onRowClick function then + // clicking on the row should trigger select + var trOnClick, tdOnClick; + if (this.props.onRowClick !== null && isFunction(this.props.onRowClick)) { + trOnClick = null; + tdOnClick = this.handleSelectClick; + } else { + if (this.props.multipleSelectionSettings && this.props.multipleSelectionSettings.isMultipleSelection) { + trOnClick = this.handleSelectClick; + tdOnClick = null; + } else { + trOnClick = null; + tdOnClick = null; + } + } + + if (nodes && this.props.multipleSelectionSettings && this.props.multipleSelectionSettings.isMultipleSelection) { + var selectedRowIds = this.props.multipleSelectionSettings.getSelectedRowIds(); + + nodes.unshift(React.createElement('td', { + key: 'selection', + style: columnStyles, + className: 'griddle-select griddle-select-cell', + onClick: tdOnClick + }, React.createElement('input', { + type: 'checkbox', + checked: this.props.multipleSelectionSettings.getIsRowChecked(dataView), + onChange: this.handleSelectionChange, + ref: 'selected' + }))); + } + + //Get the row from the row settings. + var className = that.props.rowSettings && that.props.rowSettings.getBodyRowMetadataClass(that.props.data) || "standard-row"; + + if (that.props.isChildRow) { + className = "child-row"; + } else if (that.props.hasChildren) { + className = that.props.showChildren ? this.props.parentRowExpandedClassName : this.props.parentRowCollapsedClassName; + } + + return React.createElement('tr', { onClick: trOnClick, className: className }, nodes); + } +}); + +module.exports = GridRow; + + +/***/ }), + +/***/ "./node_modules/griddle-react/modules/gridRowContainer.jsx.js": +/*!********************************************************************!*\ + !*** ./node_modules/griddle-react/modules/gridRowContainer.jsx.js ***! + \********************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +/* + See License / Disclaimer https://raw.githubusercontent.com/DynamicTyped/Griddle/master/LICENSE +*/ + + +var React = __webpack_require__(/*! react */ "react"); +var createReactClass = __webpack_require__(/*! create-react-class */ "./node_modules/create-react-class/index.js"); +var ColumnProperties = __webpack_require__(/*! ./columnProperties.js */ "./node_modules/griddle-react/modules/columnProperties.js"); +var pick = __webpack_require__(/*! lodash/pick */ "./node_modules/lodash/pick.js"); + +var GridRowContainer = createReactClass({ + getDefaultProps: function getDefaultProps() { + return { + "useGriddleStyles": true, + "useGriddleIcons": true, + "isSubGriddle": false, + "columnSettings": null, + "rowSettings": null, + "paddingHeight": null, + "rowHeight": null, + "parentRowCollapsedClassName": "parent-row", + "parentRowExpandedClassName": "parent-row expanded", + "parentRowCollapsedComponent": "▶", + "parentRowExpandedComponent": "▼", + "onRowClick": null, + "onRowMouseEnter": null, + "onRowMouseLeave": null, + "onRowWillMount": null, + "onRowWillUnmount": null, + "multipleSelectionSettings": null + }; + }, + getInitialState: function getInitialState() { + return { + "data": {}, + "showChildren": false + }; + }, + componentWillReceiveProps: function componentWillReceiveProps() { + this.setShowChildren(false); + }, + toggleChildren: function toggleChildren() { + this.setShowChildren(this.state.showChildren === false); + }, + setShowChildren: function setShowChildren(visible) { + this.setState({ + showChildren: visible + }); + }, + verifyProps: function verifyProps() { + if (this.props.columnSettings === null) { + console.error("gridRowContainer: The columnSettings prop is null and it shouldn't be"); + } + }, + render: function render() { + this.verifyProps(); + var that = this; + if (typeof this.props.data === "undefined") { + return React.createElement('tbody', null); + } + var arr = []; + + var columns = this.props.columnSettings.getColumns(); + + arr.push(React.createElement(this.props.rowSettings.rowComponent, { + useGriddleStyles: this.props.useGriddleStyles, + isSubGriddle: this.props.isSubGriddle, + data: this.props.rowSettings.isCustom ? pick(this.props.data, columns) : this.props.data, + rowData: this.props.rowSettings.isCustom ? this.props.data : null, + columnSettings: this.props.columnSettings, + rowSettings: this.props.rowSettings, + hasChildren: that.props.hasChildren, + toggleChildren: that.toggleChildren, + showChildren: that.state.showChildren, + key: that.props.uniqueId + '_base_row', + useGriddleIcons: that.props.useGriddleIcons, + parentRowExpandedClassName: this.props.parentRowExpandedClassName, + parentRowCollapsedClassName: this.props.parentRowCollapsedClassName, + parentRowExpandedComponent: this.props.parentRowExpandedComponent, + parentRowCollapsedComponent: this.props.parentRowCollapsedComponent, + paddingHeight: that.props.paddingHeight, + rowHeight: that.props.rowHeight, + onRowClick: that.props.onRowClick, + onRowMouseEnter: that.props.onRowMouseEnter, + onRowMouseLeave: that.props.onRowMouseLeave, + multipleSelectionSettings: this.props.multipleSelectionSettings, + onRowWillMount: that.props.onRowWillMount, + onRowWillUnmount: that.props.onRowWillUnmount })); + + var children = null; + + if (that.state.showChildren) { + children = that.props.hasChildren && this.props.data["children"].map(function (row, index) { + var key = that.props.rowSettings.getRowKey(row, index); + + if (typeof row["children"] !== "undefined") { + var Griddle = that.constructor.Griddle; + return React.createElement('tr', { key: key, style: { paddingLeft: 5 } }, React.createElement('td', { colSpan: that.props.columnSettings.getVisibleColumnCount(), className: 'griddle-parent', style: that.props.useGriddleStyles ? { border: "none", "padding": "0 0 0 5px" } : null }, React.createElement(Griddle, { + rowMetadata: { key: 'id' }, + isSubGriddle: true, + results: [row], + columns: that.props.columnSettings.getColumns(), + tableClassName: that.props.tableClassName, + parentRowExpandedClassName: that.props.parentRowExpandedClassName, + parentRowCollapsedClassName: that.props.parentRowCollapsedClassName, + showTableHeading: false, + showPager: false, + columnMetadata: that.props.columnSettings.columnMetadata, + parentRowExpandedComponent: that.props.parentRowExpandedComponent, + parentRowCollapsedComponent: that.props.parentRowCollapsedComponent, + paddingHeight: that.props.paddingHeight, + rowHeight: that.props.rowHeight + }))); + } + + return React.createElement(that.props.rowSettings.rowComponent, { + useGriddleStyles: that.props.useGriddleStyles, + isSubGriddle: that.props.isSubGriddle, + data: row, + columnSettings: that.props.columnSettings, + isChildRow: true, + columnMetadata: that.props.columnSettings.columnMetadata, + key: key + }); + }); + } + + return that.props.hasChildren === false ? arr[0] : React.createElement('tbody', null, that.state.showChildren ? arr.concat(children) : arr); + } +}); + +module.exports = GridRowContainer; + + +/***/ }), + +/***/ "./node_modules/griddle-react/modules/gridSettings.jsx.js": +/*!****************************************************************!*\ + !*** ./node_modules/griddle-react/modules/gridSettings.jsx.js ***! + \****************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +/* + See License / Disclaimer https://raw.githubusercontent.com/DynamicTyped/Griddle/master/LICENSE +*/ + + +var React = __webpack_require__(/*! react */ "react"); +var createReactClass = __webpack_require__(/*! create-react-class */ "./node_modules/create-react-class/index.js"); +var includes = __webpack_require__(/*! lodash/includes */ "./node_modules/lodash/includes.js"); +var without = __webpack_require__(/*! lodash/without */ "./node_modules/lodash/without.js"); +var find = __webpack_require__(/*! lodash/find */ "./node_modules/lodash/find.js"); + +var GridSettings = createReactClass({ + getDefaultProps: function getDefaultProps() { + return { + "columns": [], + "columnMetadata": [], + "selectedColumns": [], + "settingsText": "", + "maxRowsText": "", + "resultsPerPage": 0, + "enableToggleCustom": false, + "useCustomComponent": false, + "useGriddleStyles": true, + "toggleCustomComponent": function toggleCustomComponent() {} + }; + }, + setPageSize: function setPageSize(event) { + var value = parseInt(event.target.value, 10); + this.props.setPageSize(value); + }, + handleChange: function handleChange(event) { + var columnName = event.target.dataset ? event.target.dataset.name : event.target.getAttribute('data-name'); + if (event.target.checked === true && includes(this.props.selectedColumns, columnName) === false) { + this.props.selectedColumns.push(columnName); + this.props.setColumns(this.props.selectedColumns); + } else { + /* redraw with the selected columns minus the one just unchecked */ + this.props.setColumns(without(this.props.selectedColumns, columnName)); + } + }, + render: function render() { + var that = this; + + var nodes = []; + //don't show column selector if we're on a custom component + if (that.props.useCustomComponent === false) { + nodes = this.props.columns.map(function (col, index) { + var checked = includes(that.props.selectedColumns, col); + //check column metadata -- if this one is locked make it disabled and don't put an onChange event + var meta = find(that.props.columnMetadata, { columnName: col }); + var displayName = col; + + if (typeof meta !== "undefined" && typeof meta.displayName !== "undefined" && meta.displayName != null) { + displayName = meta.displayName; + } + + if (typeof meta !== "undefined" && meta != null && meta.locked) { + return React.createElement('div', { className: 'column checkbox' }, React.createElement('label', null, React.createElement('input', { type: 'checkbox', disabled: true, name: 'check', checked: checked, 'data-name': col }), displayName)); + } else if (typeof meta !== "undefined" && meta != null && typeof meta.visible !== "undefined" && meta.visible === false) { + return null; + } + return React.createElement('div', { className: 'griddle-column-selection checkbox', key: col, style: that.props.useGriddleStyles ? { "float": "left", width: "20%" } : null }, React.createElement('label', null, React.createElement('input', { type: 'checkbox', name: 'check', onChange: that.handleChange, checked: checked, 'data-name': col }), displayName)); + }); + } + + var toggleCustom = that.props.enableToggleCustom ? React.createElement('div', { className: 'form-group' }, React.createElement('label', { htmlFor: 'maxRows' }, React.createElement('input', { type: 'checkbox', checked: this.props.useCustomComponent, onChange: this.props.toggleCustomComponent }), ' ', this.props.enableCustomFormatText)) : ""; + + var setPageSize = this.props.showSetPageSize ? React.createElement('div', null, React.createElement('label', { htmlFor: 'maxRows' }, this.props.maxRowsText, ':', React.createElement('select', { onChange: this.setPageSize, value: this.props.resultsPerPage }, React.createElement('option', { value: '5' }, '5'), React.createElement('option', { value: '10' }, '10'), React.createElement('option', { value: '25' }, '25'), React.createElement('option', { value: '50' }, '50'), React.createElement('option', { value: '100' }, '100')))) : ""; + + return React.createElement('div', { className: 'griddle-settings', style: this.props.useGriddleStyles ? { backgroundColor: "#FFF", border: "1px solid #DDD", color: "#222", padding: "10px", marginBottom: "10px" } : null }, React.createElement('h6', null, this.props.settingsText), React.createElement('div', { className: 'griddle-columns', style: this.props.useGriddleStyles ? { clear: "both", display: "table", width: "100%", borderBottom: "1px solid #EDEDED", marginBottom: "10px" } : null }, nodes), setPageSize, toggleCustom); + } +}); + +module.exports = GridSettings; + + +/***/ }), + +/***/ "./node_modules/griddle-react/modules/gridTable.jsx.js": +/*!*************************************************************!*\ + !*** ./node_modules/griddle-react/modules/gridTable.jsx.js ***! + \*************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +/* + See License / Disclaimer https://raw.githubusercontent.com/DynamicTyped/Griddle/master/LICENSE +*/ + + +var React = __webpack_require__(/*! react */ "react"); +var createReactClass = __webpack_require__(/*! create-react-class */ "./node_modules/create-react-class/index.js"); +var GridTitle = __webpack_require__(/*! ./gridTitle.jsx */ "./node_modules/griddle-react/modules/gridTitle.jsx.js"); +var GridRowContainer = __webpack_require__(/*! ./gridRowContainer.jsx */ "./node_modules/griddle-react/modules/gridRowContainer.jsx.js"); +var ColumnProperties = __webpack_require__(/*! ./columnProperties.js */ "./node_modules/griddle-react/modules/columnProperties.js"); +var RowProperties = __webpack_require__(/*! ./rowProperties.js */ "./node_modules/griddle-react/modules/rowProperties.js"); + +var GridTable = createReactClass({ + getDefaultProps: function getDefaultProps() { + return { + "data": [], + "columnSettings": null, + "rowSettings": null, + "sortSettings": null, + "multipleSelectionSettings": null, + "className": "", + "enableInfiniteScroll": false, + "nextPage": null, + "hasMorePages": false, + "useFixedHeader": false, + "useFixedLayout": true, + "paddingHeight": null, + "rowHeight": null, + "filterByColumn": null, + "infiniteScrollLoadTreshold": null, + "bodyHeight": null, + "useGriddleStyles": true, + "useGriddleIcons": true, + "isSubGriddle": false, + "parentRowCollapsedClassName": "parent-row", + "parentRowExpandedClassName": "parent-row expanded", + "parentRowCollapsedComponent": "▶", + "parentRowExpandedComponent": "▼", + "externalLoadingComponent": null, + "externalIsLoading": false, + "onRowClick": null, + "onRowMouseEnter": null, + "onRowMouseLeave": null, + "onRowWillMount": null, + "onRowWillUnmount": null + }; + }, + getInitialState: function getInitialState() { + return { + scrollTop: 0, + scrollHeight: this.props.bodyHeight, + clientHeight: this.props.bodyHeight + }; + }, + componentDidMount: function componentDidMount() { + // After the initial render, see if we need to load additional pages. + this.gridScroll(); + }, + componentDidUpdate: function componentDidUpdate(prevProps, prevState) { + // After the subsequent renders, see if we need to load additional pages. + this.gridScroll(); + }, + gridScroll: function gridScroll() { + if (this.props.enableInfiniteScroll && !this.props.externalIsLoading) { + // If the scroll height is greater than the current amount of rows displayed, update the page. + var scrollable = this.refs.scrollable; + var scrollTop = scrollable.scrollTop; + var scrollHeight = scrollable.scrollHeight; + var clientHeight = scrollable.clientHeight; + + // If the scroll position changed and the difference is greater than a row height + if (this.props.rowHeight !== null && this.state.scrollTop !== scrollTop && Math.abs(this.state.scrollTop - scrollTop) >= this.getAdjustedRowHeight()) { + var newState = { + scrollTop: scrollTop, + scrollHeight: scrollHeight, + clientHeight: clientHeight + }; + + // Set the state to the new state + this.setState(newState); + } + + // Determine the diff by subtracting the amount scrolled by the total height, taking into consideratoin + // the spacer's height. + var scrollHeightDiff = scrollHeight - (scrollTop + clientHeight) - this.props.infiniteScrollLoadTreshold; + + // Make sure that we load results a little before reaching the bottom. + var compareHeight = scrollHeightDiff * 0.6; + + if (compareHeight <= this.props.infiniteScrollLoadTreshold) { + this.props.nextPage(); + } + } + }, + verifyProps: function verifyProps() { + if (this.props.columnSettings === null) { + console.error("gridTable: The columnSettings prop is null and it shouldn't be"); + } + if (this.props.rowSettings === null) { + console.error("gridTable: The rowSettings prop is null and it shouldn't be"); + } + }, + getAdjustedRowHeight: function getAdjustedRowHeight() { + return this.props.rowHeight + this.props.paddingHeight * 2; // account for padding. + }, + getNodeContent: function getNodeContent() { + this.verifyProps(); + var that = this; + + //figure out if we need to wrap the group in one tbody or many + var anyHasChildren = false; + + // If the data is still being loaded, don't build the nodes unless this is an infinite scroll table. + if (!this.props.externalIsLoading || this.props.enableInfiniteScroll) { + var nodeData = that.props.data; + var aboveSpacerRow = null; + var belowSpacerRow = null; + var usingDefault = false; + + // If we have a row height specified, only render what's going to be visible. + if (this.props.enableInfiniteScroll && this.props.rowHeight !== null && this.refs.scrollable !== undefined) { + var adjustedHeight = that.getAdjustedRowHeight(); + var visibleRecordCount = Math.ceil(that.state.clientHeight / adjustedHeight); + + // Inspired by : http://jsfiddle.net/vjeux/KbWJ2/9/ + var displayStart = Math.max(0, Math.floor(that.state.scrollTop / adjustedHeight) - visibleRecordCount * 0.25); + var displayEnd = Math.min(displayStart + visibleRecordCount * 1.25, this.props.data.length - 1); + + // Split the amount of nodes. + nodeData = nodeData.slice(displayStart, displayEnd + 1); + + // Set the above and below nodes. + var aboveSpacerRowStyle = { height: displayStart * adjustedHeight + "px" }; + aboveSpacerRow = React.createElement('tr', { key: 'above-' + aboveSpacerRowStyle.height, style: aboveSpacerRowStyle }); + var belowSpacerRowStyle = { height: (this.props.data.length - displayEnd) * adjustedHeight + "px" }; + belowSpacerRow = React.createElement('tr', { key: 'below-' + belowSpacerRowStyle.height, style: belowSpacerRowStyle }); + } + + var nodes = nodeData.map(function (row, index) { + var hasChildren = typeof row["children"] !== "undefined" && row["children"].length > 0; + var uniqueId = that.props.rowSettings.getRowKey(row, index); + + //at least one item in the group has children. + if (hasChildren) { + anyHasChildren = hasChildren; + } + + return React.createElement(GridRowContainer, { + useGriddleStyles: that.props.useGriddleStyles, + isSubGriddle: that.props.isSubGriddle, + parentRowExpandedClassName: that.props.parentRowExpandedClassName, + parentRowCollapsedClassName: that.props.parentRowCollapsedClassName, + parentRowExpandedComponent: that.props.parentRowExpandedComponent, + parentRowCollapsedComponent: that.props.parentRowCollapsedComponent, + data: row, + key: uniqueId + '-container', + uniqueId: uniqueId, + columnSettings: that.props.columnSettings, + rowSettings: that.props.rowSettings, + paddingHeight: that.props.paddingHeight, + multipleSelectionSettings: that.props.multipleSelectionSettings, + rowHeight: that.props.rowHeight, + hasChildren: hasChildren, + tableClassName: that.props.className, + onRowClick: that.props.onRowClick, + onRowMouseEnter: that.props.onRowMouseEnter, + onRowMouseLeave: that.props.onRowMouseLeave, + onRowWillMount: that.props.onRowWillMount, + onRowWillUnmount: that.props.onRowWillUnmount + }); + }); + + // no data section + if (this.props.showNoData) { + var colSpan = this.props.columnSettings.getVisibleColumnCount(); + nodes.push(React.createElement('tr', { key: 'no-data-section' }, React.createElement('td', { colSpan: colSpan }, this.props.noDataSection))); + } + + // Add the spacer rows for nodes we're not rendering. + if (aboveSpacerRow) { + nodes.unshift(aboveSpacerRow); + } + if (belowSpacerRow) { + nodes.push(belowSpacerRow); + } + + // Send back the nodes. + return { + nodes: nodes, + anyHasChildren: anyHasChildren + }; + } else { + return null; + } + }, + render: function render() { + var that = this; + var nodes = []; + + // for if we need to wrap the group in one tbody or many + var anyHasChildren = false; + + // Grab the nodes to render + var nodeContent = this.getNodeContent(); + if (nodeContent) { + nodes = nodeContent.nodes; + anyHasChildren = nodeContent.anyHasChildren; + } + + var gridStyle = null; + var loadingContent = null; + var tableStyle = { + width: "100%" + }; + + if (this.props.useFixedLayout) { + tableStyle.tableLayout = "fixed"; + } + + if (this.props.enableInfiniteScroll) { + // If we're enabling infinite scrolling, we'll want to include the max height of the grid body + allow scrolling. + gridStyle = { + "position": "relative", + "overflowY": "scroll", + "height": this.props.bodyHeight + "px", + "width": "100%" + }; + } + + // If we're currently loading, populate the loading content + if (this.props.externalIsLoading) { + var defaultLoadingStyle = null; + var defaultColSpan = null; + + if (this.props.useGriddleStyles) { + defaultLoadingStyle = { + textAlign: "center", + paddingBottom: "40px" + }; + } + + defaultColSpan = this.props.columnSettings.getVisibleColumnCount(); + + var loadingComponent = this.props.externalLoadingComponent ? React.createElement(this.props.externalLoadingComponent, null) : React.createElement('div', null, 'Loading...'); + + loadingContent = React.createElement('tbody', null, React.createElement('tr', null, React.createElement('td', { style: defaultLoadingStyle, colSpan: defaultColSpan }, loadingComponent))); + } + + //construct the table heading component + var tableHeading = this.props.showTableHeading ? React.createElement(GridTitle, { useGriddleStyles: this.props.useGriddleStyles, useGriddleIcons: this.props.useGriddleIcons, + sortSettings: this.props.sortSettings, + multipleSelectionSettings: this.props.multipleSelectionSettings, + columnSettings: this.props.columnSettings, + filterByColumn: this.props.filterByColumn, + rowSettings: this.props.rowSettings }) : undefined; + + //check to see if any of the rows have children... if they don't wrap everything in a tbody so the browser doesn't auto do this + if (!anyHasChildren) { + nodes = React.createElement('tbody', null, nodes); + } + + var pagingContent = React.createElement('tbody', null); + if (this.props.showPager) { + var pagingStyles = this.props.useGriddleStyles ? { + padding: "0px", + backgroundColor: "#EDEDED", + border: "0px", + color: "#222", + height: this.props.showNoData ? "20px" : null + } : null; + pagingContent = React.createElement('tbody', null, React.createElement('tr', null, React.createElement('td', { colSpan: this.props.multipleSelectionSettings.isMultipleSelection ? this.props.columnSettings.getVisibleColumnCount() + 1 : this.props.columnSettings.getVisibleColumnCount(), style: pagingStyles, className: 'footer-container' }, !this.props.showNoData ? this.props.pagingContent : null))); + } + + // If we have a fixed header, split into two tables. + if (this.props.useFixedHeader) { + if (this.props.useGriddleStyles) { + tableStyle.tableLayout = "fixed"; + } + + return React.createElement('div', null, React.createElement('table', { className: this.props.className, style: this.props.useGriddleStyles && tableStyle || null }, tableHeading), React.createElement('div', { ref: 'scrollable', onScroll: this.gridScroll, style: gridStyle }, React.createElement('table', { className: this.props.className, style: this.props.useGriddleStyles && tableStyle || null }, nodes, loadingContent, pagingContent))); + } + + return React.createElement('div', { ref: 'scrollable', onScroll: this.gridScroll, style: gridStyle }, React.createElement('table', { className: this.props.className, style: this.props.useGriddleStyles && tableStyle || null }, tableHeading, nodes, loadingContent, pagingContent)); + } +}); + +module.exports = GridTable; + + +/***/ }), + +/***/ "./node_modules/griddle-react/modules/gridTitle.jsx.js": +/*!*************************************************************!*\ + !*** ./node_modules/griddle-react/modules/gridTitle.jsx.js ***! + \*************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +/* + See License / Disclaimer https://raw.githubusercontent.com/DynamicTyped/Griddle/master/LICENSE + */ + + +var _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i];for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + }return target; +}; + +var React = __webpack_require__(/*! react */ "react"); +var createReactClass = __webpack_require__(/*! create-react-class */ "./node_modules/create-react-class/index.js"); +var ColumnProperties = __webpack_require__(/*! ./columnProperties.js */ "./node_modules/griddle-react/modules/columnProperties.js"); +var assign = __webpack_require__(/*! lodash/assign */ "./node_modules/lodash/assign.js"); + +var DefaultHeaderComponent = createReactClass({ + render: function render() { + return React.createElement('span', null, this.props.displayName); + } +}); + +var GridTitle = createReactClass({ + getDefaultProps: function getDefaultProps() { + return { + "columnSettings": null, + "filterByColumn": function filterByColumn() {}, + "rowSettings": null, + "sortSettings": null, + "multipleSelectionSettings": null, + "headerStyle": null, + "useGriddleStyles": true, + "useGriddleIcons": true, + "headerStyles": {} + }; + }, + componentWillMount: function componentWillMount() { + this.verifyProps(); + }, + sort: function sort(column) { + var that = this; + return function (event) { + that.props.sortSettings.changeSort(column); + }; + }, + toggleSelectAll: function toggleSelectAll(event) { + this.props.multipleSelectionSettings.toggleSelectAll(); + }, + handleSelectionChange: function handleSelectionChange(event) { + //hack to get around warning message that's not helpful in this case + return; + }, + verifyProps: function verifyProps() { + if (this.props.columnSettings === null) { + console.error("gridTitle: The columnSettings prop is null and it shouldn't be"); + } + + if (this.props.sortSettings === null) { + console.error("gridTitle: The sortSettings prop is null and it shouldn't be"); + } + }, + render: function render() { + this.verifyProps(); + var that = this; + var titleStyles = {}; + + var nodes = this.props.columnSettings.getColumns().map(function (col, index) { + var defaultTitleStyles = {}; + var columnSort = ""; + var columnIsSortable = that.props.columnSettings.getMetadataColumnProperty(col, "sortable", true); + var sortComponent = columnIsSortable ? that.props.sortSettings.sortDefaultComponent : null; + + if (that.props.sortSettings.sortColumn == col && that.props.sortSettings.sortDirection === 'asc') { + columnSort = that.props.sortSettings.sortAscendingClassName; + sortComponent = that.props.useGriddleIcons && that.props.sortSettings.sortAscendingComponent; + } else if (that.props.sortSettings.sortColumn == col && that.props.sortSettings.sortDirection === 'desc') { + columnSort += that.props.sortSettings.sortDescendingClassName; + sortComponent = that.props.useGriddleIcons && that.props.sortSettings.sortDescendingComponent; + } + + var meta = that.props.columnSettings.getColumnMetadataByName(col); + var displayName = that.props.columnSettings.getMetadataColumnProperty(col, "displayName", col); + var HeaderComponent = that.props.columnSettings.getMetadataColumnProperty(col, "customHeaderComponent", DefaultHeaderComponent); + var headerProps = that.props.columnSettings.getMetadataColumnProperty(col, "customHeaderComponentProps", {}); + + columnSort = meta == null ? columnSort : (columnSort && columnSort + " " || columnSort) + that.props.columnSettings.getMetadataColumnProperty(col, "cssClassName", ""); + + if (that.props.useGriddleStyles) { + defaultTitleStyles = { + backgroundColor: "#EDEDEF", + border: "0px", + borderBottom: "1px solid #DDD", + color: "#222", + padding: "5px", + cursor: columnIsSortable ? "pointer" : "default" + }; + } + titleStyles = meta && meta.titleStyles ? assign({}, defaultTitleStyles, meta.titleStyles) : assign({}, defaultTitleStyles); + + var ComponentClass = displayName ? 'th' : 'td'; + return React.createElement(ComponentClass, { onClick: columnIsSortable ? that.sort(col) : null, 'data-title': col, className: columnSort, key: col, + style: titleStyles }, React.createElement(HeaderComponent, _extends({ columnName: col, displayName: displayName, + filterByColumn: that.props.filterByColumn }, headerProps)), sortComponent); + }); + + if (nodes && this.props.multipleSelectionSettings.isMultipleSelection) { + nodes.unshift(React.createElement('th', { key: 'selection', onClick: this.toggleSelectAll, style: titleStyles, className: 'griddle-select griddle-select-title' }, React.createElement('input', { + type: 'checkbox', + checked: this.props.multipleSelectionSettings.getIsSelectAllChecked(), + onChange: this.handleSelectionChange + }))); + } + + //Get the row from the row settings. + var className = that.props.rowSettings && that.props.rowSettings.getHeaderRowMetadataClass() || null; + + return React.createElement('thead', null, React.createElement('tr', { + className: className, + style: this.props.headerStyles }, nodes)); + } +}); + +module.exports = GridTitle; + + +/***/ }), + +/***/ "./node_modules/griddle-react/modules/griddle.jsx.js": +/*!***********************************************************!*\ + !*** ./node_modules/griddle-react/modules/griddle.jsx.js ***! + \***********************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +/* + Griddle - Simple Grid Component for React + https://github.com/DynamicTyped/Griddle + Copyright (c) 2014 Ryan Lanciaux | DynamicTyped + + See License / Disclaimer https://raw.githubusercontent.com/DynamicTyped/Griddle/master/LICENSE +*/ + + +var _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i];for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + }return target; +}; + +var React = __webpack_require__(/*! react */ "react"); +var PropTypes = __webpack_require__(/*! prop-types */ "prop-types"); +var createReactClass = __webpack_require__(/*! create-react-class */ "./node_modules/create-react-class/index.js"); +var GridTable = __webpack_require__(/*! ./gridTable.jsx */ "./node_modules/griddle-react/modules/gridTable.jsx.js"); +var GridFilter = __webpack_require__(/*! ./gridFilter.jsx */ "./node_modules/griddle-react/modules/gridFilter.jsx.js"); +var GridPagination = __webpack_require__(/*! ./gridPagination.jsx */ "./node_modules/griddle-react/modules/gridPagination.jsx.js"); +var GridSettings = __webpack_require__(/*! ./gridSettings.jsx */ "./node_modules/griddle-react/modules/gridSettings.jsx.js"); +var GridNoData = __webpack_require__(/*! ./gridNoData.jsx */ "./node_modules/griddle-react/modules/gridNoData.jsx.js"); +var GridRow = __webpack_require__(/*! ./gridRow.jsx */ "./node_modules/griddle-react/modules/gridRow.jsx.js"); +var GridRowContainer = __webpack_require__(/*! ./gridRowContainer.jsx */ "./node_modules/griddle-react/modules/gridRowContainer.jsx.js"); +var CustomRowComponentContainer = __webpack_require__(/*! ./customRowComponentContainer.jsx */ "./node_modules/griddle-react/modules/customRowComponentContainer.jsx.js"); +var CustomPaginationContainer = __webpack_require__(/*! ./customPaginationContainer.jsx */ "./node_modules/griddle-react/modules/customPaginationContainer.jsx.js"); +var CustomFilterContainer = __webpack_require__(/*! ./customFilterContainer.jsx */ "./node_modules/griddle-react/modules/customFilterContainer.jsx.js"); +var ColumnProperties = __webpack_require__(/*! ./columnProperties */ "./node_modules/griddle-react/modules/columnProperties.js"); +var RowProperties = __webpack_require__(/*! ./rowProperties */ "./node_modules/griddle-react/modules/rowProperties.js"); +var deep = __webpack_require__(/*! ./deep */ "./node_modules/griddle-react/modules/deep.js"); + +var drop = __webpack_require__(/*! lodash/drop */ "./node_modules/lodash/drop.js"); +var dropRight = __webpack_require__(/*! lodash/dropRight */ "./node_modules/lodash/dropRight.js"); +var find = __webpack_require__(/*! lodash/find */ "./node_modules/lodash/find.js"); +var first = __webpack_require__(/*! lodash/take */ "./node_modules/lodash/take.js"); +var forEach = __webpack_require__(/*! lodash/forEach */ "./node_modules/lodash/forEach.js"); +var initial = __webpack_require__(/*! lodash/initial */ "./node_modules/lodash/initial.js"); +var intersection = __webpack_require__(/*! lodash/intersection */ "./node_modules/lodash/intersection.js"); +var isArray = __webpack_require__(/*! lodash/isArray */ "./node_modules/lodash/isArray.js"); +var isEmpty = __webpack_require__(/*! lodash/isEmpty */ "./node_modules/lodash/isEmpty.js"); +var isNull = __webpack_require__(/*! lodash/isNull */ "./node_modules/lodash/isNull.js"); +var isUndefined = __webpack_require__(/*! lodash/isUndefined */ "./node_modules/lodash/isUndefined.js"); +var omit = __webpack_require__(/*! lodash/omit */ "./node_modules/lodash/omit.js"); +var map = __webpack_require__(/*! lodash/map */ "./node_modules/lodash/map.js"); +var extend = __webpack_require__(/*! lodash/assign */ "./node_modules/lodash/assign.js"); +var _filter = __webpack_require__(/*! lodash/filter */ "./node_modules/lodash/filter.js"); + +var _orderBy = __webpack_require__(/*! lodash/orderBy */ "./node_modules/lodash/orderBy.js"); +var _property = __webpack_require__(/*! lodash/property */ "./node_modules/lodash/property.js"); +var _get = __webpack_require__(/*! lodash/get */ "./node_modules/lodash/get.js"); +var _some = __webpack_require__(/*! lodash/some */ "./node_modules/lodash/some.js"); + +var Griddle = createReactClass({ + statics: { + GridTable: GridTable, + GridFilter: GridFilter, + GridPagination: GridPagination, + GridSettings: GridSettings, + GridRow: GridRow + }, + columnSettings: null, + rowSettings: null, + getDefaultProps: function getDefaultProps() { + return { + "columns": [], + "gridMetadata": null, + "columnMetadata": [], + "rowMetadata": null, + "results": [], // Used if all results are already loaded. + "initialSort": "", + "gridClassName": "", + "tableClassName": "", + "customRowComponentClassName": "", + "settingsText": "Settings", + "filterPlaceholderText": "Filter Results", + "nextText": "Next", + "previousText": "Previous", + "maxRowsText": "Rows per page", + "enableCustomFormatText": "Enable Custom Formatting", + //this column will determine which column holds subgrid data + //it will be passed through with the data object but will not be rendered + "childrenColumnName": "children", + //Any column in this list will be treated as metadata and will be passed through with the data but won't be rendered + "metadataColumns": [], + "showFilter": false, + "showSettings": false, + "useCustomRowComponent": false, + "useCustomGridComponent": false, + "useCustomPagerComponent": false, + "useCustomFilterer": false, + "useCustomFilterComponent": false, + "useGriddleStyles": true, + "useGriddleIcons": true, + "customRowComponent": null, + "customGridComponent": null, + "customPagerComponent": {}, + "customFilterComponent": null, + "customFilterer": null, + "globalData": null, + "enableToggleCustom": false, + "noDataMessage": "There is no data to display.", + "noDataClassName": "griddle-nodata", + "customNoDataComponent": null, + "customNoDataComponentProps": null, + "allowEmptyGrid": false, + "showTableHeading": true, + "showPager": true, + "useFixedHeader": false, + "useExternal": false, + "externalSetPage": null, + "externalChangeSort": null, + "externalSetFilter": null, + "externalSetPageSize": null, + "externalMaxPage": null, + "externalCurrentPage": null, + "externalSortColumn": null, + "externalSortAscending": true, + "externalLoadingComponent": null, + "externalIsLoading": false, + "enableInfiniteScroll": false, + "bodyHeight": null, + "paddingHeight": 5, + "rowHeight": 25, + "infiniteScrollLoadTreshold": 50, + "useFixedLayout": true, + "isSubGriddle": false, + "enableSort": true, + "onRowClick": null, + "onRowMouseEnter": null, + "onRowMouseLeave": null, + "onRowWillMount": null, + "onRowWillUnmount": null, + /* css class names */ + "sortAscendingClassName": "sort-ascending", + "sortDescendingClassName": "sort-descending", + "parentRowCollapsedClassName": "parent-row", + "parentRowExpandedClassName": "parent-row expanded", + "settingsToggleClassName": "settings", + "nextClassName": "griddle-next", + "previousClassName": "griddle-previous", + "headerStyles": {}, + /* icon components */ + "sortAscendingComponent": " ▲", + "sortDescendingComponent": " ▼", + "sortDefaultComponent": null, + "parentRowCollapsedComponent": "▶", + "parentRowExpandedComponent": "▼", + "settingsIconComponent": "", + "nextIconComponent": "", + "previousIconComponent": "", + "isMultipleSelection": false, //currently does not support subgrids + "selectedRowIds": [], + "uniqueIdentifier": "id", + "onSelectionChange": null, + "columnFilterFunc": null + }; + }, + propTypes: { + isMultipleSelection: PropTypes.bool, + selectedRowIds: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.arrayOf(PropTypes.string)]), + uniqueIdentifier: PropTypes.string, + onSelectionChange: PropTypes.func, + columnFilterFunc: PropTypes.func + }, + defaultFilter: function defaultFilter(results, filter) { + var that = this; + return _filter(results, function (item) { + var arr = deep.keys(item); + for (var i = 0; i < arr.length; i++) { + var isFilterable = that.columnSettings.getMetadataColumnProperty(arr[i], "filterable", true); + if (isFilterable && (deep.getAt(item, arr[i]) || "").toString().toLowerCase().indexOf(filter.toLowerCase()) >= 0) { + return true; + } + } + return false; + }); + }, + + defaultColumnFilter: function defaultColumnFilter(columnName, value, filter) { + var filters = map(isArray(filter) ? filter : [filter], function (filter) { + return (filter || '').toLowerCase(); + }); + return _some(deep.getObjectValues(value), function (value) { + value = value.toString().toLowerCase(); + return _some(filters, function (filter) { + return value.indexOf(filter) >= 0; + }); + }); + }, + + filterByColumnFilters: function filterByColumnFilters(columnFilters) { + var filterFunction = this.props.columnFilterFunc || this.defaultColumnFilter; + var filteredResults = Object.keys(columnFilters).reduce(function (previous, current) { + return _filter(previous, function (item) { + var value = deep.getAt(item, current || ""); + var filter = columnFilters[current]; + return filterFunction(current || '', value, filter); + }); + }, this.props.results); + + var newState = { + columnFilters: columnFilters + }; + + if (columnFilters) { + newState.filteredResults = filteredResults; + newState.maxPage = this.getMaxPage(newState.filteredResults); + } else if (this.state.filter) { + newState.filteredResults = this.props.useCustomFilterer ? this.props.customFilterer(this.props.results, filter) : this.defaultFilter(this.props.results, filter); + } else { + newState.filteredResults = null; + } + + this.setState(newState); + }, + + filterByColumn: function filterByColumn(filter, column) { + var columnFilters = this.state.columnFilters; + + //if filter is "" remove it from the columnFilters object + if (columnFilters.hasOwnProperty(column) && !filter) { + columnFilters = omit(columnFilters, column); + } else { + var newObject = {}; + newObject[column] = filter; + columnFilters = extend({}, columnFilters, newObject); + } + + this.filterByColumnFilters(columnFilters); + }, + + /* if we have a filter display the max page and results accordingly */ + setFilter: function setFilter(filter) { + var updatedResults = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; + + if (this.props.useExternal) { + this.props.externalSetFilter(filter); + return; + } + + var that = this, + updatedState = { + page: 0, + filter: filter + }; + + // Obtain the state results. + updatedState.filteredResults = this.props.useCustomFilterer ? this.props.customFilterer(updatedResults || this.props.results, filter) : this.defaultFilter(updatedResults || this.props.results, filter); + + // Update the max page. + updatedState.maxPage = that.getMaxPage(updatedState.filteredResults); + + //if filter is null or undefined reset the filter. + if (isUndefined(filter) || isNull(filter) || isEmpty(filter)) { + updatedState.filter = filter; + updatedState.filteredResults = null; + } + + // Set the state. + that.setState(updatedState); + + this._resetSelectedRows(); + }, + setPageSize: function setPageSize(size) { + if (this.props.useExternal) { + this.setState({ + resultsPerPage: size + }); + this.props.externalSetPageSize(size); + return; + } + //make this better. + this.state.resultsPerPage = size; + this.setMaxPage(); + }, + toggleColumnChooser: function toggleColumnChooser() { + this.setState({ + showColumnChooser: !this.state.showColumnChooser + }); + }, + isNullOrUndefined: function isNullOrUndefined(value) { + return value === undefined || value === null; + }, + shouldUseCustomRowComponent: function shouldUseCustomRowComponent() { + return this.isNullOrUndefined(this.state.useCustomRowComponent) ? this.props.useCustomRowComponent : this.state.useCustomRowComponent; + }, + shouldUseCustomGridComponent: function shouldUseCustomGridComponent() { + return this.isNullOrUndefined(this.state.useCustomGridComponent) ? this.props.useCustomGridComponent : this.state.useCustomGridComponent; + }, + toggleCustomComponent: function toggleCustomComponent() { + if (this.state.customComponentType === "grid") { + this.setState({ + useCustomGridComponent: !this.shouldUseCustomGridComponent() + }); + } else if (this.state.customComponentType === "row") { + this.setState({ + useCustomRowComponent: !this.shouldUseCustomRowComponent() + }); + } + }, + getMaxPage: function getMaxPage(results, totalResults) { + if (this.props.useExternal) { + return this.props.externalMaxPage; + } + + if (!totalResults) { + totalResults = (results || this.getCurrentResults()).length; + } + var maxPage = Math.ceil(totalResults / this.state.resultsPerPage); + return maxPage; + }, + setMaxPage: function setMaxPage(results) { + var maxPage = this.getMaxPage(results); + //re-render if we have new max page value + if (this.state.maxPage !== maxPage) { + this.setState({ page: 0, maxPage: maxPage, filteredColumns: this.columnSettings.filteredColumns }); + } + }, + setPage: function setPage(number) { + if (this.props.useExternal) { + this.props.externalSetPage(number); + return; + } + + //check page size and move the filteredResults to pageSize * pageNumber + if (number * this.state.resultsPerPage <= this.state.resultsPerPage * this.state.maxPage) { + var that = this, + state = { + page: number + }; + + that.setState(state); + } + + //When infinite scrolling is enabled, uncheck the "select all" checkbox, since more unchecked rows will be appended at the end + if (this.props.enableInfiniteScroll) { + this.setState({ + isSelectAllChecked: false + }); + } + }, + setColumns: function setColumns(columns) { + this.columnSettings.filteredColumns = isArray(columns) ? columns : [columns]; + + this.setState({ + filteredColumns: this.columnSettings.filteredColumns + }); + }, + nextPage: function nextPage() { + var currentPage = this.getCurrentPage(); + if (currentPage < this.getCurrentMaxPage() - 1) { + this.setPage(currentPage + 1); + } + }, + previousPage: function previousPage() { + var currentPage = this.getCurrentPage(); + if (currentPage > 0) { + this.setPage(currentPage - 1); + } + }, + changeSort: function changeSort(column) { + if (this.props.enableSort === false) { + return; + } + + if (this.props.useExternal) { + var isAscending = this.props.externalSortColumn === column ? !this.props.externalSortAscending : true; + this.setState({ + sortColumn: column, + sortDirection: isAscending ? 'asc' : 'desc' + }); + this.props.externalChangeSort(column, isAscending); + return; + } + var columnMeta = find(this.props.columnMetadata, { columnName: column }) || {}; + var sortDirectionCycle = columnMeta.sortDirectionCycle ? columnMeta.sortDirectionCycle : [null, 'asc', 'desc']; + var sortDirection = null; + // Find the current position in the cycle (or -1). + var i = sortDirectionCycle.indexOf(this.state.sortDirection && column === this.state.sortColumn ? this.state.sortDirection : null); + + // Proceed to the next position in the cycle (or start at the beginning). + i = (i + 1) % sortDirectionCycle.length; + + if (sortDirectionCycle[i]) { + sortDirection = sortDirectionCycle[i]; + } else { + sortDirection = null; + } + + var state = { + page: 0, + sortColumn: column, + sortDirection: sortDirection + }; + + this.setState(state); + }, + componentWillReceiveProps: function componentWillReceiveProps(nextProps) { + // Check if results props changed + if (nextProps.results !== this.props.results) { + this.setFilter(this.state.filter, nextProps.results); + } + + this.setMaxPage(nextProps.results); + if (nextProps.resultsPerPage !== this.props.resultsPerPage) { + this.setPageSize(nextProps.resultsPerPage); + } + //This will updaet the column Metadata + this.columnSettings.columnMetadata = nextProps.columnMetadata; + if (nextProps.results.length > 0) { + var deepKeys = deep.keys(nextProps.results[0]); + + var is_same = this.columnSettings.allColumns.length == deepKeys.length && this.columnSettings.allColumns.every(function (element, index) { + return element === deepKeys[index]; + }); + + if (!is_same) { + this.columnSettings.allColumns = deepKeys; + } + } else if (this.columnSettings.allColumns.length > 0) { + this.columnSettings.allColumns = []; + } + + if (nextProps.selectedRowIds) { + var visibleRows = this.getDataForRender(this.getCurrentResults(nextProps.results), this.columnSettings.getColumns(), true); + + this.setState({ + isSelectAllChecked: this._getAreAllRowsChecked(nextProps.selectedRowIds, map(visibleRows, this.props.uniqueIdentifier)), + selectedRowIds: nextProps.selectedRowIds + }); + } + }, + getInitialState: function getInitialState() { + var state = { + maxPage: 0, + page: 0, + filteredResults: null, + filteredColumns: [], + filter: "", + //this sets the individual column filters + columnFilters: {}, + resultsPerPage: this.props.resultsPerPage || 5, + showColumnChooser: false, + isSelectAllChecked: false, + selectedRowIds: this.props.selectedRowIds + }; + return state; + }, + componentWillMount: function componentWillMount() { + this.verifyExternal(); + this.verifyCustom(); + + this.columnSettings = new ColumnProperties(this.props.results.length > 0 ? deep.keys(this.props.results[0]) : [], this.props.columns, this.props.childrenColumnName, this.props.columnMetadata, this.props.metadataColumns); + + this.rowSettings = new RowProperties(this.props.rowMetadata, this.props.useCustomTableRowComponent && this.props.customTableRowComponent ? this.props.customTableRowComponent : GridRow, this.props.useCustomTableRowComponent); + + if (this.props.initialSort) { + // shouldn't change Sort on init for external + if (this.props.useExternal) { + this.setState({ + sortColumn: this.props.externalSortColumn, + sortDirection: this.props.externalSortAscending ? 'asc' : 'desc' + }); + } else { + this.changeSort(this.props.initialSort); + } + } + this.setMaxPage(); + + //don't like the magic strings + if (this.shouldUseCustomGridComponent()) { + this.setState({ + customComponentType: "grid" + }); + } else if (this.shouldUseCustomRowComponent()) { + this.setState({ + customComponentType: "row" + }); + } else { + this.setState({ + filteredColumns: this.columnSettings.filteredColumns + }); + } + }, + componentDidMount: function componentDidMount() { + if (this.props.componentDidMount && typeof this.props.componentDidMount === "function") { + return this.props.componentDidMount(); + } + }, + componentDidUpdate: function componentDidUpdate() { + if (this.props.componentDidUpdate && typeof this.props.componentDidUpdate === "function") { + return this.props.componentDidUpdate(this.state); + } + }, + //todo: clean these verify methods up + verifyExternal: function verifyExternal() { + if (this.props.useExternal === true) { + //hooray for big ugly nested if + if (this.props.externalSetPage === null) { + console.error("useExternal is set to true but there is no externalSetPage function specified."); + } + + if (this.props.externalChangeSort === null) { + console.error("useExternal is set to true but there is no externalChangeSort function specified."); + } + + if (this.props.externalSetFilter === null) { + console.error("useExternal is set to true but there is no externalSetFilter function specified."); + } + + if (this.props.externalSetPageSize === null) { + console.error("useExternal is set to true but there is no externalSetPageSize function specified."); + } + + if (this.props.externalMaxPage === null) { + console.error("useExternal is set to true but externalMaxPage is not set."); + } + + if (this.props.externalCurrentPage === null) { + console.error("useExternal is set to true but externalCurrentPage is not set. Griddle will not page correctly without that property when using external data."); + } + } + }, + //TODO: Do this with propTypes + verifyCustom: function verifyCustom() { + if (this.props.useCustomGridComponent === true && this.props.customGridComponent === null) { + console.error("useCustomGridComponent is set to true but no custom component was specified."); + } + if (this.props.useCustomRowComponent === true && this.props.customRowComponent === null) { + console.error("useCustomRowComponent is set to true but no custom component was specified."); + } + if (this.props.useCustomGridComponent === true && this.props.useCustomRowComponent === true) { + console.error("Cannot currently use both customGridComponent and customRowComponent."); + } + if (this.props.useCustomFilterer === true && this.props.customFilterer === null) { + console.error("useCustomFilterer is set to true but no custom filter function was specified."); + } + if (this.props.useCustomFilterComponent === true && this.props.customFilterComponent === null) { + console.error("useCustomFilterComponent is set to true but no customFilterComponent was specified."); + } + }, + getDataForRender: function getDataForRender(data, cols, pageList) { + var _this = this; + + var that = this; + + if (!this.props.useExternal) { + if (this.state.sortColumn !== "") { + var column = this.state.sortColumn; + var sortColumn = _filter(this.props.columnMetadata, { columnName: column }); + var customCompareFn; + var multiSort = { + columns: [], + orders: [] + }; + + if (sortColumn.length > 0) { + customCompareFn = sortColumn[0].hasOwnProperty("customCompareFn") && sortColumn[0]["customCompareFn"]; + if (sortColumn[0]["multiSort"]) { + multiSort = sortColumn[0]["multiSort"]; + } + } + + if (this.state.sortDirection) { + if (typeof customCompareFn === 'function') { + if (customCompareFn.length === 2) { + data = data.sort(function (a, b) { + return customCompareFn(_get(a, column), _get(b, column)); + }); + + if (this.state.sortDirection === 'desc') { + data.reverse(); + } + } else if (customCompareFn.length === 1) { + data = _orderBy(data, function (item) { + return customCompareFn(_get(item, column)); + }, [this.state.sortDirection]); + } + } else { + var iteratees = [function (row) { + return (_get(row, column) || '').toString().toLowerCase(); + }]; + var orders = [this.state.sortDirection]; + multiSort.columns.forEach(function (col, i) { + iteratees.push(function (row) { + return (_get(row, col) || '').toString().toLowerCase(); + }); + if (multiSort.orders[i] === 'asc' || multiSort.orders[i] === 'desc') { + orders.push(multiSort.orders[i]); + } else { + orders.push(_this.state.sortDirection); + } + }); + + data = _orderBy(data, iteratees, orders); + } + } + } + + var currentPage = this.getCurrentPage(); + + if (!this.props.useExternal && pageList && this.state.resultsPerPage * (currentPage + 1) <= this.state.resultsPerPage * this.state.maxPage && currentPage >= 0) { + if (this.isInfiniteScrollEnabled()) { + // If we're doing infinite scroll, grab all results up to the current page. + data = first(data, (currentPage + 1) * this.state.resultsPerPage); + } else { + //the 'rest' is grabbing the whole array from index on and the 'initial' is getting the first n results + var rest = drop(data, currentPage * this.state.resultsPerPage); + data = (dropRight || initial)(rest, rest.length - this.state.resultsPerPage); + } + } + } + + var transformedData = []; + + for (var i = 0; i < data.length; i++) { + var mappedData = data[i]; + + if (typeof mappedData[that.props.childrenColumnName] !== "undefined" && mappedData[that.props.childrenColumnName].length > 0) { + //internally we're going to use children instead of whatever it is so we don't have to pass the custom name around + mappedData["children"] = that.getDataForRender(mappedData[that.props.childrenColumnName], cols, false); + + if (that.props.childrenColumnName !== "children") { + delete mappedData[that.props.childrenColumnName]; + } + } + + transformedData.push(mappedData); + } + return transformedData; + }, + getCurrentResults: function getCurrentResults(results) { + return this.state.filteredResults || results || this.props.results; + }, + getCurrentPage: function getCurrentPage() { + return this.props.externalCurrentPage || this.state.page; + }, + getCurrentSort: function getCurrentSort() { + return this.props.useExternal ? this.props.externalSortColumn : this.state.sortColumn; + }, + getCurrentSortAscending: function getCurrentSortAscending() { + return this.props.useExternal ? this.props.externalSortAscending : this.state.sortDirection === 'asc'; + }, + getCurrentMaxPage: function getCurrentMaxPage() { + return this.props.useExternal ? this.props.externalMaxPage : this.state.maxPage; + }, + //This takes the props relating to sort and puts them in one object + getSortObject: function getSortObject() { + return { + enableSort: this.props.enableSort, + changeSort: this.changeSort, + sortColumn: this.getCurrentSort(), + sortAscending: this.getCurrentSortAscending(), + sortDirection: this.state.sortDirection, + sortAscendingClassName: this.props.sortAscendingClassName, + sortDescendingClassName: this.props.sortDescendingClassName, + sortAscendingComponent: this.props.sortAscendingComponent, + sortDescendingComponent: this.props.sortDescendingComponent, + sortDefaultComponent: this.props.sortDefaultComponent + }; + }, + _toggleSelectAll: function _toggleSelectAll() { + var visibleRows = this.getDataForRender(this.getCurrentResults(), this.columnSettings.getColumns(), true), + newIsSelectAllChecked = !this.state.isSelectAllChecked, + newSelectedRowIds = JSON.parse(JSON.stringify(this.state.selectedRowIds)); + + var self = this; + forEach(visibleRows, function (row) { + self._updateSelectedRowIds(row[self.props.uniqueIdentifier], newSelectedRowIds, newIsSelectAllChecked); + }, this); + + this.setState({ + isSelectAllChecked: newIsSelectAllChecked, + selectedRowIds: newSelectedRowIds + }); + + if (this.props.onSelectionChange) { + this.props.onSelectionChange(newSelectedRowIds, newIsSelectAllChecked); + } + }, + _toggleSelectRow: function _toggleSelectRow(row, isChecked) { + var visibleRows = this.getDataForRender(this.getCurrentResults(), this.columnSettings.getColumns(), true), + newSelectedRowIds = JSON.parse(JSON.stringify(this.state.selectedRowIds)); + + this._updateSelectedRowIds(row[this.props.uniqueIdentifier], newSelectedRowIds, isChecked); + + var newIsSelectAllChecked = this._getAreAllRowsChecked(newSelectedRowIds, map(visibleRows, this.props.uniqueIdentifier)); + + this.setState({ + isSelectAllChecked: newIsSelectAllChecked, + selectedRowIds: newSelectedRowIds + }); + + if (this.props.onSelectionChange) { + this.props.onSelectionChange(newSelectedRowIds, newIsSelectAllChecked); + } + }, + _updateSelectedRowIds: function _updateSelectedRowIds(id, selectedRowIds, isChecked) { + + var isFound; + + if (isChecked) { + isFound = find(selectedRowIds, function (item) { + return id === item; + }); + + if (isFound === undefined) { + selectedRowIds.push(id); + } + } else { + selectedRowIds.splice(selectedRowIds.indexOf(id), 1); + } + }, + _getIsSelectAllChecked: function _getIsSelectAllChecked() { + + return this.state.isSelectAllChecked; + }, + _getAreAllRowsChecked: function _getAreAllRowsChecked(selectedRowIds, visibleRowIds) { + + return visibleRowIds.length === intersection(visibleRowIds, selectedRowIds).length; + }, + _getIsRowChecked: function _getIsRowChecked(row) { + + return this.state.selectedRowIds.indexOf(row[this.props.uniqueIdentifier]) > -1 ? true : false; + }, + getSelectedRowIds: function getSelectedRowIds() { + + return this.state.selectedRowIds; + }, + _resetSelectedRows: function _resetSelectedRows() { + + this.setState({ + isSelectAllChecked: false, + selectedRowIds: [] + }); + }, + //This takes the props relating to multiple selection and puts them in one object + getMultipleSelectionObject: function getMultipleSelectionObject() { + + return { + isMultipleSelection: find(this.props.results, function (result) { + return 'children' in result; + }) ? false : this.props.isMultipleSelection, //does not support subgrids + toggleSelectAll: this._toggleSelectAll, + getIsSelectAllChecked: this._getIsSelectAllChecked, + toggleSelectRow: this._toggleSelectRow, + getSelectedRowIds: this.getSelectedRowIds, + getIsRowChecked: this._getIsRowChecked + }; + }, + isInfiniteScrollEnabled: function isInfiniteScrollEnabled() { + // If a custom pager is included, don't allow for infinite scrolling. + if (this.props.useCustomPagerComponent) { + return false; + } + + // Otherwise, send back the property. + return this.props.enableInfiniteScroll; + }, + getClearFixStyles: function getClearFixStyles() { + return { + clear: "both", + display: "table", + width: "100%" + }; + }, + getSettingsStyles: function getSettingsStyles() { + return { + "float": "left", + width: "50%", + textAlign: "right" + }; + }, + getFilterStyles: function getFilterStyles() { + return { + "float": "left", + width: "50%", + textAlign: "left", + color: "#222", + minHeight: "1px" + }; + }, + getFilter: function getFilter() { + return this.props.showFilter && this.shouldUseCustomGridComponent() === false ? this.props.useCustomFilterComponent ? React.createElement(CustomFilterContainer, { changeFilter: this.setFilter, placeholderText: this.props.filterPlaceholderText, customFilterComponent: this.props.customFilterComponent, results: this.props.results, currentResults: this.getCurrentResults() }) : React.createElement(GridFilter, { changeFilter: this.setFilter, placeholderText: this.props.filterPlaceholderText }) : ""; + }, + getSettings: function getSettings() { + return this.props.showSettings ? React.createElement('button', { type: 'button', className: this.props.settingsToggleClassName, onClick: this.toggleColumnChooser, + style: this.props.useGriddleStyles ? { background: "none", border: "none", padding: 0, margin: 0, fontSize: 14 } : null }, this.props.settingsText, this.props.settingsIconComponent) : ""; + }, + getTopSection: function getTopSection(filter, settings) { + if (this.props.showFilter === false && this.props.showSettings === false) { + return ""; + } + + var filterStyles = null, + settingsStyles = null, + topContainerStyles = null; + + if (this.props.useGriddleStyles) { + filterStyles = this.getFilterStyles(); + settingsStyles = this.getSettingsStyles(); + + topContainerStyles = this.getClearFixStyles(); + } + + return React.createElement('div', { className: 'top-section', style: topContainerStyles }, React.createElement('div', { className: 'griddle-filter', style: filterStyles }, filter), React.createElement('div', { className: 'griddle-settings-toggle', style: settingsStyles }, settings)); + }, + getPagingSection: function getPagingSection(currentPage, maxPage) { + if ((this.props.showPager && !this.isInfiniteScrollEnabled() && !this.shouldUseCustomGridComponent()) === false) { + return undefined; + } + + return React.createElement('div', { className: 'griddle-footer' }, this.props.useCustomPagerComponent ? React.createElement(CustomPaginationContainer, { customPagerComponentOptions: this.props.customPagerComponentOptions, next: this.nextPage, previous: this.previousPage, currentPage: currentPage, maxPage: maxPage, setPage: this.setPage, nextText: this.props.nextText, previousText: this.props.previousText, customPagerComponent: this.props.customPagerComponent }) : React.createElement(GridPagination, { useGriddleStyles: this.props.useGriddleStyles, next: this.nextPage, previous: this.previousPage, nextClassName: this.props.nextClassName, nextIconComponent: this.props.nextIconComponent, previousClassName: this.props.previousClassName, previousIconComponent: this.props.previousIconComponent, currentPage: currentPage, maxPage: maxPage, setPage: this.setPage, nextText: this.props.nextText, previousText: this.props.previousText })); + }, + getColumnSelectorSection: function getColumnSelectorSection(keys, cols) { + return this.state.showColumnChooser ? React.createElement(GridSettings, { columns: keys, selectedColumns: cols, setColumns: this.setColumns, settingsText: this.props.settingsText, + settingsIconComponent: this.props.settingsIconComponent, maxRowsText: this.props.maxRowsText, setPageSize: this.setPageSize, + showSetPageSize: !this.shouldUseCustomGridComponent(), resultsPerPage: this.state.resultsPerPage, enableToggleCustom: this.props.enableToggleCustom, + toggleCustomComponent: this.toggleCustomComponent, useCustomComponent: this.shouldUseCustomRowComponent() || this.shouldUseCustomGridComponent(), + useGriddleStyles: this.props.useGriddleStyles, enableCustomFormatText: this.props.enableCustomFormatText, columnMetadata: this.props.columnMetadata }) : ""; + }, + getCustomGridSection: function getCustomGridSection() { + return React.createElement(this.props.customGridComponent, _extends({ data: this.props.results, className: this.props.customGridComponentClassName }, this.props.gridMetadata)); + }, + getCustomRowSection: function getCustomRowSection(data, cols, meta, pagingContent, globalData) { + return React.createElement('div', null, React.createElement(CustomRowComponentContainer, { data: data, columns: cols, metadataColumns: meta, globalData: globalData, + className: this.props.customRowComponentClassName, customComponent: this.props.customRowComponent, + style: this.props.useGriddleStyles ? this.getClearFixStyles() : null }), this.props.showPager && pagingContent); + }, + getStandardGridSection: function getStandardGridSection(data, cols, meta, pagingContent, hasMorePages) { + var sortProperties = this.getSortObject(); + var multipleSelectionProperties = this.getMultipleSelectionObject(); + + // no data section + var showNoData = this.shouldShowNoDataSection(data); + var noDataSection = this.getNoDataSection(); + + return React.createElement('div', { className: 'griddle-body' }, React.createElement(GridTable, { useGriddleStyles: this.props.useGriddleStyles, + noDataSection: noDataSection, + showNoData: showNoData, + columnSettings: this.columnSettings, + rowSettings: this.rowSettings, + sortSettings: sortProperties, + multipleSelectionSettings: multipleSelectionProperties, + filterByColumn: this.filterByColumn, + isSubGriddle: this.props.isSubGriddle, + useGriddleIcons: this.props.useGriddleIcons, + useFixedLayout: this.props.useFixedLayout, + showPager: this.props.showPager, + pagingContent: pagingContent, + data: data, + className: this.props.tableClassName, + enableInfiniteScroll: this.isInfiniteScrollEnabled(), + nextPage: this.nextPage, + showTableHeading: this.props.showTableHeading, + useFixedHeader: this.props.useFixedHeader, + parentRowCollapsedClassName: this.props.parentRowCollapsedClassName, + parentRowExpandedClassName: this.props.parentRowExpandedClassName, + parentRowCollapsedComponent: this.props.parentRowCollapsedComponent, + parentRowExpandedComponent: this.props.parentRowExpandedComponent, + bodyHeight: this.props.bodyHeight, + paddingHeight: this.props.paddingHeight, + rowHeight: this.props.rowHeight, + infiniteScrollLoadTreshold: this.props.infiniteScrollLoadTreshold, + externalLoadingComponent: this.props.externalLoadingComponent, + externalIsLoading: this.props.externalIsLoading, + hasMorePages: hasMorePages, + onRowClick: this.props.onRowClick, + onRowMouseEnter: this.props.onRowMouseEnter, + onRowMouseLeave: this.props.onRowMouseLeave, + onRowWillMount: this.props.onRowWillMount, + onRowWillUnmount: this.props.onRowWillUnmount })); + }, + getContentSection: function getContentSection(data, cols, meta, pagingContent, hasMorePages, globalData) { + if (this.shouldUseCustomGridComponent() && this.props.customGridComponent !== null) { + return this.getCustomGridSection(); + } else if (this.shouldUseCustomRowComponent()) { + return this.getCustomRowSection(data, cols, meta, pagingContent, globalData); + } else { + return this.getStandardGridSection(data, cols, meta, pagingContent, hasMorePages); + } + }, + getNoDataSection: function getNoDataSection() { + if (this.props.customNoDataComponent != null) { + return React.createElement('div', { className: this.props.noDataClassName }, React.createElement(this.props.customNoDataComponent, this.props.customNoDataComponentProps)); + } + return React.createElement(GridNoData, { noDataMessage: this.props.noDataMessage }); + }, + shouldShowNoDataSection: function shouldShowNoDataSection(results) { + if (this.props.allowEmptyGrid) { + return false; + } + + return this.props.useExternal === false && (typeof results === 'undefined' || results.length === 0) || this.props.useExternal === true && this.props.externalIsLoading === false && results.length === 0; + }, + render: function render() { + var that = this, + results = this.getCurrentResults(); // Attempt to assign to the filtered results, if we have any. + + var headerTableClassName = this.props.tableClassName + " table-header"; + + //figure out if we want to show the filter section + var filter = this.getFilter(); + var settings = this.getSettings(); + + //if we have neither filter or settings don't need to render this stuff + var topSection = this.getTopSection(filter, settings); + + var keys = []; + var cols = this.columnSettings.getColumns(); + //figure out which columns are displayed and show only those + var data = this.getDataForRender(results, cols, true); + + var meta = this.columnSettings.getMetadataColumns(); + + if (this.props.columnMetadata) { + // Get column keys from column metadata + forEach(this.props.columnMetadata, function (meta) { + if (!(typeof meta.visible === 'boolean' && meta.visible === false)) { + keys.push(meta.columnName); + } + }); + } else { + // Grab the column keys from the first results + keys = deep.keys(omit(results[0], meta)); + } + + // sort keys by order + keys = this.columnSettings.orderColumns(keys); + + // Grab the current and max page values. + var currentPage = this.getCurrentPage(); + var maxPage = this.getCurrentMaxPage(); + + // Determine if we need to enable infinite scrolling on the table. + var hasMorePages = currentPage + 1 < maxPage; + + // Grab the paging content if it's to be displayed + var pagingContent = this.getPagingSection(currentPage, maxPage); + + var resultContent = this.getContentSection(data, cols, meta, pagingContent, hasMorePages, this.props.globalData); + + var columnSelector = this.getColumnSelectorSection(keys, cols); + + var gridClassName = this.props.gridClassName.length > 0 ? "griddle " + this.props.gridClassName : "griddle"; + //add custom to the class name so we can style it differently + gridClassName += this.shouldUseCustomRowComponent() ? " griddle-custom" : ""; + + return React.createElement('div', { className: gridClassName }, topSection, columnSelector, React.createElement('div', { className: 'griddle-container', style: this.props.useGriddleStyles && !this.props.isSubGriddle ? { border: "1px solid #DDD" } : null }, resultContent)); + } +}); + +GridRowContainer.Griddle = module.exports = Griddle; + + +/***/ }), + +/***/ "./node_modules/griddle-react/modules/rowProperties.js": +/*!*************************************************************!*\ + !*** ./node_modules/griddle-react/modules/rowProperties.js ***! + \*************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + +var _uniqueId = __webpack_require__(/*! lodash/uniqueId */ "./node_modules/lodash/uniqueId.js"); + +var RowProperties = (function () { + function RowProperties() { + var rowMetadata = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + var rowComponent = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; + var isCustom = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; + + _classCallCheck(this, RowProperties); + + this.rowMetadata = rowMetadata; + this.rowComponent = rowComponent; + this.isCustom = isCustom; + // assign unique Id to each griddle instance + } + + _createClass(RowProperties, [{ + key: 'getRowKey', + value: function getRowKey(row, key) { + var uniqueId; + + if (this.hasRowMetadataKey()) { + uniqueId = row[this.rowMetadata.key]; + } else { + uniqueId = _uniqueId("grid_row"); + } + + //todo: add error handling + + return uniqueId; + } + }, { + key: 'hasRowMetadataKey', + value: function hasRowMetadataKey() { + return this.hasRowMetadata() && this.rowMetadata.key !== null && this.rowMetadata.key !== undefined; + } + }, { + key: 'getBodyRowMetadataClass', + value: function getBodyRowMetadataClass(rowData) { + if (this.hasRowMetadata() && this.rowMetadata.bodyCssClassName !== null && this.rowMetadata.bodyCssClassName !== undefined) { + if (typeof this.rowMetadata.bodyCssClassName === 'function') { + return this.rowMetadata.bodyCssClassName(rowData); + } else { + return this.rowMetadata.bodyCssClassName; + } + } + return null; + } + }, { + key: 'getHeaderRowMetadataClass', + value: function getHeaderRowMetadataClass() { + return this.hasRowMetadata() && this.rowMetadata.headerCssClassName !== null && this.rowMetadata.headerCssClassName !== undefined ? this.rowMetadata.headerCssClassName : null; + } + }, { + key: 'hasRowMetadata', + value: function hasRowMetadata() { + return this.rowMetadata !== null; + } + }]); + + return RowProperties; +})(); + +module.exports = RowProperties; + + +/***/ }), + +/***/ "./node_modules/lodash/_DataView.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_DataView.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"), + root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/* Built-in method references that are verified to be native. */ +var DataView = getNative(root, 'DataView'); + +module.exports = DataView; + + +/***/ }), + +/***/ "./node_modules/lodash/_Hash.js": +/*!**************************************!*\ + !*** ./node_modules/lodash/_Hash.js ***! + \**************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var hashClear = __webpack_require__(/*! ./_hashClear */ "./node_modules/lodash/_hashClear.js"), + hashDelete = __webpack_require__(/*! ./_hashDelete */ "./node_modules/lodash/_hashDelete.js"), + hashGet = __webpack_require__(/*! ./_hashGet */ "./node_modules/lodash/_hashGet.js"), + hashHas = __webpack_require__(/*! ./_hashHas */ "./node_modules/lodash/_hashHas.js"), + hashSet = __webpack_require__(/*! ./_hashSet */ "./node_modules/lodash/_hashSet.js"); + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +module.exports = Hash; + + +/***/ }), + +/***/ "./node_modules/lodash/_ListCache.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_ListCache.js ***! + \*******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var listCacheClear = __webpack_require__(/*! ./_listCacheClear */ "./node_modules/lodash/_listCacheClear.js"), + listCacheDelete = __webpack_require__(/*! ./_listCacheDelete */ "./node_modules/lodash/_listCacheDelete.js"), + listCacheGet = __webpack_require__(/*! ./_listCacheGet */ "./node_modules/lodash/_listCacheGet.js"), + listCacheHas = __webpack_require__(/*! ./_listCacheHas */ "./node_modules/lodash/_listCacheHas.js"), + listCacheSet = __webpack_require__(/*! ./_listCacheSet */ "./node_modules/lodash/_listCacheSet.js"); + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +module.exports = ListCache; + + +/***/ }), + +/***/ "./node_modules/lodash/_Map.js": +/*!*************************************!*\ + !*** ./node_modules/lodash/_Map.js ***! + \*************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"), + root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'); + +module.exports = Map; + + +/***/ }), + +/***/ "./node_modules/lodash/_MapCache.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_MapCache.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var mapCacheClear = __webpack_require__(/*! ./_mapCacheClear */ "./node_modules/lodash/_mapCacheClear.js"), + mapCacheDelete = __webpack_require__(/*! ./_mapCacheDelete */ "./node_modules/lodash/_mapCacheDelete.js"), + mapCacheGet = __webpack_require__(/*! ./_mapCacheGet */ "./node_modules/lodash/_mapCacheGet.js"), + mapCacheHas = __webpack_require__(/*! ./_mapCacheHas */ "./node_modules/lodash/_mapCacheHas.js"), + mapCacheSet = __webpack_require__(/*! ./_mapCacheSet */ "./node_modules/lodash/_mapCacheSet.js"); + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +module.exports = MapCache; + + +/***/ }), + +/***/ "./node_modules/lodash/_Promise.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_Promise.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"), + root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/* Built-in method references that are verified to be native. */ +var Promise = getNative(root, 'Promise'); + +module.exports = Promise; + + +/***/ }), + +/***/ "./node_modules/lodash/_Set.js": +/*!*************************************!*\ + !*** ./node_modules/lodash/_Set.js ***! + \*************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"), + root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/* Built-in method references that are verified to be native. */ +var Set = getNative(root, 'Set'); + +module.exports = Set; + + +/***/ }), + +/***/ "./node_modules/lodash/_SetCache.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_SetCache.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var MapCache = __webpack_require__(/*! ./_MapCache */ "./node_modules/lodash/_MapCache.js"), + setCacheAdd = __webpack_require__(/*! ./_setCacheAdd */ "./node_modules/lodash/_setCacheAdd.js"), + setCacheHas = __webpack_require__(/*! ./_setCacheHas */ "./node_modules/lodash/_setCacheHas.js"); + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; + +module.exports = SetCache; + + +/***/ }), + +/***/ "./node_modules/lodash/_Stack.js": +/*!***************************************!*\ + !*** ./node_modules/lodash/_Stack.js ***! + \***************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var ListCache = __webpack_require__(/*! ./_ListCache */ "./node_modules/lodash/_ListCache.js"), + stackClear = __webpack_require__(/*! ./_stackClear */ "./node_modules/lodash/_stackClear.js"), + stackDelete = __webpack_require__(/*! ./_stackDelete */ "./node_modules/lodash/_stackDelete.js"), + stackGet = __webpack_require__(/*! ./_stackGet */ "./node_modules/lodash/_stackGet.js"), + stackHas = __webpack_require__(/*! ./_stackHas */ "./node_modules/lodash/_stackHas.js"), + stackSet = __webpack_require__(/*! ./_stackSet */ "./node_modules/lodash/_stackSet.js"); + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; +} + +// Add methods to `Stack`. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; + +module.exports = Stack; + + +/***/ }), + +/***/ "./node_modules/lodash/_Symbol.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/_Symbol.js ***! + \****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/** Built-in value references. */ +var Symbol = root.Symbol; + +module.exports = Symbol; + + +/***/ }), + +/***/ "./node_modules/lodash/_Uint8Array.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_Uint8Array.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/** Built-in value references. */ +var Uint8Array = root.Uint8Array; + +module.exports = Uint8Array; + + +/***/ }), + +/***/ "./node_modules/lodash/_WeakMap.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_WeakMap.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"), + root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/* Built-in method references that are verified to be native. */ +var WeakMap = getNative(root, 'WeakMap'); + +module.exports = WeakMap; + + +/***/ }), + +/***/ "./node_modules/lodash/_apply.js": +/*!***************************************!*\ + !*** ./node_modules/lodash/_apply.js ***! + \***************************************/ +/***/ (function(module) { + +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +module.exports = apply; + + +/***/ }), + +/***/ "./node_modules/lodash/_arrayEach.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_arrayEach.js ***! + \*******************************************/ +/***/ (function(module) { + +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +module.exports = arrayEach; + + +/***/ }), + +/***/ "./node_modules/lodash/_arrayFilter.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_arrayFilter.js ***! + \*********************************************/ +/***/ (function(module) { + +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +module.exports = arrayFilter; + + +/***/ }), + +/***/ "./node_modules/lodash/_arrayIncludes.js": +/*!***********************************************!*\ + !*** ./node_modules/lodash/_arrayIncludes.js ***! + \***********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseIndexOf = __webpack_require__(/*! ./_baseIndexOf */ "./node_modules/lodash/_baseIndexOf.js"); + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; +} + +module.exports = arrayIncludes; + + +/***/ }), + +/***/ "./node_modules/lodash/_arrayIncludesWith.js": +/*!***************************************************!*\ + !*** ./node_modules/lodash/_arrayIncludesWith.js ***! + \***************************************************/ +/***/ (function(module) { + +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +module.exports = arrayIncludesWith; + + +/***/ }), + +/***/ "./node_modules/lodash/_arrayLikeKeys.js": +/*!***********************************************!*\ + !*** ./node_modules/lodash/_arrayLikeKeys.js ***! + \***********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseTimes = __webpack_require__(/*! ./_baseTimes */ "./node_modules/lodash/_baseTimes.js"), + isArguments = __webpack_require__(/*! ./isArguments */ "./node_modules/lodash/isArguments.js"), + isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), + isBuffer = __webpack_require__(/*! ./isBuffer */ "./node_modules/lodash/isBuffer.js"), + isIndex = __webpack_require__(/*! ./_isIndex */ "./node_modules/lodash/_isIndex.js"), + isTypedArray = __webpack_require__(/*! ./isTypedArray */ "./node_modules/lodash/isTypedArray.js"); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; +} + +module.exports = arrayLikeKeys; + + +/***/ }), + +/***/ "./node_modules/lodash/_arrayMap.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_arrayMap.js ***! + \******************************************/ +/***/ (function(module) { + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +module.exports = arrayMap; + + +/***/ }), + +/***/ "./node_modules/lodash/_arrayPush.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_arrayPush.js ***! + \*******************************************/ +/***/ (function(module) { + +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +module.exports = arrayPush; + + +/***/ }), + +/***/ "./node_modules/lodash/_arraySome.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_arraySome.js ***! + \*******************************************/ +/***/ (function(module) { + +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +module.exports = arraySome; + + +/***/ }), + +/***/ "./node_modules/lodash/_assignValue.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_assignValue.js ***! + \*********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseAssignValue = __webpack_require__(/*! ./_baseAssignValue */ "./node_modules/lodash/_baseAssignValue.js"), + eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js"); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +module.exports = assignValue; + + +/***/ }), + +/***/ "./node_modules/lodash/_assocIndexOf.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_assocIndexOf.js ***! + \**********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js"); + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +module.exports = assocIndexOf; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseAssign.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_baseAssign.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var copyObject = __webpack_require__(/*! ./_copyObject */ "./node_modules/lodash/_copyObject.js"), + keys = __webpack_require__(/*! ./keys */ "./node_modules/lodash/keys.js"); + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); +} + +module.exports = baseAssign; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseAssignIn.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_baseAssignIn.js ***! + \**********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var copyObject = __webpack_require__(/*! ./_copyObject */ "./node_modules/lodash/_copyObject.js"), + keysIn = __webpack_require__(/*! ./keysIn */ "./node_modules/lodash/keysIn.js"); + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && copyObject(source, keysIn(source), object); +} + +module.exports = baseAssignIn; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseAssignValue.js": +/*!*************************************************!*\ + !*** ./node_modules/lodash/_baseAssignValue.js ***! + \*************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var defineProperty = __webpack_require__(/*! ./_defineProperty */ "./node_modules/lodash/_defineProperty.js"); + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +module.exports = baseAssignValue; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseClone.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_baseClone.js ***! + \*******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var Stack = __webpack_require__(/*! ./_Stack */ "./node_modules/lodash/_Stack.js"), + arrayEach = __webpack_require__(/*! ./_arrayEach */ "./node_modules/lodash/_arrayEach.js"), + assignValue = __webpack_require__(/*! ./_assignValue */ "./node_modules/lodash/_assignValue.js"), + baseAssign = __webpack_require__(/*! ./_baseAssign */ "./node_modules/lodash/_baseAssign.js"), + baseAssignIn = __webpack_require__(/*! ./_baseAssignIn */ "./node_modules/lodash/_baseAssignIn.js"), + cloneBuffer = __webpack_require__(/*! ./_cloneBuffer */ "./node_modules/lodash/_cloneBuffer.js"), + copyArray = __webpack_require__(/*! ./_copyArray */ "./node_modules/lodash/_copyArray.js"), + copySymbols = __webpack_require__(/*! ./_copySymbols */ "./node_modules/lodash/_copySymbols.js"), + copySymbolsIn = __webpack_require__(/*! ./_copySymbolsIn */ "./node_modules/lodash/_copySymbolsIn.js"), + getAllKeys = __webpack_require__(/*! ./_getAllKeys */ "./node_modules/lodash/_getAllKeys.js"), + getAllKeysIn = __webpack_require__(/*! ./_getAllKeysIn */ "./node_modules/lodash/_getAllKeysIn.js"), + getTag = __webpack_require__(/*! ./_getTag */ "./node_modules/lodash/_getTag.js"), + initCloneArray = __webpack_require__(/*! ./_initCloneArray */ "./node_modules/lodash/_initCloneArray.js"), + initCloneByTag = __webpack_require__(/*! ./_initCloneByTag */ "./node_modules/lodash/_initCloneByTag.js"), + initCloneObject = __webpack_require__(/*! ./_initCloneObject */ "./node_modules/lodash/_initCloneObject.js"), + isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), + isBuffer = __webpack_require__(/*! ./isBuffer */ "./node_modules/lodash/isBuffer.js"), + isMap = __webpack_require__(/*! ./isMap */ "./node_modules/lodash/isMap.js"), + isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"), + isSet = __webpack_require__(/*! ./isSet */ "./node_modules/lodash/isSet.js"), + keys = __webpack_require__(/*! ./keys */ "./node_modules/lodash/keys.js"), + keysIn = __webpack_require__(/*! ./keysIn */ "./node_modules/lodash/keysIn.js"); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = +cloneableTags[boolTag] = cloneableTags[dateTag] = +cloneableTags[float32Tag] = cloneableTags[float64Tag] = +cloneableTags[int8Tag] = cloneableTags[int16Tag] = +cloneableTags[int32Tag] = cloneableTags[mapTag] = +cloneableTags[numberTag] = cloneableTags[objectTag] = +cloneableTags[regexpTag] = cloneableTags[setTag] = +cloneableTags[stringTag] = cloneableTags[symbolTag] = +cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = +cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : initCloneObject(value); + if (!isDeep) { + return isFlat + ? copySymbolsIn(value, baseAssignIn(result, value)) + : copySymbols(value, baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? getAllKeysIn : getAllKeys) + : (isFlat ? keysIn : keys); + + var props = isArr ? undefined : keysFunc(value); + arrayEach(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +module.exports = baseClone; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseCreate.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_baseCreate.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"); + +/** Built-in value references. */ +var objectCreate = Object.create; + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; +}()); + +module.exports = baseCreate; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseDifference.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_baseDifference.js ***! + \************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var SetCache = __webpack_require__(/*! ./_SetCache */ "./node_modules/lodash/_SetCache.js"), + arrayIncludes = __webpack_require__(/*! ./_arrayIncludes */ "./node_modules/lodash/_arrayIncludes.js"), + arrayIncludesWith = __webpack_require__(/*! ./_arrayIncludesWith */ "./node_modules/lodash/_arrayIncludesWith.js"), + arrayMap = __webpack_require__(/*! ./_arrayMap */ "./node_modules/lodash/_arrayMap.js"), + baseUnary = __webpack_require__(/*! ./_baseUnary */ "./node_modules/lodash/_baseUnary.js"), + cacheHas = __webpack_require__(/*! ./_cacheHas */ "./node_modules/lodash/_cacheHas.js"); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ +function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; +} + +module.exports = baseDifference; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseEach.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_baseEach.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseForOwn = __webpack_require__(/*! ./_baseForOwn */ "./node_modules/lodash/_baseForOwn.js"), + createBaseEach = __webpack_require__(/*! ./_createBaseEach */ "./node_modules/lodash/_createBaseEach.js"); + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = createBaseEach(baseForOwn); + +module.exports = baseEach; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseFilter.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_baseFilter.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseEach = __webpack_require__(/*! ./_baseEach */ "./node_modules/lodash/_baseEach.js"); + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +module.exports = baseFilter; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseFindIndex.js": +/*!***********************************************!*\ + !*** ./node_modules/lodash/_baseFindIndex.js ***! + \***********************************************/ +/***/ (function(module) { + +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +module.exports = baseFindIndex; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseFlatten.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_baseFlatten.js ***! + \*********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var arrayPush = __webpack_require__(/*! ./_arrayPush */ "./node_modules/lodash/_arrayPush.js"), + isFlattenable = __webpack_require__(/*! ./_isFlattenable */ "./node_modules/lodash/_isFlattenable.js"); + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +module.exports = baseFlatten; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseFor.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_baseFor.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var createBaseFor = __webpack_require__(/*! ./_createBaseFor */ "./node_modules/lodash/_createBaseFor.js"); + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +module.exports = baseFor; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseForOwn.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_baseForOwn.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseFor = __webpack_require__(/*! ./_baseFor */ "./node_modules/lodash/_baseFor.js"), + keys = __webpack_require__(/*! ./keys */ "./node_modules/lodash/keys.js"); + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); +} + +module.exports = baseForOwn; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseGet.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_baseGet.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"), + toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js"); + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +module.exports = baseGet; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseGetAllKeys.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_baseGetAllKeys.js ***! + \************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var arrayPush = __webpack_require__(/*! ./_arrayPush */ "./node_modules/lodash/_arrayPush.js"), + isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"); + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); +} + +module.exports = baseGetAllKeys; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseGetTag.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_baseGetTag.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"), + getRawTag = __webpack_require__(/*! ./_getRawTag */ "./node_modules/lodash/_getRawTag.js"), + objectToString = __webpack_require__(/*! ./_objectToString */ "./node_modules/lodash/_objectToString.js"); + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +module.exports = baseGetTag; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseHasIn.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_baseHasIn.js ***! + \*******************************************/ +/***/ (function(module) { + +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +module.exports = baseHasIn; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseIndexOf.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_baseIndexOf.js ***! + \*********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseFindIndex = __webpack_require__(/*! ./_baseFindIndex */ "./node_modules/lodash/_baseFindIndex.js"), + baseIsNaN = __webpack_require__(/*! ./_baseIsNaN */ "./node_modules/lodash/_baseIsNaN.js"), + strictIndexOf = __webpack_require__(/*! ./_strictIndexOf */ "./node_modules/lodash/_strictIndexOf.js"); + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); +} + +module.exports = baseIndexOf; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseIntersection.js": +/*!**************************************************!*\ + !*** ./node_modules/lodash/_baseIntersection.js ***! + \**************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var SetCache = __webpack_require__(/*! ./_SetCache */ "./node_modules/lodash/_SetCache.js"), + arrayIncludes = __webpack_require__(/*! ./_arrayIncludes */ "./node_modules/lodash/_arrayIncludes.js"), + arrayIncludesWith = __webpack_require__(/*! ./_arrayIncludesWith */ "./node_modules/lodash/_arrayIncludesWith.js"), + arrayMap = __webpack_require__(/*! ./_arrayMap */ "./node_modules/lodash/_arrayMap.js"), + baseUnary = __webpack_require__(/*! ./_baseUnary */ "./node_modules/lodash/_baseUnary.js"), + cacheHas = __webpack_require__(/*! ./_cacheHas */ "./node_modules/lodash/_cacheHas.js"); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ +function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +module.exports = baseIntersection; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseIsArguments.js": +/*!*************************************************!*\ + !*** ./node_modules/lodash/_baseIsArguments.js ***! + \*************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), + isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]'; + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; +} + +module.exports = baseIsArguments; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseIsEqual.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_baseIsEqual.js ***! + \*********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseIsEqualDeep = __webpack_require__(/*! ./_baseIsEqualDeep */ "./node_modules/lodash/_baseIsEqualDeep.js"), + isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +module.exports = baseIsEqual; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseIsEqualDeep.js": +/*!*************************************************!*\ + !*** ./node_modules/lodash/_baseIsEqualDeep.js ***! + \*************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var Stack = __webpack_require__(/*! ./_Stack */ "./node_modules/lodash/_Stack.js"), + equalArrays = __webpack_require__(/*! ./_equalArrays */ "./node_modules/lodash/_equalArrays.js"), + equalByTag = __webpack_require__(/*! ./_equalByTag */ "./node_modules/lodash/_equalByTag.js"), + equalObjects = __webpack_require__(/*! ./_equalObjects */ "./node_modules/lodash/_equalObjects.js"), + getTag = __webpack_require__(/*! ./_getTag */ "./node_modules/lodash/_getTag.js"), + isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), + isBuffer = __webpack_require__(/*! ./isBuffer */ "./node_modules/lodash/isBuffer.js"), + isTypedArray = __webpack_require__(/*! ./isTypedArray */ "./node_modules/lodash/isTypedArray.js"); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +module.exports = baseIsEqualDeep; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseIsMap.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_baseIsMap.js ***! + \*******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var getTag = __webpack_require__(/*! ./_getTag */ "./node_modules/lodash/_getTag.js"), + isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; +} + +module.exports = baseIsMap; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseIsMatch.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_baseIsMatch.js ***! + \*********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var Stack = __webpack_require__(/*! ./_Stack */ "./node_modules/lodash/_Stack.js"), + baseIsEqual = __webpack_require__(/*! ./_baseIsEqual */ "./node_modules/lodash/_baseIsEqual.js"); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +module.exports = baseIsMatch; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseIsNaN.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_baseIsNaN.js ***! + \*******************************************/ +/***/ (function(module) { + +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +module.exports = baseIsNaN; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseIsNative.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_baseIsNative.js ***! + \**********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var isFunction = __webpack_require__(/*! ./isFunction */ "./node_modules/lodash/isFunction.js"), + isMasked = __webpack_require__(/*! ./_isMasked */ "./node_modules/lodash/_isMasked.js"), + isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"), + toSource = __webpack_require__(/*! ./_toSource */ "./node_modules/lodash/_toSource.js"); + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +module.exports = baseIsNative; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseIsSet.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_baseIsSet.js ***! + \*******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var getTag = __webpack_require__(/*! ./_getTag */ "./node_modules/lodash/_getTag.js"), + isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); + +/** `Object#toString` result references. */ +var setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return isObjectLike(value) && getTag(value) == setTag; +} + +module.exports = baseIsSet; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseIsTypedArray.js": +/*!**************************************************!*\ + !*** ./node_modules/lodash/_baseIsTypedArray.js ***! + \**************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), + isLength = __webpack_require__(/*! ./isLength */ "./node_modules/lodash/isLength.js"), + isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +typedArrayTags[setTag] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag] = false; + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +module.exports = baseIsTypedArray; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseIteratee.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_baseIteratee.js ***! + \**********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseMatches = __webpack_require__(/*! ./_baseMatches */ "./node_modules/lodash/_baseMatches.js"), + baseMatchesProperty = __webpack_require__(/*! ./_baseMatchesProperty */ "./node_modules/lodash/_baseMatchesProperty.js"), + identity = __webpack_require__(/*! ./identity */ "./node_modules/lodash/identity.js"), + isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), + property = __webpack_require__(/*! ./property */ "./node_modules/lodash/property.js"); + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); +} + +module.exports = baseIteratee; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseKeys.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_baseKeys.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var isPrototype = __webpack_require__(/*! ./_isPrototype */ "./node_modules/lodash/_isPrototype.js"), + nativeKeys = __webpack_require__(/*! ./_nativeKeys */ "./node_modules/lodash/_nativeKeys.js"); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +module.exports = baseKeys; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseKeysIn.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_baseKeysIn.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"), + isPrototype = __webpack_require__(/*! ./_isPrototype */ "./node_modules/lodash/_isPrototype.js"), + nativeKeysIn = __webpack_require__(/*! ./_nativeKeysIn */ "./node_modules/lodash/_nativeKeysIn.js"); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +module.exports = baseKeysIn; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseMap.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_baseMap.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseEach = __webpack_require__(/*! ./_baseEach */ "./node_modules/lodash/_baseEach.js"), + isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"); + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +module.exports = baseMap; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseMatches.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_baseMatches.js ***! + \*********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseIsMatch = __webpack_require__(/*! ./_baseIsMatch */ "./node_modules/lodash/_baseIsMatch.js"), + getMatchData = __webpack_require__(/*! ./_getMatchData */ "./node_modules/lodash/_getMatchData.js"), + matchesStrictComparable = __webpack_require__(/*! ./_matchesStrictComparable */ "./node_modules/lodash/_matchesStrictComparable.js"); + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; +} + +module.exports = baseMatches; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseMatchesProperty.js": +/*!*****************************************************!*\ + !*** ./node_modules/lodash/_baseMatchesProperty.js ***! + \*****************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseIsEqual = __webpack_require__(/*! ./_baseIsEqual */ "./node_modules/lodash/_baseIsEqual.js"), + get = __webpack_require__(/*! ./get */ "./node_modules/lodash/get.js"), + hasIn = __webpack_require__(/*! ./hasIn */ "./node_modules/lodash/hasIn.js"), + isKey = __webpack_require__(/*! ./_isKey */ "./node_modules/lodash/_isKey.js"), + isStrictComparable = __webpack_require__(/*! ./_isStrictComparable */ "./node_modules/lodash/_isStrictComparable.js"), + matchesStrictComparable = __webpack_require__(/*! ./_matchesStrictComparable */ "./node_modules/lodash/_matchesStrictComparable.js"), + toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js"); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; +} + +module.exports = baseMatchesProperty; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseOrderBy.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_baseOrderBy.js ***! + \*********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var arrayMap = __webpack_require__(/*! ./_arrayMap */ "./node_modules/lodash/_arrayMap.js"), + baseGet = __webpack_require__(/*! ./_baseGet */ "./node_modules/lodash/_baseGet.js"), + baseIteratee = __webpack_require__(/*! ./_baseIteratee */ "./node_modules/lodash/_baseIteratee.js"), + baseMap = __webpack_require__(/*! ./_baseMap */ "./node_modules/lodash/_baseMap.js"), + baseSortBy = __webpack_require__(/*! ./_baseSortBy */ "./node_modules/lodash/_baseSortBy.js"), + baseUnary = __webpack_require__(/*! ./_baseUnary */ "./node_modules/lodash/_baseUnary.js"), + compareMultiple = __webpack_require__(/*! ./_compareMultiple */ "./node_modules/lodash/_compareMultiple.js"), + identity = __webpack_require__(/*! ./identity */ "./node_modules/lodash/identity.js"), + isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"); + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = arrayMap(iteratees, function(iteratee) { + if (isArray(iteratee)) { + return function(value) { + return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity]; + } + + var index = -1; + iteratees = arrayMap(iteratees, baseUnary(baseIteratee)); + + var result = baseMap(collection, function(value, key, collection) { + var criteria = arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); +} + +module.exports = baseOrderBy; + + +/***/ }), + +/***/ "./node_modules/lodash/_basePick.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_basePick.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var basePickBy = __webpack_require__(/*! ./_basePickBy */ "./node_modules/lodash/_basePickBy.js"), + hasIn = __webpack_require__(/*! ./hasIn */ "./node_modules/lodash/hasIn.js"); + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return basePickBy(object, paths, function(value, path) { + return hasIn(object, path); + }); +} + +module.exports = basePick; + + +/***/ }), + +/***/ "./node_modules/lodash/_basePickBy.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_basePickBy.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseGet = __webpack_require__(/*! ./_baseGet */ "./node_modules/lodash/_baseGet.js"), + baseSet = __webpack_require__(/*! ./_baseSet */ "./node_modules/lodash/_baseSet.js"), + castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"); + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = baseGet(object, path); + + if (predicate(value, path)) { + baseSet(result, castPath(path, object), value); + } + } + return result; +} + +module.exports = basePickBy; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseProperty.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_baseProperty.js ***! + \**********************************************/ +/***/ (function(module) { + +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +module.exports = baseProperty; + + +/***/ }), + +/***/ "./node_modules/lodash/_basePropertyDeep.js": +/*!**************************************************!*\ + !*** ./node_modules/lodash/_basePropertyDeep.js ***! + \**************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseGet = __webpack_require__(/*! ./_baseGet */ "./node_modules/lodash/_baseGet.js"); + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; +} + +module.exports = basePropertyDeep; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseRest.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_baseRest.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var identity = __webpack_require__(/*! ./identity */ "./node_modules/lodash/identity.js"), + overRest = __webpack_require__(/*! ./_overRest */ "./node_modules/lodash/_overRest.js"), + setToString = __webpack_require__(/*! ./_setToString */ "./node_modules/lodash/_setToString.js"); + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); +} + +module.exports = baseRest; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseSet.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_baseSet.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var assignValue = __webpack_require__(/*! ./_assignValue */ "./node_modules/lodash/_assignValue.js"), + castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"), + isIndex = __webpack_require__(/*! ./_isIndex */ "./node_modules/lodash/_isIndex.js"), + isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"), + toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js"); + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +module.exports = baseSet; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseSetToString.js": +/*!*************************************************!*\ + !*** ./node_modules/lodash/_baseSetToString.js ***! + \*************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var constant = __webpack_require__(/*! ./constant */ "./node_modules/lodash/constant.js"), + defineProperty = __webpack_require__(/*! ./_defineProperty */ "./node_modules/lodash/_defineProperty.js"), + identity = __webpack_require__(/*! ./identity */ "./node_modules/lodash/identity.js"); + +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); +}; + +module.exports = baseSetToString; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseSlice.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_baseSlice.js ***! + \*******************************************/ +/***/ (function(module) { + +/** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; +} + +module.exports = baseSlice; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseSome.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_baseSome.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseEach = __webpack_require__(/*! ./_baseEach */ "./node_modules/lodash/_baseEach.js"); + +/** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; +} + +module.exports = baseSome; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseSortBy.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_baseSortBy.js ***! + \********************************************/ +/***/ (function(module) { + +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +module.exports = baseSortBy; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseTimes.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_baseTimes.js ***! + \*******************************************/ +/***/ (function(module) { + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +module.exports = baseTimes; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseToPairs.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_baseToPairs.js ***! + \*********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var arrayMap = __webpack_require__(/*! ./_arrayMap */ "./node_modules/lodash/_arrayMap.js"); + +/** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the key-value pairs. + */ +function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; + }); +} + +module.exports = baseToPairs; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseToString.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_baseToString.js ***! + \**********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"), + arrayMap = __webpack_require__(/*! ./_arrayMap */ "./node_modules/lodash/_arrayMap.js"), + isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), + isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = baseToString; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseTrim.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_baseTrim.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var trimmedEndIndex = __webpack_require__(/*! ./_trimmedEndIndex */ "./node_modules/lodash/_trimmedEndIndex.js"); + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +module.exports = baseTrim; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseUnary.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_baseUnary.js ***! + \*******************************************/ +/***/ (function(module) { + +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +module.exports = baseUnary; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseUnset.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_baseUnset.js ***! + \*******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"), + last = __webpack_require__(/*! ./last */ "./node_modules/lodash/last.js"), + parent = __webpack_require__(/*! ./_parent */ "./node_modules/lodash/_parent.js"), + toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js"); + +/** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ +function baseUnset(object, path) { + path = castPath(path, object); + object = parent(object, path); + return object == null || delete object[toKey(last(path))]; +} + +module.exports = baseUnset; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseValues.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_baseValues.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var arrayMap = __webpack_require__(/*! ./_arrayMap */ "./node_modules/lodash/_arrayMap.js"); + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); +} + +module.exports = baseValues; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseZipObject.js": +/*!***********************************************!*\ + !*** ./node_modules/lodash/_baseZipObject.js ***! + \***********************************************/ +/***/ (function(module) { + +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +module.exports = baseZipObject; + + +/***/ }), + +/***/ "./node_modules/lodash/_cacheHas.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_cacheHas.js ***! + \******************************************/ +/***/ (function(module) { + +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +module.exports = cacheHas; + + +/***/ }), + +/***/ "./node_modules/lodash/_castArrayLikeObject.js": +/*!*****************************************************!*\ + !*** ./node_modules/lodash/_castArrayLikeObject.js ***! + \*****************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var isArrayLikeObject = __webpack_require__(/*! ./isArrayLikeObject */ "./node_modules/lodash/isArrayLikeObject.js"); + +/** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ +function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; +} + +module.exports = castArrayLikeObject; + + +/***/ }), + +/***/ "./node_modules/lodash/_castFunction.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_castFunction.js ***! + \**********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var identity = __webpack_require__(/*! ./identity */ "./node_modules/lodash/identity.js"); + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : identity; +} + +module.exports = castFunction; + + +/***/ }), + +/***/ "./node_modules/lodash/_castPath.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_castPath.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), + isKey = __webpack_require__(/*! ./_isKey */ "./node_modules/lodash/_isKey.js"), + stringToPath = __webpack_require__(/*! ./_stringToPath */ "./node_modules/lodash/_stringToPath.js"), + toString = __webpack_require__(/*! ./toString */ "./node_modules/lodash/toString.js"); + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); +} + +module.exports = castPath; + + +/***/ }), + +/***/ "./node_modules/lodash/_cloneArrayBuffer.js": +/*!**************************************************!*\ + !*** ./node_modules/lodash/_cloneArrayBuffer.js ***! + \**************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var Uint8Array = __webpack_require__(/*! ./_Uint8Array */ "./node_modules/lodash/_Uint8Array.js"); + +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; +} + +module.exports = cloneArrayBuffer; + + +/***/ }), + +/***/ "./node_modules/lodash/_cloneBuffer.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_cloneBuffer.js ***! + \*********************************************/ +/***/ (function(module, exports, __webpack_require__) { + +/* module decorator */ module = __webpack_require__.nmd(module); +var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/** Detect free variable `exports`. */ +var freeExports = true && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; + +/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; +} + +module.exports = cloneBuffer; + + +/***/ }), + +/***/ "./node_modules/lodash/_cloneDataView.js": +/*!***********************************************!*\ + !*** ./node_modules/lodash/_cloneDataView.js ***! + \***********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var cloneArrayBuffer = __webpack_require__(/*! ./_cloneArrayBuffer */ "./node_modules/lodash/_cloneArrayBuffer.js"); + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +module.exports = cloneDataView; + + +/***/ }), + +/***/ "./node_modules/lodash/_cloneRegExp.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_cloneRegExp.js ***! + \*********************************************/ +/***/ (function(module) { + +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +module.exports = cloneRegExp; + + +/***/ }), + +/***/ "./node_modules/lodash/_cloneSymbol.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_cloneSymbol.js ***! + \*********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +module.exports = cloneSymbol; + + +/***/ }), + +/***/ "./node_modules/lodash/_cloneTypedArray.js": +/*!*************************************************!*\ + !*** ./node_modules/lodash/_cloneTypedArray.js ***! + \*************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var cloneArrayBuffer = __webpack_require__(/*! ./_cloneArrayBuffer */ "./node_modules/lodash/_cloneArrayBuffer.js"); + +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} + +module.exports = cloneTypedArray; + + +/***/ }), + +/***/ "./node_modules/lodash/_compareAscending.js": +/*!**************************************************!*\ + !*** ./node_modules/lodash/_compareAscending.js ***! + \**************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +module.exports = compareAscending; + + +/***/ }), + +/***/ "./node_modules/lodash/_compareMultiple.js": +/*!*************************************************!*\ + !*** ./node_modules/lodash/_compareMultiple.js ***! + \*************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var compareAscending = __webpack_require__(/*! ./_compareAscending */ "./node_modules/lodash/_compareAscending.js"); + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +module.exports = compareMultiple; + + +/***/ }), + +/***/ "./node_modules/lodash/_copyArray.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_copyArray.js ***! + \*******************************************/ +/***/ (function(module) { + +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +module.exports = copyArray; + + +/***/ }), + +/***/ "./node_modules/lodash/_copyObject.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_copyObject.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var assignValue = __webpack_require__(/*! ./_assignValue */ "./node_modules/lodash/_assignValue.js"), + baseAssignValue = __webpack_require__(/*! ./_baseAssignValue */ "./node_modules/lodash/_baseAssignValue.js"); + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; +} + +module.exports = copyObject; + + +/***/ }), + +/***/ "./node_modules/lodash/_copySymbols.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_copySymbols.js ***! + \*********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var copyObject = __webpack_require__(/*! ./_copyObject */ "./node_modules/lodash/_copyObject.js"), + getSymbols = __webpack_require__(/*! ./_getSymbols */ "./node_modules/lodash/_getSymbols.js"); + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); +} + +module.exports = copySymbols; + + +/***/ }), + +/***/ "./node_modules/lodash/_copySymbolsIn.js": +/*!***********************************************!*\ + !*** ./node_modules/lodash/_copySymbolsIn.js ***! + \***********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var copyObject = __webpack_require__(/*! ./_copyObject */ "./node_modules/lodash/_copyObject.js"), + getSymbolsIn = __webpack_require__(/*! ./_getSymbolsIn */ "./node_modules/lodash/_getSymbolsIn.js"); + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return copyObject(source, getSymbolsIn(source), object); +} + +module.exports = copySymbolsIn; + + +/***/ }), + +/***/ "./node_modules/lodash/_coreJsData.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_coreJsData.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +module.exports = coreJsData; + + +/***/ }), + +/***/ "./node_modules/lodash/_createAssigner.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_createAssigner.js ***! + \************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseRest = __webpack_require__(/*! ./_baseRest */ "./node_modules/lodash/_baseRest.js"), + isIterateeCall = __webpack_require__(/*! ./_isIterateeCall */ "./node_modules/lodash/_isIterateeCall.js"); + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +module.exports = createAssigner; + + +/***/ }), + +/***/ "./node_modules/lodash/_createBaseEach.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_createBaseEach.js ***! + \************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"); + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +module.exports = createBaseEach; + + +/***/ }), + +/***/ "./node_modules/lodash/_createBaseFor.js": +/*!***********************************************!*\ + !*** ./node_modules/lodash/_createBaseFor.js ***! + \***********************************************/ +/***/ (function(module) { + +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +module.exports = createBaseFor; + + +/***/ }), + +/***/ "./node_modules/lodash/_createFind.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_createFind.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseIteratee = __webpack_require__(/*! ./_baseIteratee */ "./node_modules/lodash/_baseIteratee.js"), + isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"), + keys = __webpack_require__(/*! ./keys */ "./node_modules/lodash/keys.js"); + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = baseIteratee(predicate, 3); + collection = keys(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +module.exports = createFind; + + +/***/ }), + +/***/ "./node_modules/lodash/_createToPairs.js": +/*!***********************************************!*\ + !*** ./node_modules/lodash/_createToPairs.js ***! + \***********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseToPairs = __webpack_require__(/*! ./_baseToPairs */ "./node_modules/lodash/_baseToPairs.js"), + getTag = __webpack_require__(/*! ./_getTag */ "./node_modules/lodash/_getTag.js"), + mapToArray = __webpack_require__(/*! ./_mapToArray */ "./node_modules/lodash/_mapToArray.js"), + setToPairs = __webpack_require__(/*! ./_setToPairs */ "./node_modules/lodash/_setToPairs.js"); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Creates a `_.toPairs` or `_.toPairsIn` function. + * + * @private + * @param {Function} keysFunc The function to get the keys of a given object. + * @returns {Function} Returns the new pairs function. + */ +function createToPairs(keysFunc) { + return function(object) { + var tag = getTag(object); + if (tag == mapTag) { + return mapToArray(object); + } + if (tag == setTag) { + return setToPairs(object); + } + return baseToPairs(object, keysFunc(object)); + }; +} + +module.exports = createToPairs; + + +/***/ }), + +/***/ "./node_modules/lodash/_customOmitClone.js": +/*!*************************************************!*\ + !*** ./node_modules/lodash/_customOmitClone.js ***! + \*************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var isPlainObject = __webpack_require__(/*! ./isPlainObject */ "./node_modules/lodash/isPlainObject.js"); + +/** + * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain + * objects. + * + * @private + * @param {*} value The value to inspect. + * @param {string} key The key of the property to inspect. + * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + */ +function customOmitClone(value) { + return isPlainObject(value) ? undefined : value; +} + +module.exports = customOmitClone; + + +/***/ }), + +/***/ "./node_modules/lodash/_defineProperty.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_defineProperty.js ***! + \************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"); + +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +module.exports = defineProperty; + + +/***/ }), + +/***/ "./node_modules/lodash/_equalArrays.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_equalArrays.js ***! + \*********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var SetCache = __webpack_require__(/*! ./_SetCache */ "./node_modules/lodash/_SetCache.js"), + arraySome = __webpack_require__(/*! ./_arraySome */ "./node_modules/lodash/_arraySome.js"), + cacheHas = __webpack_require__(/*! ./_cacheHas */ "./node_modules/lodash/_cacheHas.js"); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +module.exports = equalArrays; + + +/***/ }), + +/***/ "./node_modules/lodash/_equalByTag.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_equalByTag.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"), + Uint8Array = __webpack_require__(/*! ./_Uint8Array */ "./node_modules/lodash/_Uint8Array.js"), + eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js"), + equalArrays = __webpack_require__(/*! ./_equalArrays */ "./node_modules/lodash/_equalArrays.js"), + mapToArray = __webpack_require__(/*! ./_mapToArray */ "./node_modules/lodash/_mapToArray.js"), + setToArray = __webpack_require__(/*! ./_setToArray */ "./node_modules/lodash/_setToArray.js"); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +module.exports = equalByTag; + + +/***/ }), + +/***/ "./node_modules/lodash/_equalObjects.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_equalObjects.js ***! + \**********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var getAllKeys = __webpack_require__(/*! ./_getAllKeys */ "./node_modules/lodash/_getAllKeys.js"); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +module.exports = equalObjects; + + +/***/ }), + +/***/ "./node_modules/lodash/_flatRest.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_flatRest.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var flatten = __webpack_require__(/*! ./flatten */ "./node_modules/lodash/flatten.js"), + overRest = __webpack_require__(/*! ./_overRest */ "./node_modules/lodash/_overRest.js"), + setToString = __webpack_require__(/*! ./_setToString */ "./node_modules/lodash/_setToString.js"); + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); +} + +module.exports = flatRest; + + +/***/ }), + +/***/ "./node_modules/lodash/_freeGlobal.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_freeGlobal.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g; + +module.exports = freeGlobal; + + +/***/ }), + +/***/ "./node_modules/lodash/_getAllKeys.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_getAllKeys.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseGetAllKeys = __webpack_require__(/*! ./_baseGetAllKeys */ "./node_modules/lodash/_baseGetAllKeys.js"), + getSymbols = __webpack_require__(/*! ./_getSymbols */ "./node_modules/lodash/_getSymbols.js"), + keys = __webpack_require__(/*! ./keys */ "./node_modules/lodash/keys.js"); + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); +} + +module.exports = getAllKeys; + + +/***/ }), + +/***/ "./node_modules/lodash/_getAllKeysIn.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_getAllKeysIn.js ***! + \**********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseGetAllKeys = __webpack_require__(/*! ./_baseGetAllKeys */ "./node_modules/lodash/_baseGetAllKeys.js"), + getSymbolsIn = __webpack_require__(/*! ./_getSymbolsIn */ "./node_modules/lodash/_getSymbolsIn.js"), + keysIn = __webpack_require__(/*! ./keysIn */ "./node_modules/lodash/keysIn.js"); + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn); +} + +module.exports = getAllKeysIn; + + +/***/ }), + +/***/ "./node_modules/lodash/_getMapData.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_getMapData.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var isKeyable = __webpack_require__(/*! ./_isKeyable */ "./node_modules/lodash/_isKeyable.js"); + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +module.exports = getMapData; + + +/***/ }), + +/***/ "./node_modules/lodash/_getMatchData.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_getMatchData.js ***! + \**********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var isStrictComparable = __webpack_require__(/*! ./_isStrictComparable */ "./node_modules/lodash/_isStrictComparable.js"), + keys = __webpack_require__(/*! ./keys */ "./node_modules/lodash/keys.js"); + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; +} + +module.exports = getMatchData; + + +/***/ }), + +/***/ "./node_modules/lodash/_getNative.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_getNative.js ***! + \*******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseIsNative = __webpack_require__(/*! ./_baseIsNative */ "./node_modules/lodash/_baseIsNative.js"), + getValue = __webpack_require__(/*! ./_getValue */ "./node_modules/lodash/_getValue.js"); + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +module.exports = getNative; + + +/***/ }), + +/***/ "./node_modules/lodash/_getPrototype.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_getPrototype.js ***! + \**********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var overArg = __webpack_require__(/*! ./_overArg */ "./node_modules/lodash/_overArg.js"); + +/** Built-in value references. */ +var getPrototype = overArg(Object.getPrototypeOf, Object); + +module.exports = getPrototype; + + +/***/ }), + +/***/ "./node_modules/lodash/_getRawTag.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_getRawTag.js ***! + \*******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +module.exports = getRawTag; + + +/***/ }), + +/***/ "./node_modules/lodash/_getSymbols.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_getSymbols.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var arrayFilter = __webpack_require__(/*! ./_arrayFilter */ "./node_modules/lodash/_arrayFilter.js"), + stubArray = __webpack_require__(/*! ./stubArray */ "./node_modules/lodash/stubArray.js"); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +module.exports = getSymbols; + + +/***/ }), + +/***/ "./node_modules/lodash/_getSymbolsIn.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_getSymbolsIn.js ***! + \**********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var arrayPush = __webpack_require__(/*! ./_arrayPush */ "./node_modules/lodash/_arrayPush.js"), + getPrototype = __webpack_require__(/*! ./_getPrototype */ "./node_modules/lodash/_getPrototype.js"), + getSymbols = __webpack_require__(/*! ./_getSymbols */ "./node_modules/lodash/_getSymbols.js"), + stubArray = __webpack_require__(/*! ./stubArray */ "./node_modules/lodash/stubArray.js"); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { + var result = []; + while (object) { + arrayPush(result, getSymbols(object)); + object = getPrototype(object); + } + return result; +}; + +module.exports = getSymbolsIn; + + +/***/ }), + +/***/ "./node_modules/lodash/_getTag.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/_getTag.js ***! + \****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var DataView = __webpack_require__(/*! ./_DataView */ "./node_modules/lodash/_DataView.js"), + Map = __webpack_require__(/*! ./_Map */ "./node_modules/lodash/_Map.js"), + Promise = __webpack_require__(/*! ./_Promise */ "./node_modules/lodash/_Promise.js"), + Set = __webpack_require__(/*! ./_Set */ "./node_modules/lodash/_Set.js"), + WeakMap = __webpack_require__(/*! ./_WeakMap */ "./node_modules/lodash/_WeakMap.js"), + baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), + toSource = __webpack_require__(/*! ./_toSource */ "./node_modules/lodash/_toSource.js"); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + setTag = '[object Set]', + weakMapTag = '[object WeakMap]'; + +var dataViewTag = '[object DataView]'; + +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +var getTag = baseGetTag; + +// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; +} + +module.exports = getTag; + + +/***/ }), + +/***/ "./node_modules/lodash/_getValue.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_getValue.js ***! + \******************************************/ +/***/ (function(module) { + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +module.exports = getValue; + + +/***/ }), + +/***/ "./node_modules/lodash/_hasPath.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_hasPath.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"), + isArguments = __webpack_require__(/*! ./isArguments */ "./node_modules/lodash/isArguments.js"), + isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), + isIndex = __webpack_require__(/*! ./_isIndex */ "./node_modules/lodash/_isIndex.js"), + isLength = __webpack_require__(/*! ./isLength */ "./node_modules/lodash/isLength.js"), + toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js"); + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); +} + +module.exports = hasPath; + + +/***/ }), + +/***/ "./node_modules/lodash/_hashClear.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_hashClear.js ***! + \*******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; +} + +module.exports = hashClear; + + +/***/ }), + +/***/ "./node_modules/lodash/_hashDelete.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_hashDelete.js ***! + \********************************************/ +/***/ (function(module) { + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} + +module.exports = hashDelete; + + +/***/ }), + +/***/ "./node_modules/lodash/_hashGet.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_hashGet.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +module.exports = hashGet; + + +/***/ }), + +/***/ "./node_modules/lodash/_hashHas.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_hashHas.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); +} + +module.exports = hashHas; + + +/***/ }), + +/***/ "./node_modules/lodash/_hashSet.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_hashSet.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +module.exports = hashSet; + + +/***/ }), + +/***/ "./node_modules/lodash/_initCloneArray.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_initCloneArray.js ***! + \************************************************/ +/***/ (function(module) { + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +module.exports = initCloneArray; + + +/***/ }), + +/***/ "./node_modules/lodash/_initCloneByTag.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_initCloneByTag.js ***! + \************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var cloneArrayBuffer = __webpack_require__(/*! ./_cloneArrayBuffer */ "./node_modules/lodash/_cloneArrayBuffer.js"), + cloneDataView = __webpack_require__(/*! ./_cloneDataView */ "./node_modules/lodash/_cloneDataView.js"), + cloneRegExp = __webpack_require__(/*! ./_cloneRegExp */ "./node_modules/lodash/_cloneRegExp.js"), + cloneSymbol = __webpack_require__(/*! ./_cloneSymbol */ "./node_modules/lodash/_cloneSymbol.js"), + cloneTypedArray = __webpack_require__(/*! ./_cloneTypedArray */ "./node_modules/lodash/_cloneTypedArray.js"); + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return cloneSymbol(object); + } +} + +module.exports = initCloneByTag; + + +/***/ }), + +/***/ "./node_modules/lodash/_initCloneObject.js": +/*!*************************************************!*\ + !*** ./node_modules/lodash/_initCloneObject.js ***! + \*************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseCreate = __webpack_require__(/*! ./_baseCreate */ "./node_modules/lodash/_baseCreate.js"), + getPrototype = __webpack_require__(/*! ./_getPrototype */ "./node_modules/lodash/_getPrototype.js"), + isPrototype = __webpack_require__(/*! ./_isPrototype */ "./node_modules/lodash/_isPrototype.js"); + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; +} + +module.exports = initCloneObject; + + +/***/ }), + +/***/ "./node_modules/lodash/_isFlattenable.js": +/*!***********************************************!*\ + !*** ./node_modules/lodash/_isFlattenable.js ***! + \***********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"), + isArguments = __webpack_require__(/*! ./isArguments */ "./node_modules/lodash/isArguments.js"), + isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"); + +/** Built-in value references. */ +var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +module.exports = isFlattenable; + + +/***/ }), + +/***/ "./node_modules/lodash/_isIndex.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_isIndex.js ***! + \*****************************************/ +/***/ (function(module) { + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +module.exports = isIndex; + + +/***/ }), + +/***/ "./node_modules/lodash/_isIterateeCall.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_isIterateeCall.js ***! + \************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js"), + isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"), + isIndex = __webpack_require__(/*! ./_isIndex */ "./node_modules/lodash/_isIndex.js"), + isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"); + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; +} + +module.exports = isIterateeCall; + + +/***/ }), + +/***/ "./node_modules/lodash/_isKey.js": +/*!***************************************!*\ + !*** ./node_modules/lodash/_isKey.js ***! + \***************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), + isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +module.exports = isKey; + + +/***/ }), + +/***/ "./node_modules/lodash/_isKeyable.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_isKeyable.js ***! + \*******************************************/ +/***/ (function(module) { + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +module.exports = isKeyable; + + +/***/ }), + +/***/ "./node_modules/lodash/_isMasked.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_isMasked.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var coreJsData = __webpack_require__(/*! ./_coreJsData */ "./node_modules/lodash/_coreJsData.js"); + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +module.exports = isMasked; + + +/***/ }), + +/***/ "./node_modules/lodash/_isPrototype.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_isPrototype.js ***! + \*********************************************/ +/***/ (function(module) { + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; +} + +module.exports = isPrototype; + + +/***/ }), + +/***/ "./node_modules/lodash/_isStrictComparable.js": +/*!****************************************************!*\ + !*** ./node_modules/lodash/_isStrictComparable.js ***! + \****************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"); + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !isObject(value); +} + +module.exports = isStrictComparable; + + +/***/ }), + +/***/ "./node_modules/lodash/_listCacheClear.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_listCacheClear.js ***! + \************************************************/ +/***/ (function(module) { + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} + +module.exports = listCacheClear; + + +/***/ }), + +/***/ "./node_modules/lodash/_listCacheDelete.js": +/*!*************************************************!*\ + !*** ./node_modules/lodash/_listCacheDelete.js ***! + \*************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; +} + +module.exports = listCacheDelete; + + +/***/ }), + +/***/ "./node_modules/lodash/_listCacheGet.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_listCacheGet.js ***! + \**********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +module.exports = listCacheGet; + + +/***/ }), + +/***/ "./node_modules/lodash/_listCacheHas.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_listCacheHas.js ***! + \**********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +module.exports = listCacheHas; + + +/***/ }), + +/***/ "./node_modules/lodash/_listCacheSet.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_listCacheSet.js ***! + \**********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +module.exports = listCacheSet; + + +/***/ }), + +/***/ "./node_modules/lodash/_mapCacheClear.js": +/*!***********************************************!*\ + !*** ./node_modules/lodash/_mapCacheClear.js ***! + \***********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var Hash = __webpack_require__(/*! ./_Hash */ "./node_modules/lodash/_Hash.js"), + ListCache = __webpack_require__(/*! ./_ListCache */ "./node_modules/lodash/_ListCache.js"), + Map = __webpack_require__(/*! ./_Map */ "./node_modules/lodash/_Map.js"); + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +module.exports = mapCacheClear; + + +/***/ }), + +/***/ "./node_modules/lodash/_mapCacheDelete.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_mapCacheDelete.js ***! + \************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} + +module.exports = mapCacheDelete; + + +/***/ }), + +/***/ "./node_modules/lodash/_mapCacheGet.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_mapCacheGet.js ***! + \*********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +module.exports = mapCacheGet; + + +/***/ }), + +/***/ "./node_modules/lodash/_mapCacheHas.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_mapCacheHas.js ***! + \*********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +module.exports = mapCacheHas; + + +/***/ }), + +/***/ "./node_modules/lodash/_mapCacheSet.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_mapCacheSet.js ***! + \*********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} + +module.exports = mapCacheSet; + + +/***/ }), + +/***/ "./node_modules/lodash/_mapToArray.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_mapToArray.js ***! + \********************************************/ +/***/ (function(module) { + +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +module.exports = mapToArray; + + +/***/ }), + +/***/ "./node_modules/lodash/_matchesStrictComparable.js": +/*!*********************************************************!*\ + !*** ./node_modules/lodash/_matchesStrictComparable.js ***! + \*********************************************************/ +/***/ (function(module) { + +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +module.exports = matchesStrictComparable; + + +/***/ }), + +/***/ "./node_modules/lodash/_memoizeCapped.js": +/*!***********************************************!*\ + !*** ./node_modules/lodash/_memoizeCapped.js ***! + \***********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var memoize = __webpack_require__(/*! ./memoize */ "./node_modules/lodash/memoize.js"); + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +module.exports = memoizeCapped; + + +/***/ }), + +/***/ "./node_modules/lodash/_nativeCreate.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_nativeCreate.js ***! + \**********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"); + +/* Built-in method references that are verified to be native. */ +var nativeCreate = getNative(Object, 'create'); + +module.exports = nativeCreate; + + +/***/ }), + +/***/ "./node_modules/lodash/_nativeKeys.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_nativeKeys.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var overArg = __webpack_require__(/*! ./_overArg */ "./node_modules/lodash/_overArg.js"); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); + +module.exports = nativeKeys; + + +/***/ }), + +/***/ "./node_modules/lodash/_nativeKeysIn.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_nativeKeysIn.js ***! + \**********************************************/ +/***/ (function(module) { + +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +module.exports = nativeKeysIn; + + +/***/ }), + +/***/ "./node_modules/lodash/_nodeUtil.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_nodeUtil.js ***! + \******************************************/ +/***/ (function(module, exports, __webpack_require__) { + +/* module decorator */ module = __webpack_require__.nmd(module); +var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ "./node_modules/lodash/_freeGlobal.js"); + +/** Detect free variable `exports`. */ +var freeExports = true && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); + +module.exports = nodeUtil; + + +/***/ }), + +/***/ "./node_modules/lodash/_objectToString.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_objectToString.js ***! + \************************************************/ +/***/ (function(module) { + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +module.exports = objectToString; + + +/***/ }), + +/***/ "./node_modules/lodash/_overArg.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_overArg.js ***! + \*****************************************/ +/***/ (function(module) { + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +module.exports = overArg; + + +/***/ }), + +/***/ "./node_modules/lodash/_overRest.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_overRest.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var apply = __webpack_require__(/*! ./_apply */ "./node_modules/lodash/_apply.js"); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; +} + +module.exports = overRest; + + +/***/ }), + +/***/ "./node_modules/lodash/_parent.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/_parent.js ***! + \****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseGet = __webpack_require__(/*! ./_baseGet */ "./node_modules/lodash/_baseGet.js"), + baseSlice = __webpack_require__(/*! ./_baseSlice */ "./node_modules/lodash/_baseSlice.js"); + +/** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ +function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); +} + +module.exports = parent; + + +/***/ }), + +/***/ "./node_modules/lodash/_root.js": +/*!**************************************!*\ + !*** ./node_modules/lodash/_root.js ***! + \**************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ "./node_modules/lodash/_freeGlobal.js"); + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +module.exports = root; + + +/***/ }), + +/***/ "./node_modules/lodash/_setCacheAdd.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_setCacheAdd.js ***! + \*********************************************/ +/***/ (function(module) { + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +module.exports = setCacheAdd; + + +/***/ }), + +/***/ "./node_modules/lodash/_setCacheHas.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_setCacheHas.js ***! + \*********************************************/ +/***/ (function(module) { + +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +module.exports = setCacheHas; + + +/***/ }), + +/***/ "./node_modules/lodash/_setToArray.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_setToArray.js ***! + \********************************************/ +/***/ (function(module) { + +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +module.exports = setToArray; + + +/***/ }), + +/***/ "./node_modules/lodash/_setToPairs.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_setToPairs.js ***! + \********************************************/ +/***/ (function(module) { + +/** + * Converts `set` to its value-value pairs. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the value-value pairs. + */ +function setToPairs(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = [value, value]; + }); + return result; +} + +module.exports = setToPairs; + + +/***/ }), + +/***/ "./node_modules/lodash/_setToString.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_setToString.js ***! + \*********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseSetToString = __webpack_require__(/*! ./_baseSetToString */ "./node_modules/lodash/_baseSetToString.js"), + shortOut = __webpack_require__(/*! ./_shortOut */ "./node_modules/lodash/_shortOut.js"); + +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = shortOut(baseSetToString); + +module.exports = setToString; + + +/***/ }), + +/***/ "./node_modules/lodash/_shortOut.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_shortOut.js ***! + \******************************************/ +/***/ (function(module) { + +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} + +module.exports = shortOut; + + +/***/ }), + +/***/ "./node_modules/lodash/_stackClear.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_stackClear.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var ListCache = __webpack_require__(/*! ./_ListCache */ "./node_modules/lodash/_ListCache.js"); + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new ListCache; + this.size = 0; +} + +module.exports = stackClear; + + +/***/ }), + +/***/ "./node_modules/lodash/_stackDelete.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_stackDelete.js ***! + \*********************************************/ +/***/ (function(module) { + +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; +} + +module.exports = stackDelete; + + +/***/ }), + +/***/ "./node_modules/lodash/_stackGet.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_stackGet.js ***! + \******************************************/ +/***/ (function(module) { + +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +module.exports = stackGet; + + +/***/ }), + +/***/ "./node_modules/lodash/_stackHas.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_stackHas.js ***! + \******************************************/ +/***/ (function(module) { + +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +module.exports = stackHas; + + +/***/ }), + +/***/ "./node_modules/lodash/_stackSet.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_stackSet.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var ListCache = __webpack_require__(/*! ./_ListCache */ "./node_modules/lodash/_ListCache.js"), + Map = __webpack_require__(/*! ./_Map */ "./node_modules/lodash/_Map.js"), + MapCache = __webpack_require__(/*! ./_MapCache */ "./node_modules/lodash/_MapCache.js"); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +module.exports = stackSet; + + +/***/ }), + +/***/ "./node_modules/lodash/_strictIndexOf.js": +/*!***********************************************!*\ + !*** ./node_modules/lodash/_strictIndexOf.js ***! + \***********************************************/ +/***/ (function(module) { + +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +module.exports = strictIndexOf; + + +/***/ }), + +/***/ "./node_modules/lodash/_stringToPath.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_stringToPath.js ***! + \**********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var memoizeCapped = __webpack_require__(/*! ./_memoizeCapped */ "./node_modules/lodash/_memoizeCapped.js"); + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +module.exports = stringToPath; + + +/***/ }), + +/***/ "./node_modules/lodash/_toKey.js": +/*!***************************************!*\ + !*** ./node_modules/lodash/_toKey.js ***! + \***************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = toKey; + + +/***/ }), + +/***/ "./node_modules/lodash/_toSource.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_toSource.js ***! + \******************************************/ +/***/ (function(module) { + +/** Used for built-in method references. */ +var funcProto = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +module.exports = toSource; + + +/***/ }), + +/***/ "./node_modules/lodash/_trimmedEndIndex.js": +/*!*************************************************!*\ + !*** ./node_modules/lodash/_trimmedEndIndex.js ***! + \*************************************************/ +/***/ (function(module) { + +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +module.exports = trimmedEndIndex; + + +/***/ }), + +/***/ "./node_modules/lodash/assign.js": +/*!***************************************!*\ + !*** ./node_modules/lodash/assign.js ***! + \***************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var assignValue = __webpack_require__(/*! ./_assignValue */ "./node_modules/lodash/_assignValue.js"), + copyObject = __webpack_require__(/*! ./_copyObject */ "./node_modules/lodash/_copyObject.js"), + createAssigner = __webpack_require__(/*! ./_createAssigner */ "./node_modules/lodash/_createAssigner.js"), + isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"), + isPrototype = __webpack_require__(/*! ./_isPrototype */ "./node_modules/lodash/_isPrototype.js"), + keys = __webpack_require__(/*! ./keys */ "./node_modules/lodash/keys.js"); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ +var assign = createAssigner(function(object, source) { + if (isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } +}); + +module.exports = assign; + + +/***/ }), + +/***/ "./node_modules/lodash/constant.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/constant.js ***! + \*****************************************/ +/***/ (function(module) { + +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +module.exports = constant; + + +/***/ }), + +/***/ "./node_modules/lodash/defaults.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/defaults.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseRest = __webpack_require__(/*! ./_baseRest */ "./node_modules/lodash/_baseRest.js"), + eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js"), + isIterateeCall = __webpack_require__(/*! ./_isIterateeCall */ "./node_modules/lodash/_isIterateeCall.js"), + keysIn = __webpack_require__(/*! ./keysIn */ "./node_modules/lodash/keysIn.js"); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +module.exports = defaults; + + +/***/ }), + +/***/ "./node_modules/lodash/difference.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/difference.js ***! + \*******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseDifference = __webpack_require__(/*! ./_baseDifference */ "./node_modules/lodash/_baseDifference.js"), + baseFlatten = __webpack_require__(/*! ./_baseFlatten */ "./node_modules/lodash/_baseFlatten.js"), + baseRest = __webpack_require__(/*! ./_baseRest */ "./node_modules/lodash/_baseRest.js"), + isArrayLikeObject = __webpack_require__(/*! ./isArrayLikeObject */ "./node_modules/lodash/isArrayLikeObject.js"); + +/** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ +var difference = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; +}); + +module.exports = difference; + + +/***/ }), + +/***/ "./node_modules/lodash/drop.js": +/*!*************************************!*\ + !*** ./node_modules/lodash/drop.js ***! + \*************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseSlice = __webpack_require__(/*! ./_baseSlice */ "./node_modules/lodash/_baseSlice.js"), + toInteger = __webpack_require__(/*! ./toInteger */ "./node_modules/lodash/toInteger.js"); + +/** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); +} + +module.exports = drop; + + +/***/ }), + +/***/ "./node_modules/lodash/dropRight.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/dropRight.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseSlice = __webpack_require__(/*! ./_baseSlice */ "./node_modules/lodash/_baseSlice.js"), + toInteger = __webpack_require__(/*! ./toInteger */ "./node_modules/lodash/toInteger.js"); + +/** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); +} + +module.exports = dropRight; + + +/***/ }), + +/***/ "./node_modules/lodash/eq.js": +/*!***********************************!*\ + !*** ./node_modules/lodash/eq.js ***! + \***********************************/ +/***/ (function(module) { + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +module.exports = eq; + + +/***/ }), + +/***/ "./node_modules/lodash/filter.js": +/*!***************************************!*\ + !*** ./node_modules/lodash/filter.js ***! + \***************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var arrayFilter = __webpack_require__(/*! ./_arrayFilter */ "./node_modules/lodash/_arrayFilter.js"), + baseFilter = __webpack_require__(/*! ./_baseFilter */ "./node_modules/lodash/_baseFilter.js"), + baseIteratee = __webpack_require__(/*! ./_baseIteratee */ "./node_modules/lodash/_baseIteratee.js"), + isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"); + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, baseIteratee(predicate, 3)); +} + +module.exports = filter; + + +/***/ }), + +/***/ "./node_modules/lodash/find.js": +/*!*************************************!*\ + !*** ./node_modules/lodash/find.js ***! + \*************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var createFind = __webpack_require__(/*! ./_createFind */ "./node_modules/lodash/_createFind.js"), + findIndex = __webpack_require__(/*! ./findIndex */ "./node_modules/lodash/findIndex.js"); + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = createFind(findIndex); + +module.exports = find; + + +/***/ }), + +/***/ "./node_modules/lodash/findIndex.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/findIndex.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseFindIndex = __webpack_require__(/*! ./_baseFindIndex */ "./node_modules/lodash/_baseFindIndex.js"), + baseIteratee = __webpack_require__(/*! ./_baseIteratee */ "./node_modules/lodash/_baseIteratee.js"), + toInteger = __webpack_require__(/*! ./toInteger */ "./node_modules/lodash/toInteger.js"); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index); +} + +module.exports = findIndex; + + +/***/ }), + +/***/ "./node_modules/lodash/flatten.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/flatten.js ***! + \****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseFlatten = __webpack_require__(/*! ./_baseFlatten */ "./node_modules/lodash/_baseFlatten.js"); + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; +} + +module.exports = flatten; + + +/***/ }), + +/***/ "./node_modules/lodash/forEach.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/forEach.js ***! + \****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var arrayEach = __webpack_require__(/*! ./_arrayEach */ "./node_modules/lodash/_arrayEach.js"), + baseEach = __webpack_require__(/*! ./_baseEach */ "./node_modules/lodash/_baseEach.js"), + castFunction = __webpack_require__(/*! ./_castFunction */ "./node_modules/lodash/_castFunction.js"), + isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"); + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach; + return func(collection, castFunction(iteratee)); +} + +module.exports = forEach; + + +/***/ }), + +/***/ "./node_modules/lodash/forOwn.js": +/*!***************************************!*\ + !*** ./node_modules/lodash/forOwn.js ***! + \***************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseForOwn = __webpack_require__(/*! ./_baseForOwn */ "./node_modules/lodash/_baseForOwn.js"), + castFunction = __webpack_require__(/*! ./_castFunction */ "./node_modules/lodash/_castFunction.js"); + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && baseForOwn(object, castFunction(iteratee)); +} + +module.exports = forOwn; + + +/***/ }), + +/***/ "./node_modules/lodash/get.js": +/*!************************************!*\ + !*** ./node_modules/lodash/get.js ***! + \************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseGet = __webpack_require__(/*! ./_baseGet */ "./node_modules/lodash/_baseGet.js"); + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +module.exports = get; + + +/***/ }), + +/***/ "./node_modules/lodash/hasIn.js": +/*!**************************************!*\ + !*** ./node_modules/lodash/hasIn.js ***! + \**************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseHasIn = __webpack_require__(/*! ./_baseHasIn */ "./node_modules/lodash/_baseHasIn.js"), + hasPath = __webpack_require__(/*! ./_hasPath */ "./node_modules/lodash/_hasPath.js"); + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); +} + +module.exports = hasIn; + + +/***/ }), + +/***/ "./node_modules/lodash/identity.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/identity.js ***! + \*****************************************/ +/***/ (function(module) { + +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +module.exports = identity; + + +/***/ }), + +/***/ "./node_modules/lodash/includes.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/includes.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseIndexOf = __webpack_require__(/*! ./_baseIndexOf */ "./node_modules/lodash/_baseIndexOf.js"), + isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"), + isString = __webpack_require__(/*! ./isString */ "./node_modules/lodash/isString.js"), + toInteger = __webpack_require__(/*! ./toInteger */ "./node_modules/lodash/toInteger.js"), + values = __webpack_require__(/*! ./values */ "./node_modules/lodash/values.js"); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */ +function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); +} + +module.exports = includes; + + +/***/ }), + +/***/ "./node_modules/lodash/initial.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/initial.js ***! + \****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseSlice = __webpack_require__(/*! ./_baseSlice */ "./node_modules/lodash/_baseSlice.js"); + +/** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ +function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; +} + +module.exports = initial; + + +/***/ }), + +/***/ "./node_modules/lodash/intersection.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/intersection.js ***! + \*********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var arrayMap = __webpack_require__(/*! ./_arrayMap */ "./node_modules/lodash/_arrayMap.js"), + baseIntersection = __webpack_require__(/*! ./_baseIntersection */ "./node_modules/lodash/_baseIntersection.js"), + baseRest = __webpack_require__(/*! ./_baseRest */ "./node_modules/lodash/_baseRest.js"), + castArrayLikeObject = __webpack_require__(/*! ./_castArrayLikeObject */ "./node_modules/lodash/_castArrayLikeObject.js"); + +/** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ +var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; +}); + +module.exports = intersection; + + +/***/ }), + +/***/ "./node_modules/lodash/isArguments.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/isArguments.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseIsArguments = __webpack_require__(/*! ./_baseIsArguments */ "./node_modules/lodash/_baseIsArguments.js"), + isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; + +module.exports = isArguments; + + +/***/ }), + +/***/ "./node_modules/lodash/isArray.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/isArray.js ***! + \****************************************/ +/***/ (function(module) { + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +module.exports = isArray; + + +/***/ }), + +/***/ "./node_modules/lodash/isArrayLike.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/isArrayLike.js ***! + \********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var isFunction = __webpack_require__(/*! ./isFunction */ "./node_modules/lodash/isFunction.js"), + isLength = __webpack_require__(/*! ./isLength */ "./node_modules/lodash/isLength.js"); + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +module.exports = isArrayLike; + + +/***/ }), + +/***/ "./node_modules/lodash/isArrayLikeObject.js": +/*!**************************************************!*\ + !*** ./node_modules/lodash/isArrayLikeObject.js ***! + \**************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"), + isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); +} + +module.exports = isArrayLikeObject; + + +/***/ }), + +/***/ "./node_modules/lodash/isBuffer.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/isBuffer.js ***! + \*****************************************/ +/***/ (function(module, exports, __webpack_require__) { + +/* module decorator */ module = __webpack_require__.nmd(module); +var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"), + stubFalse = __webpack_require__(/*! ./stubFalse */ "./node_modules/lodash/stubFalse.js"); + +/** Detect free variable `exports`. */ +var freeExports = true && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; + +module.exports = isBuffer; + + +/***/ }), + +/***/ "./node_modules/lodash/isEmpty.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/isEmpty.js ***! + \****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseKeys = __webpack_require__(/*! ./_baseKeys */ "./node_modules/lodash/_baseKeys.js"), + getTag = __webpack_require__(/*! ./_getTag */ "./node_modules/lodash/_getTag.js"), + isArguments = __webpack_require__(/*! ./isArguments */ "./node_modules/lodash/isArguments.js"), + isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), + isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"), + isBuffer = __webpack_require__(/*! ./isBuffer */ "./node_modules/lodash/isBuffer.js"), + isPrototype = __webpack_require__(/*! ./_isPrototype */ "./node_modules/lodash/_isPrototype.js"), + isTypedArray = __webpack_require__(/*! ./isTypedArray */ "./node_modules/lodash/isTypedArray.js"); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ +function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length; + } + var tag = getTag(value); + if (tag == mapTag || tag == setTag) { + return !value.size; + } + if (isPrototype(value)) { + return !baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; +} + +module.exports = isEmpty; + + +/***/ }), + +/***/ "./node_modules/lodash/isFunction.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/isFunction.js ***! + \*******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), + isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"); + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +module.exports = isFunction; + + +/***/ }), + +/***/ "./node_modules/lodash/isLength.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/isLength.js ***! + \*****************************************/ +/***/ (function(module) { + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +module.exports = isLength; + + +/***/ }), + +/***/ "./node_modules/lodash/isMap.js": +/*!**************************************!*\ + !*** ./node_modules/lodash/isMap.js ***! + \**************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseIsMap = __webpack_require__(/*! ./_baseIsMap */ "./node_modules/lodash/_baseIsMap.js"), + baseUnary = __webpack_require__(/*! ./_baseUnary */ "./node_modules/lodash/_baseUnary.js"), + nodeUtil = __webpack_require__(/*! ./_nodeUtil */ "./node_modules/lodash/_nodeUtil.js"); + +/* Node.js helper references. */ +var nodeIsMap = nodeUtil && nodeUtil.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + +module.exports = isMap; + + +/***/ }), + +/***/ "./node_modules/lodash/isNull.js": +/*!***************************************!*\ + !*** ./node_modules/lodash/isNull.js ***! + \***************************************/ +/***/ (function(module) { + +/** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ +function isNull(value) { + return value === null; +} + +module.exports = isNull; + + +/***/ }), + +/***/ "./node_modules/lodash/isObject.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/isObject.js ***! + \*****************************************/ +/***/ (function(module) { + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +module.exports = isObject; + + +/***/ }), + +/***/ "./node_modules/lodash/isObjectLike.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/isObjectLike.js ***! + \*********************************************/ +/***/ (function(module) { + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +module.exports = isObjectLike; + + +/***/ }), + +/***/ "./node_modules/lodash/isPlainObject.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/isPlainObject.js ***! + \**********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), + getPrototype = __webpack_require__(/*! ./_getPrototype */ "./node_modules/lodash/_getPrototype.js"), + isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; +} + +module.exports = isPlainObject; + + +/***/ }), + +/***/ "./node_modules/lodash/isSet.js": +/*!**************************************!*\ + !*** ./node_modules/lodash/isSet.js ***! + \**************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseIsSet = __webpack_require__(/*! ./_baseIsSet */ "./node_modules/lodash/_baseIsSet.js"), + baseUnary = __webpack_require__(/*! ./_baseUnary */ "./node_modules/lodash/_baseUnary.js"), + nodeUtil = __webpack_require__(/*! ./_nodeUtil */ "./node_modules/lodash/_nodeUtil.js"); + +/* Node.js helper references. */ +var nodeIsSet = nodeUtil && nodeUtil.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + +module.exports = isSet; + + +/***/ }), + +/***/ "./node_modules/lodash/isString.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/isString.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), + isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), + isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); +} + +module.exports = isString; + + +/***/ }), + +/***/ "./node_modules/lodash/isSymbol.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/isSymbol.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), + isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +module.exports = isSymbol; + + +/***/ }), + +/***/ "./node_modules/lodash/isTypedArray.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/isTypedArray.js ***! + \*********************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseIsTypedArray = __webpack_require__(/*! ./_baseIsTypedArray */ "./node_modules/lodash/_baseIsTypedArray.js"), + baseUnary = __webpack_require__(/*! ./_baseUnary */ "./node_modules/lodash/_baseUnary.js"), + nodeUtil = __webpack_require__(/*! ./_nodeUtil */ "./node_modules/lodash/_nodeUtil.js"); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +module.exports = isTypedArray; + + +/***/ }), + +/***/ "./node_modules/lodash/isUndefined.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/isUndefined.js ***! + \********************************************/ +/***/ (function(module) { + +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +module.exports = isUndefined; + + +/***/ }), + +/***/ "./node_modules/lodash/keys.js": +/*!*************************************!*\ + !*** ./node_modules/lodash/keys.js ***! + \*************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var arrayLikeKeys = __webpack_require__(/*! ./_arrayLikeKeys */ "./node_modules/lodash/_arrayLikeKeys.js"), + baseKeys = __webpack_require__(/*! ./_baseKeys */ "./node_modules/lodash/_baseKeys.js"), + isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"); + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +module.exports = keys; + + +/***/ }), + +/***/ "./node_modules/lodash/keysIn.js": +/*!***************************************!*\ + !*** ./node_modules/lodash/keysIn.js ***! + \***************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var arrayLikeKeys = __webpack_require__(/*! ./_arrayLikeKeys */ "./node_modules/lodash/_arrayLikeKeys.js"), + baseKeysIn = __webpack_require__(/*! ./_baseKeysIn */ "./node_modules/lodash/_baseKeysIn.js"), + isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"); + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); +} + +module.exports = keysIn; + + +/***/ }), + +/***/ "./node_modules/lodash/last.js": +/*!*************************************!*\ + !*** ./node_modules/lodash/last.js ***! + \*************************************/ +/***/ (function(module) { + +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +module.exports = last; + + +/***/ }), + +/***/ "./node_modules/lodash/map.js": +/*!************************************!*\ + !*** ./node_modules/lodash/map.js ***! + \************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var arrayMap = __webpack_require__(/*! ./_arrayMap */ "./node_modules/lodash/_arrayMap.js"), + baseIteratee = __webpack_require__(/*! ./_baseIteratee */ "./node_modules/lodash/_baseIteratee.js"), + baseMap = __webpack_require__(/*! ./_baseMap */ "./node_modules/lodash/_baseMap.js"), + isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"); + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = isArray(collection) ? arrayMap : baseMap; + return func(collection, baseIteratee(iteratee, 3)); +} + +module.exports = map; + + +/***/ }), + +/***/ "./node_modules/lodash/memoize.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/memoize.js ***! + \****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var MapCache = __webpack_require__(/*! ./_MapCache */ "./node_modules/lodash/_MapCache.js"); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; +} + +// Expose `MapCache`. +memoize.Cache = MapCache; + +module.exports = memoize; + + +/***/ }), + +/***/ "./node_modules/lodash/omit.js": +/*!*************************************!*\ + !*** ./node_modules/lodash/omit.js ***! + \*************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var arrayMap = __webpack_require__(/*! ./_arrayMap */ "./node_modules/lodash/_arrayMap.js"), + baseClone = __webpack_require__(/*! ./_baseClone */ "./node_modules/lodash/_baseClone.js"), + baseUnset = __webpack_require__(/*! ./_baseUnset */ "./node_modules/lodash/_baseUnset.js"), + castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"), + copyObject = __webpack_require__(/*! ./_copyObject */ "./node_modules/lodash/_copyObject.js"), + customOmitClone = __webpack_require__(/*! ./_customOmitClone */ "./node_modules/lodash/_customOmitClone.js"), + flatRest = __webpack_require__(/*! ./_flatRest */ "./node_modules/lodash/_flatRest.js"), + getAllKeysIn = __webpack_require__(/*! ./_getAllKeysIn */ "./node_modules/lodash/_getAllKeysIn.js"); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable property paths of `object` that are not omitted. + * + * **Note:** This method is considerably slower than `_.pick`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to omit. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } + */ +var omit = flatRest(function(object, paths) { + var result = {}; + if (object == null) { + return result; + } + var isDeep = false; + paths = arrayMap(paths, function(path) { + path = castPath(path, object); + isDeep || (isDeep = path.length > 1); + return path; + }); + copyObject(object, getAllKeysIn(object), result); + if (isDeep) { + result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); + } + var length = paths.length; + while (length--) { + baseUnset(result, paths[length]); + } + return result; +}); + +module.exports = omit; + + +/***/ }), + +/***/ "./node_modules/lodash/orderBy.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/orderBy.js ***! + \****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseOrderBy = __webpack_require__(/*! ./_baseOrderBy */ "./node_modules/lodash/_baseOrderBy.js"), + isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"); + +/** + * This method is like `_.sortBy` except that it allows specifying the sort + * orders of the iteratees to sort by. If `orders` is unspecified, all values + * are sorted in ascending order. Otherwise, specify an order of "desc" for + * descending or "asc" for ascending sort order of corresponding values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] + * The iteratees to sort by. + * @param {string[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // Sort by `user` in ascending order and by `age` in descending order. + * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + */ +function orderBy(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + orders = guard ? undefined : orders; + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseOrderBy(collection, iteratees, orders); +} + +module.exports = orderBy; + + +/***/ }), + +/***/ "./node_modules/lodash/pick.js": +/*!*************************************!*\ + !*** ./node_modules/lodash/pick.js ***! + \*************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var basePick = __webpack_require__(/*! ./_basePick */ "./node_modules/lodash/_basePick.js"), + flatRest = __webpack_require__(/*! ./_flatRest */ "./node_modules/lodash/_flatRest.js"); + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = flatRest(function(object, paths) { + return object == null ? {} : basePick(object, paths); +}); + +module.exports = pick; + + +/***/ }), + +/***/ "./node_modules/lodash/property.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/property.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseProperty = __webpack_require__(/*! ./_baseProperty */ "./node_modules/lodash/_baseProperty.js"), + basePropertyDeep = __webpack_require__(/*! ./_basePropertyDeep */ "./node_modules/lodash/_basePropertyDeep.js"), + isKey = __webpack_require__(/*! ./_isKey */ "./node_modules/lodash/_isKey.js"), + toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js"); + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); +} + +module.exports = property; + + +/***/ }), + +/***/ "./node_modules/lodash/some.js": +/*!*************************************!*\ + !*** ./node_modules/lodash/some.js ***! + \*************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var arraySome = __webpack_require__(/*! ./_arraySome */ "./node_modules/lodash/_arraySome.js"), + baseIteratee = __webpack_require__(/*! ./_baseIteratee */ "./node_modules/lodash/_baseIteratee.js"), + baseSome = __webpack_require__(/*! ./_baseSome */ "./node_modules/lodash/_baseSome.js"), + isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), + isIterateeCall = __webpack_require__(/*! ./_isIterateeCall */ "./node_modules/lodash/_isIterateeCall.js"); + +/** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ +function some(collection, predicate, guard) { + var func = isArray(collection) ? arraySome : baseSome; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, baseIteratee(predicate, 3)); +} + +module.exports = some; + + +/***/ }), + +/***/ "./node_modules/lodash/sortBy.js": +/*!***************************************!*\ + !*** ./node_modules/lodash/sortBy.js ***! + \***************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseFlatten = __webpack_require__(/*! ./_baseFlatten */ "./node_modules/lodash/_baseFlatten.js"), + baseOrderBy = __webpack_require__(/*! ./_baseOrderBy */ "./node_modules/lodash/_baseOrderBy.js"), + baseRest = __webpack_require__(/*! ./_baseRest */ "./node_modules/lodash/_baseRest.js"), + isIterateeCall = __webpack_require__(/*! ./_isIterateeCall */ "./node_modules/lodash/_isIterateeCall.js"); + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = baseRest(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return baseOrderBy(collection, baseFlatten(iteratees, 1), []); +}); + +module.exports = sortBy; + + +/***/ }), + +/***/ "./node_modules/lodash/stubArray.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/stubArray.js ***! + \******************************************/ +/***/ (function(module) { + +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +module.exports = stubArray; + + +/***/ }), + +/***/ "./node_modules/lodash/stubFalse.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/stubFalse.js ***! + \******************************************/ +/***/ (function(module) { + +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} + +module.exports = stubFalse; + + +/***/ }), + +/***/ "./node_modules/lodash/take.js": +/*!*************************************!*\ + !*** ./node_modules/lodash/take.js ***! + \*************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseSlice = __webpack_require__(/*! ./_baseSlice */ "./node_modules/lodash/_baseSlice.js"), + toInteger = __webpack_require__(/*! ./toInteger */ "./node_modules/lodash/toInteger.js"); + +/** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ +function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); +} + +module.exports = take; + + +/***/ }), + +/***/ "./node_modules/lodash/toFinite.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/toFinite.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var toNumber = __webpack_require__(/*! ./toNumber */ "./node_modules/lodash/toNumber.js"); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +module.exports = toFinite; + + +/***/ }), + +/***/ "./node_modules/lodash/toInteger.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/toInteger.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var toFinite = __webpack_require__(/*! ./toFinite */ "./node_modules/lodash/toFinite.js"); + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +module.exports = toInteger; + + +/***/ }), + +/***/ "./node_modules/lodash/toNumber.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/toNumber.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseTrim = __webpack_require__(/*! ./_baseTrim */ "./node_modules/lodash/_baseTrim.js"), + isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"), + isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +module.exports = toNumber; + + +/***/ }), + +/***/ "./node_modules/lodash/toPairs.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/toPairs.js ***! + \****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var createToPairs = __webpack_require__(/*! ./_createToPairs */ "./node_modules/lodash/_createToPairs.js"), + keys = __webpack_require__(/*! ./keys */ "./node_modules/lodash/keys.js"); + +/** + * Creates an array of own enumerable string keyed-value pairs for `object` + * which can be consumed by `_.fromPairs`. If `object` is a map or set, its + * entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entries + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairs(new Foo); + * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) + */ +var toPairs = createToPairs(keys); + +module.exports = toPairs; + + +/***/ }), + +/***/ "./node_modules/lodash/toString.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/toString.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseToString = __webpack_require__(/*! ./_baseToString */ "./node_modules/lodash/_baseToString.js"); + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +module.exports = toString; + + +/***/ }), + +/***/ "./node_modules/lodash/uniqueId.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/uniqueId.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var toString = __webpack_require__(/*! ./toString */ "./node_modules/lodash/toString.js"); + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return toString(prefix) + id; +} + +module.exports = uniqueId; + + +/***/ }), + +/***/ "./node_modules/lodash/values.js": +/*!***************************************!*\ + !*** ./node_modules/lodash/values.js ***! + \***************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseValues = __webpack_require__(/*! ./_baseValues */ "./node_modules/lodash/_baseValues.js"), + keys = __webpack_require__(/*! ./keys */ "./node_modules/lodash/keys.js"); + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : baseValues(object, keys(object)); +} + +module.exports = values; + + +/***/ }), + +/***/ "./node_modules/lodash/without.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/without.js ***! + \****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var baseDifference = __webpack_require__(/*! ./_baseDifference */ "./node_modules/lodash/_baseDifference.js"), + baseRest = __webpack_require__(/*! ./_baseRest */ "./node_modules/lodash/_baseRest.js"), + isArrayLikeObject = __webpack_require__(/*! ./isArrayLikeObject */ "./node_modules/lodash/isArrayLikeObject.js"); + +/** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */ +var without = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; +}); + +module.exports = without; + + +/***/ }), + +/***/ "./node_modules/lodash/zipObject.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/zipObject.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var assignValue = __webpack_require__(/*! ./_assignValue */ "./node_modules/lodash/_assignValue.js"), + baseZipObject = __webpack_require__(/*! ./_baseZipObject */ "./node_modules/lodash/_baseZipObject.js"); + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); +} + +module.exports = zipObject; + + +/***/ }), + +/***/ "./node_modules/object-assign/index.js": +/*!*********************************************!*\ + !*** ./node_modules/object-assign/index.js ***! + \*********************************************/ +/***/ (function(module) { + +"use strict"; +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ + + +/* eslint-disable no-unused-vars */ +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; + +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } + + return Object(val); +} + +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } + + // Detect buggy property enumeration order in older V8 versions. + + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== + 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } +} + +module.exports = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; +}; + + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/index.js": +/*!**********************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/index.js ***! + \**********************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +Object.defineProperty(exports, "NIL", ({ + enumerable: true, + get: function get() { + return _nil.default; + } +})); +Object.defineProperty(exports, "parse", ({ + enumerable: true, + get: function get() { + return _parse.default; + } +})); +Object.defineProperty(exports, "stringify", ({ + enumerable: true, + get: function get() { + return _stringify.default; + } +})); +Object.defineProperty(exports, "v1", ({ + enumerable: true, + get: function get() { + return _v.default; + } +})); +Object.defineProperty(exports, "v3", ({ + enumerable: true, + get: function get() { + return _v2.default; + } +})); +Object.defineProperty(exports, "v4", ({ + enumerable: true, + get: function get() { + return _v3.default; + } +})); +Object.defineProperty(exports, "v5", ({ + enumerable: true, + get: function get() { + return _v4.default; + } +})); +Object.defineProperty(exports, "validate", ({ + enumerable: true, + get: function get() { + return _validate.default; + } +})); +Object.defineProperty(exports, "version", ({ + enumerable: true, + get: function get() { + return _version.default; + } +})); + +var _v = _interopRequireDefault(__webpack_require__(/*! ./v1.js */ "./node_modules/uuid/dist/commonjs-browser/v1.js")); + +var _v2 = _interopRequireDefault(__webpack_require__(/*! ./v3.js */ "./node_modules/uuid/dist/commonjs-browser/v3.js")); + +var _v3 = _interopRequireDefault(__webpack_require__(/*! ./v4.js */ "./node_modules/uuid/dist/commonjs-browser/v4.js")); + +var _v4 = _interopRequireDefault(__webpack_require__(/*! ./v5.js */ "./node_modules/uuid/dist/commonjs-browser/v5.js")); + +var _nil = _interopRequireDefault(__webpack_require__(/*! ./nil.js */ "./node_modules/uuid/dist/commonjs-browser/nil.js")); + +var _version = _interopRequireDefault(__webpack_require__(/*! ./version.js */ "./node_modules/uuid/dist/commonjs-browser/version.js")); + +var _validate = _interopRequireDefault(__webpack_require__(/*! ./validate.js */ "./node_modules/uuid/dist/commonjs-browser/validate.js")); + +var _stringify = _interopRequireDefault(__webpack_require__(/*! ./stringify.js */ "./node_modules/uuid/dist/commonjs-browser/stringify.js")); + +var _parse = _interopRequireDefault(__webpack_require__(/*! ./parse.js */ "./node_modules/uuid/dist/commonjs-browser/parse.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/md5.js": +/*!********************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/md5.js ***! + \********************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +/* + * Browser-compatible JavaScript MD5 + * + * Modification of JavaScript MD5 + * https://github.com/blueimp/JavaScript-MD5 + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + * + * Based on + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ +function md5(bytes) { + if (typeof bytes === 'string') { + const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = new Uint8Array(msg.length); + + for (let i = 0; i < msg.length; ++i) { + bytes[i] = msg.charCodeAt(i); + } + } + + return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8)); +} +/* + * Convert an array of little-endian words to an array of bytes + */ + + +function md5ToHexEncodedArray(input) { + const output = []; + const length32 = input.length * 32; + const hexTab = '0123456789abcdef'; + + for (let i = 0; i < length32; i += 8) { + const x = input[i >> 5] >>> i % 32 & 0xff; + const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16); + output.push(hex); + } + + return output; +} +/** + * Calculate output length with padding and bit length + */ + + +function getOutputLength(inputLength8) { + return (inputLength8 + 64 >>> 9 << 4) + 14 + 1; +} +/* + * Calculate the MD5 of an array of little-endian words, and a bit length. + */ + + +function wordsToMd5(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << len % 32; + x[getOutputLength(len) - 1] = len; + let a = 1732584193; + let b = -271733879; + let c = -1732584194; + let d = 271733878; + + for (let i = 0; i < x.length; i += 16) { + const olda = a; + const oldb = b; + const oldc = c; + const oldd = d; + a = md5ff(a, b, c, d, x[i], 7, -680876936); + d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5gg(b, c, d, a, x[i], 20, -373897302); + a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + a = md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5hh(d, a, b, c, x[i], 11, -358537222); + c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); + a = md5ii(a, b, c, d, x[i], 6, -198630844); + d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); + a = safeAdd(a, olda); + b = safeAdd(b, oldb); + c = safeAdd(c, oldc); + d = safeAdd(d, oldd); + } + + return [a, b, c, d]; +} +/* + * Convert an array bytes to an array of little-endian words + * Characters >255 have their high-byte silently ignored. + */ + + +function bytesToWords(input) { + if (input.length === 0) { + return []; + } + + const length8 = input.length * 8; + const output = new Uint32Array(getOutputLength(length8)); + + for (let i = 0; i < length8; i += 8) { + output[i >> 5] |= (input[i / 8] & 0xff) << i % 32; + } + + return output; +} +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ + + +function safeAdd(x, y) { + const lsw = (x & 0xffff) + (y & 0xffff); + const msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return msw << 16 | lsw & 0xffff; +} +/* + * Bitwise rotate a 32-bit number to the left. + */ + + +function bitRotateLeft(num, cnt) { + return num << cnt | num >>> 32 - cnt; +} +/* + * These functions implement the four basic operations the algorithm uses. + */ + + +function md5cmn(q, a, b, x, s, t) { + return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); +} + +function md5ff(a, b, c, d, x, s, t) { + return md5cmn(b & c | ~b & d, a, b, x, s, t); +} + +function md5gg(a, b, c, d, x, s, t) { + return md5cmn(b & d | c & ~d, a, b, x, s, t); +} + +function md5hh(a, b, c, d, x, s, t) { + return md5cmn(b ^ c ^ d, a, b, x, s, t); +} + +function md5ii(a, b, c, d, x, s, t) { + return md5cmn(c ^ (b | ~d), a, b, x, s, t); +} + +var _default = md5; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/native.js": +/*!***********************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/native.js ***! + \***********************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; +const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto); +var _default = { + randomUUID +}; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/nil.js": +/*!********************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/nil.js ***! + \********************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; +var _default = '00000000-0000-0000-0000-000000000000'; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/parse.js": +/*!**********************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/parse.js ***! + \**********************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _validate = _interopRequireDefault(__webpack_require__(/*! ./validate.js */ "./node_modules/uuid/dist/commonjs-browser/validate.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function parse(uuid) { + if (!(0, _validate.default)(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +var _default = parse; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/regex.js": +/*!**********************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/regex.js ***! + \**********************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; +var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/rng.js": +/*!********************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/rng.js ***! + \********************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = rng; +// Unique ID creation requires a high quality random # generator. In the browser we therefore +// require the crypto API and do not support built-in fallback to lower quality random number +// generators (like Math.random()). +let getRandomValues; +const rnds8 = new Uint8Array(16); + +function rng() { + // lazy load so that environments that need to polyfill have a chance to do so + if (!getRandomValues) { + // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. + getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto); + + if (!getRandomValues) { + throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); + } + } + + return getRandomValues(rnds8); +} + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/sha1.js": +/*!*********************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/sha1.js ***! + \*********************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +// Adapted from Chris Veness' SHA1 code at +// http://www.movable-type.co.uk/scripts/sha1.html +function f(s, x, y, z) { + switch (s) { + case 0: + return x & y ^ ~x & z; + + case 1: + return x ^ y ^ z; + + case 2: + return x & y ^ x & z ^ y & z; + + case 3: + return x ^ y ^ z; + } +} + +function ROTL(x, n) { + return x << n | x >>> 32 - n; +} + +function sha1(bytes) { + const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; + const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + + if (typeof bytes === 'string') { + const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = []; + + for (let i = 0; i < msg.length; ++i) { + bytes.push(msg.charCodeAt(i)); + } + } else if (!Array.isArray(bytes)) { + // Convert Array-like to Array + bytes = Array.prototype.slice.call(bytes); + } + + bytes.push(0x80); + const l = bytes.length / 4 + 2; + const N = Math.ceil(l / 16); + const M = new Array(N); + + for (let i = 0; i < N; ++i) { + const arr = new Uint32Array(16); + + for (let j = 0; j < 16; ++j) { + arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3]; + } + + M[i] = arr; + } + + M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32); + M[N - 1][14] = Math.floor(M[N - 1][14]); + M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff; + + for (let i = 0; i < N; ++i) { + const W = new Uint32Array(80); + + for (let t = 0; t < 16; ++t) { + W[t] = M[i][t]; + } + + for (let t = 16; t < 80; ++t) { + W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1); + } + + let a = H[0]; + let b = H[1]; + let c = H[2]; + let d = H[3]; + let e = H[4]; + + for (let t = 0; t < 80; ++t) { + const s = Math.floor(t / 20); + const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0; + e = d; + d = c; + c = ROTL(b, 30) >>> 0; + b = a; + a = T; + } + + H[0] = H[0] + a >>> 0; + H[1] = H[1] + b >>> 0; + H[2] = H[2] + c >>> 0; + H[3] = H[3] + d >>> 0; + H[4] = H[4] + e >>> 0; + } + + return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff]; +} + +var _default = sha1; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/stringify.js": +/*!**************************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/stringify.js ***! + \**************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; +exports.unsafeStringify = unsafeStringify; + +var _validate = _interopRequireDefault(__webpack_require__(/*! ./validate.js */ "./node_modules/uuid/dist/commonjs-browser/validate.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).slice(1)); +} + +function unsafeStringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]; +} + +function stringify(arr, offset = 0) { + const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!(0, _validate.default)(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +var _default = stringify; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/v1.js": +/*!*******************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/v1.js ***! + \*******************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _rng = _interopRequireDefault(__webpack_require__(/*! ./rng.js */ "./node_modules/uuid/dist/commonjs-browser/rng.js")); + +var _stringify = __webpack_require__(/*! ./stringify.js */ "./node_modules/uuid/dist/commonjs-browser/stringify.js"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || _rng.default)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || (0, _stringify.unsafeStringify)(b); +} + +var _default = v1; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/v3.js": +/*!*******************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/v3.js ***! + \*******************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _v = _interopRequireDefault(__webpack_require__(/*! ./v35.js */ "./node_modules/uuid/dist/commonjs-browser/v35.js")); + +var _md = _interopRequireDefault(__webpack_require__(/*! ./md5.js */ "./node_modules/uuid/dist/commonjs-browser/md5.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const v3 = (0, _v.default)('v3', 0x30, _md.default); +var _default = v3; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/v35.js": +/*!********************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/v35.js ***! + \********************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.URL = exports.DNS = void 0; +exports["default"] = v35; + +var _stringify = __webpack_require__(/*! ./stringify.js */ "./node_modules/uuid/dist/commonjs-browser/stringify.js"); + +var _parse = _interopRequireDefault(__webpack_require__(/*! ./parse.js */ "./node_modules/uuid/dist/commonjs-browser/parse.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +exports.DNS = DNS; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +exports.URL = URL; + +function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + var _namespace; + + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = (0, _parse.default)(namespace); + } + + if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return (0, _stringify.unsafeStringify)(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/v4.js": +/*!*******************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/v4.js ***! + \*******************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _native = _interopRequireDefault(__webpack_require__(/*! ./native.js */ "./node_modules/uuid/dist/commonjs-browser/native.js")); + +var _rng = _interopRequireDefault(__webpack_require__(/*! ./rng.js */ "./node_modules/uuid/dist/commonjs-browser/rng.js")); + +var _stringify = __webpack_require__(/*! ./stringify.js */ "./node_modules/uuid/dist/commonjs-browser/stringify.js"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function v4(options, buf, offset) { + if (_native.default.randomUUID && !buf && !options) { + return _native.default.randomUUID(); + } + + options = options || {}; + + const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return (0, _stringify.unsafeStringify)(rnds); +} + +var _default = v4; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/v5.js": +/*!*******************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/v5.js ***! + \*******************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _v = _interopRequireDefault(__webpack_require__(/*! ./v35.js */ "./node_modules/uuid/dist/commonjs-browser/v35.js")); + +var _sha = _interopRequireDefault(__webpack_require__(/*! ./sha1.js */ "./node_modules/uuid/dist/commonjs-browser/sha1.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const v5 = (0, _v.default)('v5', 0x50, _sha.default); +var _default = v5; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/validate.js": +/*!*************************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/validate.js ***! + \*************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _regex = _interopRequireDefault(__webpack_require__(/*! ./regex.js */ "./node_modules/uuid/dist/commonjs-browser/regex.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function validate(uuid) { + return typeof uuid === 'string' && _regex.default.test(uuid); +} + +var _default = validate; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/version.js": +/*!************************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/version.js ***! + \************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _validate = _interopRequireDefault(__webpack_require__(/*! ./validate.js */ "./node_modules/uuid/dist/commonjs-browser/validate.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function version(uuid) { + if (!(0, _validate.default)(uuid)) { + throw TypeError('Invalid UUID'); + } + + return parseInt(uuid.slice(14, 15), 16); +} + +var _default = version; +exports["default"] = _default; + +/***/ }), + +/***/ "lib/Backend": +/*!**************************!*\ + !*** external "Backend" ***! + \**************************/ +/***/ (function(module) { + +"use strict"; +module.exports = Backend; + +/***/ }), + +/***/ "lib/Config": +/*!*************************!*\ + !*** external "Config" ***! + \*************************/ +/***/ (function(module) { + +"use strict"; +module.exports = Config; + +/***/ }), + +/***/ "containers/FormBuilderLoader/FormBuilderLoader": +/*!************************************!*\ + !*** external "FormBuilderLoader" ***! + \************************************/ +/***/ (function(module) { + +"use strict"; +module.exports = FormBuilderLoader; + +/***/ }), + +/***/ "lib/Injector": +/*!***************************!*\ + !*** external "Injector" ***! + \***************************/ +/***/ (function(module) { + +"use strict"; +module.exports = Injector; + +/***/ }), + +/***/ "components/Loading/Loading": +/*!**************************!*\ + !*** external "Loading" ***! + \**************************/ +/***/ (function(module) { + +"use strict"; +module.exports = Loading; + +/***/ }), + +/***/ "url": +/*!**************************!*\ + !*** external "NodeUrl" ***! + \**************************/ +/***/ (function(module) { + +"use strict"; +module.exports = NodeUrl; + +/***/ }), + +/***/ "prop-types": +/*!****************************!*\ + !*** external "PropTypes" ***! + \****************************/ +/***/ (function(module) { + +"use strict"; +module.exports = PropTypes; + +/***/ }), + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ (function(module) { + +"use strict"; +module.exports = React; + +/***/ }), + +/***/ "react-dom/client": +/*!*********************************!*\ + !*** external "ReactDomClient" ***! + \*********************************/ +/***/ (function(module) { + +"use strict"; +module.exports = ReactDomClient; + +/***/ }), + +/***/ "react-redux": +/*!*****************************!*\ + !*** external "ReactRedux" ***! + \*****************************/ +/***/ (function(module) { + +"use strict"; +module.exports = ReactRedux; + +/***/ }), + +/***/ "reactstrap": +/*!*****************************!*\ + !*** external "Reactstrap" ***! + \*****************************/ +/***/ (function(module) { + +"use strict"; +module.exports = Reactstrap; + +/***/ }), + +/***/ "redux": +/*!************************!*\ + !*** external "Redux" ***! + \************************/ +/***/ (function(module) { + +"use strict"; +module.exports = Redux; + +/***/ }), + +/***/ "components/ResizeAware/ResizeAware": +/*!******************************!*\ + !*** external "ResizeAware" ***! + \******************************/ +/***/ (function(module) { + +"use strict"; +module.exports = ResizeAware; + +/***/ }), + +/***/ "state/viewMode/ViewModeActions": +/*!**********************************!*\ + !*** external "ViewModeActions" ***! + \**********************************/ +/***/ (function(module) { + +"use strict"; +module.exports = ViewModeActions; + +/***/ }), + +/***/ "classnames": +/*!*****************************!*\ + !*** external "classnames" ***! + \*****************************/ +/***/ (function(module) { + +"use strict"; +module.exports = classnames; + +/***/ }), + +/***/ "i18n": +/*!***********************!*\ + !*** external "i18n" ***! + \***********************/ +/***/ (function(module) { + +"use strict"; +module.exports = i18n; + +/***/ }), + +/***/ "jquery": +/*!*************************!*\ + !*** external "jQuery" ***! + \*************************/ +/***/ (function(module) { + +"use strict"; +module.exports = jQuery; + +/***/ }), + +/***/ "moment": +/*!*************************!*\ + !*** external "moment" ***! + \*************************/ +/***/ (function(module) { + +"use strict"; +module.exports = moment; + +/***/ }), + +/***/ "qs": +/*!*********************!*\ + !*** external "qs" ***! + \*********************/ +/***/ (function(module) { + +"use strict"; +module.exports = qs; + +/***/ }), + +/***/ "lib/urls": +/*!***************************!*\ + !*** external "ssUrlLib" ***! + \***************************/ +/***/ (function(module) { + +"use strict"; +module.exports = ssUrlLib; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ id: moduleId, +/******/ loaded: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/global */ +/******/ !function() { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ }(); +/******/ +/******/ /* webpack/runtime/node module decorator */ +/******/ !function() { +/******/ __webpack_require__.nmd = function(module) { +/******/ module.paths = []; +/******/ if (!module.children) module.children = []; +/******/ return module; +/******/ }; +/******/ }(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +!function() { +"use strict"; +/*!**************************************!*\ + !*** ./client/src/bundles/bundle.js ***! + \**************************************/ + + +__webpack_require__(/*! expose-loader?exposes=HistoryViewer!components/HistoryViewer/HistoryViewer */ "./node_modules/expose-loader/dist/cjs.js?exposes=HistoryViewer!./client/src/components/HistoryViewer/HistoryViewer-exposed.js"); +__webpack_require__(/*! expose-loader?exposes=versionType!types/versionType */ "./node_modules/expose-loader/dist/cjs.js?exposes=versionType!./client/src/types/versionType.js"); +__webpack_require__(/*! ../legacy/ArchiveAdmin/ArchiveAdmin */ "./client/src/legacy/ArchiveAdmin/ArchiveAdmin.js"); +__webpack_require__(/*! ../legacy/HistoryViewer/HistoryViewerEntwine */ "./client/src/legacy/HistoryViewer/HistoryViewerEntwine.js"); +__webpack_require__(/*! ../legacy/VersionedEditForm/VersionedEditForm */ "./client/src/legacy/VersionedEditForm/VersionedEditForm.js"); +__webpack_require__(/*! boot */ "./client/src/boot/index.js"); +}(); +/******/ })() +; +//# sourceMappingURL=bundle.js.map \ No newline at end of file diff --git a/client/dist/styles/bundle.css b/client/dist/styles/bundle.css index 033fd157..427de7a2 100644 --- a/client/dist/styles/bundle.css +++ b/client/dist/styles/bundle.css @@ -1 +1,258 @@ -#Form_EditForm_OtherDropdown_Holder{display:flex;flex-direction:column;align-items:center;margin:-1.5385rem -1.5385rem 0;border-bottom:1px solid #ced5e1;padding:3.077rem 3.077rem;background-color:#fff}#Form_EditForm_error.good+fieldset>#Form_EditForm_OtherDropdown_Holder,#Form_EditForm_error.warning+fieldset>#Form_EditForm_OtherDropdown_Holder,#Form_EditForm_error.info+fieldset>#Form_EditForm_OtherDropdown_Holder{margin-top:0}#Form_EditForm_OtherDropdown_Holder:after{border-bottom:0}#Form_EditForm_OtherDropdown_Holder .form__field-label{max-width:none;width:auto;margin-bottom:.9231rem;color:#566b8d;font-size:19px}#Form_EditForm_OtherDropdown_Holder .form__field-holder{width:100%;max-width:23rem}.history-viewer>.panel--padded{padding-top:0}.history-viewer.history-viewer__compare-mode .panel--padded{padding-top:30px}.history-viewer--no-margins{margin-left:-1.5385rem;margin-right:-1.5385rem}.panel--padded-side{padding-bottom:0;padding-top:0}.history-viewer__form{position:relative}.history-viewer__version-state .text-muted{margin-right:10px}.history-viewer__compare-button{border:1px solid #fff;color:#fff;margin-right:1rem}.history-viewer__close-button{background:rgba(0,0,0,0);border:1px solid #fff;border-radius:50%;color:#fff;padding:.4rem .55rem}.history-viewer__close-button:before{font-size:1.4rem}.history-viewer__messages .message-box:first-child{margin-top:1.5385rem}.history-viewer__messages .message-box:last-child{margin-bottom:0}.history-viewer__preview{margin-top:-54px}.history-viewer__toolbar--condensed{min-width:50%;width:50%}.history-viewer__version-detail-diff del{display:inline-block;background-color:#ffd2da;border-radius:1px}.history-viewer__version-detail-diff ins{display:inline-block;background-color:#b9f1c8;border-radius:1px;text-decoration:none}@media(max-width: 991.98px){.history-viewer__preview{display:none}}.history-viewer__compare-notice{border-top:0;border-radius:0 0 .23rem .23rem;padding:0;position:absolute;left:50%;transform:translateX(-50%)}.history-viewer__compare-notice .notice-message{padding:.4rem 1rem .4rem 1.5rem;vertical-align:middle}.history-viewer__compare-notice button{background-color:inherit;color:inherit;border-width:0 0 0 1px;border-color:#bde0f1;margin-right:0;border-radius:0 0 .23rem}.history-viewer__compare-notice button:hover{background-color:#bde0f1}.history-viewer__actions-dropdown .form-check-label{text-transform:none}.history-viewer__actions-dropdown .btn[class*=font-icon-]:before{margin-right:0}.history-viewer__actions-dropdown.show .dropdown-menu{min-width:14rem}.history-viewer__actions-dropdown .form-check{margin-top:.5rem}.history-viewer__heading{font-size:.923rem;text-transform:uppercase}.history-viewer__row--current .history-viewer__version-link{cursor:default}.history-viewer__selected-message{display:none}.history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected .history-viewer__close-button{display:none}.history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected .history-viewer__selected-message{display:block}.history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected:hover .history-viewer__selected-message,.history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected:focus-within .history-viewer__selected-message{display:none}.history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected:hover .history-viewer__close-button,.history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected:focus-within .history-viewer__close-button{display:block}.history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected:hover .history-viewer__selected-message,.history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected:focus .history-viewer__selected-message{display:none}.history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected:hover .history-viewer__close-button,.history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected:focus .history-viewer__close-button{display:block}.history-viewer__table{padding:0}.history-viewer__table--current{margin-bottom:.76925rem}.history-viewer__table--current .history-viewer__version-link:hover{cursor:default}.history-viewer__table li{display:flex;list-style-type:none}.history-viewer__table--comparison-selected{margin-bottom:0;border-bottom:5px solid #303b4d}.history-viewer__row--comparison-selected:last-child{border-bottom:0}.history-viewer__heading,.history-viewer__row{border-bottom:1px solid #dbe0e9}.history-viewer__row{background-color:#fff}.history-viewer__row:hover,.history-viewer__row:active{background-color:#f0f4f7}.history-viewer__version-link{color:inherit;cursor:pointer;display:flex;flex-grow:1}.history-viewer__version-link:hover,.history-viewer__version-link:active{color:inherit;text-decoration:none}.history-viewer__version-no,.history-viewer__version-state,.history-viewer__author,.history-viewer__actions{padding:1.2308rem}.history-viewer__version-no{width:3.7%}.history-viewer__version-state,.history-viewer__author{flex-grow:1;width:50%}.history-viewer__actions{padding-top:0;padding-bottom:0;display:flex;align-items:center;justify-content:flex-end;min-width:12rem}.table .history-viewer__row--current,.table .history-viewer__row--current:hover{background-color:#0071c4;color:#fff}.table .history-viewer__row--current .text-muted{color:#fff !important}.history-viewer__pagination select{width:auto} +/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[0].use[2]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[0].use[3]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[0].use[4]!./client/src/styles/bundle.scss ***! + \*****************************************************************************************************************************************************************************************************************************************************************************************************************************/ +#Form_EditForm_OtherDropdown_Holder { + display: flex; + flex-direction: column; + align-items: center; + margin: -1.5385rem -1.5385rem 0; + border-bottom: 1px solid #ced5e1; + padding: 3.077rem 3.077rem; + background-color: #fff; +} +#Form_EditForm_error.good + fieldset > #Form_EditForm_OtherDropdown_Holder, #Form_EditForm_error.warning + fieldset > #Form_EditForm_OtherDropdown_Holder, #Form_EditForm_error.info + fieldset > #Form_EditForm_OtherDropdown_Holder { + margin-top: 0; +} +#Form_EditForm_OtherDropdown_Holder:after { + border-bottom: 0; +} +#Form_EditForm_OtherDropdown_Holder .form__field-label { + max-width: none; + width: auto; + margin-bottom: 0.9231rem; + color: #566b8d; + font-size: 19px; +} +#Form_EditForm_OtherDropdown_Holder .form__field-holder { + width: 100%; + max-width: 23rem; +} + +.history-viewer > .panel--padded { + padding-top: 0; +} +.history-viewer.history-viewer__compare-mode .panel--padded { + padding-top: 30px; +} +.history-viewer--no-margins { + margin-left: -1.5385rem; + margin-right: -1.5385rem; +} + +.panel--padded-side { + padding-bottom: 0; + padding-top: 0; +} + +.history-viewer__form { + position: relative; +} + +.history-viewer__version-state .text-muted { + margin-right: 10px; +} + +.history-viewer__compare-button { + border: 1px solid #fff; + color: #fff; + margin-right: 1rem; +} + +.history-viewer__close-button { + background: transparent; + border: 1px solid #fff; + border-radius: 50%; + color: #fff; + padding: 0.4rem 0.55rem; +} +.history-viewer__close-button:before { + font-size: 1.4rem; +} + +.history-viewer__messages .message-box:first-child { + margin-top: 1.5385rem; +} +.history-viewer__messages .message-box:last-child { + margin-bottom: 0; +} + +.history-viewer__preview { + margin-top: -54px; +} + +.history-viewer__toolbar--condensed { + min-width: 50%; + width: 50%; +} + +.history-viewer__version-detail-diff del { + display: inline-block; + background-color: #ffd2da; + border-radius: 1px; +} +.history-viewer__version-detail-diff ins { + display: inline-block; + background-color: #b9f1c8; + border-radius: 1px; + text-decoration: none; +} + +@media (max-width: 991.98px) { + .history-viewer__preview { + display: none; + } +} +.history-viewer__compare-notice { + border-top: 0; + border-radius: 0 0 0.23rem 0.23rem; + padding: 0; + position: absolute; + left: 50%; + transform: translateX(-50%); +} +.history-viewer__compare-notice .notice-message { + padding: 0.4rem 1rem 0.4rem 1.5rem; + vertical-align: middle; +} +.history-viewer__compare-notice button { + background-color: inherit; + color: inherit; + border-width: 0 0 0 1px; + border-color: #bde0f1; + margin-right: 0; + border-radius: 0 0 0.23rem; +} +.history-viewer__compare-notice button:hover { + background-color: #bde0f1; +} + +.history-viewer__actions-dropdown .form-check-label { + text-transform: none; +} + +.history-viewer__actions-dropdown .btn[class*=font-icon-]:before { + margin-right: 0; +} +.history-viewer__actions-dropdown.show .dropdown-menu { + min-width: 14rem; +} +.history-viewer__actions-dropdown .form-check { + margin-top: 0.5rem; +} + +.history-viewer__heading { + font-size: 0.923rem; + text-transform: uppercase; +} + +.history-viewer__row--current .history-viewer__version-link { + cursor: default; +} + +.history-viewer__selected-message { + display: none; +} + +.history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected .history-viewer__close-button { + display: none; +} +.history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected .history-viewer__selected-message { + display: block; +} +.history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected:hover .history-viewer__selected-message, .history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected:focus-within .history-viewer__selected-message { + display: none; +} +.history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected:hover .history-viewer__close-button, .history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected:focus-within .history-viewer__close-button { + display: block; +} +.history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected:hover .history-viewer__selected-message, .history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected:focus .history-viewer__selected-message { + display: none; +} +.history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected:hover .history-viewer__close-button, .history-viewer__table--headerless .history-viewer__row--current.history-viewer__row--comparison-selected:focus .history-viewer__close-button { + display: block; +} + +.history-viewer__table { + padding: 0; +} +.history-viewer__table--current { + margin-bottom: 0.76925rem; +} +.history-viewer__table--current .history-viewer__version-link:hover { + cursor: default; +} +.history-viewer__table li { + display: flex; + list-style-type: none; +} + +.history-viewer__table--comparison-selected { + margin-bottom: 0; + border-bottom: 5px solid #303b4d; +} + +.history-viewer__row--comparison-selected:last-child { + border-bottom: 0; +} + +.history-viewer__heading, +.history-viewer__row { + border-bottom: 1px solid #dbe0e9; +} + +.history-viewer__row { + background-color: #fff; +} +.history-viewer__row:hover, .history-viewer__row:active { + background-color: #f0f4f7; +} +.history-viewer__version-link { + color: inherit; + cursor: pointer; + display: flex; + flex-grow: 1; +} +.history-viewer__version-link:hover, .history-viewer__version-link:active { + color: inherit; + text-decoration: none; +} + +.history-viewer__version-no, +.history-viewer__version-state, +.history-viewer__author, +.history-viewer__actions { + padding: 1.2308rem; +} + +.history-viewer__version-no { + width: 3.7%; +} + +.history-viewer__version-state, +.history-viewer__author { + flex-grow: 1; + width: 50%; +} + +.history-viewer__actions { + padding-top: 0; + padding-bottom: 0; + display: flex; + align-items: center; + justify-content: flex-end; + min-width: 12rem; +} + +.table .history-viewer__row--current, .table .history-viewer__row--current:hover { + background-color: #0071c4; + color: #fff; +} +.table .history-viewer__row--current .text-muted { + color: #fff !important; +} + +.history-viewer__pagination select { + width: auto; +} + +/*# sourceMappingURL=bundle.css.map*/ \ No newline at end of file diff --git a/client/src/components/HistoryViewer/HistoryViewer.js b/client/src/components/HistoryViewer/HistoryViewer.js index 18276e17..0aa7655a 100644 --- a/client/src/components/HistoryViewer/HistoryViewer.js +++ b/client/src/components/HistoryViewer/HistoryViewer.js @@ -7,6 +7,7 @@ import Griddle from 'griddle-react'; import historyViewerConfig from 'containers/HistoryViewer/HistoryViewerConfig'; import i18n from 'i18n'; import { inject } from 'lib/Injector'; +import backend from 'lib/Backend'; import Loading from 'components/Loading/Loading'; import { setCurrentPage, @@ -20,6 +21,8 @@ import ResizeAware from 'components/ResizeAware/ResizeAware'; import * as viewModeActions from 'state/viewMode/ViewModeActions'; import PropTypes from 'prop-types'; +const useRPC = true; + /** * The HistoryViewer component is abstract, and requires an Injector component * to be connected providing the GraphQL query implementation for the appropriate @@ -29,9 +32,20 @@ class HistoryViewer extends Component { constructor(props) { super(props); + console.log('contextKey=', this.props.contextKey); + this.handleSetPage = this.handleSetPage.bind(this); this.handleNextPage = this.handleNextPage.bind(this); this.handlePrevPage = this.handlePrevPage.bind(this); + this.refreshVersions = this.refreshVersions.bind(this); + + this.state = { + versions: [], + }; + } + + componentDidMount() { + this.refreshVersions(); } /** @@ -65,16 +79,33 @@ class HistoryViewer extends Component { } } + refreshVersions() { + if (useRPC) { + // TODO: hardcoded + const url = `/admin/pages/history/api/readHistory/${this.props.recordId}?recordClass=Page`; + backend.get(url) + .then(response => response.json()) + .then(responseJson => { + this.setState({ versions: responseJson.versions }); + }); + } else { + const { versions } = this.props; + const nodes = (versions && versions.versions && versions.versions.nodes) + ? versions.versions.nodes + : []; + this.setState({ versions: nodes }); + } + } + /** * Returns the result of the GraphQL version history query * + * TODO get rid of this method just get state directly + * * @returns {Array} */ getVersions() { - const { versions } = this.props; - return (versions && versions.versions && versions.versions.nodes) - ? versions.versions.nodes - : []; + return this.state.versions; } /** diff --git a/client/src/legacy/HistoryViewer/HistoryViewerEntwine.js b/client/src/legacy/HistoryViewer/HistoryViewerEntwine.js index 6c91401c..d90a1dd5 100644 --- a/client/src/legacy/HistoryViewer/HistoryViewerEntwine.js +++ b/client/src/legacy/HistoryViewer/HistoryViewerEntwine.js @@ -17,6 +17,8 @@ jQuery.entwine('ss', ($) => { ? { context: cmsContent } : {}; + console.log('entwine context=', context); + const HistoryViewerComponent = loadComponent('HistoryViewer', context); const schemaData = this.data('schema'); diff --git a/src/Controllers/CMSPageHistoryViewerController.php b/src/Controllers/CMSPageHistoryViewerController.php index ca04f154..4035f291 100644 --- a/src/Controllers/CMSPageHistoryViewerController.php +++ b/src/Controllers/CMSPageHistoryViewerController.php @@ -3,9 +3,11 @@ namespace SilverStripe\VersionedAdmin\Controllers; use SilverStripe\CMS\Controllers\CMSMain; +use SilverStripe\Control\HTTPRequest; use SilverStripe\Forms\FieldList; use SilverStripe\Forms\HiddenField; use SilverStripe\VersionedAdmin\Forms\HistoryViewerField; +use stdClass; if (!class_exists(CMSMain::class)) { return; @@ -13,8 +15,9 @@ /** * The history viewer controller uses the React based {@link HistoryViewerField} to - * display the history for a {@link DataObject} that has the {@link Versioned} - * extension. + * display the history for a {@link SiteTree} + * + * This class requires the silverstripe/cms module to be installed */ class CMSPageHistoryViewerController extends CMSMain { @@ -26,6 +29,14 @@ class CMSPageHistoryViewerController extends CMSMain private static $required_permission_codes = 'CMS_ACCESS_CMSMain'; + private static $url_handlers = [ + 'GET api/readHistory/$ID!' => 'apiReadHistory', + ]; + + private static $allowed_actions = [ + 'apiReadHistory', + ]; + public function getEditForm($id = null, $fields = null) { $record = $this->getRecord($id ?: $this->currentPageID()); @@ -52,4 +63,29 @@ public function getTabIdentifier() { return 'history'; } + + public function apiReadHistory(HTTPRequest $request) + { + $id = (int) $request->param('ID'); + if (!$id) { + return $this->jsonError(404); + } + $recordClass = $request->getVar('recordClass'); // recordClass prop + $treeClass = $this->config()->get('tree_class'); + if (!is_a($recordClass, $treeClass, true)) { + return $this->jsonError(400); + } + $page = $treeClass::get()->byID($id); // todo - we need history data, not page data + if (!$page) { + return $this->jsonError(404); + } + // todo - history data + $data = [ + 'versions' => [ + 'id' => 1, + 'blah' => 'Lorem ipsum dolor sit amet', + ] + ]; + return $this->jsonSuccess(200, $data); + } } diff --git a/src/Forms/HistoryViewerField.php b/src/Forms/HistoryViewerField.php index 8459d45d..24d94e8d 100644 --- a/src/Forms/HistoryViewerField.php +++ b/src/Forms/HistoryViewerField.php @@ -78,7 +78,6 @@ public function getContextKey() return $this->contextKey; } - // Default to using the DataObject's DB table name as the unique identifier return DataObject::getSchema()->baseDataTable(get_class($this->getSourceRecord())); }