diff --git a/.circleci/config.yml b/.circleci/config.yml index bbae13d8e..fbcb1d216 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -49,11 +49,40 @@ jobs: command: npm run build:py - run: - name: Run hosts + name: Run tests command: | . venv/bin/activate npm run test + + "visual-test": + docker: + - image: circleci/node:8.11.3-browsers + + steps: + - checkout + + - restore_cache: + key: deps1-{{ .Branch }}-{{ checksum "npm-shrinkwrap.json" }}-{{ checksum "package.json" }} + + - run: + name: Install package.json + command: npm i + + - save_cache: + key: deps1-{{ .Branch }}-{{ checksum "npm-shrinkwrap.json" }}-{{ checksum "package.json" }} + paths: + - node_modules + + - run: + name: Run build:js + command: npm run build:js + + - run: + name: Run visual tests + command: npm run test.visual + + "node": docker: - image: circleci/node:8.11.3 @@ -143,3 +172,4 @@ workflows: - "python-3.6" - "node" - "test" + - "visual-test" diff --git a/.config/webpack/base.js b/.config/webpack/base.js index 6b6b88272..2270ffa31 100644 --- a/.config/webpack/base.js +++ b/.config/webpack/base.js @@ -62,7 +62,7 @@ module.exports = (preprocessor = {}, mode = 'development') => { }, resolve: { alias: { - 'cypress': path.resolve('./tests/e2e/cypress/src'), + 'cypress': path.resolve('./tests/cypress/src'), 'dash-table': path.resolve('./src/dash-table'), 'core': path.resolve('./src/core'), 'tests': path.resolve('./tests') diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 5cd5100f9..000000000 --- a/TODO.md +++ /dev/null @@ -1,95 +0,0 @@ -- [x] Header -- [x] Column widths -- [x] Cell selection - - Delete while selected - - Enter turns into edit mode - - Escape, Tab turns off edit mode -- [x] Arrow keys -- [x] Tab to switch cells - -*** - -- [x] Copy and paste - - [x] Creates new columns and rows if necessary - - [x] Doesn't paste contents into the cell if unfocused - - [x] Pastes contents into cell if focused - -- [x] Multiselection - - [x] Shift click - - [x] Shift arrows - - [x] style - outlines - - [x] style - last_cell - - [x] Delete - - [x] Copyable - -*** - -- [x] Performance - - [x] Display subset of rows - - [x] Only rerender certain rows -- [x] Multiline headers -- [x] Hide columns -- [x] Details -- [x] -- [x] Multiselection styles - -*** - -- [x] 1px borders -- [x] Column bottom border -- [x] basic sorting - - multi column sort - -*** - -- [x] dropdowns - -*** - -- [x] Bugs and Stability - - [x] Remove thicker line on row 10 - - [x] Fix selection at the edges - - [x] Show mutli selection background color on dropdown - - [x] Blur input when leaving it - - [x] Sorting text data -- [x] Editable per-column - - [x] Double clicking doesn't focus cell - - [x] Pressing enter doesn't focus cell - - [x] Typing while cell is selected doesn't change cell's value - - [x] Cell is still selectable - - [x] Copying selected cells still works - - [x] Deleting selected cells doesn't remove entries from uneditable columns - - [x] Pasting doesn't update the cell - - [x] Cell's cursor indicates that the cell isn't editable - - [x] Better open/close icon arrows - -*** - -- [x] vertical (and horizontal) panes - -*** - -- multiline header -- scoped css styles -- scoped events -- css api - -*** - -- Reactivity (may be the below are already addressed above) - - Subset of columns / rows reactive - - being able to identify specific cells which are updated -- Add / delete row / col -- Column headers represented by two states viz. name and label; the label is displayed which can be editable and the name is used for all internal working. - - -*** - -- Hidden column edge cases -- Left aligned text values -- Custom styles -- Input styles -- Draggable column size -- Initial sorting -- Pressing enter while on a dropdown cell should open dropdown -- Filtering diff --git a/cypress.json b/cypress.json index d0b294171..eb765870e 100644 --- a/cypress.json +++ b/cypress.json @@ -1,9 +1,9 @@ { "video": false, - "fixturesFolder": "./tests/e2e/cypress/fixtures", - "integrationFolder": "./tests/e2e/cypress/integration", - "pluginsFile": "./tests/e2e/cypress/plugins/index.js", - "screenshotsFolder": "./tests/e2e/cypress/screenshots", - "supportFile": "./tests/e2e/cypress/support/index.js", - "videoFolder": "./tests/e2e/cypress/videos" + "fixturesFolder": "./tests/cypress/fixtures", + "integrationFolder": "./tests/cypress/tests", + "pluginsFile": "./tests/cypress/plugins/index.js", + "screenshotsFolder": "./tests/cypress/screenshots", + "supportFile": "./tests/cypress/support/index.js", + "videoFolder": "./tests/cypress/videos" } \ No newline at end of file diff --git a/dash_table/bundle.js b/dash_table/bundle.js index 89a3c5411..06b471196 100644 --- a/dash_table/bundle.js +++ b/dash_table/bundle.js @@ -15,4 +15,4 @@ window.dash_table=function(e){var t={};function n(r){if(t[r])return t[r].exports Licensed under the MIT License (MIT), see http://jedwatson.github.io/react-select */ -var D=function(e){return"string"==typeof e?e:null!==e&&JSON.stringify(e)||""},P=a.a.oneOfType([a.a.string,a.a.node]),R=a.a.oneOfType([a.a.string,a.a.number]),T=1,j=function(e,t){var n=void 0===e?"undefined":x(e);if("string"!==n&&"number"!==n&&"boolean"!==n)return e;var r=t.options,o=t.valueKey;if(r)for(var i=0;iu||id.bottom?l.scrollTop=a.offsetTop+a.clientHeight-l.offsetHeight:c.topt.offsetHeight&&t.scrollHeight-t.offsetHeight-t.scrollTop<=0&&this.props.onMenuScrollToBottom()}}},{key:"getOptionLabel",value:function(e){return e[this.props.labelKey]}},{key:"getValueArray",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,n="object"===(void 0===t?"undefined":x(t))?t:this.props;if(n.multi){if("string"==typeof e&&(e=e.split(n.delimiter)),!Array.isArray(e)){if(null===e||void 0===e)return[];e=[e]}return e.map(function(e){return j(e,n)}).filter(function(e){return e})}var r=j(e,n);return r?[r]:[]}},{key:"setValue",value:function(e){var t=this;if(this.props.autoBlur&&this.blurInput(),this.props.required){var n=I(e,this.props.multi);this.setState({required:n})}this.props.simpleValue&&e&&(e=this.props.multi?e.map(function(e){return e[t.props.valueKey]}).join(this.props.delimiter):e[this.props.valueKey]),this.props.onChange&&this.props.onChange(e)}},{key:"selectValue",value:function(e){var t=this;this.props.closeOnSelect&&(this.hasScrolledToOption=!1);var n=this.props.onSelectResetsInput?"":this.state.inputValue;this.props.multi?this.setState({focusedIndex:null,inputValue:this.handleInputValueChange(n),isOpen:!this.props.closeOnSelect},function(){t.getValueArray(t.props.value).some(function(n){return n[t.props.valueKey]===e[t.props.valueKey]})?t.removeValue(e):t.addValue(e)}):this.setState({inputValue:this.handleInputValueChange(n),isOpen:!this.props.closeOnSelect,isPseudoFocused:this.state.isFocused},function(){t.setValue(e)})}},{key:"addValue",value:function(e){var t=this.getValueArray(this.props.value),n=this._visibleOptions.filter(function(e){return!e.disabled}),r=n.indexOf(e);this.setValue(t.concat(e)),n.length-1===r?this.focusOption(n[r-1]):n.length>r&&this.focusOption(n[r+1])}},{key:"popValue",value:function(){var e=this.getValueArray(this.props.value);e.length&&!1!==e[e.length-1].clearableValue&&this.setValue(this.props.multi?e.slice(0,e.length-1):null)}},{key:"removeValue",value:function(e){var t=this,n=this.getValueArray(this.props.value);this.setValue(n.filter(function(n){return n[t.props.valueKey]!==e[t.props.valueKey]})),this.focus()}},{key:"clearValue",value:function(e){e&&"mousedown"===e.type&&0!==e.button||(e.preventDefault(),this.setValue(this.getResetValue()),this.setState({inputValue:this.handleInputValueChange(""),isOpen:!1},this.focus),this._focusAfterClear=!0)}},{key:"getResetValue",value:function(){return void 0!==this.props.resetValue?this.props.resetValue:this.props.multi?[]:null}},{key:"focusOption",value:function(e){this.setState({focusedOption:e})}},{key:"focusNextOption",value:function(){this.focusAdjacentOption("next")}},{key:"focusPreviousOption",value:function(){this.focusAdjacentOption("previous")}},{key:"focusPageUpOption",value:function(){this.focusAdjacentOption("page_up")}},{key:"focusPageDownOption",value:function(){this.focusAdjacentOption("page_down")}},{key:"focusStartOption",value:function(){this.focusAdjacentOption("start")}},{key:"focusEndOption",value:function(){this.focusAdjacentOption("end")}},{key:"focusAdjacentOption",value:function(e){var t=this._visibleOptions.map(function(e,t){return{option:e,index:t}}).filter(function(e){return!e.option.disabled});if(this._scrollToFocusedOptionOnUpdate=!0,!this.state.isOpen){var n={focusedOption:this._focusedOption||(t.length?t["next"===e?0:t.length-1].option:null),isOpen:!0};return this.props.onSelectResetsInput&&(n.inputValue=""),void this.setState(n)}if(t.length){for(var r=-1,o=0;o0?r-=1:r=t.length-1;else if("start"===e)r=0;else if("end"===e)r=t.length-1;else if("page_up"===e){var i=r-this.props.pageSize;r=i<0?0:i}else if("page_down"===e){var u=r+this.props.pageSize;r=u>t.length-1?t.length-1:u}-1===r&&(r=0),this.setState({focusedIndex:t[r].index,focusedOption:t[r].option})}}},{key:"getFocusedOption",value:function(){return this._focusedOption}},{key:"selectFocusedOption",value:function(){if(this._focusedOption)return this.selectValue(this._focusedOption)}},{key:"renderLoading",value:function(){if(this.props.isLoading)return c.a.createElement("span",{className:"Select-loading-zone","aria-hidden":"true"},c.a.createElement("span",{className:"Select-loading"}))}},{key:"renderValue",value:function(e,t){var n=this,r=this.props.valueRenderer||this.getOptionLabel,o=this.props.valueComponent;if(!e.length)return function(e,t,n){var r=e.inputValue,o=e.isPseudoFocused,i=e.isFocused,u=t.onSelectResetsInput;return!r||!u&&!n&&!o&&!i}(this.state,this.props,t)?c.a.createElement("div",{className:"Select-placeholder"},this.props.placeholder):null;var i=this.props.onValueClick?this.handleValueClick:null;return this.props.multi?e.map(function(e,t){return c.a.createElement(o,{disabled:n.props.disabled||!1===e.clearableValue,id:n._instancePrefix+"-value-"+t,instancePrefix:n._instancePrefix,key:"value-"+t+"-"+e[n.props.valueKey],onClick:i,onRemove:n.removeValue,placeholder:n.props.placeholder,value:e},r(e,t),c.a.createElement("span",{className:"Select-aria-only"}," "))}):function(e,t){var n=e.inputValue,r=e.isPseudoFocused,o=e.isFocused,i=t.onSelectResetsInput;return!n||!i&&!(!o&&r||o&&!r)}(this.state,this.props)?(t&&(i=null),c.a.createElement(o,{disabled:this.props.disabled,id:this._instancePrefix+"-value-item",instancePrefix:this._instancePrefix,onClick:i,placeholder:this.props.placeholder,value:e[0]},r(e[0]))):void 0}},{key:"renderInput",value:function(e,t){var n,r=this,i=u()("Select-input",this.props.inputProps.className),s=this.state.isOpen,a=u()((O(n={},this._instancePrefix+"-list",s),O(n,this._instancePrefix+"-backspace-remove-message",this.props.multi&&!this.props.disabled&&this.state.isFocused&&!this.state.inputValue),n)),l=this.state.inputValue;!l||this.props.onSelectResetsInput||this.state.isFocused||(l="");var p=_({},this.props.inputProps,{"aria-activedescendant":s?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value","aria-describedby":this.props["aria-describedby"],"aria-expanded":""+s,"aria-haspopup":""+s,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],"aria-owns":a,className:i,onBlur:this.handleInputBlur,onChange:this.handleInputChange,onFocus:this.handleInputFocus,ref:function(e){return r.input=e},role:"combobox",required:this.state.required,tabIndex:this.props.tabIndex,value:l});if(this.props.inputRenderer)return this.props.inputRenderer(p);if(this.props.disabled||!this.props.searchable){var d=C(this.props.inputProps,[]),f=u()(O({},this._instancePrefix+"-list",s));return c.a.createElement("div",_({},d,{"aria-expanded":s,"aria-owns":f,"aria-activedescendant":s?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value","aria-disabled":""+this.props.disabled,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],className:i,onBlur:this.handleInputBlur,onFocus:this.handleInputFocus,ref:function(e){return r.input=e},role:"combobox",style:{border:0,width:1,display:"inline-block"},tabIndex:this.props.tabIndex||0}))}return this.props.autosize?c.a.createElement(o.a,_({id:this.props.id},p,{minWidth:"5"})):c.a.createElement("div",{className:i,key:"input-wrap",style:{display:"inline-block"}},c.a.createElement("input",_({id:this.props.id},p)))}},{key:"renderClear",value:function(){var e=this.getValueArray(this.props.value);if(this.props.clearable&&e.length&&!this.props.disabled&&!this.props.isLoading){var t=this.props.multi?this.props.clearAllText:this.props.clearValueText,n=this.props.clearRenderer();return c.a.createElement("span",{"aria-label":t,className:"Select-clear-zone",onMouseDown:this.clearValue,onTouchEnd:this.handleTouchEndClearValue,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,title:t},n)}}},{key:"renderArrow",value:function(){if(this.props.arrowRenderer){var e=this.handleMouseDownOnArrow,t=this.state.isOpen,n=this.props.arrowRenderer({onMouseDown:e,isOpen:t});return n?c.a.createElement("span",{className:"Select-arrow-zone",onMouseDown:e},n):null}}},{key:"filterOptions",value:function(e){var t=this.state.inputValue,n=this.props.options||[];if(this.props.filterOptions){var r="function"==typeof this.props.filterOptions?this.props.filterOptions:y;return r(n,t,e,{filterOption:this.props.filterOption,ignoreAccents:this.props.ignoreAccents,ignoreCase:this.props.ignoreCase,labelKey:this.props.labelKey,matchPos:this.props.matchPos,matchProp:this.props.matchProp,trimFilter:this.props.trimFilter,valueKey:this.props.valueKey})}return n}},{key:"onOptionRef",value:function(e,t){t&&(this.focused=e)}},{key:"renderMenu",value:function(e,t,n){return e&&e.length?this.props.menuRenderer({focusedOption:n,focusOption:this.focusOption,inputValue:this.state.inputValue,instancePrefix:this._instancePrefix,labelKey:this.props.labelKey,onFocus:this.focusOption,onOptionRef:this.onOptionRef,onSelect:this.selectValue,optionClassName:this.props.optionClassName,optionComponent:this.props.optionComponent,optionRenderer:this.props.optionRenderer||this.getOptionLabel,options:e,removeValue:this.removeValue,selectValue:this.selectValue,valueArray:t,valueKey:this.props.valueKey}):this.props.noResultsText?c.a.createElement("div",{className:"Select-noresults"},this.props.noResultsText):null}},{key:"renderHiddenField",value:function(e){var t=this;if(this.props.name){if(this.props.joinValues){var n=e.map(function(e){return D(e[t.props.valueKey])}).join(this.props.delimiter);return c.a.createElement("input",{disabled:this.props.disabled,name:this.props.name,ref:function(e){return t.value=e},type:"hidden",value:n})}return e.map(function(e,n){return c.a.createElement("input",{disabled:t.props.disabled,key:"hidden."+n,name:t.props.name,ref:"value"+n,type:"hidden",value:D(e[t.props.valueKey])})})}}},{key:"getFocusableOptionIndex",value:function(e){var t=this._visibleOptions;if(!t.length)return null;var n=this.props.valueKey,r=this.state.focusedOption||e;if(r&&!r.disabled){var o=-1;if(t.some(function(e,t){var i=e[n]===r[n];return i&&(o=t),i}),-1!==o)return o}for(var i=0;i{const u=n.slice(-1)[0],s=n.slice(0,-1),a=r.reduce((e,t)=>e.get(t)||e.set(t,new Map).get(t),t,s);return(a.get(u)||a.set(u,function(e){return(0,o.memoizeOne)((...t)=>e(...t))}(e)).get(u))(...i)}};var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=n(4)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=d(n(1)),i=d(n(3)),u=d(n(42)),s=d(n(43)),a=n(44),l=d(n(10)),c=n(16),p=d(n(18));function d(e){return e&&e.__esModule?e:{default:e}}t.default=class{constructor(e){this.propsFn=e,this.handlers=new Map,this.ops=new Map,this.onChange=((e,t,n,o)=>{i.default.debug("Filter -- onChange",e,o.target.value&&o.target.value.trim());const u=o.target.value.trim();u&&u.length?t.set(e.toString(),u):t.delete(e.toString()),n(r.map(([e,t])=>`${e} ${t}`,r.filter(([e])=>this.isFragmentValid(e),Array.from(t.entries()))).join(" && "))}),this.getEventHandler=((e,t,n,r)=>{const o=this.handlers.get(e)||this.handlers.set(e,new Map).get(e),i=o.get(t)||o.set(t,new Map).get(t);return i.get(r)||i.set(r,e.bind(this,t,n,r)).get(r)})}get props(){return this.propsFn()}respectsBasicSyntax(e,t=!0){const n=[c.LexemeType.BinaryOperator,c.LexemeType.Expression,c.LexemeType.Operand,c.LexemeType.UnaryOperator];if(t&&n.push(c.LexemeType.And),!r.all(e=>r.contains(e.lexeme.name,n),e))return!1;const o=r.map(e=>e.value,r.filter(e=>e.lexeme.name===c.LexemeType.Operand,e)),i=r.uniq(o);return o.length===i.length}isBasicFilter(e,t,n=!0){return e.valid&&t.valid&&this.respectsBasicSyntax(e.lexemes,n)}updateOps(e){const t=(0,l.default)(e),n=(0,p.default)(t);if(!this.isBasicFilter(t,n))return;const r=[n.tree];for(;r.length;){const e=r.pop();e&&(e.lexeme.name===c.LexemeType.UnaryOperator&&e.block?this.ops.set(e.block.value,e.value):e.lexeme.name===c.LexemeType.BinaryOperator&&e.left&&e.right?this.ops.set(e.left.value,`${e.value} ${e.right.value}`):(r.push(e.left),r.push(e.block),r.push(e.right)))}}isFragmentValidOrNull(e){const t=this.ops.get(e);return!t||!t.trim().length||this.isFragmentValid(e)}isFragmentValid(e){const t=this.ops.get(e),n=(0,l.default)(`${e} ${t}`),r=(0,p.default)(n);return r.valid&&this.isBasicFilter(n,r,!1)}createFilters(){var e=this.props;const t=e.columns,n=e.fillerColumns,i=e.filtering,l=e.filtering_settings,c=e.filtering_type,p=e.setFilter;if(!i)return[];this.updateOps(l);const d=r.range(0,n).map(e=>o.default.createElement("th",{key:`offset-${e}`})),f=c===a.FilteringType.Basic?r.addIndex(r.map)((e,t)=>o.default.createElement(u.default,{key:`column-${t}`,classes:`filter column-${t}`,isValid:this.isFragmentValidOrNull(e.id),property:e.id,setFilter:this.getEventHandler(this.onChange,e.id,this.ops,p),value:this.ops.get(e.id)}),t):[o.default.createElement(s.default,{key:"column-0",classes:[],colSpan:t.length,value:"",setFilter:()=>void 0})];return[r.concat(d,f)]}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),o=u(r),i=u(n(20));function u(e){return e&&e.__esModule?e:{default:e}}t.default=class extends r.PureComponent{constructor(e){super(e),this.submit=(e=>{(0,this.props.setFilter)({target:{value:e}})}),this.state={value:e.value}}componentWillReceiveProps(e){const t=e.value;this.state.value!==t&&this.setState({value:t})}render(){var e=this.props;const t=e.classes,n=e.isValid,r=e.value;return o.default.createElement("th",{className:t+(n?"":" invalid")},o.default.createElement(i.default,{value:r,stopPropagation:!0,submit:this.submit}))}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),o=u(r),i=u(n(20));function u(e){return e&&e.__esModule?e:{default:e}}t.default=class extends r.PureComponent{constructor(e){super(e),this.submit=(e=>this.props.setFilter(e))}render(){var e=this.props;const t=e.colSpan,n=e.value;return o.default.createElement("th",{colSpan:t},o.default.createElement(i.default,{stopPropagation:!0,value:n,submit:this.submit}))}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=t.FilteringType=void 0;!function(e){e.Advanced="advanced",e.Basic="basic"}(r||(t.FilteringType=r={}))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=n(4);t.default=(0,o.memoizeOneFactory)((e,t,n,o)=>{switch(e){case!1:return{loadNext:()=>{},loadPrevious:()=>{}};case!0:case"fe":return function(e,t,n){return{loadNext:()=>{let o=Math.floor(n.length/e.page_size);e.current_page>=o||(e=r.merge(e,{current_page:e.current_page+1}),t({pagination_settings:e}))},loadPrevious:()=>{e.current_page<=0||(e=r.merge(e,{current_page:e.current_page-1}),t({pagination_settings:e}))}}}(t,n,o);case"be":return function(e,t){return{loadNext:()=>{e.current_page++,t({pagination_settings:e})},loadPrevious:()=>{e.current_page<=0||(e.current_page--,t({pagination_settings:e}))}}}(t,n);default:throw new Error(`Unknown pagination mode: '${e}'`)}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(4);t.default=(0,r.memoizeOneFactory)((e,t,n,r)=>{switch(e){case!1:return function(e,t){return{dataframe:e,indices:t}}(n,r);case!0:case"fe":return function(e,t,n){let r=Math.min(e.current_page,Math.floor(t.length/e.page_size));const o=e.page_size*r,i=Math.min(o+e.displayed_pages*e.page_size,t.length);return{dataframe:t.slice(o,i),indices:n.slice(o,i)}}(t,n,r);case"be":return function(e,t){return{dataframe:e,indices:t}}(n,r);default:throw new Error(`Unknown pagination mode: '${e}'`)}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=n(4),i=n(7),u=a(i),s=a(n(17));function a(e){return e&&e.__esModule?e:{default:e}}t.default=(0,o.memoizeOneFactory)((e,t,n,o,a=[],l)=>{const c=new Map;if(r.addIndex(r.forEach)((e,t)=>{c.set(e,t)},e),"fe"===t||!0===t){const t=new s.default(n);e=t.isValid?t.filter(e):e}const p=l?e=>""===e||(0,i.defaultIsNully)(e):void 0;return"fe"!==o&&!0!==o||(e=(0,u.default)(e,a,p)),{dataframe:e,indices:r.map(e=>c.get(e),e)}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=n(4);t.default=(0,o.memoizeOneFactory)(e=>r.filter(e=>!e.hidden,e))},function(e,t,n){var r=n(50);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(9)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(8)(!1)).push([e.i,"/**\n * React Select\n * ============\n * Created by Jed Watson and Joss Mackison for KeystoneJS, http://www.keystonejs.com/\n * https://twitter.com/jedwatson https://twitter.com/jossmackison https://twitter.com/keystonejs\n * MIT License: https://github.com/JedWatson/react-select\n*/\n.Select {\n position: relative;\n}\n.Select input::-webkit-contacts-auto-fill-button,\n.Select input::-webkit-credentials-auto-fill-button {\n display: none !important;\n}\n.Select input::-ms-clear {\n display: none !important;\n}\n.Select input::-ms-reveal {\n display: none !important;\n}\n.Select,\n.Select div,\n.Select input,\n.Select span {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n.Select.is-disabled .Select-arrow-zone {\n cursor: default;\n pointer-events: none;\n opacity: 0.35;\n}\n.Select.is-disabled > .Select-control {\n background-color: #f9f9f9;\n}\n.Select.is-disabled > .Select-control:hover {\n box-shadow: none;\n}\n.Select.is-open > .Select-control {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n background: #fff;\n border-color: #b3b3b3 #ccc #d9d9d9;\n}\n.Select.is-open > .Select-control .Select-arrow {\n top: -2px;\n border-color: transparent transparent #999;\n border-width: 0 5px 5px;\n}\n.Select.is-searchable.is-open > .Select-control {\n cursor: text;\n}\n.Select.is-searchable.is-focused:not(.is-open) > .Select-control {\n cursor: text;\n}\n.Select.is-focused > .Select-control {\n background: #fff;\n}\n.Select.is-focused:not(.is-open) > .Select-control {\n border-color: #007eff;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 3px rgba(0, 126, 255, 0.1);\n background: #fff;\n}\n.Select.has-value.is-clearable.Select--single > .Select-control .Select-value {\n padding-right: 42px;\n}\n.Select.has-value.Select--single > .Select-control .Select-value .Select-value-label,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value .Select-value-label {\n color: #333;\n}\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label {\n cursor: pointer;\n text-decoration: none;\n}\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label:hover,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:hover,\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label:focus,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:focus {\n color: #007eff;\n outline: none;\n text-decoration: underline;\n}\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label:focus,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:focus {\n background: #fff;\n}\n.Select.has-value.is-pseudo-focused .Select-input {\n opacity: 0;\n}\n.Select.is-open .Select-arrow,\n.Select .Select-arrow-zone:hover > .Select-arrow {\n border-top-color: #666;\n}\n.Select.Select--rtl {\n direction: rtl;\n text-align: right;\n}\n.Select-control {\n background-color: #fff;\n border-color: #d9d9d9 #ccc #b3b3b3;\n border-radius: 4px;\n border: 1px solid #ccc;\n color: #333;\n cursor: default;\n display: table;\n border-spacing: 0;\n border-collapse: separate;\n height: 36px;\n outline: none;\n overflow: hidden;\n position: relative;\n width: 100%;\n}\n.Select-control:hover {\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06);\n}\n.Select-control .Select-input:focus {\n outline: none;\n background: #fff;\n}\n.Select-placeholder,\n.Select--single > .Select-control .Select-value {\n bottom: 0;\n color: #aaa;\n left: 0;\n line-height: 34px;\n padding-left: 10px;\n padding-right: 10px;\n position: absolute;\n right: 0;\n top: 0;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.Select-input {\n height: 34px;\n padding-left: 10px;\n padding-right: 10px;\n vertical-align: middle;\n}\n.Select-input > input {\n width: 100%;\n background: none transparent;\n border: 0 none;\n box-shadow: none;\n cursor: default;\n display: inline-block;\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n outline: none;\n line-height: 17px;\n /* For IE 8 compatibility */\n padding: 8px 0 12px;\n /* For IE 8 compatibility */\n -webkit-appearance: none;\n}\n.is-focused .Select-input > input {\n cursor: text;\n}\n.has-value.is-pseudo-focused .Select-input {\n opacity: 0;\n}\n.Select-control:not(.is-searchable) > .Select-input {\n outline: none;\n}\n.Select-loading-zone {\n cursor: pointer;\n display: table-cell;\n position: relative;\n text-align: center;\n vertical-align: middle;\n width: 16px;\n}\n.Select-loading {\n -webkit-animation: Select-animation-spin 400ms infinite linear;\n -o-animation: Select-animation-spin 400ms infinite linear;\n animation: Select-animation-spin 400ms infinite linear;\n width: 16px;\n height: 16px;\n box-sizing: border-box;\n border-radius: 50%;\n border: 2px solid #ccc;\n border-right-color: #333;\n display: inline-block;\n position: relative;\n vertical-align: middle;\n}\n.Select-clear-zone {\n -webkit-animation: Select-animation-fadeIn 200ms;\n -o-animation: Select-animation-fadeIn 200ms;\n animation: Select-animation-fadeIn 200ms;\n color: #999;\n cursor: pointer;\n display: table-cell;\n position: relative;\n text-align: center;\n vertical-align: middle;\n width: 17px;\n}\n.Select-clear-zone:hover {\n color: #D0021B;\n}\n.Select-clear {\n display: inline-block;\n font-size: 18px;\n line-height: 1;\n}\n.Select--multi .Select-clear-zone {\n width: 17px;\n}\n.Select-arrow-zone {\n cursor: pointer;\n display: table-cell;\n position: relative;\n text-align: center;\n vertical-align: middle;\n width: 25px;\n padding-right: 5px;\n}\n.Select--rtl .Select-arrow-zone {\n padding-right: 0;\n padding-left: 5px;\n}\n.Select-arrow {\n border-color: #999 transparent transparent;\n border-style: solid;\n border-width: 5px 5px 2.5px;\n display: inline-block;\n height: 0;\n width: 0;\n position: relative;\n}\n.Select-control > *:last-child {\n padding-right: 5px;\n}\n.Select--multi .Select-multi-value-wrapper {\n display: inline-block;\n}\n.Select .Select-aria-only {\n position: absolute;\n display: inline-block;\n height: 1px;\n width: 1px;\n margin: -1px;\n clip: rect(0, 0, 0, 0);\n overflow: hidden;\n float: left;\n}\n@-webkit-keyframes Select-animation-fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes Select-animation-fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n.Select-menu-outer {\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n background-color: #fff;\n border: 1px solid #ccc;\n border-top-color: #e6e6e6;\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06);\n box-sizing: border-box;\n margin-top: -1px;\n max-height: 200px;\n position: absolute;\n left: 0;\n top: 100%;\n width: 100%;\n z-index: 1;\n -webkit-overflow-scrolling: touch;\n}\n.Select-menu {\n max-height: 198px;\n overflow-y: auto;\n}\n.Select-option {\n box-sizing: border-box;\n background-color: #fff;\n color: #666666;\n cursor: pointer;\n display: block;\n padding: 8px 10px;\n}\n.Select-option:last-child {\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.Select-option.is-selected {\n background-color: #f5faff;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 126, 255, 0.04);\n color: #333;\n}\n.Select-option.is-focused {\n background-color: #ebf5ff;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 126, 255, 0.08);\n color: #333;\n}\n.Select-option.is-disabled {\n color: #cccccc;\n cursor: default;\n}\n.Select-noresults {\n box-sizing: border-box;\n color: #999999;\n cursor: default;\n display: block;\n padding: 8px 10px;\n}\n.Select--multi .Select-input {\n vertical-align: middle;\n margin-left: 10px;\n padding: 0;\n}\n.Select--multi.Select--rtl .Select-input {\n margin-left: 0;\n margin-right: 10px;\n}\n.Select--multi.has-value .Select-input {\n margin-left: 5px;\n}\n.Select--multi .Select-value {\n background-color: #ebf5ff;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 126, 255, 0.08);\n border-radius: 2px;\n border: 1px solid #c2e0ff;\n /* Fallback color for IE 8 */\n border: 1px solid rgba(0, 126, 255, 0.24);\n color: #007eff;\n display: inline-block;\n font-size: 0.9em;\n line-height: 1.4;\n margin-left: 5px;\n margin-top: 5px;\n vertical-align: top;\n}\n.Select--multi .Select-value-icon,\n.Select--multi .Select-value-label {\n display: inline-block;\n vertical-align: middle;\n}\n.Select--multi .Select-value-label {\n border-bottom-right-radius: 2px;\n border-top-right-radius: 2px;\n cursor: default;\n padding: 2px 5px;\n}\n.Select--multi a.Select-value-label {\n color: #007eff;\n cursor: pointer;\n text-decoration: none;\n}\n.Select--multi a.Select-value-label:hover {\n text-decoration: underline;\n}\n.Select--multi .Select-value-icon {\n cursor: pointer;\n border-bottom-left-radius: 2px;\n border-top-left-radius: 2px;\n border-right: 1px solid #c2e0ff;\n /* Fallback color for IE 8 */\n border-right: 1px solid rgba(0, 126, 255, 0.24);\n padding: 1px 5px 3px;\n}\n.Select--multi .Select-value-icon:hover,\n.Select--multi .Select-value-icon:focus {\n background-color: #d8eafd;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 113, 230, 0.08);\n color: #0071e6;\n}\n.Select--multi .Select-value-icon:active {\n background-color: #c2e0ff;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 126, 255, 0.24);\n}\n.Select--multi.Select--rtl .Select-value {\n margin-left: 0;\n margin-right: 5px;\n}\n.Select--multi.Select--rtl .Select-value-icon {\n border-right: none;\n border-left: 1px solid #c2e0ff;\n /* Fallback color for IE 8 */\n border-left: 1px solid rgba(0, 126, 255, 0.24);\n}\n.Select--multi.is-disabled .Select-value {\n background-color: #fcfcfc;\n border: 1px solid #e3e3e3;\n color: #333;\n}\n.Select--multi.is-disabled .Select-value-icon {\n cursor: not-allowed;\n border-right: 1px solid #e3e3e3;\n}\n.Select--multi.is-disabled .Select-value-icon:hover,\n.Select--multi.is-disabled .Select-value-icon:focus,\n.Select--multi.is-disabled .Select-value-icon:active {\n background-color: #fcfcfc;\n}\n@keyframes Select-animation-spin {\n to {\n transform: rotate(1turn);\n }\n}\n@-webkit-keyframes Select-animation-spin {\n to {\n -webkit-transform: rotate(1turn);\n }\n}\n",""])},function(e,t){e.exports=function(e){var t="undefined"!=typeof window&&window.location;if(!t)throw new Error("fixUrls requires window.location");if(!e||"string"!=typeof e)return e;var n=t.protocol+"//"+t.host,r=n+t.pathname.replace(/\/[^\/]*$/,"/");return e.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi,function(e,t){var o,i=t.trim().replace(/^"(.*)"$/,function(e,t){return t}).replace(/^'(.*)'$/,function(e,t){return t});return/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(i)?e:(o=0===i.indexOf("//")?i:0===i.indexOf("/")?n+i:r+i.replace(/^\.\//,""),"url("+JSON.stringify(o)+")")})}},function(e,t,n){var r=n(53);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(9)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(8)(!1)).push([e.i,".dash-spreadsheet.dash-freeze-left {\n width: auto;\n width: fit-content;\n width: -moz-fit-content;\n width: -webkit-fit-content;\n max-width: 500px;\n}\n.dash-spreadsheet.dash-freeze-top {\n width: auto;\n width: fit-content;\n width: -moz-fit-content;\n width: -webkit-fit-content;\n max-height: 500px;\n}\n.dash-spreadsheet-container {\n display: flex;\n flex-direction: row;\n position: relative;\n}\n.dash-spreadsheet-inner {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n}\n.dash-spreadsheet-inner.dash-freeze-left,\n.dash-spreadsheet-inner.dash-freeze-top {\n overflow: hidden !important;\n}\n.dash-spreadsheet-inner *,\n.dash-spreadsheet-inner *:after,\n.dash-spreadsheet-inner *:before {\n box-sizing: inherit;\n}\n.dash-spreadsheet-inner .Select {\n overflow: hidden;\n position: static;\n}\n.dash-spreadsheet-inner .Select,\n.dash-spreadsheet-inner .Select-control {\n background-color: inherit;\n}\n.dash-spreadsheet-inner .Select-value {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-top: -2px;\n}\n.dash-spreadsheet-inner .marker-row tr {\n visibility: hidden !important;\n}\n.dash-spreadsheet-inner .marker-row td,\n.dash-spreadsheet-inner .marker-row th {\n height: 0 !important;\n padding: 0 !important;\n margin: 0 !important;\n}\n.dash-spreadsheet-inner .row-0 {\n display: flex;\n flex: 0 0 auto;\n flex-direction: row;\n}\n.dash-spreadsheet-inner .row-1 {\n display: flex;\n flex-direction: row;\n overflow: scroll;\n}\n.dash-spreadsheet-inner .cell-0-0,\n.dash-spreadsheet-inner .cell-1-0 {\n flex: 0 0 auto;\n left: 0;\n position: sticky;\n z-index: 400;\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr td:first-of-type,\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr:first-of-type td,\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr:first-of-type td:first-of-type,\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr:first-of-type th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr td:first-of-type,\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr:first-of-type td,\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr:first-of-type td:first-of-type,\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr:first-of-type th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-1 tr:first-of-type td,\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-1 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr:first-of-type td,\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr:first-of-type td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr:first-of-type th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-1-1 tr td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-1-1 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr:first-of-type td,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr:first-of-type td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr:first-of-type th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-1 tr:first-of-type td,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-1 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-1-0 tr td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-1-0 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner .cell-0-1 {\n z-index: 300;\n flex: 0 0 auto;\n}\n.dash-spreadsheet-inner .cell-1-1 {\n flex: 0 0 auto;\n}\n.dash-spreadsheet-inner .cell td,\n.dash-spreadsheet-inner .cell th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner .cell td:focus,\n.dash-spreadsheet-inner .cell th:focus {\n outline: none;\n}\n.dash-spreadsheet-inner .filter.invalid {\n box-shadow: inset 1px 0px 0px 0px red, inset 0px 1px 0px 0px red, inset -1px 0px 0px red, inset 0px -1px 0px 0px red;\n background-color: pink;\n}\n.dash-spreadsheet-inner .selected-row td,\n.dash-spreadsheet-inner .selected-row th {\n background-color: var(--selected-row);\n}\n.dash-spreadsheet-inner tr {\n background-color: white;\n}\n.dash-spreadsheet-inner td {\n background-color: inherit;\n}\n.dash-spreadsheet-inner td.cell--selected {\n background-color: var(--selected-background);\n}\n.dash-spreadsheet-inner td.focused {\n box-shadow: 1px 0px 0px 0px var(--accent), 0px 1px 0px 0px var(--accent), 0 0px 0px var(--accent), 0px 0 0px 0px var(--accent);\n border: 1px solid var(--accent);\n margin: -1px;\n z-index: 200;\n}\n.dash-spreadsheet-inner td .dash-cell-value {\n height: 100%;\n width: 100%;\n}\n.dash-spreadsheet-inner td div.dash-cell-value {\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n.dash-spreadsheet-inner td,\n.dash-spreadsheet-inner th {\n padding: 2px;\n white-space: nowrap;\n overflow-x: hidden;\n text-overflow: ellipsis;\n height: 30px;\n text-align: right;\n}\n.dash-spreadsheet-inner th .column-header--edit,\n.dash-spreadsheet-inner th .column-header--delete,\n.dash-spreadsheet-inner th .sort {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: default;\n cursor: pointer;\n}\n.dash-spreadsheet-inner textarea {\n white-space: pre;\n}\n.dash-spreadsheet-inner table {\n border-collapse: collapse;\n font-family: monospace;\n --accent: hotpink;\n --border: lightgrey;\n --text-color: #3c3c3c;\n --hover: #fdfdfd;\n --background-color-ellipses: #fdfdfd;\n --faded-text: #fafafa;\n --faded-text-header: #b4b4b4;\n --selected-background: rgba(255, 65, 54, 0.2);\n --faded-dropdown: #f0f0f0;\n --selected-row: #fff0ff;\n --muted: #c8c8c8;\n}\n/* focus happens after copying to clipboard */\n.dash-spreadsheet-inner table:focus {\n outline: none;\n}\n.dash-spreadsheet-inner thead {\n display: table-row-group;\n}\n.elip {\n text-align: center;\n width: 100%;\n background-color: var(--background-color-ellipses);\n}\n.dash-spreadsheet-inner td.dropdown {\n /*\n * To view the dropdown's contents, we need\n * overflow-y: visible.\n * Unfortunately, overflow-x: hidden and overflow-y: visible\n * can't both be set at the same time.\n * So, we have to make both overflow-x: visible and overflow-y: visble\n *\n * See https://stackoverflow.com/questions/6421966/\n *\n * There might be another solution with parent divs, but I haven't\n * tried it.\n */\n overflow-x: visible;\n}\n.dash-spreadsheet-inner th {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner :not(.cell--selected) tr:hover,\ntr:hover input :not(.cell--selected) {\n background-color: var(--hover);\n}\n.dash-spreadsheet-inner th {\n background-color: #fafafa;\n}\n.sort {\n cursor: pointer;\n float: left;\n color: var(--faded-text-header);\n font-size: 20px;\n}\nth:hover .sort {\n color: var(--accent);\n}\n.sort:hover {\n text-decoration: underline;\n}\n.expanded-row--empty-cell {\n box-shadow: none;\n background-color: transparent;\n}\n.expanded-row {\n text-align: center;\n}\n.dash-spreadsheet-inner input:not([type=radio]):not([type=checkbox]) {\n padding: 0px;\n margin: 0px;\n height: calc(100% - 1px);\n width: calc(100% - 1px);\n line-height: 30px;\n border: none;\n font-family: inherit;\n text-align: right;\n box-sizing: border-box;\n color: var(--text-color);\n background-color: transparent;\n /* so as to not overlay the box shadow */\n /* browser's default text-shadow is `$color 0px 0px 0px;`\n * for `input`, which makes it look a little bit heavier than dropdowns\n * or bare `td`\n */\n text-shadow: none;\n}\n.dash-spreadsheet-inner input.unfocused {\n color: transparent;\n text-shadow: 0 0 0 var(--text-color);\n cursor: default;\n}\n.dash-spreadsheet-inner input.unfocused:focus {\n outline: none;\n}\n.numeric {\n font-family: monospace;\n}\n.toggle-row {\n border: none;\n box-shadow: none;\n width: 10px;\n padding-left: 10px;\n padding-right: 10px;\n cursor: pointer;\n color: var(--faded-text);\n}\n.toggle-row--expanded {\n color: var(--accent);\n}\n.dash-spreadsheet-inner tr:hover .toggle-row {\n color: var(--accent);\n}\n.cell--uneditable,\n.cell--uneditable input {\n cursor: not-allowed;\n}\n.expanded-row {\n box-shadow: inset 2px 0px 0px 0px var(--accent), inset -1px 0px 0px 0px var(--border);\n /* inset 0px 1px 0px 0px var(--border); */\n}\n.dash-spreadsheet-inner .dash-delete-cell,\n.dash-spreadsheet-inner .dash-delete-header {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: default;\n font-size: 1.3rem;\n text-align: center;\n cursor: pointer;\n color: var(--muted);\n}\n.dash-spreadsheet-inner .dash-delete-cell:hover,\n.dash-spreadsheet-inner .dash-delete-header:hover {\n color: var(--accent);\n}\n.dash-spreadsheet-inner .column-header--edit {\n float: left;\n opacity: 0.1;\n padding-left: 2px;\n padding-right: 2px;\n cursor: pointer;\n}\n.dash-spreadsheet-inner th:hover .column-header--edit {\n color: var(--accent);\n opacity: 1;\n}\n.dash-spreadsheet-inner .column-header--delete {\n float: left;\n opacity: 0.1;\n padding-left: 2px;\n padding-right: 2px;\n cursor: pointer;\n}\n.dash-spreadsheet-inner th:hover .column-header--delete {\n color: var(--accent);\n opacity: 1;\n}\n",""])},function(e,t,n){var r=n(55);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(9)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(8)(!1)).push([e.i,".dash-spreadsheet .Select,\n.dash-spreadsheet .Select-control {\n border: none;\n cursor: pointer;\n height: 30px; /* matches the td height and line-height */\n border: none;\n}\n\n.dash-spreadsheet .Select-placeholder,\n.dash-spreadsheet .Select--single > .Select-control .Select-value {\n height: 100%;\n line-height: inherit;\n}\n\n.dash-spreadsheet .Select.has-value.Select--single > .Select-control .Select-value .Select-value-label,\n.dash-spreadsheet .Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value .Select-value-label {\n color: var(--text-color);\n}\n\n.dash-spreadsheet .Select:hover,\n.dash-spreadsheet .Select-control:hover {\n border: none;\n box-shadow: none;\n cursor: pointer;\n}\n\n.dash-spreadsheet .Select-menu-outer {\n z-index: 100;\n}\n\n.dash-spreadsheet .Select-arrow {\n border-top-color: var(--faded-dropdown);\n border-left-color: transparent;\n border-right-color: transparent;\n border-bottom-color: transparent;\n}\n\n.dash-spreadsheet .Select-control:hover .Select-arrow {\n border-top-color: var(--accent);\n border-left-color: transparent;\n border-right-color: transparent;\n border-bottom-color: transparent;\n}\n\n.dash-spreadsheet .is-open > .Select-control .Select-arrow {\n border-bottom-color: var(--background-color-8-react-select);\n border-left-color: transparent;\n border-right-color: transparent;\n border-top-color: transparent;\n}\n\n.dash-spreadsheet .Select--multi .Select-value,\n.dash-spreadsheet .Select--multi a.Select-value-label {\n color: var(--color-8-react-select);\n}\n\n.dash-spreadsheet .Select {\n border-radius: 0;\n}\n\n.dash-spreadsheet .Select.is-disabled > .Select-control {\n border: none;\n}\n\n.dash-spreadsheet .Select--multi .Select-value-icon:hover,\n.dash-spreadsheet .Select--multi .Select-value-icon:focus {\n font-weight: bold;\n}\n\n.dash-spreadsheet .Select.is-disabled .Select-control {\n cursor: not-allowed;\n}\n\n.dash-spreadsheet .Select-menu-outer {\n background-color: white;\n border: none;\n border-bottom: thin var(--border) solid;\n border-radius: 0;\n border-top: none;\n}\n\n.dash-spreadsheet .Select-option {\n background-color: inherit;\n color: var(--accent);\n}\n\n.dash-spreadsheet .Select-option:hover {\n font-weight: bold;\n color: var(--accent);\n background-color: var(--hover);\n}\n\n.dash-spreadsheet .Select.is-focused:not(.is-open) > .Select-control {\n border: none;\n -webkit-box-shadow: none;\n box-shadow: none;\n background: #fff;\n}\n\n.dash-spreadsheet .Select-option.is-focused {\n background-color: white;\n color: var(--accent);\n font-weight: bold;\n}\n\n.dash-spreadsheet .Select-clear {\n color: transparent;\n}\n.Select:hover .Select-clear {\n color: var(--accent);\n}\n\n.dash-spreadsheet .Select-control {\n padding-left: 2px;\n}\n\n.dash-spreadsheet .cell--selected .Select-control {\n background-color: var(--selected-background);\n border-radius: 0;\n}\n",""])},function(e,t,n){var r=n(57);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(9)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(8)(!1)).push([e.i,"/*RESET CSS*/\nhtml {\n color: #000;\n background: #FFF;\n}\nbody,\ndiv,\ndl,\ndt,\ndd,\nul,\nol,\nli,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\npre,\ncode,\nform,\nfieldset,\nlegend,\ninput,\ntextarea,\np,\nblockquote,\nth,\ntd {\n margin: 0;\n padding: 0;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\nfieldset,\nimg {\n border: 0;\n}\naddress,\ncaption,\ncite,\ncode,\ndfn,\nem,\nstrong,\nth,\nvar {\n font-style: normal;\n font-weight: normal;\n}\nol,\nul {\n list-style: none;\n}\ncaption,\nth {\n text-align: left;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: 100%;\n font-weight: normal;\n}\nq:before,\nq:after {\n content: '';\n}\nabbr,\nacronym {\n border: 0;\n font-variant: normal;\n}\nsup {\n vertical-align: text-top;\n}\nsub {\n vertical-align: text-bottom;\n}\ninput,\ntextarea,\nselect {\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n *font-size: 100%;\n}\nlegend {\n color: #000;\n}\n#yui3-css-stamp.cssreset {\n display: none;\n}\ninput[type=\"button\"] {\n border-radius: 0;\n -webkit-appearance: none;\n}\n*:focus {\n outline: none;\n}\n.dash-spreadsheet-container input,\n.dash-spreadsheet-container table {\n font-size: 13px;\n}\nbody {\n margin: 0;\n padding: 0;\n font-family: sans-serif;\n}\n",""])}]); \ No newline at end of file +var D=function(e){return"string"==typeof e?e:null!==e&&JSON.stringify(e)||""},P=a.a.oneOfType([a.a.string,a.a.node]),R=a.a.oneOfType([a.a.string,a.a.number]),T=1,j=function(e,t){var n=void 0===e?"undefined":x(e);if("string"!==n&&"number"!==n&&"boolean"!==n)return e;var r=t.options,o=t.valueKey;if(r)for(var i=0;iu||id.bottom?l.scrollTop=a.offsetTop+a.clientHeight-l.offsetHeight:c.topt.offsetHeight&&t.scrollHeight-t.offsetHeight-t.scrollTop<=0&&this.props.onMenuScrollToBottom()}}},{key:"getOptionLabel",value:function(e){return e[this.props.labelKey]}},{key:"getValueArray",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,n="object"===(void 0===t?"undefined":x(t))?t:this.props;if(n.multi){if("string"==typeof e&&(e=e.split(n.delimiter)),!Array.isArray(e)){if(null===e||void 0===e)return[];e=[e]}return e.map(function(e){return j(e,n)}).filter(function(e){return e})}var r=j(e,n);return r?[r]:[]}},{key:"setValue",value:function(e){var t=this;if(this.props.autoBlur&&this.blurInput(),this.props.required){var n=I(e,this.props.multi);this.setState({required:n})}this.props.simpleValue&&e&&(e=this.props.multi?e.map(function(e){return e[t.props.valueKey]}).join(this.props.delimiter):e[this.props.valueKey]),this.props.onChange&&this.props.onChange(e)}},{key:"selectValue",value:function(e){var t=this;this.props.closeOnSelect&&(this.hasScrolledToOption=!1);var n=this.props.onSelectResetsInput?"":this.state.inputValue;this.props.multi?this.setState({focusedIndex:null,inputValue:this.handleInputValueChange(n),isOpen:!this.props.closeOnSelect},function(){t.getValueArray(t.props.value).some(function(n){return n[t.props.valueKey]===e[t.props.valueKey]})?t.removeValue(e):t.addValue(e)}):this.setState({inputValue:this.handleInputValueChange(n),isOpen:!this.props.closeOnSelect,isPseudoFocused:this.state.isFocused},function(){t.setValue(e)})}},{key:"addValue",value:function(e){var t=this.getValueArray(this.props.value),n=this._visibleOptions.filter(function(e){return!e.disabled}),r=n.indexOf(e);this.setValue(t.concat(e)),n.length-1===r?this.focusOption(n[r-1]):n.length>r&&this.focusOption(n[r+1])}},{key:"popValue",value:function(){var e=this.getValueArray(this.props.value);e.length&&!1!==e[e.length-1].clearableValue&&this.setValue(this.props.multi?e.slice(0,e.length-1):null)}},{key:"removeValue",value:function(e){var t=this,n=this.getValueArray(this.props.value);this.setValue(n.filter(function(n){return n[t.props.valueKey]!==e[t.props.valueKey]})),this.focus()}},{key:"clearValue",value:function(e){e&&"mousedown"===e.type&&0!==e.button||(e.preventDefault(),this.setValue(this.getResetValue()),this.setState({inputValue:this.handleInputValueChange(""),isOpen:!1},this.focus),this._focusAfterClear=!0)}},{key:"getResetValue",value:function(){return void 0!==this.props.resetValue?this.props.resetValue:this.props.multi?[]:null}},{key:"focusOption",value:function(e){this.setState({focusedOption:e})}},{key:"focusNextOption",value:function(){this.focusAdjacentOption("next")}},{key:"focusPreviousOption",value:function(){this.focusAdjacentOption("previous")}},{key:"focusPageUpOption",value:function(){this.focusAdjacentOption("page_up")}},{key:"focusPageDownOption",value:function(){this.focusAdjacentOption("page_down")}},{key:"focusStartOption",value:function(){this.focusAdjacentOption("start")}},{key:"focusEndOption",value:function(){this.focusAdjacentOption("end")}},{key:"focusAdjacentOption",value:function(e){var t=this._visibleOptions.map(function(e,t){return{option:e,index:t}}).filter(function(e){return!e.option.disabled});if(this._scrollToFocusedOptionOnUpdate=!0,!this.state.isOpen){var n={focusedOption:this._focusedOption||(t.length?t["next"===e?0:t.length-1].option:null),isOpen:!0};return this.props.onSelectResetsInput&&(n.inputValue=""),void this.setState(n)}if(t.length){for(var r=-1,o=0;o0?r-=1:r=t.length-1;else if("start"===e)r=0;else if("end"===e)r=t.length-1;else if("page_up"===e){var i=r-this.props.pageSize;r=i<0?0:i}else if("page_down"===e){var u=r+this.props.pageSize;r=u>t.length-1?t.length-1:u}-1===r&&(r=0),this.setState({focusedIndex:t[r].index,focusedOption:t[r].option})}}},{key:"getFocusedOption",value:function(){return this._focusedOption}},{key:"selectFocusedOption",value:function(){if(this._focusedOption)return this.selectValue(this._focusedOption)}},{key:"renderLoading",value:function(){if(this.props.isLoading)return c.a.createElement("span",{className:"Select-loading-zone","aria-hidden":"true"},c.a.createElement("span",{className:"Select-loading"}))}},{key:"renderValue",value:function(e,t){var n=this,r=this.props.valueRenderer||this.getOptionLabel,o=this.props.valueComponent;if(!e.length)return function(e,t,n){var r=e.inputValue,o=e.isPseudoFocused,i=e.isFocused,u=t.onSelectResetsInput;return!r||!u&&!n&&!o&&!i}(this.state,this.props,t)?c.a.createElement("div",{className:"Select-placeholder"},this.props.placeholder):null;var i=this.props.onValueClick?this.handleValueClick:null;return this.props.multi?e.map(function(e,t){return c.a.createElement(o,{disabled:n.props.disabled||!1===e.clearableValue,id:n._instancePrefix+"-value-"+t,instancePrefix:n._instancePrefix,key:"value-"+t+"-"+e[n.props.valueKey],onClick:i,onRemove:n.removeValue,placeholder:n.props.placeholder,value:e},r(e,t),c.a.createElement("span",{className:"Select-aria-only"}," "))}):function(e,t){var n=e.inputValue,r=e.isPseudoFocused,o=e.isFocused,i=t.onSelectResetsInput;return!n||!i&&!(!o&&r||o&&!r)}(this.state,this.props)?(t&&(i=null),c.a.createElement(o,{disabled:this.props.disabled,id:this._instancePrefix+"-value-item",instancePrefix:this._instancePrefix,onClick:i,placeholder:this.props.placeholder,value:e[0]},r(e[0]))):void 0}},{key:"renderInput",value:function(e,t){var n,r=this,i=u()("Select-input",this.props.inputProps.className),s=this.state.isOpen,a=u()((O(n={},this._instancePrefix+"-list",s),O(n,this._instancePrefix+"-backspace-remove-message",this.props.multi&&!this.props.disabled&&this.state.isFocused&&!this.state.inputValue),n)),l=this.state.inputValue;!l||this.props.onSelectResetsInput||this.state.isFocused||(l="");var p=_({},this.props.inputProps,{"aria-activedescendant":s?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value","aria-describedby":this.props["aria-describedby"],"aria-expanded":""+s,"aria-haspopup":""+s,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],"aria-owns":a,className:i,onBlur:this.handleInputBlur,onChange:this.handleInputChange,onFocus:this.handleInputFocus,ref:function(e){return r.input=e},role:"combobox",required:this.state.required,tabIndex:this.props.tabIndex,value:l});if(this.props.inputRenderer)return this.props.inputRenderer(p);if(this.props.disabled||!this.props.searchable){var d=C(this.props.inputProps,[]),f=u()(O({},this._instancePrefix+"-list",s));return c.a.createElement("div",_({},d,{"aria-expanded":s,"aria-owns":f,"aria-activedescendant":s?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value","aria-disabled":""+this.props.disabled,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],className:i,onBlur:this.handleInputBlur,onFocus:this.handleInputFocus,ref:function(e){return r.input=e},role:"combobox",style:{border:0,width:1,display:"inline-block"},tabIndex:this.props.tabIndex||0}))}return this.props.autosize?c.a.createElement(o.a,_({id:this.props.id},p,{minWidth:"5"})):c.a.createElement("div",{className:i,key:"input-wrap",style:{display:"inline-block"}},c.a.createElement("input",_({id:this.props.id},p)))}},{key:"renderClear",value:function(){var e=this.getValueArray(this.props.value);if(this.props.clearable&&e.length&&!this.props.disabled&&!this.props.isLoading){var t=this.props.multi?this.props.clearAllText:this.props.clearValueText,n=this.props.clearRenderer();return c.a.createElement("span",{"aria-label":t,className:"Select-clear-zone",onMouseDown:this.clearValue,onTouchEnd:this.handleTouchEndClearValue,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,title:t},n)}}},{key:"renderArrow",value:function(){if(this.props.arrowRenderer){var e=this.handleMouseDownOnArrow,t=this.state.isOpen,n=this.props.arrowRenderer({onMouseDown:e,isOpen:t});return n?c.a.createElement("span",{className:"Select-arrow-zone",onMouseDown:e},n):null}}},{key:"filterOptions",value:function(e){var t=this.state.inputValue,n=this.props.options||[];if(this.props.filterOptions){var r="function"==typeof this.props.filterOptions?this.props.filterOptions:y;return r(n,t,e,{filterOption:this.props.filterOption,ignoreAccents:this.props.ignoreAccents,ignoreCase:this.props.ignoreCase,labelKey:this.props.labelKey,matchPos:this.props.matchPos,matchProp:this.props.matchProp,trimFilter:this.props.trimFilter,valueKey:this.props.valueKey})}return n}},{key:"onOptionRef",value:function(e,t){t&&(this.focused=e)}},{key:"renderMenu",value:function(e,t,n){return e&&e.length?this.props.menuRenderer({focusedOption:n,focusOption:this.focusOption,inputValue:this.state.inputValue,instancePrefix:this._instancePrefix,labelKey:this.props.labelKey,onFocus:this.focusOption,onOptionRef:this.onOptionRef,onSelect:this.selectValue,optionClassName:this.props.optionClassName,optionComponent:this.props.optionComponent,optionRenderer:this.props.optionRenderer||this.getOptionLabel,options:e,removeValue:this.removeValue,selectValue:this.selectValue,valueArray:t,valueKey:this.props.valueKey}):this.props.noResultsText?c.a.createElement("div",{className:"Select-noresults"},this.props.noResultsText):null}},{key:"renderHiddenField",value:function(e){var t=this;if(this.props.name){if(this.props.joinValues){var n=e.map(function(e){return D(e[t.props.valueKey])}).join(this.props.delimiter);return c.a.createElement("input",{disabled:this.props.disabled,name:this.props.name,ref:function(e){return t.value=e},type:"hidden",value:n})}return e.map(function(e,n){return c.a.createElement("input",{disabled:t.props.disabled,key:"hidden."+n,name:t.props.name,ref:"value"+n,type:"hidden",value:D(e[t.props.valueKey])})})}}},{key:"getFocusableOptionIndex",value:function(e){var t=this._visibleOptions;if(!t.length)return null;var n=this.props.valueKey,r=this.state.focusedOption||e;if(r&&!r.disabled){var o=-1;if(t.some(function(e,t){var i=e[n]===r[n];return i&&(o=t),i}),-1!==o)return o}for(var i=0;i{const u=n.slice(-1)[0],s=n.slice(0,-1),a=r.reduce((e,t)=>e.get(t)||e.set(t,new Map).get(t),t,s);return(a.get(u)||a.set(u,function(e){return(0,o.memoizeOne)((...t)=>e(...t))}(e)).get(u))(...i)}};var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=n(4)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=d(n(1)),i=d(n(3)),u=d(n(42)),s=d(n(43)),a=n(44),l=d(n(10)),c=n(16),p=d(n(18));function d(e){return e&&e.__esModule?e:{default:e}}t.default=class{constructor(e){this.propsFn=e,this.handlers=new Map,this.ops=new Map,this.onChange=((e,t,n,o)=>{i.default.debug("Filter -- onChange",e,o.target.value&&o.target.value.trim());const u=o.target.value.trim();u&&u.length?t.set(e.toString(),u):t.delete(e.toString()),n(r.map(([e,t])=>`${e} ${t}`,r.filter(([e])=>this.isFragmentValid(e),Array.from(t.entries()))).join(" && "))}),this.getEventHandler=((e,t,n,r)=>{const o=this.handlers.get(e)||this.handlers.set(e,new Map).get(e),i=o.get(t)||o.set(t,new Map).get(t);return i.get(r)||i.set(r,e.bind(this,t,n,r)).get(r)})}get props(){return this.propsFn()}respectsBasicSyntax(e,t=!0){const n=[c.LexemeType.BinaryOperator,c.LexemeType.Expression,c.LexemeType.Operand,c.LexemeType.UnaryOperator];if(t&&n.push(c.LexemeType.And),!r.all(e=>r.contains(e.lexeme.name,n),e))return!1;const o=r.map(e=>e.value,r.filter(e=>e.lexeme.name===c.LexemeType.Operand,e)),i=r.uniq(o);return o.length===i.length}isBasicFilter(e,t,n=!0){return e.valid&&t.valid&&this.respectsBasicSyntax(e.lexemes,n)}updateOps(e){const t=(0,l.default)(e),n=(0,p.default)(t);if(!this.isBasicFilter(t,n))return;const r=[n.tree];for(;r.length;){const e=r.pop();e&&(e.lexeme.name===c.LexemeType.UnaryOperator&&e.block?this.ops.set(e.block.value,e.value):e.lexeme.name===c.LexemeType.BinaryOperator&&e.left&&e.right?this.ops.set(e.left.value,`${e.value} ${e.right.value}`):(r.push(e.left),r.push(e.block),r.push(e.right)))}}isFragmentValidOrNull(e){const t=this.ops.get(e.toString());return!t||!t.trim().length||this.isFragmentValid(e)}isFragmentValid(e){const t=this.ops.get(e.toString()),n=(0,l.default)(`${e} ${t}`),r=(0,p.default)(n);return r.valid&&this.isBasicFilter(n,r,!1)}createFilters(){var e=this.props;const t=e.columns,n=e.fillerColumns,i=e.filtering,l=e.filtering_settings,c=e.filtering_type,p=e.setFilter;if(!i)return[];this.updateOps(l);const d=r.range(0,n).map(e=>o.default.createElement("th",{key:`offset-${e}`})),f=c===a.FilteringType.Basic?r.addIndex(r.map)((e,t)=>o.default.createElement(u.default,{key:`column-${t}`,classes:`filter column-${t}`,isValid:this.isFragmentValidOrNull(e.id),property:e.id,setFilter:this.getEventHandler(this.onChange,e.id,this.ops,p),value:this.ops.get(e.id.toString())}),t):[o.default.createElement(s.default,{key:"column-0",classes:[],colSpan:t.length,value:"",setFilter:()=>void 0})];return[r.concat(d,f)]}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),o=u(r),i=u(n(20));function u(e){return e&&e.__esModule?e:{default:e}}t.default=class extends r.PureComponent{constructor(e){super(e),this.submit=(e=>{(0,this.props.setFilter)({target:{value:e}})}),this.state={value:e.value}}componentWillReceiveProps(e){const t=e.value;this.state.value!==t&&this.setState({value:t})}render(){var e=this.props;const t=e.classes,n=e.isValid,r=e.value;return o.default.createElement("th",{className:t+(n?"":" invalid")},o.default.createElement(i.default,{value:r,stopPropagation:!0,submit:this.submit}))}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),o=u(r),i=u(n(20));function u(e){return e&&e.__esModule?e:{default:e}}t.default=class extends r.PureComponent{constructor(e){super(e),this.submit=(e=>this.props.setFilter(e))}render(){var e=this.props;const t=e.colSpan,n=e.value;return o.default.createElement("th",{colSpan:t},o.default.createElement(i.default,{stopPropagation:!0,value:n,submit:this.submit}))}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=t.FilteringType=void 0;!function(e){e.Advanced="advanced",e.Basic="basic"}(r||(t.FilteringType=r={}))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=n(4);t.default=(0,o.memoizeOneFactory)((e,t,n,o)=>{switch(e){case!1:return{loadNext:()=>{},loadPrevious:()=>{}};case!0:case"fe":return function(e,t,n){return{loadNext:()=>{let o=Math.floor(n.length/e.page_size);e.current_page>=o||(e=r.merge(e,{current_page:e.current_page+1}),t({pagination_settings:e}))},loadPrevious:()=>{e.current_page<=0||(e=r.merge(e,{current_page:e.current_page-1}),t({pagination_settings:e}))}}}(t,n,o);case"be":return function(e,t){return{loadNext:()=>{e.current_page++,t({pagination_settings:e})},loadPrevious:()=>{e.current_page<=0||(e.current_page--,t({pagination_settings:e}))}}}(t,n);default:throw new Error(`Unknown pagination mode: '${e}'`)}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(4);t.default=(0,r.memoizeOneFactory)((e,t,n,r)=>{switch(e){case!1:return function(e,t){return{dataframe:e,indices:t}}(n,r);case!0:case"fe":return function(e,t,n){let r=Math.min(e.current_page,Math.floor(t.length/e.page_size));const o=e.page_size*r,i=Math.min(o+e.displayed_pages*e.page_size,t.length);return{dataframe:t.slice(o,i),indices:n.slice(o,i)}}(t,n,r);case"be":return function(e,t){return{dataframe:e,indices:t}}(n,r);default:throw new Error(`Unknown pagination mode: '${e}'`)}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=n(4),i=n(7),u=a(i),s=a(n(17));function a(e){return e&&e.__esModule?e:{default:e}}t.default=(0,o.memoizeOneFactory)((e,t,n,o,a=[],l)=>{const c=new Map;if(r.addIndex(r.forEach)((e,t)=>{c.set(e,t)},e),"fe"===t||!0===t){const t=new s.default(n);e=t.isValid?t.filter(e):e}const p=l?e=>""===e||(0,i.defaultIsNully)(e):void 0;return"fe"!==o&&!0!==o||(e=(0,u.default)(e,a,p)),{dataframe:e,indices:r.map(e=>c.get(e),e)}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=n(4);t.default=(0,o.memoizeOneFactory)(e=>r.filter(e=>!e.hidden,e))},function(e,t,n){var r=n(50);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(9)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(8)(!1)).push([e.i,"/**\n * React Select\n * ============\n * Created by Jed Watson and Joss Mackison for KeystoneJS, http://www.keystonejs.com/\n * https://twitter.com/jedwatson https://twitter.com/jossmackison https://twitter.com/keystonejs\n * MIT License: https://github.com/JedWatson/react-select\n*/\n.Select {\n position: relative;\n}\n.Select input::-webkit-contacts-auto-fill-button,\n.Select input::-webkit-credentials-auto-fill-button {\n display: none !important;\n}\n.Select input::-ms-clear {\n display: none !important;\n}\n.Select input::-ms-reveal {\n display: none !important;\n}\n.Select,\n.Select div,\n.Select input,\n.Select span {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n.Select.is-disabled .Select-arrow-zone {\n cursor: default;\n pointer-events: none;\n opacity: 0.35;\n}\n.Select.is-disabled > .Select-control {\n background-color: #f9f9f9;\n}\n.Select.is-disabled > .Select-control:hover {\n box-shadow: none;\n}\n.Select.is-open > .Select-control {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n background: #fff;\n border-color: #b3b3b3 #ccc #d9d9d9;\n}\n.Select.is-open > .Select-control .Select-arrow {\n top: -2px;\n border-color: transparent transparent #999;\n border-width: 0 5px 5px;\n}\n.Select.is-searchable.is-open > .Select-control {\n cursor: text;\n}\n.Select.is-searchable.is-focused:not(.is-open) > .Select-control {\n cursor: text;\n}\n.Select.is-focused > .Select-control {\n background: #fff;\n}\n.Select.is-focused:not(.is-open) > .Select-control {\n border-color: #007eff;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 3px rgba(0, 126, 255, 0.1);\n background: #fff;\n}\n.Select.has-value.is-clearable.Select--single > .Select-control .Select-value {\n padding-right: 42px;\n}\n.Select.has-value.Select--single > .Select-control .Select-value .Select-value-label,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value .Select-value-label {\n color: #333;\n}\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label {\n cursor: pointer;\n text-decoration: none;\n}\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label:hover,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:hover,\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label:focus,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:focus {\n color: #007eff;\n outline: none;\n text-decoration: underline;\n}\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label:focus,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:focus {\n background: #fff;\n}\n.Select.has-value.is-pseudo-focused .Select-input {\n opacity: 0;\n}\n.Select.is-open .Select-arrow,\n.Select .Select-arrow-zone:hover > .Select-arrow {\n border-top-color: #666;\n}\n.Select.Select--rtl {\n direction: rtl;\n text-align: right;\n}\n.Select-control {\n background-color: #fff;\n border-color: #d9d9d9 #ccc #b3b3b3;\n border-radius: 4px;\n border: 1px solid #ccc;\n color: #333;\n cursor: default;\n display: table;\n border-spacing: 0;\n border-collapse: separate;\n height: 36px;\n outline: none;\n overflow: hidden;\n position: relative;\n width: 100%;\n}\n.Select-control:hover {\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06);\n}\n.Select-control .Select-input:focus {\n outline: none;\n background: #fff;\n}\n.Select-placeholder,\n.Select--single > .Select-control .Select-value {\n bottom: 0;\n color: #aaa;\n left: 0;\n line-height: 34px;\n padding-left: 10px;\n padding-right: 10px;\n position: absolute;\n right: 0;\n top: 0;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.Select-input {\n height: 34px;\n padding-left: 10px;\n padding-right: 10px;\n vertical-align: middle;\n}\n.Select-input > input {\n width: 100%;\n background: none transparent;\n border: 0 none;\n box-shadow: none;\n cursor: default;\n display: inline-block;\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n outline: none;\n line-height: 17px;\n /* For IE 8 compatibility */\n padding: 8px 0 12px;\n /* For IE 8 compatibility */\n -webkit-appearance: none;\n}\n.is-focused .Select-input > input {\n cursor: text;\n}\n.has-value.is-pseudo-focused .Select-input {\n opacity: 0;\n}\n.Select-control:not(.is-searchable) > .Select-input {\n outline: none;\n}\n.Select-loading-zone {\n cursor: pointer;\n display: table-cell;\n position: relative;\n text-align: center;\n vertical-align: middle;\n width: 16px;\n}\n.Select-loading {\n -webkit-animation: Select-animation-spin 400ms infinite linear;\n -o-animation: Select-animation-spin 400ms infinite linear;\n animation: Select-animation-spin 400ms infinite linear;\n width: 16px;\n height: 16px;\n box-sizing: border-box;\n border-radius: 50%;\n border: 2px solid #ccc;\n border-right-color: #333;\n display: inline-block;\n position: relative;\n vertical-align: middle;\n}\n.Select-clear-zone {\n -webkit-animation: Select-animation-fadeIn 200ms;\n -o-animation: Select-animation-fadeIn 200ms;\n animation: Select-animation-fadeIn 200ms;\n color: #999;\n cursor: pointer;\n display: table-cell;\n position: relative;\n text-align: center;\n vertical-align: middle;\n width: 17px;\n}\n.Select-clear-zone:hover {\n color: #D0021B;\n}\n.Select-clear {\n display: inline-block;\n font-size: 18px;\n line-height: 1;\n}\n.Select--multi .Select-clear-zone {\n width: 17px;\n}\n.Select-arrow-zone {\n cursor: pointer;\n display: table-cell;\n position: relative;\n text-align: center;\n vertical-align: middle;\n width: 25px;\n padding-right: 5px;\n}\n.Select--rtl .Select-arrow-zone {\n padding-right: 0;\n padding-left: 5px;\n}\n.Select-arrow {\n border-color: #999 transparent transparent;\n border-style: solid;\n border-width: 5px 5px 2.5px;\n display: inline-block;\n height: 0;\n width: 0;\n position: relative;\n}\n.Select-control > *:last-child {\n padding-right: 5px;\n}\n.Select--multi .Select-multi-value-wrapper {\n display: inline-block;\n}\n.Select .Select-aria-only {\n position: absolute;\n display: inline-block;\n height: 1px;\n width: 1px;\n margin: -1px;\n clip: rect(0, 0, 0, 0);\n overflow: hidden;\n float: left;\n}\n@-webkit-keyframes Select-animation-fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes Select-animation-fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n.Select-menu-outer {\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n background-color: #fff;\n border: 1px solid #ccc;\n border-top-color: #e6e6e6;\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06);\n box-sizing: border-box;\n margin-top: -1px;\n max-height: 200px;\n position: absolute;\n left: 0;\n top: 100%;\n width: 100%;\n z-index: 1;\n -webkit-overflow-scrolling: touch;\n}\n.Select-menu {\n max-height: 198px;\n overflow-y: auto;\n}\n.Select-option {\n box-sizing: border-box;\n background-color: #fff;\n color: #666666;\n cursor: pointer;\n display: block;\n padding: 8px 10px;\n}\n.Select-option:last-child {\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.Select-option.is-selected {\n background-color: #f5faff;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 126, 255, 0.04);\n color: #333;\n}\n.Select-option.is-focused {\n background-color: #ebf5ff;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 126, 255, 0.08);\n color: #333;\n}\n.Select-option.is-disabled {\n color: #cccccc;\n cursor: default;\n}\n.Select-noresults {\n box-sizing: border-box;\n color: #999999;\n cursor: default;\n display: block;\n padding: 8px 10px;\n}\n.Select--multi .Select-input {\n vertical-align: middle;\n margin-left: 10px;\n padding: 0;\n}\n.Select--multi.Select--rtl .Select-input {\n margin-left: 0;\n margin-right: 10px;\n}\n.Select--multi.has-value .Select-input {\n margin-left: 5px;\n}\n.Select--multi .Select-value {\n background-color: #ebf5ff;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 126, 255, 0.08);\n border-radius: 2px;\n border: 1px solid #c2e0ff;\n /* Fallback color for IE 8 */\n border: 1px solid rgba(0, 126, 255, 0.24);\n color: #007eff;\n display: inline-block;\n font-size: 0.9em;\n line-height: 1.4;\n margin-left: 5px;\n margin-top: 5px;\n vertical-align: top;\n}\n.Select--multi .Select-value-icon,\n.Select--multi .Select-value-label {\n display: inline-block;\n vertical-align: middle;\n}\n.Select--multi .Select-value-label {\n border-bottom-right-radius: 2px;\n border-top-right-radius: 2px;\n cursor: default;\n padding: 2px 5px;\n}\n.Select--multi a.Select-value-label {\n color: #007eff;\n cursor: pointer;\n text-decoration: none;\n}\n.Select--multi a.Select-value-label:hover {\n text-decoration: underline;\n}\n.Select--multi .Select-value-icon {\n cursor: pointer;\n border-bottom-left-radius: 2px;\n border-top-left-radius: 2px;\n border-right: 1px solid #c2e0ff;\n /* Fallback color for IE 8 */\n border-right: 1px solid rgba(0, 126, 255, 0.24);\n padding: 1px 5px 3px;\n}\n.Select--multi .Select-value-icon:hover,\n.Select--multi .Select-value-icon:focus {\n background-color: #d8eafd;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 113, 230, 0.08);\n color: #0071e6;\n}\n.Select--multi .Select-value-icon:active {\n background-color: #c2e0ff;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 126, 255, 0.24);\n}\n.Select--multi.Select--rtl .Select-value {\n margin-left: 0;\n margin-right: 5px;\n}\n.Select--multi.Select--rtl .Select-value-icon {\n border-right: none;\n border-left: 1px solid #c2e0ff;\n /* Fallback color for IE 8 */\n border-left: 1px solid rgba(0, 126, 255, 0.24);\n}\n.Select--multi.is-disabled .Select-value {\n background-color: #fcfcfc;\n border: 1px solid #e3e3e3;\n color: #333;\n}\n.Select--multi.is-disabled .Select-value-icon {\n cursor: not-allowed;\n border-right: 1px solid #e3e3e3;\n}\n.Select--multi.is-disabled .Select-value-icon:hover,\n.Select--multi.is-disabled .Select-value-icon:focus,\n.Select--multi.is-disabled .Select-value-icon:active {\n background-color: #fcfcfc;\n}\n@keyframes Select-animation-spin {\n to {\n transform: rotate(1turn);\n }\n}\n@-webkit-keyframes Select-animation-spin {\n to {\n -webkit-transform: rotate(1turn);\n }\n}\n",""])},function(e,t){e.exports=function(e){var t="undefined"!=typeof window&&window.location;if(!t)throw new Error("fixUrls requires window.location");if(!e||"string"!=typeof e)return e;var n=t.protocol+"//"+t.host,r=n+t.pathname.replace(/\/[^\/]*$/,"/");return e.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi,function(e,t){var o,i=t.trim().replace(/^"(.*)"$/,function(e,t){return t}).replace(/^'(.*)'$/,function(e,t){return t});return/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(i)?e:(o=0===i.indexOf("//")?i:0===i.indexOf("/")?n+i:r+i.replace(/^\.\//,""),"url("+JSON.stringify(o)+")")})}},function(e,t,n){var r=n(53);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(9)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(8)(!1)).push([e.i,".dash-spreadsheet.dash-freeze-left {\n width: auto;\n width: fit-content;\n width: -moz-fit-content;\n width: -webkit-fit-content;\n max-width: 500px;\n}\n.dash-spreadsheet.dash-freeze-top {\n width: auto;\n width: fit-content;\n width: -moz-fit-content;\n width: -webkit-fit-content;\n max-height: 500px;\n}\n.dash-spreadsheet-container {\n display: flex;\n flex-direction: row;\n position: relative;\n}\n.dash-spreadsheet-inner {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n}\n.dash-spreadsheet-inner.dash-freeze-left,\n.dash-spreadsheet-inner.dash-freeze-top {\n overflow: hidden !important;\n}\n.dash-spreadsheet-inner *,\n.dash-spreadsheet-inner *:after,\n.dash-spreadsheet-inner *:before {\n box-sizing: inherit;\n}\n.dash-spreadsheet-inner .Select {\n overflow: hidden;\n position: static;\n}\n.dash-spreadsheet-inner .Select,\n.dash-spreadsheet-inner .Select-control {\n background-color: inherit;\n}\n.dash-spreadsheet-inner .Select-value {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-top: -2px;\n}\n.dash-spreadsheet-inner .marker-row tr {\n visibility: hidden !important;\n}\n.dash-spreadsheet-inner .marker-row td,\n.dash-spreadsheet-inner .marker-row th {\n height: 0 !important;\n padding: 0 !important;\n margin: 0 !important;\n}\n.dash-spreadsheet-inner .row-0 {\n display: flex;\n flex: 0 0 auto;\n flex-direction: row;\n}\n.dash-spreadsheet-inner .row-1 {\n display: flex;\n flex-direction: row;\n overflow: scroll;\n}\n.dash-spreadsheet-inner .cell-0-0,\n.dash-spreadsheet-inner .cell-1-0 {\n flex: 0 0 auto;\n left: 0;\n position: sticky;\n z-index: 400;\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr td:first-of-type,\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr:first-of-type td,\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr:first-of-type td:first-of-type,\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr:first-of-type th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr td:first-of-type,\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr:first-of-type td,\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr:first-of-type td:first-of-type,\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr:first-of-type th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-1 tr:first-of-type td,\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-1 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr:first-of-type td,\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr:first-of-type td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr:first-of-type th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-1-1 tr td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-1-1 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr:first-of-type td,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr:first-of-type td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr:first-of-type th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-1 tr:first-of-type td,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-1 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-1-0 tr td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-1-0 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner .cell-0-1 {\n z-index: 300;\n flex: 0 0 auto;\n}\n.dash-spreadsheet-inner .cell-1-1 {\n flex: 0 0 auto;\n}\n.dash-spreadsheet-inner .cell td,\n.dash-spreadsheet-inner .cell th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner .cell td:focus,\n.dash-spreadsheet-inner .cell th:focus {\n outline: none;\n}\n.dash-spreadsheet-inner .filter.invalid {\n box-shadow: inset 1px 0px 0px 0px red, inset 0px 1px 0px 0px red, inset -1px 0px 0px red, inset 0px -1px 0px 0px red;\n background-color: pink;\n}\n.dash-spreadsheet-inner .selected-row td,\n.dash-spreadsheet-inner .selected-row th {\n background-color: var(--selected-row);\n}\n.dash-spreadsheet-inner tr {\n background-color: white;\n}\n.dash-spreadsheet-inner td {\n background-color: inherit;\n}\n.dash-spreadsheet-inner td.cell--selected {\n background-color: var(--selected-background);\n}\n.dash-spreadsheet-inner td.focused {\n box-shadow: 1px 0px 0px 0px var(--accent), 0px 1px 0px 0px var(--accent), 0 0px 0px var(--accent), 0px 0 0px 0px var(--accent);\n border: 1px solid var(--accent);\n margin: -1px;\n z-index: 200;\n}\n.dash-spreadsheet-inner td .dash-cell-value {\n height: 100%;\n width: 100%;\n}\n.dash-spreadsheet-inner td div.dash-cell-value {\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n.dash-spreadsheet-inner td,\n.dash-spreadsheet-inner th {\n padding: 2px;\n white-space: nowrap;\n overflow-x: hidden;\n text-overflow: ellipsis;\n height: 30px;\n text-align: right;\n}\n.dash-spreadsheet-inner th .column-header--edit,\n.dash-spreadsheet-inner th .column-header--delete,\n.dash-spreadsheet-inner th .sort {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: default;\n cursor: pointer;\n}\n.dash-spreadsheet-inner textarea {\n white-space: pre;\n}\n.dash-spreadsheet-inner table {\n border-collapse: collapse;\n font-family: monospace;\n --accent: hotpink;\n --border: lightgrey;\n --text-color: #3c3c3c;\n --hover: #fdfdfd;\n --background-color-ellipses: #fdfdfd;\n --faded-text: #fafafa;\n --faded-text-header: #b4b4b4;\n --selected-background: rgba(255, 65, 54, 0.2);\n --faded-dropdown: #f0f0f0;\n --selected-row: #fff0ff;\n --muted: #c8c8c8;\n}\n/* focus happens after copying to clipboard */\n.dash-spreadsheet-inner table:focus {\n outline: none;\n}\n.dash-spreadsheet-inner thead {\n display: table-row-group;\n}\n.elip {\n text-align: center;\n width: 100%;\n background-color: var(--background-color-ellipses);\n}\n.dash-spreadsheet-inner td.dropdown {\n /*\n * To view the dropdown's contents, we need\n * overflow-y: visible.\n * Unfortunately, overflow-x: hidden and overflow-y: visible\n * can't both be set at the same time.\n * So, we have to make both overflow-x: visible and overflow-y: visble\n *\n * See https://stackoverflow.com/questions/6421966/\n *\n * There might be another solution with parent divs, but I haven't\n * tried it.\n */\n overflow-x: visible;\n}\n.dash-spreadsheet-inner th {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner :not(.cell--selected) tr:hover,\ntr:hover input :not(.cell--selected) {\n background-color: var(--hover);\n}\n.dash-spreadsheet-inner th {\n background-color: #fafafa;\n}\n.sort {\n cursor: pointer;\n float: left;\n color: var(--faded-text-header);\n font-size: 20px;\n}\nth:hover .sort {\n color: var(--accent);\n}\n.sort:hover {\n text-decoration: underline;\n}\n.expanded-row--empty-cell {\n box-shadow: none;\n background-color: transparent;\n}\n.expanded-row {\n text-align: center;\n}\n.dash-spreadsheet-inner input:not([type=radio]):not([type=checkbox]) {\n padding: 0px;\n margin: 0px;\n height: calc(100% - 1px);\n width: calc(100% - 1px);\n line-height: 30px;\n border: none;\n font-family: inherit;\n text-align: right;\n box-sizing: border-box;\n color: var(--text-color);\n background-color: transparent;\n /* so as to not overlay the box shadow */\n /* browser's default text-shadow is `$color 0px 0px 0px;`\n * for `input`, which makes it look a little bit heavier than dropdowns\n * or bare `td`\n */\n text-shadow: none;\n}\n.dash-spreadsheet-inner input.unfocused {\n color: transparent;\n text-shadow: 0 0 0 var(--text-color);\n cursor: default;\n}\n.dash-spreadsheet-inner input.unfocused:focus {\n outline: none;\n}\n.numeric {\n font-family: monospace;\n}\n.toggle-row {\n border: none;\n box-shadow: none;\n width: 10px;\n padding-left: 10px;\n padding-right: 10px;\n cursor: pointer;\n color: var(--faded-text);\n}\n.toggle-row--expanded {\n color: var(--accent);\n}\n.dash-spreadsheet-inner tr:hover .toggle-row {\n color: var(--accent);\n}\n.cell--uneditable,\n.cell--uneditable input {\n cursor: not-allowed;\n}\n.expanded-row {\n box-shadow: inset 2px 0px 0px 0px var(--accent), inset -1px 0px 0px 0px var(--border);\n /* inset 0px 1px 0px 0px var(--border); */\n}\n.dash-spreadsheet-inner .dash-delete-cell,\n.dash-spreadsheet-inner .dash-delete-header {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: default;\n font-size: 1.3rem;\n text-align: center;\n cursor: pointer;\n color: var(--muted);\n}\n.dash-spreadsheet-inner .dash-delete-cell:hover,\n.dash-spreadsheet-inner .dash-delete-header:hover {\n color: var(--accent);\n}\n.dash-spreadsheet-inner .column-header--edit {\n float: left;\n opacity: 0.1;\n padding-left: 2px;\n padding-right: 2px;\n cursor: pointer;\n}\n.dash-spreadsheet-inner th:hover .column-header--edit {\n color: var(--accent);\n opacity: 1;\n}\n.dash-spreadsheet-inner .column-header--delete {\n float: left;\n opacity: 0.1;\n padding-left: 2px;\n padding-right: 2px;\n cursor: pointer;\n}\n.dash-spreadsheet-inner th:hover .column-header--delete {\n color: var(--accent);\n opacity: 1;\n}\n",""])},function(e,t,n){var r=n(55);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(9)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(8)(!1)).push([e.i,".dash-spreadsheet .Select,\n.dash-spreadsheet .Select-control {\n border: none;\n cursor: pointer;\n height: 30px; /* matches the td height and line-height */\n border: none;\n}\n\n.dash-spreadsheet .Select-placeholder,\n.dash-spreadsheet .Select--single > .Select-control .Select-value {\n height: 100%;\n line-height: inherit;\n}\n\n.dash-spreadsheet .Select.has-value.Select--single > .Select-control .Select-value .Select-value-label,\n.dash-spreadsheet .Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value .Select-value-label {\n color: var(--text-color);\n}\n\n.dash-spreadsheet .Select:hover,\n.dash-spreadsheet .Select-control:hover {\n border: none;\n box-shadow: none;\n cursor: pointer;\n}\n\n.dash-spreadsheet .Select-menu-outer {\n z-index: 100;\n}\n\n.dash-spreadsheet .Select-arrow {\n border-top-color: var(--faded-dropdown);\n border-left-color: transparent;\n border-right-color: transparent;\n border-bottom-color: transparent;\n}\n\n.dash-spreadsheet .Select-control:hover .Select-arrow {\n border-top-color: var(--accent);\n border-left-color: transparent;\n border-right-color: transparent;\n border-bottom-color: transparent;\n}\n\n.dash-spreadsheet .is-open > .Select-control .Select-arrow {\n border-bottom-color: var(--background-color-8-react-select);\n border-left-color: transparent;\n border-right-color: transparent;\n border-top-color: transparent;\n}\n\n.dash-spreadsheet .Select--multi .Select-value,\n.dash-spreadsheet .Select--multi a.Select-value-label {\n color: var(--color-8-react-select);\n}\n\n.dash-spreadsheet .Select {\n border-radius: 0;\n}\n\n.dash-spreadsheet .Select.is-disabled > .Select-control {\n border: none;\n}\n\n.dash-spreadsheet .Select--multi .Select-value-icon:hover,\n.dash-spreadsheet .Select--multi .Select-value-icon:focus {\n font-weight: bold;\n}\n\n.dash-spreadsheet .Select.is-disabled .Select-control {\n cursor: not-allowed;\n}\n\n.dash-spreadsheet .Select-menu-outer {\n background-color: white;\n border: none;\n border-bottom: thin var(--border) solid;\n border-radius: 0;\n border-top: none;\n}\n\n.dash-spreadsheet .Select-option {\n background-color: inherit;\n color: var(--accent);\n}\n\n.dash-spreadsheet .Select-option:hover {\n font-weight: bold;\n color: var(--accent);\n background-color: var(--hover);\n}\n\n.dash-spreadsheet .Select.is-focused:not(.is-open) > .Select-control {\n border: none;\n -webkit-box-shadow: none;\n box-shadow: none;\n background: #fff;\n}\n\n.dash-spreadsheet .Select-option.is-focused {\n background-color: white;\n color: var(--accent);\n font-weight: bold;\n}\n\n.dash-spreadsheet .Select-clear {\n color: transparent;\n}\n.Select:hover .Select-clear {\n color: var(--accent);\n}\n\n.dash-spreadsheet .Select-control {\n padding-left: 2px;\n}\n\n.dash-spreadsheet .cell--selected .Select-control {\n background-color: var(--selected-background);\n border-radius: 0;\n}\n",""])},function(e,t,n){var r=n(57);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(9)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(8)(!1)).push([e.i,"/*RESET CSS*/\nhtml {\n color: #000;\n background: #FFF;\n}\nbody,\ndiv,\ndl,\ndt,\ndd,\nul,\nol,\nli,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\npre,\ncode,\nform,\nfieldset,\nlegend,\ninput,\ntextarea,\np,\nblockquote,\nth,\ntd {\n margin: 0;\n padding: 0;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\nfieldset,\nimg {\n border: 0;\n}\naddress,\ncaption,\ncite,\ncode,\ndfn,\nem,\nstrong,\nth,\nvar {\n font-style: normal;\n font-weight: normal;\n}\nol,\nul {\n list-style: none;\n}\ncaption,\nth {\n text-align: left;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: 100%;\n font-weight: normal;\n}\nq:before,\nq:after {\n content: '';\n}\nabbr,\nacronym {\n border: 0;\n font-variant: normal;\n}\nsup {\n vertical-align: text-top;\n}\nsub {\n vertical-align: text-bottom;\n}\ninput,\ntextarea,\nselect {\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n *font-size: 100%;\n}\nlegend {\n color: #000;\n}\n#yui3-css-stamp.cssreset {\n display: none;\n}\ninput[type=\"button\"] {\n border-radius: 0;\n -webkit-appearance: none;\n}\n*:focus {\n outline: none;\n}\n.dash-spreadsheet-container input,\n.dash-spreadsheet-container table {\n font-size: 13px;\n}\nbody {\n margin: 0;\n padding: 0;\n font-family: sans-serif;\n}\n",""])}]); \ No newline at end of file diff --git a/dash_table/demo.js b/dash_table/demo.js index 98be0b8ce..e43d56cac 100644 --- a/dash_table/demo.js +++ b/dash_table/demo.js @@ -15,4 +15,4 @@ window.dash_table=function(e){var t={};function n(r){if(t[r])return t[r].exports Licensed under the MIT License (MIT), see http://jedwatson.github.io/react-select */ -var D=function(e){return"string"==typeof e?e:null!==e&&JSON.stringify(e)||""},P=s.a.oneOfType([s.a.string,s.a.node]),R=s.a.oneOfType([s.a.string,s.a.number]),T=1,j=function(e,t){var n=void 0===e?"undefined":x(e);if("string"!==n&&"number"!==n&&"boolean"!==n)return e;var r=t.options,o=t.valueKey;if(r)for(var i=0;iu||id.bottom?l.scrollTop=s.offsetTop+s.clientHeight-l.offsetHeight:c.topt.offsetHeight&&t.scrollHeight-t.offsetHeight-t.scrollTop<=0&&this.props.onMenuScrollToBottom()}}},{key:"getOptionLabel",value:function(e){return e[this.props.labelKey]}},{key:"getValueArray",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,n="object"===(void 0===t?"undefined":x(t))?t:this.props;if(n.multi){if("string"==typeof e&&(e=e.split(n.delimiter)),!Array.isArray(e)){if(null===e||void 0===e)return[];e=[e]}return e.map(function(e){return j(e,n)}).filter(function(e){return e})}var r=j(e,n);return r?[r]:[]}},{key:"setValue",value:function(e){var t=this;if(this.props.autoBlur&&this.blurInput(),this.props.required){var n=M(e,this.props.multi);this.setState({required:n})}this.props.simpleValue&&e&&(e=this.props.multi?e.map(function(e){return e[t.props.valueKey]}).join(this.props.delimiter):e[this.props.valueKey]),this.props.onChange&&this.props.onChange(e)}},{key:"selectValue",value:function(e){var t=this;this.props.closeOnSelect&&(this.hasScrolledToOption=!1);var n=this.props.onSelectResetsInput?"":this.state.inputValue;this.props.multi?this.setState({focusedIndex:null,inputValue:this.handleInputValueChange(n),isOpen:!this.props.closeOnSelect},function(){t.getValueArray(t.props.value).some(function(n){return n[t.props.valueKey]===e[t.props.valueKey]})?t.removeValue(e):t.addValue(e)}):this.setState({inputValue:this.handleInputValueChange(n),isOpen:!this.props.closeOnSelect,isPseudoFocused:this.state.isFocused},function(){t.setValue(e)})}},{key:"addValue",value:function(e){var t=this.getValueArray(this.props.value),n=this._visibleOptions.filter(function(e){return!e.disabled}),r=n.indexOf(e);this.setValue(t.concat(e)),n.length-1===r?this.focusOption(n[r-1]):n.length>r&&this.focusOption(n[r+1])}},{key:"popValue",value:function(){var e=this.getValueArray(this.props.value);e.length&&!1!==e[e.length-1].clearableValue&&this.setValue(this.props.multi?e.slice(0,e.length-1):null)}},{key:"removeValue",value:function(e){var t=this,n=this.getValueArray(this.props.value);this.setValue(n.filter(function(n){return n[t.props.valueKey]!==e[t.props.valueKey]})),this.focus()}},{key:"clearValue",value:function(e){e&&"mousedown"===e.type&&0!==e.button||(e.preventDefault(),this.setValue(this.getResetValue()),this.setState({inputValue:this.handleInputValueChange(""),isOpen:!1},this.focus),this._focusAfterClear=!0)}},{key:"getResetValue",value:function(){return void 0!==this.props.resetValue?this.props.resetValue:this.props.multi?[]:null}},{key:"focusOption",value:function(e){this.setState({focusedOption:e})}},{key:"focusNextOption",value:function(){this.focusAdjacentOption("next")}},{key:"focusPreviousOption",value:function(){this.focusAdjacentOption("previous")}},{key:"focusPageUpOption",value:function(){this.focusAdjacentOption("page_up")}},{key:"focusPageDownOption",value:function(){this.focusAdjacentOption("page_down")}},{key:"focusStartOption",value:function(){this.focusAdjacentOption("start")}},{key:"focusEndOption",value:function(){this.focusAdjacentOption("end")}},{key:"focusAdjacentOption",value:function(e){var t=this._visibleOptions.map(function(e,t){return{option:e,index:t}}).filter(function(e){return!e.option.disabled});if(this._scrollToFocusedOptionOnUpdate=!0,!this.state.isOpen){var n={focusedOption:this._focusedOption||(t.length?t["next"===e?0:t.length-1].option:null),isOpen:!0};return this.props.onSelectResetsInput&&(n.inputValue=""),void this.setState(n)}if(t.length){for(var r=-1,o=0;o0?r-=1:r=t.length-1;else if("start"===e)r=0;else if("end"===e)r=t.length-1;else if("page_up"===e){var i=r-this.props.pageSize;r=i<0?0:i}else if("page_down"===e){var u=r+this.props.pageSize;r=u>t.length-1?t.length-1:u}-1===r&&(r=0),this.setState({focusedIndex:t[r].index,focusedOption:t[r].option})}}},{key:"getFocusedOption",value:function(){return this._focusedOption}},{key:"selectFocusedOption",value:function(){if(this._focusedOption)return this.selectValue(this._focusedOption)}},{key:"renderLoading",value:function(){if(this.props.isLoading)return c.a.createElement("span",{className:"Select-loading-zone","aria-hidden":"true"},c.a.createElement("span",{className:"Select-loading"}))}},{key:"renderValue",value:function(e,t){var n=this,r=this.props.valueRenderer||this.getOptionLabel,o=this.props.valueComponent;if(!e.length)return function(e,t,n){var r=e.inputValue,o=e.isPseudoFocused,i=e.isFocused,u=t.onSelectResetsInput;return!r||!u&&!n&&!o&&!i}(this.state,this.props,t)?c.a.createElement("div",{className:"Select-placeholder"},this.props.placeholder):null;var i=this.props.onValueClick?this.handleValueClick:null;return this.props.multi?e.map(function(e,t){return c.a.createElement(o,{disabled:n.props.disabled||!1===e.clearableValue,id:n._instancePrefix+"-value-"+t,instancePrefix:n._instancePrefix,key:"value-"+t+"-"+e[n.props.valueKey],onClick:i,onRemove:n.removeValue,placeholder:n.props.placeholder,value:e},r(e,t),c.a.createElement("span",{className:"Select-aria-only"}," "))}):function(e,t){var n=e.inputValue,r=e.isPseudoFocused,o=e.isFocused,i=t.onSelectResetsInput;return!n||!i&&!(!o&&r||o&&!r)}(this.state,this.props)?(t&&(i=null),c.a.createElement(o,{disabled:this.props.disabled,id:this._instancePrefix+"-value-item",instancePrefix:this._instancePrefix,onClick:i,placeholder:this.props.placeholder,value:e[0]},r(e[0]))):void 0}},{key:"renderInput",value:function(e,t){var n,r=this,i=u()("Select-input",this.props.inputProps.className),a=this.state.isOpen,s=u()((_(n={},this._instancePrefix+"-list",a),_(n,this._instancePrefix+"-backspace-remove-message",this.props.multi&&!this.props.disabled&&this.state.isFocused&&!this.state.inputValue),n)),l=this.state.inputValue;!l||this.props.onSelectResetsInput||this.state.isFocused||(l="");var p=O({},this.props.inputProps,{"aria-activedescendant":a?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value","aria-describedby":this.props["aria-describedby"],"aria-expanded":""+a,"aria-haspopup":""+a,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],"aria-owns":s,className:i,onBlur:this.handleInputBlur,onChange:this.handleInputChange,onFocus:this.handleInputFocus,ref:function(e){return r.input=e},role:"combobox",required:this.state.required,tabIndex:this.props.tabIndex,value:l});if(this.props.inputRenderer)return this.props.inputRenderer(p);if(this.props.disabled||!this.props.searchable){var d=C(this.props.inputProps,[]),f=u()(_({},this._instancePrefix+"-list",a));return c.a.createElement("div",O({},d,{"aria-expanded":a,"aria-owns":f,"aria-activedescendant":a?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value","aria-disabled":""+this.props.disabled,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],className:i,onBlur:this.handleInputBlur,onFocus:this.handleInputFocus,ref:function(e){return r.input=e},role:"combobox",style:{border:0,width:1,display:"inline-block"},tabIndex:this.props.tabIndex||0}))}return this.props.autosize?c.a.createElement(o.a,O({id:this.props.id},p,{minWidth:"5"})):c.a.createElement("div",{className:i,key:"input-wrap",style:{display:"inline-block"}},c.a.createElement("input",O({id:this.props.id},p)))}},{key:"renderClear",value:function(){var e=this.getValueArray(this.props.value);if(this.props.clearable&&e.length&&!this.props.disabled&&!this.props.isLoading){var t=this.props.multi?this.props.clearAllText:this.props.clearValueText,n=this.props.clearRenderer();return c.a.createElement("span",{"aria-label":t,className:"Select-clear-zone",onMouseDown:this.clearValue,onTouchEnd:this.handleTouchEndClearValue,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,title:t},n)}}},{key:"renderArrow",value:function(){if(this.props.arrowRenderer){var e=this.handleMouseDownOnArrow,t=this.state.isOpen,n=this.props.arrowRenderer({onMouseDown:e,isOpen:t});return n?c.a.createElement("span",{className:"Select-arrow-zone",onMouseDown:e},n):null}}},{key:"filterOptions",value:function(e){var t=this.state.inputValue,n=this.props.options||[];if(this.props.filterOptions){var r="function"==typeof this.props.filterOptions?this.props.filterOptions:y;return r(n,t,e,{filterOption:this.props.filterOption,ignoreAccents:this.props.ignoreAccents,ignoreCase:this.props.ignoreCase,labelKey:this.props.labelKey,matchPos:this.props.matchPos,matchProp:this.props.matchProp,trimFilter:this.props.trimFilter,valueKey:this.props.valueKey})}return n}},{key:"onOptionRef",value:function(e,t){t&&(this.focused=e)}},{key:"renderMenu",value:function(e,t,n){return e&&e.length?this.props.menuRenderer({focusedOption:n,focusOption:this.focusOption,inputValue:this.state.inputValue,instancePrefix:this._instancePrefix,labelKey:this.props.labelKey,onFocus:this.focusOption,onOptionRef:this.onOptionRef,onSelect:this.selectValue,optionClassName:this.props.optionClassName,optionComponent:this.props.optionComponent,optionRenderer:this.props.optionRenderer||this.getOptionLabel,options:e,removeValue:this.removeValue,selectValue:this.selectValue,valueArray:t,valueKey:this.props.valueKey}):this.props.noResultsText?c.a.createElement("div",{className:"Select-noresults"},this.props.noResultsText):null}},{key:"renderHiddenField",value:function(e){var t=this;if(this.props.name){if(this.props.joinValues){var n=e.map(function(e){return D(e[t.props.valueKey])}).join(this.props.delimiter);return c.a.createElement("input",{disabled:this.props.disabled,name:this.props.name,ref:function(e){return t.value=e},type:"hidden",value:n})}return e.map(function(e,n){return c.a.createElement("input",{disabled:t.props.disabled,key:"hidden."+n,name:t.props.name,ref:"value"+n,type:"hidden",value:D(e[t.props.valueKey])})})}}},{key:"getFocusableOptionIndex",value:function(e){var t=this._visibleOptions;if(!t.length)return null;var n=this.props.valueKey,r=this.state.focusedOption||e;if(r&&!r.disabled){var o=-1;if(t.some(function(e,t){var i=e[n]===r[n];return i&&(o=t),i}),-1!==o)return o}for(var i=0;i{const u=n.slice(-1)[0],a=n.slice(0,-1),s=r.reduce((e,t)=>e.get(t)||e.set(t,new Map).get(t),t,a);return(s.get(u)||s.set(u,function(e){return(0,o.memoizeOne)((...t)=>e(...t))}(e)).get(u))(...i)}};var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=n(4)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=d(n(1)),i=d(n(3)),u=d(n(42)),a=d(n(43)),s=n(44),l=d(n(10)),c=n(16),p=d(n(18));function d(e){return e&&e.__esModule?e:{default:e}}t.default=class{constructor(e){this.propsFn=e,this.handlers=new Map,this.ops=new Map,this.onChange=((e,t,n,o)=>{i.default.debug("Filter -- onChange",e,o.target.value&&o.target.value.trim());const u=o.target.value.trim();u&&u.length?t.set(e.toString(),u):t.delete(e.toString()),n(r.map(([e,t])=>`${e} ${t}`,r.filter(([e])=>this.isFragmentValid(e),Array.from(t.entries()))).join(" && "))}),this.getEventHandler=((e,t,n,r)=>{const o=this.handlers.get(e)||this.handlers.set(e,new Map).get(e),i=o.get(t)||o.set(t,new Map).get(t);return i.get(r)||i.set(r,e.bind(this,t,n,r)).get(r)})}get props(){return this.propsFn()}respectsBasicSyntax(e,t=!0){const n=[c.LexemeType.BinaryOperator,c.LexemeType.Expression,c.LexemeType.Operand,c.LexemeType.UnaryOperator];if(t&&n.push(c.LexemeType.And),!r.all(e=>r.contains(e.lexeme.name,n),e))return!1;const o=r.map(e=>e.value,r.filter(e=>e.lexeme.name===c.LexemeType.Operand,e)),i=r.uniq(o);return o.length===i.length}isBasicFilter(e,t,n=!0){return e.valid&&t.valid&&this.respectsBasicSyntax(e.lexemes,n)}updateOps(e){const t=(0,l.default)(e),n=(0,p.default)(t);if(!this.isBasicFilter(t,n))return;const r=[n.tree];for(;r.length;){const e=r.pop();e&&(e.lexeme.name===c.LexemeType.UnaryOperator&&e.block?this.ops.set(e.block.value,e.value):e.lexeme.name===c.LexemeType.BinaryOperator&&e.left&&e.right?this.ops.set(e.left.value,`${e.value} ${e.right.value}`):(r.push(e.left),r.push(e.block),r.push(e.right)))}}isFragmentValidOrNull(e){const t=this.ops.get(e);return!t||!t.trim().length||this.isFragmentValid(e)}isFragmentValid(e){const t=this.ops.get(e),n=(0,l.default)(`${e} ${t}`),r=(0,p.default)(n);return r.valid&&this.isBasicFilter(n,r,!1)}createFilters(){var e=this.props;const t=e.columns,n=e.fillerColumns,i=e.filtering,l=e.filtering_settings,c=e.filtering_type,p=e.setFilter;if(!i)return[];this.updateOps(l);const d=r.range(0,n).map(e=>o.default.createElement("th",{key:`offset-${e}`})),f=c===s.FilteringType.Basic?r.addIndex(r.map)((e,t)=>o.default.createElement(u.default,{key:`column-${t}`,classes:`filter column-${t}`,isValid:this.isFragmentValidOrNull(e.id),property:e.id,setFilter:this.getEventHandler(this.onChange,e.id,this.ops,p),value:this.ops.get(e.id)}),t):[o.default.createElement(a.default,{key:"column-0",classes:[],colSpan:t.length,value:"",setFilter:()=>void 0})];return[r.concat(d,f)]}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),o=u(r),i=u(n(20));function u(e){return e&&e.__esModule?e:{default:e}}t.default=class extends r.PureComponent{constructor(e){super(e),this.submit=(e=>{(0,this.props.setFilter)({target:{value:e}})}),this.state={value:e.value}}componentWillReceiveProps(e){const t=e.value;this.state.value!==t&&this.setState({value:t})}render(){var e=this.props;const t=e.classes,n=e.isValid,r=e.value;return o.default.createElement("th",{className:t+(n?"":" invalid")},o.default.createElement(i.default,{value:r,stopPropagation:!0,submit:this.submit}))}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),o=u(r),i=u(n(20));function u(e){return e&&e.__esModule?e:{default:e}}t.default=class extends r.PureComponent{constructor(e){super(e),this.submit=(e=>this.props.setFilter(e))}render(){var e=this.props;const t=e.colSpan,n=e.value;return o.default.createElement("th",{colSpan:t},o.default.createElement(i.default,{stopPropagation:!0,value:n,submit:this.submit}))}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=t.FilteringType=void 0;!function(e){e.Advanced="advanced",e.Basic="basic"}(r||(t.FilteringType=r={}))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=n(4);t.default=(0,o.memoizeOneFactory)((e,t,n,o)=>{switch(e){case!1:return{loadNext:()=>{},loadPrevious:()=>{}};case!0:case"fe":return function(e,t,n){return{loadNext:()=>{let o=Math.floor(n.length/e.page_size);e.current_page>=o||(e=r.merge(e,{current_page:e.current_page+1}),t({pagination_settings:e}))},loadPrevious:()=>{e.current_page<=0||(e=r.merge(e,{current_page:e.current_page-1}),t({pagination_settings:e}))}}}(t,n,o);case"be":return function(e,t){return{loadNext:()=>{e.current_page++,t({pagination_settings:e})},loadPrevious:()=>{e.current_page<=0||(e.current_page--,t({pagination_settings:e}))}}}(t,n);default:throw new Error(`Unknown pagination mode: '${e}'`)}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(4);t.default=(0,r.memoizeOneFactory)((e,t,n,r)=>{switch(e){case!1:return function(e,t){return{dataframe:e,indices:t}}(n,r);case!0:case"fe":return function(e,t,n){let r=Math.min(e.current_page,Math.floor(t.length/e.page_size));const o=e.page_size*r,i=Math.min(o+e.displayed_pages*e.page_size,t.length);return{dataframe:t.slice(o,i),indices:n.slice(o,i)}}(t,n,r);case"be":return function(e,t){return{dataframe:e,indices:t}}(n,r);default:throw new Error(`Unknown pagination mode: '${e}'`)}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=n(4),i=n(7),u=s(i),a=s(n(17));function s(e){return e&&e.__esModule?e:{default:e}}t.default=(0,o.memoizeOneFactory)((e,t,n,o,s=[],l)=>{const c=new Map;if(r.addIndex(r.forEach)((e,t)=>{c.set(e,t)},e),"fe"===t||!0===t){const t=new a.default(n);e=t.isValid?t.filter(e):e}const p=l?e=>""===e||(0,i.defaultIsNully)(e):void 0;return"fe"!==o&&!0!==o||(e=(0,u.default)(e,s,p)),{dataframe:e,indices:r.map(e=>c.get(e),e)}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=n(4);t.default=(0,o.memoizeOneFactory)(e=>r.filter(e=>!e.hidden,e))},function(e,t,n){var r=n(50);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(9)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(8)(!1)).push([e.i,"/**\n * React Select\n * ============\n * Created by Jed Watson and Joss Mackison for KeystoneJS, http://www.keystonejs.com/\n * https://twitter.com/jedwatson https://twitter.com/jossmackison https://twitter.com/keystonejs\n * MIT License: https://github.com/JedWatson/react-select\n*/\n.Select {\n position: relative;\n}\n.Select input::-webkit-contacts-auto-fill-button,\n.Select input::-webkit-credentials-auto-fill-button {\n display: none !important;\n}\n.Select input::-ms-clear {\n display: none !important;\n}\n.Select input::-ms-reveal {\n display: none !important;\n}\n.Select,\n.Select div,\n.Select input,\n.Select span {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n.Select.is-disabled .Select-arrow-zone {\n cursor: default;\n pointer-events: none;\n opacity: 0.35;\n}\n.Select.is-disabled > .Select-control {\n background-color: #f9f9f9;\n}\n.Select.is-disabled > .Select-control:hover {\n box-shadow: none;\n}\n.Select.is-open > .Select-control {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n background: #fff;\n border-color: #b3b3b3 #ccc #d9d9d9;\n}\n.Select.is-open > .Select-control .Select-arrow {\n top: -2px;\n border-color: transparent transparent #999;\n border-width: 0 5px 5px;\n}\n.Select.is-searchable.is-open > .Select-control {\n cursor: text;\n}\n.Select.is-searchable.is-focused:not(.is-open) > .Select-control {\n cursor: text;\n}\n.Select.is-focused > .Select-control {\n background: #fff;\n}\n.Select.is-focused:not(.is-open) > .Select-control {\n border-color: #007eff;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 3px rgba(0, 126, 255, 0.1);\n background: #fff;\n}\n.Select.has-value.is-clearable.Select--single > .Select-control .Select-value {\n padding-right: 42px;\n}\n.Select.has-value.Select--single > .Select-control .Select-value .Select-value-label,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value .Select-value-label {\n color: #333;\n}\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label {\n cursor: pointer;\n text-decoration: none;\n}\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label:hover,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:hover,\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label:focus,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:focus {\n color: #007eff;\n outline: none;\n text-decoration: underline;\n}\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label:focus,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:focus {\n background: #fff;\n}\n.Select.has-value.is-pseudo-focused .Select-input {\n opacity: 0;\n}\n.Select.is-open .Select-arrow,\n.Select .Select-arrow-zone:hover > .Select-arrow {\n border-top-color: #666;\n}\n.Select.Select--rtl {\n direction: rtl;\n text-align: right;\n}\n.Select-control {\n background-color: #fff;\n border-color: #d9d9d9 #ccc #b3b3b3;\n border-radius: 4px;\n border: 1px solid #ccc;\n color: #333;\n cursor: default;\n display: table;\n border-spacing: 0;\n border-collapse: separate;\n height: 36px;\n outline: none;\n overflow: hidden;\n position: relative;\n width: 100%;\n}\n.Select-control:hover {\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06);\n}\n.Select-control .Select-input:focus {\n outline: none;\n background: #fff;\n}\n.Select-placeholder,\n.Select--single > .Select-control .Select-value {\n bottom: 0;\n color: #aaa;\n left: 0;\n line-height: 34px;\n padding-left: 10px;\n padding-right: 10px;\n position: absolute;\n right: 0;\n top: 0;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.Select-input {\n height: 34px;\n padding-left: 10px;\n padding-right: 10px;\n vertical-align: middle;\n}\n.Select-input > input {\n width: 100%;\n background: none transparent;\n border: 0 none;\n box-shadow: none;\n cursor: default;\n display: inline-block;\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n outline: none;\n line-height: 17px;\n /* For IE 8 compatibility */\n padding: 8px 0 12px;\n /* For IE 8 compatibility */\n -webkit-appearance: none;\n}\n.is-focused .Select-input > input {\n cursor: text;\n}\n.has-value.is-pseudo-focused .Select-input {\n opacity: 0;\n}\n.Select-control:not(.is-searchable) > .Select-input {\n outline: none;\n}\n.Select-loading-zone {\n cursor: pointer;\n display: table-cell;\n position: relative;\n text-align: center;\n vertical-align: middle;\n width: 16px;\n}\n.Select-loading {\n -webkit-animation: Select-animation-spin 400ms infinite linear;\n -o-animation: Select-animation-spin 400ms infinite linear;\n animation: Select-animation-spin 400ms infinite linear;\n width: 16px;\n height: 16px;\n box-sizing: border-box;\n border-radius: 50%;\n border: 2px solid #ccc;\n border-right-color: #333;\n display: inline-block;\n position: relative;\n vertical-align: middle;\n}\n.Select-clear-zone {\n -webkit-animation: Select-animation-fadeIn 200ms;\n -o-animation: Select-animation-fadeIn 200ms;\n animation: Select-animation-fadeIn 200ms;\n color: #999;\n cursor: pointer;\n display: table-cell;\n position: relative;\n text-align: center;\n vertical-align: middle;\n width: 17px;\n}\n.Select-clear-zone:hover {\n color: #D0021B;\n}\n.Select-clear {\n display: inline-block;\n font-size: 18px;\n line-height: 1;\n}\n.Select--multi .Select-clear-zone {\n width: 17px;\n}\n.Select-arrow-zone {\n cursor: pointer;\n display: table-cell;\n position: relative;\n text-align: center;\n vertical-align: middle;\n width: 25px;\n padding-right: 5px;\n}\n.Select--rtl .Select-arrow-zone {\n padding-right: 0;\n padding-left: 5px;\n}\n.Select-arrow {\n border-color: #999 transparent transparent;\n border-style: solid;\n border-width: 5px 5px 2.5px;\n display: inline-block;\n height: 0;\n width: 0;\n position: relative;\n}\n.Select-control > *:last-child {\n padding-right: 5px;\n}\n.Select--multi .Select-multi-value-wrapper {\n display: inline-block;\n}\n.Select .Select-aria-only {\n position: absolute;\n display: inline-block;\n height: 1px;\n width: 1px;\n margin: -1px;\n clip: rect(0, 0, 0, 0);\n overflow: hidden;\n float: left;\n}\n@-webkit-keyframes Select-animation-fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes Select-animation-fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n.Select-menu-outer {\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n background-color: #fff;\n border: 1px solid #ccc;\n border-top-color: #e6e6e6;\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06);\n box-sizing: border-box;\n margin-top: -1px;\n max-height: 200px;\n position: absolute;\n left: 0;\n top: 100%;\n width: 100%;\n z-index: 1;\n -webkit-overflow-scrolling: touch;\n}\n.Select-menu {\n max-height: 198px;\n overflow-y: auto;\n}\n.Select-option {\n box-sizing: border-box;\n background-color: #fff;\n color: #666666;\n cursor: pointer;\n display: block;\n padding: 8px 10px;\n}\n.Select-option:last-child {\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.Select-option.is-selected {\n background-color: #f5faff;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 126, 255, 0.04);\n color: #333;\n}\n.Select-option.is-focused {\n background-color: #ebf5ff;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 126, 255, 0.08);\n color: #333;\n}\n.Select-option.is-disabled {\n color: #cccccc;\n cursor: default;\n}\n.Select-noresults {\n box-sizing: border-box;\n color: #999999;\n cursor: default;\n display: block;\n padding: 8px 10px;\n}\n.Select--multi .Select-input {\n vertical-align: middle;\n margin-left: 10px;\n padding: 0;\n}\n.Select--multi.Select--rtl .Select-input {\n margin-left: 0;\n margin-right: 10px;\n}\n.Select--multi.has-value .Select-input {\n margin-left: 5px;\n}\n.Select--multi .Select-value {\n background-color: #ebf5ff;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 126, 255, 0.08);\n border-radius: 2px;\n border: 1px solid #c2e0ff;\n /* Fallback color for IE 8 */\n border: 1px solid rgba(0, 126, 255, 0.24);\n color: #007eff;\n display: inline-block;\n font-size: 0.9em;\n line-height: 1.4;\n margin-left: 5px;\n margin-top: 5px;\n vertical-align: top;\n}\n.Select--multi .Select-value-icon,\n.Select--multi .Select-value-label {\n display: inline-block;\n vertical-align: middle;\n}\n.Select--multi .Select-value-label {\n border-bottom-right-radius: 2px;\n border-top-right-radius: 2px;\n cursor: default;\n padding: 2px 5px;\n}\n.Select--multi a.Select-value-label {\n color: #007eff;\n cursor: pointer;\n text-decoration: none;\n}\n.Select--multi a.Select-value-label:hover {\n text-decoration: underline;\n}\n.Select--multi .Select-value-icon {\n cursor: pointer;\n border-bottom-left-radius: 2px;\n border-top-left-radius: 2px;\n border-right: 1px solid #c2e0ff;\n /* Fallback color for IE 8 */\n border-right: 1px solid rgba(0, 126, 255, 0.24);\n padding: 1px 5px 3px;\n}\n.Select--multi .Select-value-icon:hover,\n.Select--multi .Select-value-icon:focus {\n background-color: #d8eafd;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 113, 230, 0.08);\n color: #0071e6;\n}\n.Select--multi .Select-value-icon:active {\n background-color: #c2e0ff;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 126, 255, 0.24);\n}\n.Select--multi.Select--rtl .Select-value {\n margin-left: 0;\n margin-right: 5px;\n}\n.Select--multi.Select--rtl .Select-value-icon {\n border-right: none;\n border-left: 1px solid #c2e0ff;\n /* Fallback color for IE 8 */\n border-left: 1px solid rgba(0, 126, 255, 0.24);\n}\n.Select--multi.is-disabled .Select-value {\n background-color: #fcfcfc;\n border: 1px solid #e3e3e3;\n color: #333;\n}\n.Select--multi.is-disabled .Select-value-icon {\n cursor: not-allowed;\n border-right: 1px solid #e3e3e3;\n}\n.Select--multi.is-disabled .Select-value-icon:hover,\n.Select--multi.is-disabled .Select-value-icon:focus,\n.Select--multi.is-disabled .Select-value-icon:active {\n background-color: #fcfcfc;\n}\n@keyframes Select-animation-spin {\n to {\n transform: rotate(1turn);\n }\n}\n@-webkit-keyframes Select-animation-spin {\n to {\n -webkit-transform: rotate(1turn);\n }\n}\n",""])},function(e,t){e.exports=function(e){var t="undefined"!=typeof window&&window.location;if(!t)throw new Error("fixUrls requires window.location");if(!e||"string"!=typeof e)return e;var n=t.protocol+"//"+t.host,r=n+t.pathname.replace(/\/[^\/]*$/,"/");return e.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi,function(e,t){var o,i=t.trim().replace(/^"(.*)"$/,function(e,t){return t}).replace(/^'(.*)'$/,function(e,t){return t});return/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(i)?e:(o=0===i.indexOf("//")?i:0===i.indexOf("/")?n+i:r+i.replace(/^\.\//,""),"url("+JSON.stringify(o)+")")})}},function(e,t,n){var r=n(53);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(9)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(8)(!1)).push([e.i,".dash-spreadsheet.dash-freeze-left {\n width: auto;\n width: fit-content;\n width: -moz-fit-content;\n width: -webkit-fit-content;\n max-width: 500px;\n}\n.dash-spreadsheet.dash-freeze-top {\n width: auto;\n width: fit-content;\n width: -moz-fit-content;\n width: -webkit-fit-content;\n max-height: 500px;\n}\n.dash-spreadsheet-container {\n display: flex;\n flex-direction: row;\n position: relative;\n}\n.dash-spreadsheet-inner {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n}\n.dash-spreadsheet-inner.dash-freeze-left,\n.dash-spreadsheet-inner.dash-freeze-top {\n overflow: hidden !important;\n}\n.dash-spreadsheet-inner *,\n.dash-spreadsheet-inner *:after,\n.dash-spreadsheet-inner *:before {\n box-sizing: inherit;\n}\n.dash-spreadsheet-inner .Select {\n overflow: hidden;\n position: static;\n}\n.dash-spreadsheet-inner .Select,\n.dash-spreadsheet-inner .Select-control {\n background-color: inherit;\n}\n.dash-spreadsheet-inner .Select-value {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-top: -2px;\n}\n.dash-spreadsheet-inner .marker-row tr {\n visibility: hidden !important;\n}\n.dash-spreadsheet-inner .marker-row td,\n.dash-spreadsheet-inner .marker-row th {\n height: 0 !important;\n padding: 0 !important;\n margin: 0 !important;\n}\n.dash-spreadsheet-inner .row-0 {\n display: flex;\n flex: 0 0 auto;\n flex-direction: row;\n}\n.dash-spreadsheet-inner .row-1 {\n display: flex;\n flex-direction: row;\n overflow: scroll;\n}\n.dash-spreadsheet-inner .cell-0-0,\n.dash-spreadsheet-inner .cell-1-0 {\n flex: 0 0 auto;\n left: 0;\n position: sticky;\n z-index: 400;\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr td:first-of-type,\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr:first-of-type td,\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr:first-of-type td:first-of-type,\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr:first-of-type th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr td:first-of-type,\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr:first-of-type td,\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr:first-of-type td:first-of-type,\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr:first-of-type th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-1 tr:first-of-type td,\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-1 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr:first-of-type td,\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr:first-of-type td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr:first-of-type th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-1-1 tr td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-1-1 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr:first-of-type td,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr:first-of-type td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr:first-of-type th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-1 tr:first-of-type td,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-1 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-1-0 tr td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-1-0 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner .cell-0-1 {\n z-index: 300;\n flex: 0 0 auto;\n}\n.dash-spreadsheet-inner .cell-1-1 {\n flex: 0 0 auto;\n}\n.dash-spreadsheet-inner .cell td,\n.dash-spreadsheet-inner .cell th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner .cell td:focus,\n.dash-spreadsheet-inner .cell th:focus {\n outline: none;\n}\n.dash-spreadsheet-inner .filter.invalid {\n box-shadow: inset 1px 0px 0px 0px red, inset 0px 1px 0px 0px red, inset -1px 0px 0px red, inset 0px -1px 0px 0px red;\n background-color: pink;\n}\n.dash-spreadsheet-inner .selected-row td,\n.dash-spreadsheet-inner .selected-row th {\n background-color: var(--selected-row);\n}\n.dash-spreadsheet-inner tr {\n background-color: white;\n}\n.dash-spreadsheet-inner td {\n background-color: inherit;\n}\n.dash-spreadsheet-inner td.cell--selected {\n background-color: var(--selected-background);\n}\n.dash-spreadsheet-inner td.focused {\n box-shadow: 1px 0px 0px 0px var(--accent), 0px 1px 0px 0px var(--accent), 0 0px 0px var(--accent), 0px 0 0px 0px var(--accent);\n border: 1px solid var(--accent);\n margin: -1px;\n z-index: 200;\n}\n.dash-spreadsheet-inner td .dash-cell-value {\n height: 100%;\n width: 100%;\n}\n.dash-spreadsheet-inner td div.dash-cell-value {\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n.dash-spreadsheet-inner td,\n.dash-spreadsheet-inner th {\n padding: 2px;\n white-space: nowrap;\n overflow-x: hidden;\n text-overflow: ellipsis;\n height: 30px;\n text-align: right;\n}\n.dash-spreadsheet-inner th .column-header--edit,\n.dash-spreadsheet-inner th .column-header--delete,\n.dash-spreadsheet-inner th .sort {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: default;\n cursor: pointer;\n}\n.dash-spreadsheet-inner textarea {\n white-space: pre;\n}\n.dash-spreadsheet-inner table {\n border-collapse: collapse;\n font-family: monospace;\n --accent: hotpink;\n --border: lightgrey;\n --text-color: #3c3c3c;\n --hover: #fdfdfd;\n --background-color-ellipses: #fdfdfd;\n --faded-text: #fafafa;\n --faded-text-header: #b4b4b4;\n --selected-background: rgba(255, 65, 54, 0.2);\n --faded-dropdown: #f0f0f0;\n --selected-row: #fff0ff;\n --muted: #c8c8c8;\n}\n/* focus happens after copying to clipboard */\n.dash-spreadsheet-inner table:focus {\n outline: none;\n}\n.dash-spreadsheet-inner thead {\n display: table-row-group;\n}\n.elip {\n text-align: center;\n width: 100%;\n background-color: var(--background-color-ellipses);\n}\n.dash-spreadsheet-inner td.dropdown {\n /*\n * To view the dropdown's contents, we need\n * overflow-y: visible.\n * Unfortunately, overflow-x: hidden and overflow-y: visible\n * can't both be set at the same time.\n * So, we have to make both overflow-x: visible and overflow-y: visble\n *\n * See https://stackoverflow.com/questions/6421966/\n *\n * There might be another solution with parent divs, but I haven't\n * tried it.\n */\n overflow-x: visible;\n}\n.dash-spreadsheet-inner th {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner :not(.cell--selected) tr:hover,\ntr:hover input :not(.cell--selected) {\n background-color: var(--hover);\n}\n.dash-spreadsheet-inner th {\n background-color: #fafafa;\n}\n.sort {\n cursor: pointer;\n float: left;\n color: var(--faded-text-header);\n font-size: 20px;\n}\nth:hover .sort {\n color: var(--accent);\n}\n.sort:hover {\n text-decoration: underline;\n}\n.expanded-row--empty-cell {\n box-shadow: none;\n background-color: transparent;\n}\n.expanded-row {\n text-align: center;\n}\n.dash-spreadsheet-inner input:not([type=radio]):not([type=checkbox]) {\n padding: 0px;\n margin: 0px;\n height: calc(100% - 1px);\n width: calc(100% - 1px);\n line-height: 30px;\n border: none;\n font-family: inherit;\n text-align: right;\n box-sizing: border-box;\n color: var(--text-color);\n background-color: transparent;\n /* so as to not overlay the box shadow */\n /* browser's default text-shadow is `$color 0px 0px 0px;`\n * for `input`, which makes it look a little bit heavier than dropdowns\n * or bare `td`\n */\n text-shadow: none;\n}\n.dash-spreadsheet-inner input.unfocused {\n color: transparent;\n text-shadow: 0 0 0 var(--text-color);\n cursor: default;\n}\n.dash-spreadsheet-inner input.unfocused:focus {\n outline: none;\n}\n.numeric {\n font-family: monospace;\n}\n.toggle-row {\n border: none;\n box-shadow: none;\n width: 10px;\n padding-left: 10px;\n padding-right: 10px;\n cursor: pointer;\n color: var(--faded-text);\n}\n.toggle-row--expanded {\n color: var(--accent);\n}\n.dash-spreadsheet-inner tr:hover .toggle-row {\n color: var(--accent);\n}\n.cell--uneditable,\n.cell--uneditable input {\n cursor: not-allowed;\n}\n.expanded-row {\n box-shadow: inset 2px 0px 0px 0px var(--accent), inset -1px 0px 0px 0px var(--border);\n /* inset 0px 1px 0px 0px var(--border); */\n}\n.dash-spreadsheet-inner .dash-delete-cell,\n.dash-spreadsheet-inner .dash-delete-header {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: default;\n font-size: 1.3rem;\n text-align: center;\n cursor: pointer;\n color: var(--muted);\n}\n.dash-spreadsheet-inner .dash-delete-cell:hover,\n.dash-spreadsheet-inner .dash-delete-header:hover {\n color: var(--accent);\n}\n.dash-spreadsheet-inner .column-header--edit {\n float: left;\n opacity: 0.1;\n padding-left: 2px;\n padding-right: 2px;\n cursor: pointer;\n}\n.dash-spreadsheet-inner th:hover .column-header--edit {\n color: var(--accent);\n opacity: 1;\n}\n.dash-spreadsheet-inner .column-header--delete {\n float: left;\n opacity: 0.1;\n padding-left: 2px;\n padding-right: 2px;\n cursor: pointer;\n}\n.dash-spreadsheet-inner th:hover .column-header--delete {\n color: var(--accent);\n opacity: 1;\n}\n",""])},function(e,t,n){var r=n(55);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(9)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(8)(!1)).push([e.i,".dash-spreadsheet .Select,\n.dash-spreadsheet .Select-control {\n border: none;\n cursor: pointer;\n height: 30px; /* matches the td height and line-height */\n border: none;\n}\n\n.dash-spreadsheet .Select-placeholder,\n.dash-spreadsheet .Select--single > .Select-control .Select-value {\n height: 100%;\n line-height: inherit;\n}\n\n.dash-spreadsheet .Select.has-value.Select--single > .Select-control .Select-value .Select-value-label,\n.dash-spreadsheet .Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value .Select-value-label {\n color: var(--text-color);\n}\n\n.dash-spreadsheet .Select:hover,\n.dash-spreadsheet .Select-control:hover {\n border: none;\n box-shadow: none;\n cursor: pointer;\n}\n\n.dash-spreadsheet .Select-menu-outer {\n z-index: 100;\n}\n\n.dash-spreadsheet .Select-arrow {\n border-top-color: var(--faded-dropdown);\n border-left-color: transparent;\n border-right-color: transparent;\n border-bottom-color: transparent;\n}\n\n.dash-spreadsheet .Select-control:hover .Select-arrow {\n border-top-color: var(--accent);\n border-left-color: transparent;\n border-right-color: transparent;\n border-bottom-color: transparent;\n}\n\n.dash-spreadsheet .is-open > .Select-control .Select-arrow {\n border-bottom-color: var(--background-color-8-react-select);\n border-left-color: transparent;\n border-right-color: transparent;\n border-top-color: transparent;\n}\n\n.dash-spreadsheet .Select--multi .Select-value,\n.dash-spreadsheet .Select--multi a.Select-value-label {\n color: var(--color-8-react-select);\n}\n\n.dash-spreadsheet .Select {\n border-radius: 0;\n}\n\n.dash-spreadsheet .Select.is-disabled > .Select-control {\n border: none;\n}\n\n.dash-spreadsheet .Select--multi .Select-value-icon:hover,\n.dash-spreadsheet .Select--multi .Select-value-icon:focus {\n font-weight: bold;\n}\n\n.dash-spreadsheet .Select.is-disabled .Select-control {\n cursor: not-allowed;\n}\n\n.dash-spreadsheet .Select-menu-outer {\n background-color: white;\n border: none;\n border-bottom: thin var(--border) solid;\n border-radius: 0;\n border-top: none;\n}\n\n.dash-spreadsheet .Select-option {\n background-color: inherit;\n color: var(--accent);\n}\n\n.dash-spreadsheet .Select-option:hover {\n font-weight: bold;\n color: var(--accent);\n background-color: var(--hover);\n}\n\n.dash-spreadsheet .Select.is-focused:not(.is-open) > .Select-control {\n border: none;\n -webkit-box-shadow: none;\n box-shadow: none;\n background: #fff;\n}\n\n.dash-spreadsheet .Select-option.is-focused {\n background-color: white;\n color: var(--accent);\n font-weight: bold;\n}\n\n.dash-spreadsheet .Select-clear {\n color: transparent;\n}\n.Select:hover .Select-clear {\n color: var(--accent);\n}\n\n.dash-spreadsheet .Select-control {\n padding-left: 2px;\n}\n\n.dash-spreadsheet .cell--selected .Select-control {\n background-color: var(--selected-background);\n border-radius: 0;\n}\n",""])},function(e,t,n){var r=n(57);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(9)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(8)(!1)).push([e.i,"/*RESET CSS*/\nhtml {\n color: #000;\n background: #FFF;\n}\nbody,\ndiv,\ndl,\ndt,\ndd,\nul,\nol,\nli,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\npre,\ncode,\nform,\nfieldset,\nlegend,\ninput,\ntextarea,\np,\nblockquote,\nth,\ntd {\n margin: 0;\n padding: 0;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\nfieldset,\nimg {\n border: 0;\n}\naddress,\ncaption,\ncite,\ncode,\ndfn,\nem,\nstrong,\nth,\nvar {\n font-style: normal;\n font-weight: normal;\n}\nol,\nul {\n list-style: none;\n}\ncaption,\nth {\n text-align: left;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: 100%;\n font-weight: normal;\n}\nq:before,\nq:after {\n content: '';\n}\nabbr,\nacronym {\n border: 0;\n font-variant: normal;\n}\nsup {\n vertical-align: text-top;\n}\nsub {\n vertical-align: text-bottom;\n}\ninput,\ntextarea,\nselect {\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n *font-size: 100%;\n}\nlegend {\n color: #000;\n}\n#yui3-css-stamp.cssreset {\n display: none;\n}\ninput[type=\"button\"] {\n border-radius: 0;\n -webkit-appearance: none;\n}\n*:focus {\n outline: none;\n}\n.dash-spreadsheet-container input,\n.dash-spreadsheet-container table {\n font-size: 13px;\n}\nbody {\n margin: 0;\n padding: 0;\n font-family: sans-serif;\n}\n",""])},function(e,t,n){n(59),e.exports=n(62)},function(e,t,n){"use strict";var r=s(n(1)),o=s(n(6)),i=s(n(60)),u=n(3),a=s(u);function s(e){return e&&e.__esModule?e:{default:e}}a.default.setDebugLevel(u.DebugLevel.DEBUG),a.default.setLogLevel(u.LogLevel.WARNING),o.default.render(r.default.createElement(i.default,null),document.getElementById("root"))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;tJSON.parse(JSON.stringify(e));class f extends i.Component{constructor(){super();const e=d(l.mockData.dataframe);this.state={filter:"",tableProps:{id:"table",dataframe:e,columns:d(l.mockData.columns).map(e=>o.merge(e,{editable_name:!0,deletable:!0})),editable:!0,sorting:!0,n_fixed_rows:4,n_fixed_columns:2,merge_duplicate_headers:!1,row_deletable:!0,row_selectable:"single",column_static_dropdown:[{id:"bbb",dropdown:["Humid","Wet","Snowy","Tropical Beaches"].map(e=>({label:e,value:e}))}],table_style:[{selector:".dash-spreadsheet.dash-freeze-left",rule:"width: 1000px; max-width: 1000px;"}]}};const t=(0,c.memoizeOne)(()=>e=>{console.info("---\x3e",e),this.setState(t=>({tableProps:o.merge(t.tableProps,e)}))});Object.defineProperty(this,"setProps",{get:()=>t()})}render(){return u.default.createElement(s.Table,r({setProps:this.setProps},this.state.tableProps,{filtering:"fe"}))}}f.propTypes={value:a.default.any},t.default=f},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.miniData=t.mockDataSimple=t.mockData=void 0;var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2));const o=5e3;t.mockData=i([{id:"rows",type:"numeric",width:40,editable:!1,data:u(e=>e)},{id:"ccc",name:["City","Canada","Toronto"],type:"numeric",width:150,data:u(e=>e)},{id:"ddd",name:["City","Canada","Montréal"],type:"numeric",width:150,data:u(e=>100*e)},{id:"eee",name:["City","America","New York City"],type:"numeric",width:150,data:u(e=>e)},{id:"fff",name:["City","America","Boston"],type:"numeric",width:150,data:u(e=>e+1)},{id:"ggg",name:["City","France","Paris"],type:"numeric",editable:!0,width:150,data:u(e=>10*e)},{id:"bbb",name:["","Weather","Climate"],type:"dropdown",clearable:!0,width:200,data:u(e=>["Humid","Wet","Snowy","Tropical Beaches"][e%4])},{id:"aaa",name:["","Weather","Temperature"],type:"numeric",width:150,data:u(e=>e+1)}]),t.mockDataSimple=i([{id:"aaa",name:"Temperature",type:"numeric",width:150,data:u(e=>e+1)},{id:"bbb",name:"Climate",type:"numeric",options:["Humid","Wet","Snowy","Tropical Beaches"].map(e=>({label:e,value:e})),clearable:!0,width:200,data:u(e=>["Humid","Wet","Snowy","Tropical Beaches"][e%4])}]),t.miniData=i([{id:"aaa",name:"cheese",data:[1,2,3]},{id:"bbb",name:"tomato",data:[3,2,1]}]);function i(e){const t={columns:[],dataframe:[]};return e.forEach(e=>{e.data.forEach((n,r)=>{t.dataframe[r]||(t.dataframe[r]={}),t.dataframe[r][e.id]=n}),t.columns.push(r.dissoc("data",e))}),t}function u(e,t=o){return r.range(1,t).map(e)}},function(e,t,n){e.exports=n.p+"index.html"}]); \ No newline at end of file +var D=function(e){return"string"==typeof e?e:null!==e&&JSON.stringify(e)||""},P=s.a.oneOfType([s.a.string,s.a.node]),R=s.a.oneOfType([s.a.string,s.a.number]),T=1,j=function(e,t){var n=void 0===e?"undefined":x(e);if("string"!==n&&"number"!==n&&"boolean"!==n)return e;var r=t.options,o=t.valueKey;if(r)for(var i=0;iu||id.bottom?l.scrollTop=s.offsetTop+s.clientHeight-l.offsetHeight:c.topt.offsetHeight&&t.scrollHeight-t.offsetHeight-t.scrollTop<=0&&this.props.onMenuScrollToBottom()}}},{key:"getOptionLabel",value:function(e){return e[this.props.labelKey]}},{key:"getValueArray",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,n="object"===(void 0===t?"undefined":x(t))?t:this.props;if(n.multi){if("string"==typeof e&&(e=e.split(n.delimiter)),!Array.isArray(e)){if(null===e||void 0===e)return[];e=[e]}return e.map(function(e){return j(e,n)}).filter(function(e){return e})}var r=j(e,n);return r?[r]:[]}},{key:"setValue",value:function(e){var t=this;if(this.props.autoBlur&&this.blurInput(),this.props.required){var n=M(e,this.props.multi);this.setState({required:n})}this.props.simpleValue&&e&&(e=this.props.multi?e.map(function(e){return e[t.props.valueKey]}).join(this.props.delimiter):e[this.props.valueKey]),this.props.onChange&&this.props.onChange(e)}},{key:"selectValue",value:function(e){var t=this;this.props.closeOnSelect&&(this.hasScrolledToOption=!1);var n=this.props.onSelectResetsInput?"":this.state.inputValue;this.props.multi?this.setState({focusedIndex:null,inputValue:this.handleInputValueChange(n),isOpen:!this.props.closeOnSelect},function(){t.getValueArray(t.props.value).some(function(n){return n[t.props.valueKey]===e[t.props.valueKey]})?t.removeValue(e):t.addValue(e)}):this.setState({inputValue:this.handleInputValueChange(n),isOpen:!this.props.closeOnSelect,isPseudoFocused:this.state.isFocused},function(){t.setValue(e)})}},{key:"addValue",value:function(e){var t=this.getValueArray(this.props.value),n=this._visibleOptions.filter(function(e){return!e.disabled}),r=n.indexOf(e);this.setValue(t.concat(e)),n.length-1===r?this.focusOption(n[r-1]):n.length>r&&this.focusOption(n[r+1])}},{key:"popValue",value:function(){var e=this.getValueArray(this.props.value);e.length&&!1!==e[e.length-1].clearableValue&&this.setValue(this.props.multi?e.slice(0,e.length-1):null)}},{key:"removeValue",value:function(e){var t=this,n=this.getValueArray(this.props.value);this.setValue(n.filter(function(n){return n[t.props.valueKey]!==e[t.props.valueKey]})),this.focus()}},{key:"clearValue",value:function(e){e&&"mousedown"===e.type&&0!==e.button||(e.preventDefault(),this.setValue(this.getResetValue()),this.setState({inputValue:this.handleInputValueChange(""),isOpen:!1},this.focus),this._focusAfterClear=!0)}},{key:"getResetValue",value:function(){return void 0!==this.props.resetValue?this.props.resetValue:this.props.multi?[]:null}},{key:"focusOption",value:function(e){this.setState({focusedOption:e})}},{key:"focusNextOption",value:function(){this.focusAdjacentOption("next")}},{key:"focusPreviousOption",value:function(){this.focusAdjacentOption("previous")}},{key:"focusPageUpOption",value:function(){this.focusAdjacentOption("page_up")}},{key:"focusPageDownOption",value:function(){this.focusAdjacentOption("page_down")}},{key:"focusStartOption",value:function(){this.focusAdjacentOption("start")}},{key:"focusEndOption",value:function(){this.focusAdjacentOption("end")}},{key:"focusAdjacentOption",value:function(e){var t=this._visibleOptions.map(function(e,t){return{option:e,index:t}}).filter(function(e){return!e.option.disabled});if(this._scrollToFocusedOptionOnUpdate=!0,!this.state.isOpen){var n={focusedOption:this._focusedOption||(t.length?t["next"===e?0:t.length-1].option:null),isOpen:!0};return this.props.onSelectResetsInput&&(n.inputValue=""),void this.setState(n)}if(t.length){for(var r=-1,o=0;o0?r-=1:r=t.length-1;else if("start"===e)r=0;else if("end"===e)r=t.length-1;else if("page_up"===e){var i=r-this.props.pageSize;r=i<0?0:i}else if("page_down"===e){var u=r+this.props.pageSize;r=u>t.length-1?t.length-1:u}-1===r&&(r=0),this.setState({focusedIndex:t[r].index,focusedOption:t[r].option})}}},{key:"getFocusedOption",value:function(){return this._focusedOption}},{key:"selectFocusedOption",value:function(){if(this._focusedOption)return this.selectValue(this._focusedOption)}},{key:"renderLoading",value:function(){if(this.props.isLoading)return c.a.createElement("span",{className:"Select-loading-zone","aria-hidden":"true"},c.a.createElement("span",{className:"Select-loading"}))}},{key:"renderValue",value:function(e,t){var n=this,r=this.props.valueRenderer||this.getOptionLabel,o=this.props.valueComponent;if(!e.length)return function(e,t,n){var r=e.inputValue,o=e.isPseudoFocused,i=e.isFocused,u=t.onSelectResetsInput;return!r||!u&&!n&&!o&&!i}(this.state,this.props,t)?c.a.createElement("div",{className:"Select-placeholder"},this.props.placeholder):null;var i=this.props.onValueClick?this.handleValueClick:null;return this.props.multi?e.map(function(e,t){return c.a.createElement(o,{disabled:n.props.disabled||!1===e.clearableValue,id:n._instancePrefix+"-value-"+t,instancePrefix:n._instancePrefix,key:"value-"+t+"-"+e[n.props.valueKey],onClick:i,onRemove:n.removeValue,placeholder:n.props.placeholder,value:e},r(e,t),c.a.createElement("span",{className:"Select-aria-only"}," "))}):function(e,t){var n=e.inputValue,r=e.isPseudoFocused,o=e.isFocused,i=t.onSelectResetsInput;return!n||!i&&!(!o&&r||o&&!r)}(this.state,this.props)?(t&&(i=null),c.a.createElement(o,{disabled:this.props.disabled,id:this._instancePrefix+"-value-item",instancePrefix:this._instancePrefix,onClick:i,placeholder:this.props.placeholder,value:e[0]},r(e[0]))):void 0}},{key:"renderInput",value:function(e,t){var n,r=this,i=u()("Select-input",this.props.inputProps.className),a=this.state.isOpen,s=u()((_(n={},this._instancePrefix+"-list",a),_(n,this._instancePrefix+"-backspace-remove-message",this.props.multi&&!this.props.disabled&&this.state.isFocused&&!this.state.inputValue),n)),l=this.state.inputValue;!l||this.props.onSelectResetsInput||this.state.isFocused||(l="");var p=O({},this.props.inputProps,{"aria-activedescendant":a?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value","aria-describedby":this.props["aria-describedby"],"aria-expanded":""+a,"aria-haspopup":""+a,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],"aria-owns":s,className:i,onBlur:this.handleInputBlur,onChange:this.handleInputChange,onFocus:this.handleInputFocus,ref:function(e){return r.input=e},role:"combobox",required:this.state.required,tabIndex:this.props.tabIndex,value:l});if(this.props.inputRenderer)return this.props.inputRenderer(p);if(this.props.disabled||!this.props.searchable){var d=C(this.props.inputProps,[]),f=u()(_({},this._instancePrefix+"-list",a));return c.a.createElement("div",O({},d,{"aria-expanded":a,"aria-owns":f,"aria-activedescendant":a?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value","aria-disabled":""+this.props.disabled,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],className:i,onBlur:this.handleInputBlur,onFocus:this.handleInputFocus,ref:function(e){return r.input=e},role:"combobox",style:{border:0,width:1,display:"inline-block"},tabIndex:this.props.tabIndex||0}))}return this.props.autosize?c.a.createElement(o.a,O({id:this.props.id},p,{minWidth:"5"})):c.a.createElement("div",{className:i,key:"input-wrap",style:{display:"inline-block"}},c.a.createElement("input",O({id:this.props.id},p)))}},{key:"renderClear",value:function(){var e=this.getValueArray(this.props.value);if(this.props.clearable&&e.length&&!this.props.disabled&&!this.props.isLoading){var t=this.props.multi?this.props.clearAllText:this.props.clearValueText,n=this.props.clearRenderer();return c.a.createElement("span",{"aria-label":t,className:"Select-clear-zone",onMouseDown:this.clearValue,onTouchEnd:this.handleTouchEndClearValue,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,title:t},n)}}},{key:"renderArrow",value:function(){if(this.props.arrowRenderer){var e=this.handleMouseDownOnArrow,t=this.state.isOpen,n=this.props.arrowRenderer({onMouseDown:e,isOpen:t});return n?c.a.createElement("span",{className:"Select-arrow-zone",onMouseDown:e},n):null}}},{key:"filterOptions",value:function(e){var t=this.state.inputValue,n=this.props.options||[];if(this.props.filterOptions){var r="function"==typeof this.props.filterOptions?this.props.filterOptions:y;return r(n,t,e,{filterOption:this.props.filterOption,ignoreAccents:this.props.ignoreAccents,ignoreCase:this.props.ignoreCase,labelKey:this.props.labelKey,matchPos:this.props.matchPos,matchProp:this.props.matchProp,trimFilter:this.props.trimFilter,valueKey:this.props.valueKey})}return n}},{key:"onOptionRef",value:function(e,t){t&&(this.focused=e)}},{key:"renderMenu",value:function(e,t,n){return e&&e.length?this.props.menuRenderer({focusedOption:n,focusOption:this.focusOption,inputValue:this.state.inputValue,instancePrefix:this._instancePrefix,labelKey:this.props.labelKey,onFocus:this.focusOption,onOptionRef:this.onOptionRef,onSelect:this.selectValue,optionClassName:this.props.optionClassName,optionComponent:this.props.optionComponent,optionRenderer:this.props.optionRenderer||this.getOptionLabel,options:e,removeValue:this.removeValue,selectValue:this.selectValue,valueArray:t,valueKey:this.props.valueKey}):this.props.noResultsText?c.a.createElement("div",{className:"Select-noresults"},this.props.noResultsText):null}},{key:"renderHiddenField",value:function(e){var t=this;if(this.props.name){if(this.props.joinValues){var n=e.map(function(e){return D(e[t.props.valueKey])}).join(this.props.delimiter);return c.a.createElement("input",{disabled:this.props.disabled,name:this.props.name,ref:function(e){return t.value=e},type:"hidden",value:n})}return e.map(function(e,n){return c.a.createElement("input",{disabled:t.props.disabled,key:"hidden."+n,name:t.props.name,ref:"value"+n,type:"hidden",value:D(e[t.props.valueKey])})})}}},{key:"getFocusableOptionIndex",value:function(e){var t=this._visibleOptions;if(!t.length)return null;var n=this.props.valueKey,r=this.state.focusedOption||e;if(r&&!r.disabled){var o=-1;if(t.some(function(e,t){var i=e[n]===r[n];return i&&(o=t),i}),-1!==o)return o}for(var i=0;i{const u=n.slice(-1)[0],a=n.slice(0,-1),s=r.reduce((e,t)=>e.get(t)||e.set(t,new Map).get(t),t,a);return(s.get(u)||s.set(u,function(e){return(0,o.memoizeOne)((...t)=>e(...t))}(e)).get(u))(...i)}};var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=n(4)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=d(n(1)),i=d(n(3)),u=d(n(42)),a=d(n(43)),s=n(44),l=d(n(10)),c=n(16),p=d(n(18));function d(e){return e&&e.__esModule?e:{default:e}}t.default=class{constructor(e){this.propsFn=e,this.handlers=new Map,this.ops=new Map,this.onChange=((e,t,n,o)=>{i.default.debug("Filter -- onChange",e,o.target.value&&o.target.value.trim());const u=o.target.value.trim();u&&u.length?t.set(e.toString(),u):t.delete(e.toString()),n(r.map(([e,t])=>`${e} ${t}`,r.filter(([e])=>this.isFragmentValid(e),Array.from(t.entries()))).join(" && "))}),this.getEventHandler=((e,t,n,r)=>{const o=this.handlers.get(e)||this.handlers.set(e,new Map).get(e),i=o.get(t)||o.set(t,new Map).get(t);return i.get(r)||i.set(r,e.bind(this,t,n,r)).get(r)})}get props(){return this.propsFn()}respectsBasicSyntax(e,t=!0){const n=[c.LexemeType.BinaryOperator,c.LexemeType.Expression,c.LexemeType.Operand,c.LexemeType.UnaryOperator];if(t&&n.push(c.LexemeType.And),!r.all(e=>r.contains(e.lexeme.name,n),e))return!1;const o=r.map(e=>e.value,r.filter(e=>e.lexeme.name===c.LexemeType.Operand,e)),i=r.uniq(o);return o.length===i.length}isBasicFilter(e,t,n=!0){return e.valid&&t.valid&&this.respectsBasicSyntax(e.lexemes,n)}updateOps(e){const t=(0,l.default)(e),n=(0,p.default)(t);if(!this.isBasicFilter(t,n))return;const r=[n.tree];for(;r.length;){const e=r.pop();e&&(e.lexeme.name===c.LexemeType.UnaryOperator&&e.block?this.ops.set(e.block.value,e.value):e.lexeme.name===c.LexemeType.BinaryOperator&&e.left&&e.right?this.ops.set(e.left.value,`${e.value} ${e.right.value}`):(r.push(e.left),r.push(e.block),r.push(e.right)))}}isFragmentValidOrNull(e){const t=this.ops.get(e.toString());return!t||!t.trim().length||this.isFragmentValid(e)}isFragmentValid(e){const t=this.ops.get(e.toString()),n=(0,l.default)(`${e} ${t}`),r=(0,p.default)(n);return r.valid&&this.isBasicFilter(n,r,!1)}createFilters(){var e=this.props;const t=e.columns,n=e.fillerColumns,i=e.filtering,l=e.filtering_settings,c=e.filtering_type,p=e.setFilter;if(!i)return[];this.updateOps(l);const d=r.range(0,n).map(e=>o.default.createElement("th",{key:`offset-${e}`})),f=c===s.FilteringType.Basic?r.addIndex(r.map)((e,t)=>o.default.createElement(u.default,{key:`column-${t}`,classes:`filter column-${t}`,isValid:this.isFragmentValidOrNull(e.id),property:e.id,setFilter:this.getEventHandler(this.onChange,e.id,this.ops,p),value:this.ops.get(e.id.toString())}),t):[o.default.createElement(a.default,{key:"column-0",classes:[],colSpan:t.length,value:"",setFilter:()=>void 0})];return[r.concat(d,f)]}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),o=u(r),i=u(n(20));function u(e){return e&&e.__esModule?e:{default:e}}t.default=class extends r.PureComponent{constructor(e){super(e),this.submit=(e=>{(0,this.props.setFilter)({target:{value:e}})}),this.state={value:e.value}}componentWillReceiveProps(e){const t=e.value;this.state.value!==t&&this.setState({value:t})}render(){var e=this.props;const t=e.classes,n=e.isValid,r=e.value;return o.default.createElement("th",{className:t+(n?"":" invalid")},o.default.createElement(i.default,{value:r,stopPropagation:!0,submit:this.submit}))}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),o=u(r),i=u(n(20));function u(e){return e&&e.__esModule?e:{default:e}}t.default=class extends r.PureComponent{constructor(e){super(e),this.submit=(e=>this.props.setFilter(e))}render(){var e=this.props;const t=e.colSpan,n=e.value;return o.default.createElement("th",{colSpan:t},o.default.createElement(i.default,{stopPropagation:!0,value:n,submit:this.submit}))}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=t.FilteringType=void 0;!function(e){e.Advanced="advanced",e.Basic="basic"}(r||(t.FilteringType=r={}))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=n(4);t.default=(0,o.memoizeOneFactory)((e,t,n,o)=>{switch(e){case!1:return{loadNext:()=>{},loadPrevious:()=>{}};case!0:case"fe":return function(e,t,n){return{loadNext:()=>{let o=Math.floor(n.length/e.page_size);e.current_page>=o||(e=r.merge(e,{current_page:e.current_page+1}),t({pagination_settings:e}))},loadPrevious:()=>{e.current_page<=0||(e=r.merge(e,{current_page:e.current_page-1}),t({pagination_settings:e}))}}}(t,n,o);case"be":return function(e,t){return{loadNext:()=>{e.current_page++,t({pagination_settings:e})},loadPrevious:()=>{e.current_page<=0||(e.current_page--,t({pagination_settings:e}))}}}(t,n);default:throw new Error(`Unknown pagination mode: '${e}'`)}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(4);t.default=(0,r.memoizeOneFactory)((e,t,n,r)=>{switch(e){case!1:return function(e,t){return{dataframe:e,indices:t}}(n,r);case!0:case"fe":return function(e,t,n){let r=Math.min(e.current_page,Math.floor(t.length/e.page_size));const o=e.page_size*r,i=Math.min(o+e.displayed_pages*e.page_size,t.length);return{dataframe:t.slice(o,i),indices:n.slice(o,i)}}(t,n,r);case"be":return function(e,t){return{dataframe:e,indices:t}}(n,r);default:throw new Error(`Unknown pagination mode: '${e}'`)}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=n(4),i=n(7),u=s(i),a=s(n(17));function s(e){return e&&e.__esModule?e:{default:e}}t.default=(0,o.memoizeOneFactory)((e,t,n,o,s=[],l)=>{const c=new Map;if(r.addIndex(r.forEach)((e,t)=>{c.set(e,t)},e),"fe"===t||!0===t){const t=new a.default(n);e=t.isValid?t.filter(e):e}const p=l?e=>""===e||(0,i.defaultIsNully)(e):void 0;return"fe"!==o&&!0!==o||(e=(0,u.default)(e,s,p)),{dataframe:e,indices:r.map(e=>c.get(e),e)}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2)),o=n(4);t.default=(0,o.memoizeOneFactory)(e=>r.filter(e=>!e.hidden,e))},function(e,t,n){var r=n(50);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(9)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(8)(!1)).push([e.i,"/**\n * React Select\n * ============\n * Created by Jed Watson and Joss Mackison for KeystoneJS, http://www.keystonejs.com/\n * https://twitter.com/jedwatson https://twitter.com/jossmackison https://twitter.com/keystonejs\n * MIT License: https://github.com/JedWatson/react-select\n*/\n.Select {\n position: relative;\n}\n.Select input::-webkit-contacts-auto-fill-button,\n.Select input::-webkit-credentials-auto-fill-button {\n display: none !important;\n}\n.Select input::-ms-clear {\n display: none !important;\n}\n.Select input::-ms-reveal {\n display: none !important;\n}\n.Select,\n.Select div,\n.Select input,\n.Select span {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n.Select.is-disabled .Select-arrow-zone {\n cursor: default;\n pointer-events: none;\n opacity: 0.35;\n}\n.Select.is-disabled > .Select-control {\n background-color: #f9f9f9;\n}\n.Select.is-disabled > .Select-control:hover {\n box-shadow: none;\n}\n.Select.is-open > .Select-control {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n background: #fff;\n border-color: #b3b3b3 #ccc #d9d9d9;\n}\n.Select.is-open > .Select-control .Select-arrow {\n top: -2px;\n border-color: transparent transparent #999;\n border-width: 0 5px 5px;\n}\n.Select.is-searchable.is-open > .Select-control {\n cursor: text;\n}\n.Select.is-searchable.is-focused:not(.is-open) > .Select-control {\n cursor: text;\n}\n.Select.is-focused > .Select-control {\n background: #fff;\n}\n.Select.is-focused:not(.is-open) > .Select-control {\n border-color: #007eff;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 3px rgba(0, 126, 255, 0.1);\n background: #fff;\n}\n.Select.has-value.is-clearable.Select--single > .Select-control .Select-value {\n padding-right: 42px;\n}\n.Select.has-value.Select--single > .Select-control .Select-value .Select-value-label,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value .Select-value-label {\n color: #333;\n}\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label {\n cursor: pointer;\n text-decoration: none;\n}\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label:hover,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:hover,\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label:focus,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:focus {\n color: #007eff;\n outline: none;\n text-decoration: underline;\n}\n.Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label:focus,\n.Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:focus {\n background: #fff;\n}\n.Select.has-value.is-pseudo-focused .Select-input {\n opacity: 0;\n}\n.Select.is-open .Select-arrow,\n.Select .Select-arrow-zone:hover > .Select-arrow {\n border-top-color: #666;\n}\n.Select.Select--rtl {\n direction: rtl;\n text-align: right;\n}\n.Select-control {\n background-color: #fff;\n border-color: #d9d9d9 #ccc #b3b3b3;\n border-radius: 4px;\n border: 1px solid #ccc;\n color: #333;\n cursor: default;\n display: table;\n border-spacing: 0;\n border-collapse: separate;\n height: 36px;\n outline: none;\n overflow: hidden;\n position: relative;\n width: 100%;\n}\n.Select-control:hover {\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06);\n}\n.Select-control .Select-input:focus {\n outline: none;\n background: #fff;\n}\n.Select-placeholder,\n.Select--single > .Select-control .Select-value {\n bottom: 0;\n color: #aaa;\n left: 0;\n line-height: 34px;\n padding-left: 10px;\n padding-right: 10px;\n position: absolute;\n right: 0;\n top: 0;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.Select-input {\n height: 34px;\n padding-left: 10px;\n padding-right: 10px;\n vertical-align: middle;\n}\n.Select-input > input {\n width: 100%;\n background: none transparent;\n border: 0 none;\n box-shadow: none;\n cursor: default;\n display: inline-block;\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n outline: none;\n line-height: 17px;\n /* For IE 8 compatibility */\n padding: 8px 0 12px;\n /* For IE 8 compatibility */\n -webkit-appearance: none;\n}\n.is-focused .Select-input > input {\n cursor: text;\n}\n.has-value.is-pseudo-focused .Select-input {\n opacity: 0;\n}\n.Select-control:not(.is-searchable) > .Select-input {\n outline: none;\n}\n.Select-loading-zone {\n cursor: pointer;\n display: table-cell;\n position: relative;\n text-align: center;\n vertical-align: middle;\n width: 16px;\n}\n.Select-loading {\n -webkit-animation: Select-animation-spin 400ms infinite linear;\n -o-animation: Select-animation-spin 400ms infinite linear;\n animation: Select-animation-spin 400ms infinite linear;\n width: 16px;\n height: 16px;\n box-sizing: border-box;\n border-radius: 50%;\n border: 2px solid #ccc;\n border-right-color: #333;\n display: inline-block;\n position: relative;\n vertical-align: middle;\n}\n.Select-clear-zone {\n -webkit-animation: Select-animation-fadeIn 200ms;\n -o-animation: Select-animation-fadeIn 200ms;\n animation: Select-animation-fadeIn 200ms;\n color: #999;\n cursor: pointer;\n display: table-cell;\n position: relative;\n text-align: center;\n vertical-align: middle;\n width: 17px;\n}\n.Select-clear-zone:hover {\n color: #D0021B;\n}\n.Select-clear {\n display: inline-block;\n font-size: 18px;\n line-height: 1;\n}\n.Select--multi .Select-clear-zone {\n width: 17px;\n}\n.Select-arrow-zone {\n cursor: pointer;\n display: table-cell;\n position: relative;\n text-align: center;\n vertical-align: middle;\n width: 25px;\n padding-right: 5px;\n}\n.Select--rtl .Select-arrow-zone {\n padding-right: 0;\n padding-left: 5px;\n}\n.Select-arrow {\n border-color: #999 transparent transparent;\n border-style: solid;\n border-width: 5px 5px 2.5px;\n display: inline-block;\n height: 0;\n width: 0;\n position: relative;\n}\n.Select-control > *:last-child {\n padding-right: 5px;\n}\n.Select--multi .Select-multi-value-wrapper {\n display: inline-block;\n}\n.Select .Select-aria-only {\n position: absolute;\n display: inline-block;\n height: 1px;\n width: 1px;\n margin: -1px;\n clip: rect(0, 0, 0, 0);\n overflow: hidden;\n float: left;\n}\n@-webkit-keyframes Select-animation-fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes Select-animation-fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n.Select-menu-outer {\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n background-color: #fff;\n border: 1px solid #ccc;\n border-top-color: #e6e6e6;\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06);\n box-sizing: border-box;\n margin-top: -1px;\n max-height: 200px;\n position: absolute;\n left: 0;\n top: 100%;\n width: 100%;\n z-index: 1;\n -webkit-overflow-scrolling: touch;\n}\n.Select-menu {\n max-height: 198px;\n overflow-y: auto;\n}\n.Select-option {\n box-sizing: border-box;\n background-color: #fff;\n color: #666666;\n cursor: pointer;\n display: block;\n padding: 8px 10px;\n}\n.Select-option:last-child {\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.Select-option.is-selected {\n background-color: #f5faff;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 126, 255, 0.04);\n color: #333;\n}\n.Select-option.is-focused {\n background-color: #ebf5ff;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 126, 255, 0.08);\n color: #333;\n}\n.Select-option.is-disabled {\n color: #cccccc;\n cursor: default;\n}\n.Select-noresults {\n box-sizing: border-box;\n color: #999999;\n cursor: default;\n display: block;\n padding: 8px 10px;\n}\n.Select--multi .Select-input {\n vertical-align: middle;\n margin-left: 10px;\n padding: 0;\n}\n.Select--multi.Select--rtl .Select-input {\n margin-left: 0;\n margin-right: 10px;\n}\n.Select--multi.has-value .Select-input {\n margin-left: 5px;\n}\n.Select--multi .Select-value {\n background-color: #ebf5ff;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 126, 255, 0.08);\n border-radius: 2px;\n border: 1px solid #c2e0ff;\n /* Fallback color for IE 8 */\n border: 1px solid rgba(0, 126, 255, 0.24);\n color: #007eff;\n display: inline-block;\n font-size: 0.9em;\n line-height: 1.4;\n margin-left: 5px;\n margin-top: 5px;\n vertical-align: top;\n}\n.Select--multi .Select-value-icon,\n.Select--multi .Select-value-label {\n display: inline-block;\n vertical-align: middle;\n}\n.Select--multi .Select-value-label {\n border-bottom-right-radius: 2px;\n border-top-right-radius: 2px;\n cursor: default;\n padding: 2px 5px;\n}\n.Select--multi a.Select-value-label {\n color: #007eff;\n cursor: pointer;\n text-decoration: none;\n}\n.Select--multi a.Select-value-label:hover {\n text-decoration: underline;\n}\n.Select--multi .Select-value-icon {\n cursor: pointer;\n border-bottom-left-radius: 2px;\n border-top-left-radius: 2px;\n border-right: 1px solid #c2e0ff;\n /* Fallback color for IE 8 */\n border-right: 1px solid rgba(0, 126, 255, 0.24);\n padding: 1px 5px 3px;\n}\n.Select--multi .Select-value-icon:hover,\n.Select--multi .Select-value-icon:focus {\n background-color: #d8eafd;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 113, 230, 0.08);\n color: #0071e6;\n}\n.Select--multi .Select-value-icon:active {\n background-color: #c2e0ff;\n /* Fallback color for IE 8 */\n background-color: rgba(0, 126, 255, 0.24);\n}\n.Select--multi.Select--rtl .Select-value {\n margin-left: 0;\n margin-right: 5px;\n}\n.Select--multi.Select--rtl .Select-value-icon {\n border-right: none;\n border-left: 1px solid #c2e0ff;\n /* Fallback color for IE 8 */\n border-left: 1px solid rgba(0, 126, 255, 0.24);\n}\n.Select--multi.is-disabled .Select-value {\n background-color: #fcfcfc;\n border: 1px solid #e3e3e3;\n color: #333;\n}\n.Select--multi.is-disabled .Select-value-icon {\n cursor: not-allowed;\n border-right: 1px solid #e3e3e3;\n}\n.Select--multi.is-disabled .Select-value-icon:hover,\n.Select--multi.is-disabled .Select-value-icon:focus,\n.Select--multi.is-disabled .Select-value-icon:active {\n background-color: #fcfcfc;\n}\n@keyframes Select-animation-spin {\n to {\n transform: rotate(1turn);\n }\n}\n@-webkit-keyframes Select-animation-spin {\n to {\n -webkit-transform: rotate(1turn);\n }\n}\n",""])},function(e,t){e.exports=function(e){var t="undefined"!=typeof window&&window.location;if(!t)throw new Error("fixUrls requires window.location");if(!e||"string"!=typeof e)return e;var n=t.protocol+"//"+t.host,r=n+t.pathname.replace(/\/[^\/]*$/,"/");return e.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi,function(e,t){var o,i=t.trim().replace(/^"(.*)"$/,function(e,t){return t}).replace(/^'(.*)'$/,function(e,t){return t});return/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(i)?e:(o=0===i.indexOf("//")?i:0===i.indexOf("/")?n+i:r+i.replace(/^\.\//,""),"url("+JSON.stringify(o)+")")})}},function(e,t,n){var r=n(53);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(9)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(8)(!1)).push([e.i,".dash-spreadsheet.dash-freeze-left {\n width: auto;\n width: fit-content;\n width: -moz-fit-content;\n width: -webkit-fit-content;\n max-width: 500px;\n}\n.dash-spreadsheet.dash-freeze-top {\n width: auto;\n width: fit-content;\n width: -moz-fit-content;\n width: -webkit-fit-content;\n max-height: 500px;\n}\n.dash-spreadsheet-container {\n display: flex;\n flex-direction: row;\n position: relative;\n}\n.dash-spreadsheet-inner {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n}\n.dash-spreadsheet-inner.dash-freeze-left,\n.dash-spreadsheet-inner.dash-freeze-top {\n overflow: hidden !important;\n}\n.dash-spreadsheet-inner *,\n.dash-spreadsheet-inner *:after,\n.dash-spreadsheet-inner *:before {\n box-sizing: inherit;\n}\n.dash-spreadsheet-inner .Select {\n overflow: hidden;\n position: static;\n}\n.dash-spreadsheet-inner .Select,\n.dash-spreadsheet-inner .Select-control {\n background-color: inherit;\n}\n.dash-spreadsheet-inner .Select-value {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-top: -2px;\n}\n.dash-spreadsheet-inner .marker-row tr {\n visibility: hidden !important;\n}\n.dash-spreadsheet-inner .marker-row td,\n.dash-spreadsheet-inner .marker-row th {\n height: 0 !important;\n padding: 0 !important;\n margin: 0 !important;\n}\n.dash-spreadsheet-inner .row-0 {\n display: flex;\n flex: 0 0 auto;\n flex-direction: row;\n}\n.dash-spreadsheet-inner .row-1 {\n display: flex;\n flex-direction: row;\n overflow: scroll;\n}\n.dash-spreadsheet-inner .cell-0-0,\n.dash-spreadsheet-inner .cell-1-0 {\n flex: 0 0 auto;\n left: 0;\n position: sticky;\n z-index: 400;\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr td:first-of-type,\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr:first-of-type td,\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr:first-of-type td:first-of-type,\n.dash-spreadsheet-inner:not(.dash-freeze-top):not(.dash-freeze-left) .cell-1-1 tr:first-of-type th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr td:first-of-type,\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr:first-of-type td,\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr:first-of-type td:first-of-type,\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-0 tr:first-of-type th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-1 tr:first-of-type td,\n.dash-spreadsheet-inner:not(.dash-freeze-top).dash-freeze-left .cell-1-1 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr:first-of-type td,\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr:first-of-type td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-0-1 tr:first-of-type th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-1-1 tr td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top:not(.dash-freeze-left) .cell-1-1 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr:first-of-type td,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr:first-of-type td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-0 tr:first-of-type th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-1 tr:first-of-type td,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-0-1 tr:first-of-type th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-1-0 tr td:first-of-type,\n.dash-spreadsheet-inner.dash-freeze-top.dash-freeze-left .cell-1-0 tr th:first-of-type {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner .cell-0-1 {\n z-index: 300;\n flex: 0 0 auto;\n}\n.dash-spreadsheet-inner .cell-1-1 {\n flex: 0 0 auto;\n}\n.dash-spreadsheet-inner .cell td,\n.dash-spreadsheet-inner .cell th {\n box-shadow: inset 0px 0px 0px 0px var(--border), inset 0px 0px 0px 0px var(--border), inset -1px 0px 0px var(--border), inset 0px -1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner .cell td:focus,\n.dash-spreadsheet-inner .cell th:focus {\n outline: none;\n}\n.dash-spreadsheet-inner .filter.invalid {\n box-shadow: inset 1px 0px 0px 0px red, inset 0px 1px 0px 0px red, inset -1px 0px 0px red, inset 0px -1px 0px 0px red;\n background-color: pink;\n}\n.dash-spreadsheet-inner .selected-row td,\n.dash-spreadsheet-inner .selected-row th {\n background-color: var(--selected-row);\n}\n.dash-spreadsheet-inner tr {\n background-color: white;\n}\n.dash-spreadsheet-inner td {\n background-color: inherit;\n}\n.dash-spreadsheet-inner td.cell--selected {\n background-color: var(--selected-background);\n}\n.dash-spreadsheet-inner td.focused {\n box-shadow: 1px 0px 0px 0px var(--accent), 0px 1px 0px 0px var(--accent), 0 0px 0px var(--accent), 0px 0 0px 0px var(--accent);\n border: 1px solid var(--accent);\n margin: -1px;\n z-index: 200;\n}\n.dash-spreadsheet-inner td .dash-cell-value {\n height: 100%;\n width: 100%;\n}\n.dash-spreadsheet-inner td div.dash-cell-value {\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n.dash-spreadsheet-inner td,\n.dash-spreadsheet-inner th {\n padding: 2px;\n white-space: nowrap;\n overflow-x: hidden;\n text-overflow: ellipsis;\n height: 30px;\n text-align: right;\n}\n.dash-spreadsheet-inner th .column-header--edit,\n.dash-spreadsheet-inner th .column-header--delete,\n.dash-spreadsheet-inner th .sort {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: default;\n cursor: pointer;\n}\n.dash-spreadsheet-inner textarea {\n white-space: pre;\n}\n.dash-spreadsheet-inner table {\n border-collapse: collapse;\n font-family: monospace;\n --accent: hotpink;\n --border: lightgrey;\n --text-color: #3c3c3c;\n --hover: #fdfdfd;\n --background-color-ellipses: #fdfdfd;\n --faded-text: #fafafa;\n --faded-text-header: #b4b4b4;\n --selected-background: rgba(255, 65, 54, 0.2);\n --faded-dropdown: #f0f0f0;\n --selected-row: #fff0ff;\n --muted: #c8c8c8;\n}\n/* focus happens after copying to clipboard */\n.dash-spreadsheet-inner table:focus {\n outline: none;\n}\n.dash-spreadsheet-inner thead {\n display: table-row-group;\n}\n.elip {\n text-align: center;\n width: 100%;\n background-color: var(--background-color-ellipses);\n}\n.dash-spreadsheet-inner td.dropdown {\n /*\n * To view the dropdown's contents, we need\n * overflow-y: visible.\n * Unfortunately, overflow-x: hidden and overflow-y: visible\n * can't both be set at the same time.\n * So, we have to make both overflow-x: visible and overflow-y: visble\n *\n * See https://stackoverflow.com/questions/6421966/\n *\n * There might be another solution with parent divs, but I haven't\n * tried it.\n */\n overflow-x: visible;\n}\n.dash-spreadsheet-inner th {\n box-shadow: inset 1px 0px 0px 0px var(--border), inset 0px 1px 0px 0px var(--border);\n}\n.dash-spreadsheet-inner :not(.cell--selected) tr:hover,\ntr:hover input :not(.cell--selected) {\n background-color: var(--hover);\n}\n.dash-spreadsheet-inner th {\n background-color: #fafafa;\n}\n.sort {\n cursor: pointer;\n float: left;\n color: var(--faded-text-header);\n font-size: 20px;\n}\nth:hover .sort {\n color: var(--accent);\n}\n.sort:hover {\n text-decoration: underline;\n}\n.expanded-row--empty-cell {\n box-shadow: none;\n background-color: transparent;\n}\n.expanded-row {\n text-align: center;\n}\n.dash-spreadsheet-inner input:not([type=radio]):not([type=checkbox]) {\n padding: 0px;\n margin: 0px;\n height: calc(100% - 1px);\n width: calc(100% - 1px);\n line-height: 30px;\n border: none;\n font-family: inherit;\n text-align: right;\n box-sizing: border-box;\n color: var(--text-color);\n background-color: transparent;\n /* so as to not overlay the box shadow */\n /* browser's default text-shadow is `$color 0px 0px 0px;`\n * for `input`, which makes it look a little bit heavier than dropdowns\n * or bare `td`\n */\n text-shadow: none;\n}\n.dash-spreadsheet-inner input.unfocused {\n color: transparent;\n text-shadow: 0 0 0 var(--text-color);\n cursor: default;\n}\n.dash-spreadsheet-inner input.unfocused:focus {\n outline: none;\n}\n.numeric {\n font-family: monospace;\n}\n.toggle-row {\n border: none;\n box-shadow: none;\n width: 10px;\n padding-left: 10px;\n padding-right: 10px;\n cursor: pointer;\n color: var(--faded-text);\n}\n.toggle-row--expanded {\n color: var(--accent);\n}\n.dash-spreadsheet-inner tr:hover .toggle-row {\n color: var(--accent);\n}\n.cell--uneditable,\n.cell--uneditable input {\n cursor: not-allowed;\n}\n.expanded-row {\n box-shadow: inset 2px 0px 0px 0px var(--accent), inset -1px 0px 0px 0px var(--border);\n /* inset 0px 1px 0px 0px var(--border); */\n}\n.dash-spreadsheet-inner .dash-delete-cell,\n.dash-spreadsheet-inner .dash-delete-header {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: default;\n font-size: 1.3rem;\n text-align: center;\n cursor: pointer;\n color: var(--muted);\n}\n.dash-spreadsheet-inner .dash-delete-cell:hover,\n.dash-spreadsheet-inner .dash-delete-header:hover {\n color: var(--accent);\n}\n.dash-spreadsheet-inner .column-header--edit {\n float: left;\n opacity: 0.1;\n padding-left: 2px;\n padding-right: 2px;\n cursor: pointer;\n}\n.dash-spreadsheet-inner th:hover .column-header--edit {\n color: var(--accent);\n opacity: 1;\n}\n.dash-spreadsheet-inner .column-header--delete {\n float: left;\n opacity: 0.1;\n padding-left: 2px;\n padding-right: 2px;\n cursor: pointer;\n}\n.dash-spreadsheet-inner th:hover .column-header--delete {\n color: var(--accent);\n opacity: 1;\n}\n",""])},function(e,t,n){var r=n(55);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(9)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(8)(!1)).push([e.i,".dash-spreadsheet .Select,\n.dash-spreadsheet .Select-control {\n border: none;\n cursor: pointer;\n height: 30px; /* matches the td height and line-height */\n border: none;\n}\n\n.dash-spreadsheet .Select-placeholder,\n.dash-spreadsheet .Select--single > .Select-control .Select-value {\n height: 100%;\n line-height: inherit;\n}\n\n.dash-spreadsheet .Select.has-value.Select--single > .Select-control .Select-value .Select-value-label,\n.dash-spreadsheet .Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value .Select-value-label {\n color: var(--text-color);\n}\n\n.dash-spreadsheet .Select:hover,\n.dash-spreadsheet .Select-control:hover {\n border: none;\n box-shadow: none;\n cursor: pointer;\n}\n\n.dash-spreadsheet .Select-menu-outer {\n z-index: 100;\n}\n\n.dash-spreadsheet .Select-arrow {\n border-top-color: var(--faded-dropdown);\n border-left-color: transparent;\n border-right-color: transparent;\n border-bottom-color: transparent;\n}\n\n.dash-spreadsheet .Select-control:hover .Select-arrow {\n border-top-color: var(--accent);\n border-left-color: transparent;\n border-right-color: transparent;\n border-bottom-color: transparent;\n}\n\n.dash-spreadsheet .is-open > .Select-control .Select-arrow {\n border-bottom-color: var(--background-color-8-react-select);\n border-left-color: transparent;\n border-right-color: transparent;\n border-top-color: transparent;\n}\n\n.dash-spreadsheet .Select--multi .Select-value,\n.dash-spreadsheet .Select--multi a.Select-value-label {\n color: var(--color-8-react-select);\n}\n\n.dash-spreadsheet .Select {\n border-radius: 0;\n}\n\n.dash-spreadsheet .Select.is-disabled > .Select-control {\n border: none;\n}\n\n.dash-spreadsheet .Select--multi .Select-value-icon:hover,\n.dash-spreadsheet .Select--multi .Select-value-icon:focus {\n font-weight: bold;\n}\n\n.dash-spreadsheet .Select.is-disabled .Select-control {\n cursor: not-allowed;\n}\n\n.dash-spreadsheet .Select-menu-outer {\n background-color: white;\n border: none;\n border-bottom: thin var(--border) solid;\n border-radius: 0;\n border-top: none;\n}\n\n.dash-spreadsheet .Select-option {\n background-color: inherit;\n color: var(--accent);\n}\n\n.dash-spreadsheet .Select-option:hover {\n font-weight: bold;\n color: var(--accent);\n background-color: var(--hover);\n}\n\n.dash-spreadsheet .Select.is-focused:not(.is-open) > .Select-control {\n border: none;\n -webkit-box-shadow: none;\n box-shadow: none;\n background: #fff;\n}\n\n.dash-spreadsheet .Select-option.is-focused {\n background-color: white;\n color: var(--accent);\n font-weight: bold;\n}\n\n.dash-spreadsheet .Select-clear {\n color: transparent;\n}\n.Select:hover .Select-clear {\n color: var(--accent);\n}\n\n.dash-spreadsheet .Select-control {\n padding-left: 2px;\n}\n\n.dash-spreadsheet .cell--selected .Select-control {\n background-color: var(--selected-background);\n border-radius: 0;\n}\n",""])},function(e,t,n){var r=n(57);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(9)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(8)(!1)).push([e.i,"/*RESET CSS*/\nhtml {\n color: #000;\n background: #FFF;\n}\nbody,\ndiv,\ndl,\ndt,\ndd,\nul,\nol,\nli,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\npre,\ncode,\nform,\nfieldset,\nlegend,\ninput,\ntextarea,\np,\nblockquote,\nth,\ntd {\n margin: 0;\n padding: 0;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\nfieldset,\nimg {\n border: 0;\n}\naddress,\ncaption,\ncite,\ncode,\ndfn,\nem,\nstrong,\nth,\nvar {\n font-style: normal;\n font-weight: normal;\n}\nol,\nul {\n list-style: none;\n}\ncaption,\nth {\n text-align: left;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: 100%;\n font-weight: normal;\n}\nq:before,\nq:after {\n content: '';\n}\nabbr,\nacronym {\n border: 0;\n font-variant: normal;\n}\nsup {\n vertical-align: text-top;\n}\nsub {\n vertical-align: text-bottom;\n}\ninput,\ntextarea,\nselect {\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n *font-size: 100%;\n}\nlegend {\n color: #000;\n}\n#yui3-css-stamp.cssreset {\n display: none;\n}\ninput[type=\"button\"] {\n border-radius: 0;\n -webkit-appearance: none;\n}\n*:focus {\n outline: none;\n}\n.dash-spreadsheet-container input,\n.dash-spreadsheet-container table {\n font-size: 13px;\n}\nbody {\n margin: 0;\n padding: 0;\n font-family: sans-serif;\n}\n",""])},function(e,t,n){n(59),e.exports=n(62)},function(e,t,n){"use strict";var r=s(n(1)),o=s(n(6)),i=s(n(60)),u=n(3),a=s(u);function s(e){return e&&e.__esModule?e:{default:e}}a.default.setDebugLevel(u.DebugLevel.DEBUG),a.default.setLogLevel(u.LogLevel.WARNING),o.default.render(r.default.createElement(i.default,null),document.getElementById("root"))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;tJSON.parse(JSON.stringify(e));class f extends i.Component{constructor(){super();const e=d(l.mockData.dataframe);this.state={filter:"",tableProps:{id:"table",dataframe:e,columns:d(l.mockData.columns).map(e=>o.merge(e,{editable_name:!0,deletable:!0})),editable:!0,sorting:!0,n_fixed_rows:4,n_fixed_columns:2,merge_duplicate_headers:!1,row_deletable:!0,row_selectable:"single",column_static_dropdown:[{id:"bbb",dropdown:["Humid","Wet","Snowy","Tropical Beaches"].map(e=>({label:e,value:e}))}],table_style:[{selector:".dash-spreadsheet.dash-freeze-left",rule:"width: 1000px; max-width: 1000px;"}]}};const t=(0,c.memoizeOne)(()=>e=>{console.info("---\x3e",e),this.setState(t=>({tableProps:o.merge(t.tableProps,e)}))});Object.defineProperty(this,"setProps",{get:()=>t()})}render(){return u.default.createElement(s.Table,r({setProps:this.setProps},this.state.tableProps,{filtering:"fe"}))}}f.propTypes={value:a.default.any},t.default=f},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.miniData=t.mockDataSimple=t.mockData=void 0;var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(2));const o=5e3;t.mockData=i([{id:"rows",type:"numeric",width:40,editable:!1,data:u(e=>e)},{id:"ccc",name:["City","Canada","Toronto"],type:"numeric",width:150,data:u(e=>e)},{id:"ddd",name:["City","Canada","Montréal"],type:"numeric",width:150,data:u(e=>100*e)},{id:"eee",name:["City","America","New York City"],type:"numeric",width:150,data:u(e=>e)},{id:"fff",name:["City","America","Boston"],type:"numeric",width:150,data:u(e=>e+1)},{id:"ggg",name:["City","France","Paris"],type:"numeric",editable:!0,width:150,data:u(e=>10*e)},{id:"bbb",name:["","Weather","Climate"],type:"dropdown",clearable:!0,width:200,data:u(e=>["Humid","Wet","Snowy","Tropical Beaches"][e%4])},{id:"aaa",name:["","Weather","Temperature"],type:"numeric",width:150,data:u(e=>e+1)}]),t.mockDataSimple=i([{id:"aaa",name:"Temperature",type:"numeric",width:150,data:u(e=>e+1)},{id:"bbb",name:"Climate",type:"numeric",options:["Humid","Wet","Snowy","Tropical Beaches"].map(e=>({label:e,value:e})),clearable:!0,width:200,data:u(e=>["Humid","Wet","Snowy","Tropical Beaches"][e%4])}]),t.miniData=i([{id:"aaa",name:"cheese",data:[1,2,3]},{id:"bbb",name:"tomato",data:[3,2,1]}]);function i(e){const t={columns:[],dataframe:[]};return e.forEach(e=>{e.data.forEach((n,r)=>{t.dataframe[r]||(t.dataframe[r]={}),t.dataframe[r][e.id]=n}),t.columns.push(r.dissoc("data",e))}),t}function u(e,t=o){return r.range(1,t).map(e)}},function(e,t,n){e.exports=n.p+"index.html"}]); \ No newline at end of file diff --git a/dash_table/package.json b/dash_table/package.json index 37886e191..d82a13b44 100644 --- a/dash_table/package.json +++ b/dash_table/package.json @@ -7,8 +7,8 @@ "preprivate::opentests": "run-s private::wait*", "preprivate::runtests": "run-s private::wait*", "private::build": "webpack --display-reasons --bail", - "private::host_dash8081": "python tests/e2e/dash/v_be_page.py", - "private::host_dash8082": "python tests/e2e/dash/v_copy_paste.py", + "private::host_dash8081": "python tests/cypress/dash/v_be_page.py", + "private::host_dash8082": "python tests/cypress/dash/v_copy_paste.py", "private::host_js": "http-server ./dash_table -c-1 --silent", "private::wait_dash8081": "wait-on http://localhost:8081", "private::wait_dash8082": "wait-on http://localhost:8082", @@ -17,15 +17,14 @@ "private::lint.ts": "tslint --project . src/**/*.ts", "private::opentests": "cypress open", "private::runtests": "cypress run --browser chrome", - "private::test-e2e": "run-p --race private::host* private::runtests", - "private::test-visual": "build-storybook && percy-storybook", "build.watch": "webpack-dev-server --content-base dash_table --mode development", "build:js": "run-s \"private::build -- --mode production\"", "build:js-dev": "run-s \"private::build -- --mode development\"", "build:js-test": "webpack --display-reasons --bail --config webpack.test.config.js", "build:py": "./extract-meta src/dash-table/Table.js > dash_table/metadata.json && cp package.json dash_table", "lint": "run-s private::lint.js private::lint.ts", - "test": "run-s private::test-*", + "test": "run-p --race private::host* private::runtests", + "test.visual": "build-storybook && percy-storybook", "test.watch": "run-p --race \"build:js-test -- --watch\" --race private::host* private::opentests" }, "author": "Chris P dash_table/metadata.json && cp package.json dash_table", "lint": "run-s private::lint.js private::lint.ts", - "test": "run-s private::test-*", + "test": "run-p --race private::host* private::runtests", + "test.visual": "build-storybook && percy-storybook", "test.watch": "run-p --race \"build:js-test -- --watch\" --race private::host* private::opentests" }, "author": "Chris P { const options = { - webpackOptions: require('../../../../webpack.test.config.js'), + webpackOptions: require('../../../webpack.test.config.js'), } on('file:preprocessor', wp(options)) diff --git a/tests/e2e/cypress/src/DOM.ts b/tests/cypress/src/DOM.ts similarity index 100% rename from tests/e2e/cypress/src/DOM.ts rename to tests/cypress/src/DOM.ts diff --git a/tests/e2e/cypress/src/DashTable.ts b/tests/cypress/src/DashTable.ts similarity index 100% rename from tests/e2e/cypress/src/DashTable.ts rename to tests/cypress/src/DashTable.ts diff --git a/tests/e2e/cypress/src/Key.ts b/tests/cypress/src/Key.ts similarity index 100% rename from tests/e2e/cypress/src/Key.ts rename to tests/cypress/src/Key.ts diff --git a/tests/e2e/cypress/support/commands.js b/tests/cypress/support/commands.js similarity index 100% rename from tests/e2e/cypress/support/commands.js rename to tests/cypress/support/commands.js diff --git a/tests/e2e/cypress/support/index.js b/tests/cypress/support/index.js similarity index 100% rename from tests/e2e/cypress/support/index.js rename to tests/cypress/support/index.js diff --git a/tests/e2e/cypress/integration/copy_paste_test.ts b/tests/cypress/tests/server/copy_paste_test.ts similarity index 100% rename from tests/e2e/cypress/integration/copy_paste_test.ts rename to tests/cypress/tests/server/copy_paste_test.ts diff --git a/tests/e2e/cypress/integration/dash_test.ts b/tests/cypress/tests/server/dash_test.ts similarity index 100% rename from tests/e2e/cypress/integration/dash_test.ts rename to tests/cypress/tests/server/dash_test.ts diff --git a/tests/e2e/cypress/integration/delete_cells_test.ts b/tests/cypress/tests/server/delete_cells_test.ts similarity index 100% rename from tests/e2e/cypress/integration/delete_cells_test.ts rename to tests/cypress/tests/server/delete_cells_test.ts diff --git a/tests/cypress/tests/server/delete_row_test.ts b/tests/cypress/tests/server/delete_row_test.ts new file mode 100644 index 000000000..01625348d --- /dev/null +++ b/tests/cypress/tests/server/delete_row_test.ts @@ -0,0 +1,18 @@ +import DashTable from 'cypress/DashTable'; + +describe('delete', () => { + beforeEach(() => cy.visit('http://localhost:8081')); + + it('can delete row', () => { + DashTable.getCell(0, 0).within(() => cy.get('.dash-cell-value').should('have.html', '0')); + DashTable.getDelete(0).click(); + DashTable.getCell(0, 0).within(() => cy.get('.dash-cell-value').should('have.html', '1')); + }); + + it('can delete row when sorted', () => { + cy.get('tr th.column-0 .sort').click({ force: true }); + DashTable.getCell(0, 0).within(() => cy.get('.dash-cell-value').should('have.html', '28155')); + DashTable.getDelete(0).click(); + DashTable.getCell(0, 0).within(() => cy.get('.dash-cell-value').should('have.html', '28154')); + }); +}); \ No newline at end of file diff --git a/tests/e2e/cypress/integration/select_row_test.ts b/tests/cypress/tests/server/select_row_test.ts similarity index 50% rename from tests/e2e/cypress/integration/select_row_test.ts rename to tests/cypress/tests/server/select_row_test.ts index 937ee773a..9833db046 100644 --- a/tests/e2e/cypress/integration/select_row_test.ts +++ b/tests/cypress/tests/server/select_row_test.ts @@ -1,6 +1,6 @@ import DashTable from 'cypress/DashTable'; -describe('delete', () => { +describe('select row', () => { describe('be pagination & sort', () => { beforeEach(() => cy.visit('http://localhost:8081')); @@ -22,26 +22,4 @@ describe('delete', () => { DashTable.getSelect(0).within(() => cy.get('input').should('not.be.checked')); }); }); - - describe('fe pagination & sort', () => { - beforeEach(() => cy.visit('http://localhost:8080')); - - it('can select row', () => { - DashTable.getSelect(0).within(() => cy.get('input').click()); - DashTable.getSelect(0).within(() => cy.get('input').should('be.checked')); - }); - - it('can select row when sorted', () => { - cy.get('tr th.column-0 .sort').click({ force: true }); - DashTable.getSelect(0).within(() => cy.get('input').click()); - DashTable.getSelect(0).within(() => cy.get('input').should('be.checked')); - }); - - it('select, sort, new row is not selected', () => { - DashTable.getSelect(0).within(() => cy.get('input').click()); - DashTable.getSelect(0).within(() => cy.get('input').should('be.checked')); - cy.get('tr th.column-0 .sort').click({ force: true }); - DashTable.getSelect(0).within(() => cy.get('input').should('not.be.checked')); - }); - }); }); \ No newline at end of file diff --git a/tests/cypress/tests/standalone/delete_row_test.ts b/tests/cypress/tests/standalone/delete_row_test.ts new file mode 100644 index 000000000..f9d445a20 --- /dev/null +++ b/tests/cypress/tests/standalone/delete_row_test.ts @@ -0,0 +1,18 @@ +import DashTable from 'cypress/DashTable'; + +describe('delete', () => { + beforeEach(() => cy.visit('http://localhost:8080')); + + it('can delete row', () => { + DashTable.getCell(0, 0).within(() => cy.get('.dash-cell-value').should('have.html', '1')); + DashTable.getDelete(0).click(); + DashTable.getCell(0, 0).within(() => cy.get('.dash-cell-value').should('have.html', '2')); + }); + + it('can delete row when sorted', () => { + cy.get('tr th.column-0 .sort').click({ force: true }); + DashTable.getCell(0, 0).within(() => cy.get('.dash-cell-value').should('have.html', '4999')); + DashTable.getDelete(0).click(); + DashTable.getCell(0, 0).within(() => cy.get('.dash-cell-value').should('have.html', '4998')); + }); +}); \ No newline at end of file diff --git a/tests/e2e/cypress/integration/edit_cell_test.ts b/tests/cypress/tests/standalone/edit_cell_test.ts similarity index 100% rename from tests/e2e/cypress/integration/edit_cell_test.ts rename to tests/cypress/tests/standalone/edit_cell_test.ts diff --git a/tests/e2e/cypress/integration/navigation_test.ts b/tests/cypress/tests/standalone/navigation_test.ts similarity index 100% rename from tests/e2e/cypress/integration/navigation_test.ts rename to tests/cypress/tests/standalone/navigation_test.ts diff --git a/tests/cypress/tests/standalone/select_row_test.ts b/tests/cypress/tests/standalone/select_row_test.ts new file mode 100644 index 000000000..6af3e3417 --- /dev/null +++ b/tests/cypress/tests/standalone/select_row_test.ts @@ -0,0 +1,25 @@ +import DashTable from 'cypress/DashTable'; + +describe('select row', () => { + describe('fe pagination & sort', () => { + beforeEach(() => cy.visit('http://localhost:8080')); + + it('can select row', () => { + DashTable.getSelect(0).within(() => cy.get('input').click()); + DashTable.getSelect(0).within(() => cy.get('input').should('be.checked')); + }); + + it('can select row when sorted', () => { + cy.get('tr th.column-0 .sort').click({ force: true }); + DashTable.getSelect(0).within(() => cy.get('input').click()); + DashTable.getSelect(0).within(() => cy.get('input').should('be.checked')); + }); + + it('select, sort, new row is not selected', () => { + DashTable.getSelect(0).within(() => cy.get('input').click()); + DashTable.getSelect(0).within(() => cy.get('input').should('be.checked')); + cy.get('tr th.column-0 .sort').click({ force: true }); + DashTable.getSelect(0).within(() => cy.get('input').should('not.be.checked')); + }); + }); +}); \ No newline at end of file diff --git a/tests/e2e/cypress/integration/selection_test.ts b/tests/cypress/tests/standalone/selection_test.ts similarity index 100% rename from tests/e2e/cypress/integration/selection_test.ts rename to tests/cypress/tests/standalone/selection_test.ts diff --git a/tests/e2e/cypress/integration/sorting_test.ts b/tests/cypress/tests/standalone/sorting_test.ts similarity index 100% rename from tests/e2e/cypress/integration/sorting_test.ts rename to tests/cypress/tests/standalone/sorting_test.ts diff --git a/tests/e2e/cypress/integration/unit/derivedViewport_test.ts b/tests/cypress/tests/unit/derivedViewport_test.ts similarity index 98% rename from tests/e2e/cypress/integration/unit/derivedViewport_test.ts rename to tests/cypress/tests/unit/derivedViewport_test.ts index 5652cafd3..8a67656da 100644 --- a/tests/e2e/cypress/integration/unit/derivedViewport_test.ts +++ b/tests/cypress/tests/unit/derivedViewport_test.ts @@ -2,7 +2,7 @@ import * as R from 'ramda'; import derivedViewportDataframe from 'dash-table/derived/viewportDataframe'; -describe.only('derived viewport', () => { +describe('derived viewport', () => { const viewportDataframe = derivedViewportDataframe(); describe('virtual dataframe <= page size', () => { @@ -48,7 +48,7 @@ describe.only('derived viewport', () => { }); }); }); - + describe('virtual dataframe > page size', () => { describe('with fe pagination', () => { it('returns slice of dataframe', () => { @@ -68,4 +68,4 @@ describe.only('derived viewport', () => { }); }); }); -}); +}); \ No newline at end of file diff --git a/tests/e2e/cypress/integration/unit/sorting_test.ts b/tests/cypress/tests/unit/sorting_test.ts similarity index 100% rename from tests/e2e/cypress/integration/unit/sorting_test.ts rename to tests/cypress/tests/unit/sorting_test.ts diff --git a/tests/e2e/cypress/integration/unit/syntactic_tree_test.ts b/tests/cypress/tests/unit/syntactic_tree_test.ts similarity index 100% rename from tests/e2e/cypress/integration/unit/syntactic_tree_test.ts rename to tests/cypress/tests/unit/syntactic_tree_test.ts diff --git a/tests/e2e/cypress/tsconfig.json b/tests/cypress/tsconfig.json similarity index 91% rename from tests/e2e/cypress/tsconfig.json rename to tests/cypress/tsconfig.json index c9c03265f..d9986bf8a 100644 --- a/tests/e2e/cypress/tsconfig.json +++ b/tests/cypress/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "allowJs": true, "allowSyntheticDefaultImports": true, - "baseUrl": "./..", + "baseUrl": ".", "emitDecoratorMetadata": false, "experimentalDecorators": true, "lib": ["esnext", "dom"], @@ -12,7 +12,7 @@ "noUnusedLocals": true, "noUnusedParameters": true, "paths": { - "cypress/*": ["cypress/src/*"], + "cypress/*": ["./src/*"], "core/*": ["./../../src/core/*"], "dash-table/*": ["./../../src/dash-table/*"] diff --git a/tests/e2e/cypress/integration/delete_row_test.ts b/tests/e2e/cypress/integration/delete_row_test.ts deleted file mode 100644 index 00dd91c8e..000000000 --- a/tests/e2e/cypress/integration/delete_row_test.ts +++ /dev/null @@ -1,37 +0,0 @@ -import DashTable from 'cypress/DashTable'; - -describe('delete', () => { - describe('be', () => { - beforeEach(() => cy.visit('http://localhost:8081')); - - it('can delete row', () => { - DashTable.getCell(0, 0).within(() => cy.get('.dash-cell-value').should('have.html', '0')); - DashTable.getDelete(0).click(); - DashTable.getCell(0, 0).within(() => cy.get('.dash-cell-value').should('have.html', '1')); - }); - - it('can delete row when sorted', () => { - cy.get('tr th.column-0 .sort').click({ force: true }); - DashTable.getCell(0, 0).within(() => cy.get('.dash-cell-value').should('have.html', '28155')); - DashTable.getDelete(0).click(); - DashTable.getCell(0, 0).within(() => cy.get('.dash-cell-value').should('have.html', '28154')); - }); - }); - - describe('fe', () => { - beforeEach(() => cy.visit('http://localhost:8080')); - - it('can delete row', () => { - DashTable.getCell(0, 0).within(() => cy.get('.dash-cell-value').should('have.html', '1')); - DashTable.getDelete(0).click(); - DashTable.getCell(0, 0).within(() => cy.get('.dash-cell-value').should('have.html', '2')); - }); - - it('can delete row when sorted', () => { - cy.get('tr th.column-0 .sort').click({ force: true }); - DashTable.getCell(0, 0).within(() => cy.get('.dash-cell-value').should('have.html', '4999')); - DashTable.getDelete(0).click(); - DashTable.getCell(0, 0).within(() => cy.get('.dash-cell-value').should('have.html', '4998')); - }); - }); -}); \ No newline at end of file diff --git a/usage.py b/usage.py deleted file mode 100644 index 37b187acc..000000000 --- a/usage.py +++ /dev/null @@ -1,77 +0,0 @@ -import dash -from dash.dependencies import Input, Output -import dash_table -import dash_html_components as html - -app = dash.Dash() - -app.css.config.serve_locally = True -app.scripts.config.serve_locally = True - -dataframe = [ - {'ind': 0, 'temp': 80, 'climate': 'Tropical'}, - {'ind': 1, 'temp': 30, 'climate': 'Snowy'}, - {'ind': 2, 'temp': 20, 'climate': 'Rain Forests'}, -] - -dataframe2 = [ - {'ind': 0, 'temp': 80, 'climate': 'Tropical'}, - {'ind': 1, 'temp': 30, 'climate': 'Snowy'}, - {'ind': 2, 'temp': 20, 'climate': 'Rain Forests'}, - {'ind': 2, 'temp': 20, 'climate': 'Rain Forests'}, - {'ind': 2, 'temp': 20, 'climate': 'Rain Forests'}, - {'ind': 2, 'temp': 20, 'climate': 'Rain Forests'}, -] - -app.layout = html.Div([ - dash_table.Table( - id='table', - dataframe=dataframe, - pagination_mode='be', - pagination_settings={ - 'displayed_pages': 1, - 'current_page': 0, - 'page_size': 100 - }, - navigation='page', - columns=[ - { - 'id': 'ind', - 'name': '' - }, - { - 'id': 'temp', - 'name': 'Temperature' - }, - { - 'id': 'climate', - 'name': 'Climate' - }, - ], - editable=True - ), - html.Div(id='container') -]) - - -@app.callback( - Output('table', 'dataframe'), - [Input('table', 'pagination_mode')] -) -def updateDataframe(): - return dataframe2 - - -@app.callback( - Output('container', 'children'), - [ - Input('table', 'derived_viewport_dataframe'), - Input('table', 'derived_viewport_indices') - ] -) -def updateContainer(): - return html.Pre('
Hello
') - - -if __name__ == '__main__': - app.run_server(debug=True) diff --git a/usage_table_changes.py b/usage_table_changes.py deleted file mode 100644 index 3907f9fa9..000000000 --- a/usage_table_changes.py +++ /dev/null @@ -1,59 +0,0 @@ -import dash -from dash.dependencies import Input, Output, State -import dash_table -import dash_html_components as html -import json - -app = dash.Dash() - -app.css.config.serve_locally = True -app.scripts.config.serve_locally = True - -app.layout = html.Div([ - dash_table.Table( - id='table', - dataframe=[ - {'ind': 0, 'temp': 80, 'climate': 'Tropical'}, - {'ind': 1, 'temp': 30, 'climate': 'Snowy'}, - {'ind': 2, 'temp': 20, 'climate': 'Rain Forests'}, - ], - columns=[ - { - 'id': 'ind', - 'name': '' - }, - { - 'id': 'temp', - 'name': 'Temperature' - }, - { - 'id': 'climate', - 'name': 'Climate' - }, - ], - editable=True - ), - html.Div(id='container') -]) - - -@app.callback( - Output('container', 'children'), - [Input('table', 'dataframe_timestamp')], - [State('table', 'dataframe'), - State('table', 'dataframe_previous')]) -def display_data(timestamp, dataframe, dataframe_previous): - changes = [] - for (i, row) in enumerate(dataframe): - row_prev = dataframe_previous[i] - for col in row: - if row[col] != row_prev[col]: - changes.append(u'rows[{}][{}] = {} ➡ {}'.format( - i, col, row_prev[col], row[col] - )) - - return html.Pre('\n'.join(changes), style={'fontSize': 20}) - - -if __name__ == '__main__': - app.run_server(debug=True) diff --git a/v_be_page_usage.py b/v_be_page_usage.py deleted file mode 100644 index 761975bc5..000000000 --- a/v_be_page_usage.py +++ /dev/null @@ -1,81 +0,0 @@ -import dash -from dash.dependencies import Input, Output, State - -import dash_html_components as html -import dash_table - -import pandas as pd -df = pd.read_csv('https://github.com/plotly/datasets/raw/master/26k-consumer-complaints.csv') -df = df.values - -app = dash.Dash() -app.css.config.serve_locally = True -app.scripts.config.serve_locally = True - -app.layout = html.Div([ - html.Div( - id='container', - children='Hello World' - ), - dash_table.Table( - id='table', - dataframe=[], - pagination_mode='be', - pagination_settings={ - 'displayed_pages': 1, - 'current_page': 0, - 'page_size': 5 - }, - navigation='page', - columns=[ - {'id': 0, 'name': 'Complaint ID'}, - {'id': 1, 'name': 'Product'}, - {'id': 2, 'name': 'Sub-product'}, - {'id': 3, 'name': 'Issue'}, - {'id': 4, 'name': 'Sub-issue'}, - {'id': 5, 'name': 'State'}, - {'id': 6, 'name': 'ZIP'}, - {'id': 7, 'name': 'code'}, - {'id': 8, 'name': 'Date received'}, - {'id': 9, 'name': 'Date sent to company'}, - {'id': 10, 'name': 'Company'}, - {'id': 11, 'name': 'Company response'}, - {'id': 12, 'name': 'Timely response?'}, - {'id': 13, 'name': 'Consumer disputed?'} - ], - editable=True - ) -]) - -@app.callback( - Output('table', 'dataframe'), - [Input('table', 'pagination_settings')] -) -def updateDataframe(pagination_settings): - print(pagination_settings) - - current_page = pagination_settings['current_page'] - displayed_pages = pagination_settings['displayed_pages'] - page_size = pagination_settings['page_size'] - - start_index = current_page * page_size - end_index = start_index + displayed_pages * page_size - print(str(start_index) + ',' + str(end_index)) - - return df[start_index:end_index] - -hidden = False -@app.callback( - Output('container', 'hidden'), - [Input('table', 'derived_viewport_dataframe'), Input('table', 'derived_viewport_indices')] -) -def updateViewportDataframe(derived_viewport_dataframe, derived_viewport_indices): - print(derived_viewport_dataframe) - - global hidden - - hidden = not hidden - return hidden - -if __name__ == '__main__': - app.run_server(debug=True) diff --git a/v_fe_page_usage.py b/v_fe_page_usage.py deleted file mode 100644 index 1e69b700b..000000000 --- a/v_fe_page_usage.py +++ /dev/null @@ -1,46 +0,0 @@ -import dash -from dash.dependencies import Input, Output, State - -import dash_html_components as html -import dash_table - -import pandas as pd -df = pd.read_csv('https://github.com/plotly/datasets/raw/master/26k-consumer-complaints.csv') -df = df.values - -app = dash.Dash() -app.css.config.serve_locally = True -app.scripts.config.serve_locally = True - -app.layout = html.Div([ - dash_table.Table( - id='table', - dataframe=df, - pagination_mode='fe', - pagination_settings={ - 'current_page': 0, - 'displayed_pages': 1, - 'page_size': 500 - }, - columns=[ - {'id': 0, 'name': 'Complaint ID'}, - {'id': 1, 'name': 'Product'}, - {'id': 2, 'name': 'Sub-product'}, - {'id': 3, 'name': 'Issue'}, - {'id': 4, 'name': 'Sub-issue'}, - {'id': 5, 'name': 'State'}, - {'id': 6, 'name': 'ZIP'}, - {'id': 7, 'name': 'code'}, - {'id': 8, 'name': 'Date received'}, - {'id': 9, 'name': 'Date sent to company'}, - {'id': 10, 'name': 'Company'}, - {'id': 11, 'name': 'Company response'}, - {'id': 12, 'name': 'Timely response?'}, - {'id': 13, 'name': 'Consumer disputed?'} - ], - editable=True - ) -]) - -if __name__ == '__main__': - app.run_server(debug=True)