UNPKG

344 kBSource Map (JSON)View Raw
1{"version":3,"sources":["webpack:///packages/perspective-viewer/webpack/universalModuleDefinition","webpack:///packages/perspective-viewer/webpack/bootstrap","webpack:///packages/perspective-viewer/external \"lit-html\"","webpack:///src/js/utils.js","webpack:///packages/perspective-viewer/external \"@finos/perspective/dist/esm/config\"","webpack:///packages/perspective-viewer/external \"core-js/modules/es.array.iterator\"","webpack:///packages/perspective-viewer/external \"core-js/modules/web.dom-collections.iterator\"","webpack:///../src/js/viewer/renderers.js","webpack:///packages/perspective-viewer/external \"@finos/perspective\"","webpack:///packages/perspective-viewer/external \"core-js/modules/es.promise\"","webpack:///node_modules/css-loader/lib/css-base.js","webpack:///packages/perspective-viewer/external \"core-js/modules/es.string.replace\"","webpack:///packages/perspective-viewer/external \"core-js/modules/es.regexp.to-string\"","webpack:///packages/perspective-viewer/external \"core-js/modules/es.string.includes\"","webpack:///packages/perspective-viewer/external \"lodash/debounce\"","webpack:///packages/perspective-viewer/external \"awesomplete\"","webpack:///packages/perspective-viewer/external \"core-js/modules/es.array.reverse\"","webpack:///packages/perspective-viewer/external \"core-js/modules/es.string.trim\"","webpack:///node_modules/webpack/buildin/global.js","webpack:///packages/perspective-viewer/external \"core-js/modules/es.symbol.description\"","webpack:///packages/perspective-viewer/external \"lodash/values\"","webpack:///packages/perspective-viewer/dist/html/computed_column.html","webpack:///packages/perspective-viewer/dist/less/computed_column.less","webpack:///node_modules/awesomplete/awesomplete.css","webpack:///packages/perspective-viewer/dist/html/row.html","webpack:///packages/perspective-viewer/dist/less/row.less","webpack:///packages/perspective-viewer/dist/html/viewer.html","webpack:///packages/perspective-viewer/dist/less/viewer.less","webpack:///packages/perspective-viewer/dist/less/default.less","webpack:///packages/perspective-viewer/external \"lodash/isEqual\"","webpack:///packages/perspective-viewer/external \"core-js/modules/es.array-buffer.slice\"","webpack:///packages/perspective-viewer/external \"core-js/modules/es.typed-array.uint8-array\"","webpack:///packages/perspective-viewer/external \"core-js/modules/es.typed-array.to-locale-string\"","webpack:///packages/perspective-viewer/external \"core-js/modules/web.url\"","webpack:///packages/perspective-viewer/external \"@webcomponents/webcomponentsjs\"","webpack:///src/js/polyfill.js","webpack:///packages/perspective-viewer/external \"core-js/modules/es.object.assign\"","webpack:///packages/perspective-viewer/external \"core-js/modules/es.string.match\"","webpack:///packages/perspective-viewer/external \"core-js/modules/es.string.split\"","webpack:///packages/perspective-viewer/external \"core-js/modules/es.array.flat-map\"","webpack:///packages/perspective-viewer/external \"core-js/modules/es.array.sort\"","webpack:///packages/perspective-viewer/external \"core-js/modules/es.array.unscopables.flat-map\"","webpack:///../src/js/computed_column/state.js","webpack:///../src/js/computed_column/computation.js","webpack:///../src/js/viewer/dragdrop.js","webpack:///src/js/computed_column.js","webpack:///src/js/row.js","webpack:///../src/js/viewer/cancel_task.js","webpack:///../src/js/viewer/state_element.js","webpack:///../src/js/viewer/perspective_element.js","webpack:///../src/js/viewer/dom_element.js","webpack:///../src/js/viewer/action_element.js","webpack:///src/js/viewer.js"],"names":["root","factory","exports","module","require","define","amd","a","i","window","__WEBPACK_EXTERNAL_MODULE__0__","__WEBPACK_EXTERNAL_MODULE__2__","__WEBPACK_EXTERNAL_MODULE__3__","__WEBPACK_EXTERNAL_MODULE__4__","__WEBPACK_EXTERNAL_MODULE__6__","__WEBPACK_EXTERNAL_MODULE__7__","__WEBPACK_EXTERNAL_MODULE__9__","__WEBPACK_EXTERNAL_MODULE__10__","__WEBPACK_EXTERNAL_MODULE__11__","__WEBPACK_EXTERNAL_MODULE__12__","__WEBPACK_EXTERNAL_MODULE__13__","__WEBPACK_EXTERNAL_MODULE__14__","__WEBPACK_EXTERNAL_MODULE__15__","__WEBPACK_EXTERNAL_MODULE__17__","__WEBPACK_EXTERNAL_MODULE__18__","__WEBPACK_EXTERNAL_MODULE__27__","__WEBPACK_EXTERNAL_MODULE__28__","__WEBPACK_EXTERNAL_MODULE__29__","__WEBPACK_EXTERNAL_MODULE__30__","__WEBPACK_EXTERNAL_MODULE__31__","__WEBPACK_EXTERNAL_MODULE__32__","__WEBPACK_EXTERNAL_MODULE__34__","__WEBPACK_EXTERNAL_MODULE__35__","__WEBPACK_EXTERNAL_MODULE__36__","__WEBPACK_EXTERNAL_MODULE__37__","__WEBPACK_EXTERNAL_MODULE__38__","__WEBPACK_EXTERNAL_MODULE__39__","installedModules","__webpack_require__","moduleId","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","registerElement","templateString","styleString","proto","template","div","document","createElement","innerHTML","Array","slice","children","importTemplate","content","child","createDocumentFragment","firstChild","Node","appendChild","setTemplateContent","toString","getAttribute","getOwnPropertyNames","descriptor","getOwnPropertyDescriptor","set","old","val","this","hasAttribute","_initializing","_initialized","setAttribute","console","log","customElements","attributeChangedCallback","connectedCallback","node","importNode","attachShadow","shadowRoot","super","bindTemplate","styleStrings","style","map","x","join","cls","_attribute","_default","desc","old_set","attr","JSON","stringify","parse","e","warn","copy_to_clipboard","csv","element","body","select","execCommand","removeChild","invertPromise","resolve","promise","Promise","_resolve","throttlePromise","target","lock","f","async","args","result","error","undefined","swap","container","elems","every","classList","contains","j","indexOf","reverse","insertBefore","length","json_attribute","array_attribute","RENDERERS","renderers","registerPlugin","plugin","Error","id","old_plugin","getPlugin","getInstance","global","__perspective_plugins__","forEach","html","register_debug_plugin","_view","to_csv","config","delimiter","timer","_render_time","render","selectMode","resize","delete","useSourceMap","list","item","cssMapping","btoa","sourceMapping","sourceMap","unescape","encodeURIComponent","sourceURLs","sources","source","sourceRoot","concat","cssWithMappingToString","mediaQuery","alreadyImportedModules","push","g","Function","CLASS_DRAG_IMAGE_SNAPBACK","CLASS_PREFIX","EVENT_DRAG_DRAGSTART_PENDING","EVENT_PREFIX","EVENT_DRAG_DRAGSTART_CANCEL","ALLOWED_EFFECTS","DROP_EFFECTS","supportsPassive","supportsPassiveEventListeners","opts","addEventListener","supportsPassiveEventListener","isDOMElement","tagName","addDocumentListener","ev","handler","passive","removeDocumentListener","removeEventListener","onEvt","el","event","capture","options","off","average","array","reduce","v","isTouchIdentifierContainedInTouchEvent","touchEvent","touchIdentifier","changedTouches","identifier","updateCentroidCoordinatesOfTouchesIn","coordinateProp","outPoint","pageXs","pageYs","touches","touch","y","TRANSFORM_CSS_VENDOR_PREFIXES","translateElementToPoint","pnt","originalTransforms","offset","centerOnCoordinates","parseInt","offsetWidth","offsetHeight","translate","transformProp","DataTransfer","_dataStore","_setDragImageHandler","_dropEffect","configurable","freeze","types","effectAllowed","setData","type","data","getData","clearData","format","index","splice","setDragImage","image","determineDropEffect","sourceNode","nodeType","dispatchDragEvent","dragEvent","targetElement","dataStore","dataTransfer","cancelable","relatedTarget","leaveEvt","dndEvent","Event","bubbles","screenX","screenY","clientX","clientY","pageX","pageY","targetRect","getBoundingClientRect","offsetX","left","offsetY","top","createDragEventFromTouch","defaultView","cancelled","dispatchEvent","determineDragOperation","dropEffect","DragOperationController","_initialEvent","_config","_sourceNode","_dragOperationEndedCb","_dragOperationState","_immediateUserSelection","_currentDropTarget","_lastTouchEvent","_initialTouch","_touchMoveHandler","_onTouchMove","_touchEndOrCancelHandler","_onTouchEndOrCancel","_setup","_this","_currentDragOperation","_dragDataStore","_currentHotspotCoordinates","_dragImagePageCoordinates","dragImageSrc","_dataTransfer","_dragImageOffset","_cleanup","dragImage","dragImageSetup","_dragImageTransforms","prefix","transform","replace","position","zIndex","add","_dragImage","dragImageOffset","dragImageCenterOnTouch","cs","getComputedStyle","marginLeft","marginTop","width","height","_iterationIntervalId","setInterval","_iterationLock","_dragAndDropProcessModelIteration","iterationInterval","clearInterval","parentNode","startDrag","dragStartConditionOverride","preventDefault","dragImageTranslateOverride","handledDragImageTranslate_1","previousDragOperation","dragCancelled","_dragOperationEnded","sourceEl","dragImageTransforms","transitionEndCb","visibility","display","csDragImage","durationInS","parseFloat","transitionDuration","isNaN","rect","scrollLeft","documentElement","scrollTop","delayInS","transitionDelay","durationInMs","Math","round","setTimeout","applyDragImageSnapback","_finishDragOperation","newUserSelection","elementFromPoint","previousTargetElement","remove","currentDragOperationClass","state","dragFailed","tryFindDraggableTarget","draggable","cloneNode","prepareNodeCopyAsDragImage","srcNode","dstNode","csName","setProperty","getPropertyValue","getPropertyPriority","pointerEvents","removeAttribute","nodeName","canvasSrc","canvasDst","canvasSrcImgData","getContext","getImageData","putImageData","hasChildNodes","childNodes","activeDragOperation","onTouchstart","composePath","dragTarget","dragOperationEnded","err","onDelayTouchstart","evt","composedPath","onReleasedItem","end","cancel","move","scroll","CustomEvent","clearTimeout","holdToDrag","defaultActionOverride","defaultPrevented","override","keys","forceApply","detectedFeatures","features","dragEvents","userAgentSupportingNativeDnD","isBlinkEngine","chrome","test","navigator","userAgent","detectFeatures","polyfill","cp","_path","State","constructor","edit","column_name","computation","input_columns","swap_target","name_edited","computed_function_name","is_valid","vals","values","includes","num_params","FORMATTER","Computation","formatter","input_type","return_type","func","category","calc_index","_active_columns","is_last_null","cidx","offsetTop","last_index","dragend","getRootNode","host","parent","parentElement","idx","attr_name","attr_value","drop","currentTarget","_drop_target_hover","querySelector","columns","data_index","filtering","_plugin","deselectMode","_get_visible_column_count","querySelectorAll","_update_column_view","_debounce_update","column_dragend","column_dragleave","src","_drop_target_null","replaceChild","_original_index","_unset_drop_target_null","column_swap","new_index","column_replace","column_dragover","className","toggleAttribute","current_index","over_elem","to_replace","initial","names","is_diff","from_active","from_replace","from_append","from_required","count","to_null","column_drop","dragenter","stopPropagation","dragover","dragleave","COMPUTATIONS","hour_of_day","Date","getHours","day_of_week","getDay","month_of_year","getMonth","second_bucket","floor","getTime","minute_bucket","date","setSeconds","setMilliseconds","hour_bucket","setMinutes","day_bucket","setHours","week_bucket","day","diff","getDate","setDate","month_bucket","year_bucket","setMonth","b","subtract","multiply","divide","invert","pow","sqrt","abs","percent_a_of_b","uppercase","toUpperCase","lowercase","toLowerCase","concat_space","concat_comma","_insert_tree","elem","tree","pointer","path","_get_tree","comp","TREE","column_names","type_markers","float","integer","string","boolean","datetime","_register_ids","from","_selector_template","_computation_selector","_register_callbacks","_update_computation","_register_inputs","_register_computations","entries","_clear_error_messages","_disable_save_button","_input_columns","column","_drop_column","_drag_column","_remove_column","_hover_column","_pass_column","_clear_column_name","_parse_data_transfer","column_data","column_type","drop_target","drop_target_hover","nextSibling","is_swap","current_column","current_column_name","current_column_type","swapTarget","_set_input_column","deselect_column","_apply_state","bounds","inside_x","right","inside_y","bottom","inputs","_column_name_input","innerText","_set_column_name","_enable_save_button","_auto_column_name","apply","computation_type","Number","filter","detail","computation_name","selectedIndex","assign","reset_inputs","_computation_type","_set_error_message","message","_column_name_error","_save_button","_save_computed_column","computed_column","_close_computed_column","_side_panel_actions","_close_button","SPAN","get_text_width","text","max","fontFamily","fontSize","awesomplete_style","_option_template","agg","_select_template","items","perspective","weighted_options","_weights","nothing","set_weights","xs","type_config","get_type_config","agg_dropdown","filter_dropdown","aggregate","filter_operand","_callback","_update_filter","choices","filter_operator","selector","Awesomplete","label","minChars","autoFirst","input","FILTER_CONTAINS","match","ITEM","before","evaluate","focus","_filter_operand","trim","operator","filter_input","operand","FILTER_OPERATORS","isNull","isNotNull","_blur_agg_dropdown","_get_computed_data","isIn","isNotIn","split","_set_data_transfer","_li","_visible","_row_close","_agg_dropdown","_sort_order","_filter_operator","_edit_computed_column_button","_column_aggregate_category","blur","option","_focus_agg_dropdown","debounced_filter","debounce","CancelTask","on_cancel","_on_cancel","_cancelled","StateElement","current_renderers","view","_get_view_dom_columns","callback","_get_view_all_columns","_get_view_active_columns","_get_view_active_valid_columns","_get_view_all_column_names","_get_view_active_column_names","_get_view_all_valid_column_names","_get_view_active_valid_column_names","_get_view_active_valid_column_count","_get_view_columns","active","col","_get_view_aggregates","op","_get_view_row_pivots","_get_view_column_pivots","_get_view_filter_nodes","_get_view_filters","_get_view_sorts","order","get_aggregate_attribute","aggs","found","Set","new_aggs","_aggregate_defaults","has","numberWithCommas","TYPE_ORDER","column_sorter","schema","s1","s2","_total_template","total","_nowrap_template","_warning","strings","flatMap","str","PerspectiveElement","computed_columns","_create_computed_column","ignore_size_check","table","computed","_set_updating","_table","_clear_state","_check_recreate_computed_columns","cols","computed_schema","all","_clear_columns","_initial_col_order","sort","aggregate_attribute","find","all_cols","aggregates","TYPE_AGGREGATES","get_aggregates_with_defaults","shown","get_aggregate_defaults","row","_new_row","_inactive_columns","active_row","_show_column_container","compute","_show_side_panel_actions","filters","force_update","reset","max_cols","max_rows","num_columns","schema_columns","max_columns","column_group_diff","column_limit","max_cells","ceil","_show_warnings","num_rows","columns_are_truncated","rows_are_truncated","_plugin_information","warning","_plugin_information_message","_calculate_throttle_timeout","timeout","throttle","__render_times","min","_view_on_update","limit_points","_debounced","_task","task","updater","update","get_maxes","_warn_render_size_exceeded","_datavis","operandNode","getElementById","exclamation","is_valid_filter","title","borderColor","hidden","_is_config_changed","plugin_name","isEqual","_previous_config","_previous_plugin_name","_check_responsive_layout","row_pivots","column_pivots","_validate_filters","view_aggregates","obj","remove_update","_view_updater","on_update","_render_count","_check_loaded_table","_load_table","performance","now","unshift","_restyle_plugin","styleElement","clear_table","remove_delete","_owner_viewer","_updating_promise","_register_debounce_instance","_update","_new_view","then","_get_worker","_worker","shared_worker","DomElement","set_aggregate_attribute","is_set","_get_type","_set_row_type","weights","to_json","json","_autocomplete_choices","isArray","_column_visibility_clicked","_column_aggregate_clicked","_column_filter_clicked","_sort_order_clicked","overflow","findIndex","pop_cols","lis","_update_column_list","ref","accessor","active_columns","next_col","_set_row_styles","nidx","_remove_null_columns","since_index","_set_column_defaults","active_cols","valid_active_cols","pref","_fill_numeric","labels","bypass","app","clientHeight","clientWidth","_persisted_side_panel_width","_side_panel","panel","_pre_resize","_aggregate_selector","_vis_selector","_filters","_row_pivots","_column_pivots","_add_computed_column","_computed_column","_computed_column_inputs","_inner_drop_target","_drop_target","_config_button","_reset_button","_download_button","_copy_button","_top_panel","_sort","_transpose_button","_plugin_information_action","_plugin_information_action_close","_resize_bar","_register_view_options","_register_data_attribute","load","__ROW_PATH__","ActionElement","_show_context_menu","toggle","_hide_context_menu","button","_show_config","_post_resize","post","pre","offsetParent","_open_computed_column","stopImmediatePropagation","_set_computed_column_input","_validate_computed_column","new_column","computed_column_name","random","params","add_computed","min_columns","shiftKey","new_aggregates","updated_agg","new_filters","_updating_filter","_increment_sort","column_sorting","abs_sorting","sort_orders","new_sort_order","_transpose","has_row","has_col","_reset_sidepanel","_resize_sidepanel","cursor","start","new_width","notifyResize","stop","_vis_selector_changed","classname","_toggle_config","copy","download","PERSISTENT_ATTRIBUTES","view_style","default_style","_resize_handler","toggleConfig","inner","dir","show","fterms","plugin_names","guess_plugin","pivots","pivot","worker","isConnected","immediate","clone","widget","restore","save","delete_table","restyleElement","attributes","plugin_config","clear","_load","flat","binStr","len","arr","Uint8Array","charCodeAt","blob","Blob","URL","createObjectURL","click","catch"],"mappings":"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","file":"perspective-viewer.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"lit-html\"), require(\"@finos/perspective/dist/esm/config\"), require(\"core-js/modules/es.array.iterator\"), require(\"core-js/modules/web.dom-collections.iterator\"), require(\"@finos/perspective\"), require(\"core-js/modules/es.promise\"), require(\"core-js/modules/es.string.replace\"), require(\"core-js/modules/es.regexp.to-string\"), require(\"core-js/modules/es.string.includes\"), require(\"lodash/debounce\"), require(\"awesomplete\"), require(\"core-js/modules/es.array.reverse\"), require(\"core-js/modules/es.string.trim\"), require(\"core-js/modules/es.symbol.description\"), require(\"lodash/values\"), require(\"lodash/isEqual\"), require(\"core-js/modules/es.array-buffer.slice\"), require(\"core-js/modules/es.typed-array.uint8-array\"), require(\"core-js/modules/es.typed-array.to-locale-string\"), require(\"core-js/modules/web.url\"), require(\"@webcomponents/webcomponentsjs\"), require(\"core-js/modules/es.object.assign\"), require(\"core-js/modules/es.string.match\"), require(\"core-js/modules/es.string.split\"), require(\"core-js/modules/es.array.flat-map\"), require(\"core-js/modules/es.array.sort\"), require(\"core-js/modules/es.array.unscopables.flat-map\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"lit-html\", \"@finos/perspective/dist/esm/config\", \"core-js/modules/es.array.iterator\", \"core-js/modules/web.dom-collections.iterator\", \"@finos/perspective\", \"core-js/modules/es.promise\", \"core-js/modules/es.string.replace\", \"core-js/modules/es.regexp.to-string\", \"core-js/modules/es.string.includes\", \"lodash/debounce\", \"awesomplete\", \"core-js/modules/es.array.reverse\", \"core-js/modules/es.string.trim\", \"core-js/modules/es.symbol.description\", \"lodash/values\", \"lodash/isEqual\", \"core-js/modules/es.array-buffer.slice\", \"core-js/modules/es.typed-array.uint8-array\", \"core-js/modules/es.typed-array.to-locale-string\", \"core-js/modules/web.url\", \"@webcomponents/webcomponentsjs\", \"core-js/modules/es.object.assign\", \"core-js/modules/es.string.match\", \"core-js/modules/es.string.split\", \"core-js/modules/es.array.flat-map\", \"core-js/modules/es.array.sort\", \"core-js/modules/es.array.unscopables.flat-map\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"lit-html\"), require(\"@finos/perspective/dist/esm/config\"), require(\"core-js/modules/es.array.iterator\"), require(\"core-js/modules/web.dom-collections.iterator\"), require(\"@finos/perspective\"), require(\"core-js/modules/es.promise\"), require(\"core-js/modules/es.string.replace\"), require(\"core-js/modules/es.regexp.to-string\"), require(\"core-js/modules/es.string.includes\"), require(\"lodash/debounce\"), require(\"awesomplete\"), require(\"core-js/modules/es.array.reverse\"), require(\"core-js/modules/es.string.trim\"), require(\"core-js/modules/es.symbol.description\"), require(\"lodash/values\"), require(\"lodash/isEqual\"), require(\"core-js/modules/es.array-buffer.slice\"), require(\"core-js/modules/es.typed-array.uint8-array\"), require(\"core-js/modules/es.typed-array.to-locale-string\"), require(\"core-js/modules/web.url\"), require(\"@webcomponents/webcomponentsjs\"), require(\"core-js/modules/es.object.assign\"), require(\"core-js/modules/es.string.match\"), require(\"core-js/modules/es.string.split\"), require(\"core-js/modules/es.array.flat-map\"), require(\"core-js/modules/es.array.sort\"), require(\"core-js/modules/es.array.unscopables.flat-map\")) : factory(root[\"lit-html\"], root[\"@finos/perspective/dist/esm/config\"], root[\"core-js/modules/es.array.iterator\"], root[\"core-js/modules/web.dom-collections.iterator\"], root[\"@finos/perspective\"], root[\"core-js/modules/es.promise\"], root[\"core-js/modules/es.string.replace\"], root[\"core-js/modules/es.regexp.to-string\"], root[\"core-js/modules/es.string.includes\"], root[\"lodash/debounce\"], root[\"awesomplete\"], root[\"core-js/modules/es.array.reverse\"], root[\"core-js/modules/es.string.trim\"], root[\"core-js/modules/es.symbol.description\"], root[\"lodash/values\"], root[\"lodash/isEqual\"], root[\"core-js/modules/es.array-buffer.slice\"], root[\"core-js/modules/es.typed-array.uint8-array\"], root[\"core-js/modules/es.typed-array.to-locale-string\"], root[\"core-js/modules/web.url\"], root[\"@webcomponents/webcomponentsjs\"], root[\"core-js/modules/es.object.assign\"], root[\"core-js/modules/es.string.match\"], root[\"core-js/modules/es.string.split\"], root[\"core-js/modules/es.array.flat-map\"], root[\"core-js/modules/es.array.sort\"], root[\"core-js/modules/es.array.unscopables.flat-map\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function(__WEBPACK_EXTERNAL_MODULE__0__, __WEBPACK_EXTERNAL_MODULE__2__, __WEBPACK_EXTERNAL_MODULE__3__, __WEBPACK_EXTERNAL_MODULE__4__, __WEBPACK_EXTERNAL_MODULE__6__, __WEBPACK_EXTERNAL_MODULE__7__, __WEBPACK_EXTERNAL_MODULE__9__, __WEBPACK_EXTERNAL_MODULE__10__, __WEBPACK_EXTERNAL_MODULE__11__, __WEBPACK_EXTERNAL_MODULE__12__, __WEBPACK_EXTERNAL_MODULE__13__, __WEBPACK_EXTERNAL_MODULE__14__, __WEBPACK_EXTERNAL_MODULE__15__, __WEBPACK_EXTERNAL_MODULE__17__, __WEBPACK_EXTERNAL_MODULE__18__, __WEBPACK_EXTERNAL_MODULE__27__, __WEBPACK_EXTERNAL_MODULE__28__, __WEBPACK_EXTERNAL_MODULE__29__, __WEBPACK_EXTERNAL_MODULE__30__, __WEBPACK_EXTERNAL_MODULE__31__, __WEBPACK_EXTERNAL_MODULE__32__, __WEBPACK_EXTERNAL_MODULE__34__, __WEBPACK_EXTERNAL_MODULE__35__, __WEBPACK_EXTERNAL_MODULE__36__, __WEBPACK_EXTERNAL_MODULE__37__, __WEBPACK_EXTERNAL_MODULE__38__, __WEBPACK_EXTERNAL_MODULE__39__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 40);\n","module.exports = __WEBPACK_EXTERNAL_MODULE__0__;","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\n/**\n * Instantiate a Template DOM object from an HTML text string.\n *\n * Params\n * ------\n * template : An HTML string representing a template.\n *\n * Returns\n * -------\n * A Template DOM object.\n */\n\nexport function importTemplate(template) {\n const div = document.createElement(\"div\");\n div.innerHTML = template;\n return Array.prototype.slice.call(div.children)[0];\n}\n\nfunction setTemplateContent(template) {\n // return early in browsers that have template tag support\n if (template.content) {\n return;\n }\n template.content = document.createDocumentFragment();\n let child;\n while ((child = template.firstChild)) {\n Node.prototype.appendChild.call(template.content, child);\n }\n}\n\n/**\n * A simple tool for creating Web Components v0.\n *\n * Params\n * ------\n * template : An HTML string representing a template. Should have an 'id'\n * attribute which will become the new Web Component's tag name.\n * proto : The new Web Component's prototype object, as per spec.\n */\nexport function registerElement(templateString, styleString, proto) {\n const template = importTemplate(templateString);\n setTemplateContent(template);\n if (styleString) {\n template.innerHTML = `<style>${styleString.toString()}</style>` + template.innerHTML;\n }\n template.innerHTML = `<style id=\"psp_styles\" scope=\"${template.getAttribute(\"id\")}\">test{}</style>` + template.innerHTML;\n\n const _perspective_element = class extends proto {\n attributeChangedCallback(name, old, value) {\n if (value === null) {\n value = \"null\";\n }\n if (name[0] !== \"_\" && old != value && !!Object.getOwnPropertyDescriptor(proto.prototype, name).set) {\n this[name] = value;\n }\n }\n\n connectedCallback() {\n if (this._initialized) {\n return;\n }\n this._initializing = true;\n var node = document.importNode(template.content, true);\n this.attachShadow({mode: \"open\"});\n this.shadowRoot.appendChild(node);\n\n if (super.connectedCallback) {\n super.connectedCallback();\n }\n\n // Call all attributes bound to setters on the proto\n for (let key of Object.getOwnPropertyNames(proto.prototype)) {\n if (key !== \"connectedCallback\") {\n if (this.hasAttribute(key) && key[0] !== \"_\" && !!Object.getOwnPropertyDescriptor(proto.prototype, key).set) {\n this[key] = this.getAttribute(key);\n }\n }\n }\n this._initializing = false;\n this._initialized = true;\n }\n\n static get observedAttributes() {\n return Object.getOwnPropertyNames(proto.prototype);\n }\n };\n\n for (let key of Object.getOwnPropertyNames(proto.prototype)) {\n let descriptor = Object.getOwnPropertyDescriptor(proto.prototype, key);\n if (descriptor && descriptor.set) {\n let old = descriptor.set;\n descriptor.set = function(val) {\n if (!this.hasAttribute(key) || this.getAttribute(key) !== val) {\n this.setAttribute(key, val);\n return;\n }\n if (!this._initializing && !this._initialized) {\n return;\n }\n old.call(this, val);\n };\n Object.defineProperty(proto.prototype, key, descriptor);\n }\n }\n\n let name = template.getAttribute(\"id\");\n console.log(`Registered ${name}`);\n\n window.customElements.define(name, _perspective_element);\n}\n\nexport function bindTemplate(template, ...styleStrings) {\n const style = styleStrings.map(x => x.toString()).join(\"\\n\");\n return function(cls) {\n return registerElement(template, {toString: () => style}, cls);\n };\n}\n\n/**\n * A decorator for declaring a setter property of an HTMLElement descendent\n * class as serialized JSON. Handles converting these types before invoking\n * the underlying function/\n *\n * @param {object} _default the default value to supply the setter when\n * undefined, removed or invalid.\n */\nfunction _attribute(_default) {\n return function(cls, name, desc) {\n const old_set = desc.value;\n desc.set = function(x) {\n let attr = this.getAttribute(name);\n try {\n if (x === null || x === undefined || x === \"\") {\n x = _default();\n }\n if (typeof x !== \"string\") {\n x = JSON.stringify(x);\n }\n if (x !== attr) {\n attr = x;\n }\n attr = JSON.parse(attr);\n } catch (e) {\n console.warn(`Invalid value for attribute \"${name}\": ${x}`);\n attr = _default();\n }\n old_set.call(this, attr);\n };\n desc.get = function() {\n if (this.hasAttribute(name)) {\n return JSON.parse(this.getAttribute(name));\n } else {\n return _default();\n }\n };\n delete desc[\"value\"];\n delete desc[\"writable\"];\n return desc;\n };\n}\n\nexport function copy_to_clipboard(csv) {\n let element = document.createElement(\"textarea\");\n document.body.appendChild(element);\n element.value = csv;\n element.select();\n document.execCommand(\"copy\");\n document.body.removeChild(element);\n}\n\n/**\n * Just like `setTimeout` except it returns a promise which resolves after the\n * callback has (also resolved).\n *\n * @param {func} cb\n * @param {*} timeout\n */\nexport async function setPromise(cb = async () => {}, timeout = 0) {\n await new Promise(x => setTimeout(x, timeout));\n return await cb();\n}\n\nconst invertPromise = () => {\n let resolve;\n let promise = new Promise(_resolve => {\n resolve = _resolve;\n });\n promise.resolve = resolve;\n return promise;\n};\n\nexport function throttlePromise(target, property, descriptor) {\n const lock = Symbol(\"private lock\");\n const f = descriptor.value;\n descriptor.value = async function(...args) {\n if (this[lock]) {\n await this[lock];\n if (this[lock]) {\n await this[lock];\n return;\n }\n }\n this[lock] = invertPromise();\n let result;\n try {\n result = await f.call(this, ...args);\n } catch (e) {\n console.error(e);\n } finally {\n const l = this[lock];\n this[lock] = undefined;\n l.resolve();\n return result;\n }\n };\n return descriptor;\n}\n\n/**\n * Swap 2 HTMLElements in a container.\n * @param {HTMLElement} container\n * @param {HTMLElement} elem1\n * @param {HTMLElement} elem2\n */\nexport function swap(container, ...elems) {\n if (elems[0] === elems[1]) return;\n if (elems.every(x => x.classList.contains(\"null-column\"))) return;\n let [i, j] = elems.map(x => Array.prototype.slice.call(container.children).indexOf(x));\n if (j < i) {\n [i, j] = [j, i];\n elems = elems.reverse();\n }\n container.insertBefore(elems[1], elems[0]);\n if (j + 1 === container.children.length) {\n container.appendChild(elems[0]);\n } else {\n container.insertBefore(elems[0], container.children[j + 1]);\n }\n}\n\nexport const json_attribute = _attribute(() => ({}));\nexport const array_attribute = _attribute(() => []);\n\nexport const registerPlugin = (name, plugin) => {\n if (global.registerPlugin) {\n global.registerPlugin(name, plugin);\n } else {\n global.__perspective_plugins__ = global.__perspective_plugins__ || [];\n global.__perspective_plugins__.push([name, plugin]);\n }\n};\n","module.exports = __WEBPACK_EXTERNAL_MODULE__2__;","module.exports = __WEBPACK_EXTERNAL_MODULE__3__;","module.exports = __WEBPACK_EXTERNAL_MODULE__4__;","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {html, render} from \"lit-html\";\n\nconst RENDERERS = {};\n\nexport const renderers = new (class {\n /**\n * Register a plugin with the <perspective-viewer> component.\n *\n * @param {string} name The logical unique name of the plugin. This will be\n * used to set the component's `view` attribute.\n * @param {object} plugin An object with this plugin's prototype.\n * Valid keys are:\n * @param {string} plugin.name The display name for this plugin.\n * @param {string} plugin.create (required) The creation function - may\n * return a `Promise`.\n * @param {string} plugin.delete The deletion function.\n * @param {string} plugin.mode The selection mode - may be \"toggle\" or\n * \"select\".\n */\n registerPlugin(name, plugin) {\n if (RENDERERS[name]) {\n throw new Error(`A perspective-viewer plugin \"${name}\" has already been registered`);\n }\n for (const id in RENDERERS) {\n const old_plugin = RENDERERS[id];\n if (old_plugin && old_plugin.name === plugin.name) {\n console.warn(`Conflicting plugin name \"${plugin.name}\", qualifying with id`);\n old_plugin.name = `${old_plugin.name} [${id}]`;\n plugin.name = `${plugin.name} [${name}]`;\n }\n }\n RENDERERS[name] = plugin;\n }\n\n getPlugin(name) {\n return RENDERERS[name];\n }\n\n getInstance() {\n return RENDERERS;\n }\n})();\n\nglobal.registerPlugin = renderers.registerPlugin;\n\nglobal.getPlugin = renderers.getPlugin;\n\nif (global.__perspective_plugins__) {\n global.__perspective_plugins__.forEach(([name, plugin]) => global.registerPlugin(name, plugin));\n}\n\nconst template = csv =>\n html`\n <pre style=\"margin:0;overflow:scroll;position:absolute;width:100%;height:100%\">${csv}</pre>\n `;\n\nexport function register_debug_plugin() {\n global.registerPlugin(\"debug\", {\n name: \"Debug\",\n create: async function(div) {\n const csv = await this._view.to_csv({config: {delimiter: \"|\"}});\n const timer = this._render_time();\n render(template(csv), div);\n timer();\n },\n selectMode: \"toggle\",\n resize: function() {},\n delete: function() {}\n });\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__6__;","module.exports = __WEBPACK_EXTERNAL_MODULE__7__;","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__9__;","module.exports = __WEBPACK_EXTERNAL_MODULE__10__;","module.exports = __WEBPACK_EXTERNAL_MODULE__11__;","module.exports = __WEBPACK_EXTERNAL_MODULE__12__;","module.exports = __WEBPACK_EXTERNAL_MODULE__13__;","module.exports = __WEBPACK_EXTERNAL_MODULE__14__;","module.exports = __WEBPACK_EXTERNAL_MODULE__15__;","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__17__;","module.exports = __WEBPACK_EXTERNAL_MODULE__18__;","module.exports = \"<!--\\n\\nCopyright (c) 2017, the Perspective Authors.\\n\\nThis file is part of the Perspective library, distributed under the terms of\\nthe Apache License 2.0. The full license can be found in the LICENSE file.\\n\\n-->\\n\\n<template id=\\\"perspective-computed-column\\\">\\n <div id=\\\"psp-cc__body\\\">\\n <span id=\\\"psp-cc__close\\\" aria-label=\\\"Close Computed Column\\\">&times;</span>\\n <div class=\\\"psp-cc__container\\\" style=\\\"display:none\\\">\\n <span id=\\\"psp-cc__mode\\\"></span>\\n </div>\\n <div class=\\\"psp-cc__container\\\" style=\\\"margin-top:-7px;\\\">\\n <div class=\\\"psp-cc__content\\\">\\n <div id=\\\"psp-cc-computation__type\\\"></div>\\n <span contentEditable=true type=\\\"text\\\" required maxlength=\\\"25\\\" size=\\\"10\\\" autocomplete=\\\"off\\\" id=\\\"psp-cc-name\\\"></span>\\n </div>\\n <div class=\\\"psp-cc__content psp-cc__content--nomargin\\\">\\n <span class=\\\"psp-cc__label psp-cc__error\\\" id=\\\"psp-cc__error--name\\\"></span>\\n </div>\\n </div>\\n <div class=\\\"psp-cc__container\\\">\\n <div class=\\\"psp-cc__content\\\">\\n <select id=\\\"psp-cc-computation__select\\\">\\n </select>\\n </div>\\n </div>\\n <div class=\\\"psp-cc__container\\\" style=\\\"margin-top:-12px;\\\">\\n <div id=\\\"psp-cc-computation-inputs\\\">\\n <!--<div class=\\\"psp-cc-computation__input-column\\\" drop-target></div>-->\\n </div>\\n </div>\\n </div>\\n <div id=\\\"psp-cc__actions\\\">\\n <button id=\\\"psp-cc-button-delete\\\" class=\\\"psp-cc__button\\\">Delete</button>\\n <button id=\\\"psp-cc-button-save\\\" class=\\\"psp-cc__button\\\" disabled>Save</button>\\n </div>\\n</template>\";","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \":host{display:none;flex-direction:column;max-height:35%;margin-top:34px;margin-bottom:24px;flex:0 0 auto!important}:host *{box-sizing:border-box}:host select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--select--background,url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgNC45IDEwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0LjkgMTA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojQUFBQUFBO30KPC9zdHlsZT4KPHRpdGxlPmFycm93czwvdGl0bGU+Cjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMS40LDQuNyAyLjUsMy4yIDMuNSw0LjcgIi8+Cjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMy41LDUuMyAyLjUsNi44IDEuNCw1LjMgIi8+Cjwvc3ZnPg==) no-repeat 95% 50%);background-color:#fff;outline:0;border:none;height:24px;padding:0 0 0 6px;font-size:12px}:host.edit #psp-cc-button-delete{display:block!important}:host .psp-cc__label{color:#666;font-size:10px;margin-left:8px}:host .psp-cc__label.psp-cc__error{color:#cb4549!important;display:none}:host #psp-cc__actions{display:flex;justify-content:flex-start;margin-right:5px;margin-left:20px;margin-top:12px}:host #psp-cc__body,:host .psp-cc__container{display:flex;flex-direction:column}:host #psp-cc__body.row,:host .psp-cc__container.row{align-items:center;flex-direction:row}:host span#psp-cc__close{color:#666;position:absolute}:host span#psp-cc__close:hover{cursor:pointer}:host .psp-cc__container{margin:2px 0 10px 26px}:host .psp-cc__container:first-of-type{margin-bottom:0}:host .psp-cc__container span#psp-cc__mode{color:#000;font-size:12px}:host .psp-cc__container input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#fff;border-bottom:1px solid #ccc;font-size:12px;padding:3px 4px;flex-basis:500px}:host #psp-cc-name{background-color:#eee;border-bottom:1px solid #ccc;color:#333;cursor:default!important;font-size:12px;padding-left:2px;width:100%}:host #psp-cc-name:empty:before{content:\\\"New Column\\\";color:#ccc}:host #psp-cc-name *{display:inline}:host #psp-cc-name br{display:none}:host .psp-label__placeholder{color:#ccc;display:inline-block;font-size:12px;margin-left:4px}:host .psp-label__requiredType{margin-left:5px;margin-top:-1px;display:inline-block}:host .psp-label__requiredType.float::before,:host .psp-label__requiredType.integer::before{font-family:monospace;display:flex;content:\\\"123\\\";color:#016bc6}:host .psp-label__requiredType.string::before{font-family:monospace;display:flex;content:\\\"abc\\\";color:#fe9292}:host .psp-label__requiredType.boolean::before{font-family:monospace;display:flex;content:\\\"t/f\\\";color:#999}:host .psp-label__requiredType.datetime::before{font-family:monospace;display:flex;content:\\\"mdy\\\";color:#999}:host .psp-label__requiredType.date::before{font-family:monospace;display:flex;content:\\\"mdy\\\";color:#999}:host .psp-cc-computation__input-column{box-sizing:border-box;display:flex;align-items:center;border-bottom:1px solid #ccc;margin-top:5px;height:23px;width:100%}:host .psp-cc-computation__input-column perspective-row{margin-left:-26px;margin-right:-5px;width:calc(100% + 26px)}:host .psp-cc-computation__input-column.dropping{background-color:#f0f0ff!important;border:1px solid #1078d1!important;cursor:copy!important}:host .psp-cc-computation__input-column.dropping perspective-row{display:none!important;pointer-events:none}:host .psp-cc-computation__input-column.dropped{border:0;background:0 0}:host perspective-row{margin-bottom:2px;--row_draggable-overflow:hidden;--name-before-display:inline-block;--is_visible-display:inline-block;--row_draggable-padding:2px 10px 2px 2px;--row_close-display:none;--psp_row-margin:0 5px 0 0;--column_name-max-width:180px}:host perspective-row[drop-target]{--row_draggable_children-opacity:0}:host .psp-cc__content{align-items:center;display:flex;margin-top:5px}:host .psp-cc__content.psp-cc__content--nomargin{margin-top:0}:host #psp-cc-computation__type{box-sizing:border-box;display:flex;font-family:monospace;flex-direction:column;font-size:12px;padding-right:3px;padding-left:6px;background:eee;height:24px;text-align:center;padding-top:4px}:host #psp-cc-computation__type .boolean,:host #psp-cc-computation__type .date,:host #psp-cc-computation__type .datetime{color:#999}:host #psp-cc-computation__type .float,:host #psp-cc-computation__type .integer{color:#016bc6}:host #psp-cc-computation__type .string{color:#fe9292}:host #psp-cc-computation__select{margin-left:auto;width:100%;background-color:#eee;font-size:10px;border-bottom:none;color:#666}:host #psp-cc-computation__drop-target-hover{display:none}:host .psp-cc__button{border-radius:0;border-bottom:1px solid #ccc;border-left:0;border-right:0;border-top:0;font-size:12px;margin-left:6px;padding:2px 5px;width:45px}:host .psp-cc__button:hover{cursor:pointer}:host .psp-cc__button[disabled]{background:#666!important;color:#a0a0a0!important;cursor:not-allowed;border-bottom-color:#000!important;opacity:.5}:host .psp-cc__button#psp-cc-button-delete{background:#e76056;border-bottom-color:#bf4d45;color:#fff;display:none}:host .psp-cc__button#psp-cc-button-delete:active{background:#bf4d45;border-bottom-color:#9d3f39}:host .psp-cc__button#psp-cc-button-save{background:#0171d2;border-bottom-color:#0160b1;color:#fff;height:22px}:host .psp-cc__button#psp-cc-button-save:active{background:#0160b1;border-bottom-color:#014986}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".awesomplete [hidden] {\\n display: none;\\n}\\n\\n.awesomplete .visually-hidden {\\n position: absolute;\\n clip: rect(0, 0, 0, 0);\\n}\\n\\n.awesomplete {\\n display: inline-block;\\n position: relative;\\n}\\n\\n.awesomplete > input {\\n display: block;\\n}\\n\\n.awesomplete > ul {\\n position: absolute;\\n left: 0;\\n z-index: 1;\\n min-width: 100%;\\n box-sizing: border-box;\\n list-style: none;\\n padding: 0;\\n margin: 0;\\n background: #fff;\\n}\\n\\n.awesomplete > ul:empty {\\n display: none;\\n}\\n\\n.awesomplete > ul {\\n\\tborder-radius: .3em;\\n\\tmargin: .2em 0 0;\\n\\tbackground: hsla(0,0%,100%,.9);\\n\\tbackground: linear-gradient(to bottom right, white, hsla(0,0%,100%,.8));\\n\\tborder: 1px solid rgba(0,0,0,.3);\\n\\tbox-shadow: .05em .2em .6em rgba(0,0,0,.2);\\n\\ttext-shadow: none;\\n}\\n\\n@supports (transform: scale(0)) {\\n\\t.awesomplete > ul {\\n\\t\\ttransition: .3s cubic-bezier(.4,.2,.5,1.4);\\n\\t\\ttransform-origin: 1.43em -.43em;\\n\\t}\\n\\t\\n\\t.awesomplete > ul[hidden],\\n\\t.awesomplete > ul:empty {\\n\\t\\topacity: 0;\\n\\t\\ttransform: scale(0);\\n\\t\\tdisplay: block;\\n\\t\\ttransition-timing-function: ease;\\n\\t}\\n}\\n\\n\\t/* Pointer */\\n\\t.awesomplete > ul:before {\\n\\t\\tcontent: \\\"\\\";\\n\\t\\tposition: absolute;\\n\\t\\ttop: -.43em;\\n\\t\\tleft: 1em;\\n\\t\\twidth: 0; height: 0;\\n\\t\\tpadding: .4em;\\n\\t\\tbackground: white;\\n\\t\\tborder: inherit;\\n\\t\\tborder-right: 0;\\n\\t\\tborder-bottom: 0;\\n\\t\\t-webkit-transform: rotate(45deg);\\n\\t\\ttransform: rotate(45deg);\\n\\t}\\n\\n\\t.awesomplete > ul > li {\\n\\t\\tposition: relative;\\n\\t\\tpadding: .2em .5em;\\n\\t\\tcursor: pointer;\\n\\t}\\n\\t\\n\\t.awesomplete > ul > li:hover {\\n\\t\\tbackground: hsl(200, 40%, 80%);\\n\\t\\tcolor: black;\\n\\t}\\n\\t\\n\\t.awesomplete > ul > li[aria-selected=\\\"true\\\"] {\\n\\t\\tbackground: hsl(205, 40%, 40%);\\n\\t\\tcolor: white;\\n\\t}\\n\\t\\n\\t\\t.awesomplete mark {\\n\\t\\t\\tbackground: hsl(65, 100%, 50%);\\n\\t\\t}\\n\\t\\t\\n\\t\\t.awesomplete li:hover mark {\\n\\t\\t\\tbackground: hsl(68, 100%, 41%);\\n\\t\\t}\\n\\t\\t\\n\\t\\t.awesomplete li[aria-selected=\\\"true\\\"] mark {\\n\\t\\t\\tbackground: hsl(86, 100%, 21%);\\n\\t\\t\\tcolor: inherit;\\n\\t\\t}\\n\", \"\"]);\n\n// exports\n","module.exports = \"<!--\\r\\n \\r\\n Copyright (c) 2017, the Perspective Authors.\\r\\n \\r\\n This file is part of the Perspective library, distributed under the terms of\\r\\n the Apache License 2.0. The full license can be found in the LICENSE file.\\r\\n\\r\\n-->\\r\\n\\r\\n<template id=\\\"perspective-row\\\">\\r\\n <div id=\\\"psp_row\\\">\\r\\n <span class='is_visible'></span>\\r\\n <div draggable='true' class=\\\"row_draggable\\\">\\r\\n <span id='name' class=\\\"column_name\\\"></span>\\r\\n <div class=\\\"row_computed\\\">\\r\\n <span id=\\\"row_edit\\\"></span>\\r\\n </div>\\r\\n <span id=\\\"sort_order\\\"></span>\\r\\n <select id=\\\"column_aggregate\\\" class=\\\"string\\\"></select>\\r\\n <select id=\\\"filter_operator\\\"></select>\\r\\n <input id=\\\"filter_operand\\\" placeholder=\\\"Value\\\" />\\r\\n <span id=\\\"row_exclamation\\\" hidden>&#x26A0;</span>\\r\\n <span id='row_close'>&#x2715;</span>\\r\\n </div>\\r\\n </div>\\r\\n</template>\";","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \":host{display:block;border:0 solid transparent}:host .row_computed{display:none;flex-direction:row}.dropping *{pointer-events:none}:host #psp_row{display:var(--psp_row-display,flex);margin:var(--psp_row-margin,0);overflow:visible;align-items:var(--column_selector--align-items,center);width:auto!important;height:auto!important;float:none!important}:host .is_visible{width:var(--column_selector--width,20px);min-width:var(--column_selector--width,20px);height:var(--is_visible--height,auto);cursor:var(--is_visible--cursor,pointer);font-size:var(--column_selector--font-size,14px);margin-top:-2px;display:var(--is_visible-display,none);color:var(--column-selector--color,#999);font-family:var(--column-selector--font-family,Arial)!important}:host #sort_order{display:none;font-family:var(--button--font-family,inherit);margin-right:4px;cursor:pointer;width:10px;display:var(--sort_order-display,none);padding:var(--sort_order-padding,0)}:host #sort_order:before{content:var(--row-sort-order--before, \\\"-\\\")}:host #sort_order:hover{color:var(--active--color,inherit)}:host #filter_operand{display:var(--filter_operand-display,none);margin:0;padding:0;height:19px;color:inherit;outline:0;border-color:var(--inactive--color,#ccc)}:host #filter_operator{margin:0 0 0 15px;display:var(--filter_operator-display,none);height:17px}:host #filter_operator:hover{color:var(--active--color,inherit)}@keyframes expand2{from{transform:translateX(10px)}}@keyframes expand3{from{transform:scale(.9)}}:host(:hover) .is_visible{color:var(--active--color,--column-selector--color)}:host #row_close{display:var(--row_close-display,inline);cursor:pointer;min-width:5px;max-width:5px;margin-right:3px;flex-grow:0;margin-left:3px;color:#999;font-family:Arial;font-size:10px}:host .is_visible:before{content:var(--is_visible--before,none)}:host #row_exclamation{color:red}:host #row_close:hover{color:var(--active--color,inherit)}:host .row_draggable select{border:none}:host .row_draggable select:focus{outline:0}:host select::-ms-expand{display:none}:host select{margin-left:15px;padding-right:15px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background:var(--select--background,url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgNC45IDEwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0LjkgMTA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojQUFBQUFBO30KPC9zdHlsZT4KPHRpdGxlPmFycm93czwvdGl0bGU+Cjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMS40LDQuNyAyLjUsMy4yIDMuNSw0LjcgIi8+Cjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMy41LDUuMyAyLjUsNi44IDEuNCw1LjMgIi8+Cjwvc3ZnPg==) no-repeat 95% 50%);background-color:var(--select--background-color,#fff);color:inherit;border-radius:5px;height:24px;padding:var(--column_type--padding,0 0 0 5px);font-size:12px}:host .awesomplete>ul{border-radius:0;margin:0;border:none;transition:none!important;background:var(--plugin--background,#fff)!important}:host .awesomplete>ul:before{content:none}:host .awesomplete>input,:host input{border-color:#ccc;border-width:0 0 1px;box-sizing:border-box;background-color:transparent}:host .row_draggable{animation:var(--row_draggable--animation,expand2 .5s ease-out);cursor:move;border-style:solid;background-color:var(--row_draggable-background-color,none);overflow:var(--row_draggable-overflow,visible);border-color:var(--row_draggable-border-color,none);border-width:var(--row_draggable-border-width,0);padding:var(--row_draggable-padding,0);font-size:12px;flex-grow:1;color:inherit;transition:height .2s;box-sizing:border-box;height:var(--row_draggable-height,21px);min-height:var(--row_draggable-height,21px);display:var(--row_draggable-display,flex);align-items:var(--row-draggable--align-items);flex-direction:var(--row-draggable--flex-direction,column);justify-content:var(--row_draggable--justify-content,center);margin:var(--row_draggable--margin,0);transition:var(--row_draggable--transition,none)}:host .row_draggable *{opacity:var(--row_draggable_children-opacity,1)}:host .row_draggable select{margin:0 0 0 27px}:host ul{transition:background-color .2s,border-color .2s}:host(.null-column) .is_visible{opacity:0!important}:host(.null-column) .row_draggable{background-color:var(--null--background,transparent)!important;border-color:#ccc!important;border-width:0 0 1px!important}:host([drop-target]) .row_draggable{background-color:var(--active--background,#f0f0ff)!important;animation:var(--drop-target--animation,var(--row_draggable--animation,expand3 .5s ease-out));border:none!important}:host .float:before,:host .integer:before{content:var(--float--column-type--content, var(--column-type--content, \\\"123\\\"));color:var(--float--column-type--color,var(--column-type--color,#016bc6))}:host .string:before{content:var(--string--column-type--content, var(--column-type--content, \\\"abc\\\"));color:var(--string--column-type--color,var(--column-type--color,#fe9292))}:host .boolean:before{content:var(--boolean--column-type--content, var(--column-type--content, \\\"t/f\\\"));color:var(--boolean--column-type--color,var(--column-type--color,#999))}:host .date:before{content:var(--date--column-type--content, var(--column-type--content, \\\"mdy\\\"));color:var(--date--column-type--color,var(--column-type--color,#999))}:host .datetime:before{content:var(--datetime--column-type--content, var(--column-type--content, \\\"mdy\\\"));color:var(--datetime--column-type--color,var(--column-type--color,#999))}:host .column_name{overflow:hidden;max-width:var(--column_name-max-width,none);white-space:nowrap;text-overflow:ellipsis}:host span#name:before{font-family:var(--interface-monospace--font-family,monospace);position:relative;display:inline-block;padding:var(--column_type--padding,0 5px);min-width:18px;display:var(--name-before-display,none);width:var(--column_type--width,auto)}:host #column_aggregate{display:var(--column_aggregate-display,none);font-size:10px;font-family:Arial,sans-serif;width:88%;height:20px}:host span#name{flex:var(--column-name--flex,0 1 auto);width:100%;white-space:nowrap;margin:var(--column_name-margin,0)}\", \"\"]);\n\n// exports\n","module.exports = \"<!--\\r\\n \\r\\n Copyright (c) 2017, the Perspective Authors.\\r\\n \\r\\n This file is part of the Perspective library, distributed under the terms of\\r\\n the Apache License 2.0. The full license can be found in the LICENSE file.\\r\\n\\r\\n-->\\r\\n\\r\\n<template id=\\\"perspective-viewer\\\">\\r\\n\\r\\n <div id=\\\"app\\\">\\r\\n <div id=\\\"menubar\\\">\\r\\n <div id=\\\"copy_button\\\" class=\\\"noselect button\\\" title=\\\"Copy CSV\\\"></div>\\r\\n <div id=\\\"download_button\\\" class=\\\"noselect button\\\" title=\\\"Download CSV\\\"></div>\\r\\n <div id=\\\"reset_button\\\" class=\\\"noselect button\\\" title=\\\"Reset Viewer\\\"></div>\\r\\n </div>\\r\\n <div id='side_panel' class=\\\"column fixed noselect\\\">\\r\\n <div id=\\\"vis_selector_container\\\">\\r\\n <select id=\\\"vis_selector\\\">\\r\\n </select>\\r\\n </div>\\r\\n <div id=\\\"columns_container\\\" style=\\\"visibility: hidden\\\">\\r\\n <ul id='active_columns'></ul>\\r\\n <div id=\\\"sub_columns\\\">\\r\\n <ul id='inactive_columns'></ul>\\r\\n <div id=\\\"side_panel__actions\\\" style=\\\"visibility: hidden\\\">\\r\\n <div id=\\\"add-computed-column\\\" class=\\\"side_panel-action\\\"><span class=\\\"psp-icon psp-icon__add\\\"></span><span class=\\\"psp-title__columnName\\\">New Column</span></div>\\r\\n </div>\\r\\n </div>\\r\\n <perspective-computed-column></perspective-computed-column>\\r\\n </div>\\r\\n <div id=\\\"resize_bar\\\"></div>\\r\\n </div>\\r\\n <div class=\\\"column noselect\\\">\\r\\n <div id='top_panel'>\\r\\n <div class=\\\"rrow\\\">\\r\\n <div id=\\\"row_pivots\\\">\\r\\n <div class=\\\"psp-text-field\\\">\\r\\n <ul class=\\\"psp-text-field__input\\\" for=\\\"row-pivots\\\"></ul>\\r\\n <label for=\\\"row_pivots\\\"></label>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n <span id=\\\"transpose_button\\\" class=\\\"rrow centered\\\" title=\\\"Transpose Pivots\\\">&#x21C4;</span>\\r\\n <div class=\\\"rrow\\\">\\r\\n <div id=\\\"column_pivots\\\">\\r\\n <div class=\\\"psp-text-field\\\">\\r\\n <ul class=\\\"psp-text-field__input\\\" for=\\\"column-pivots\\\"></ul>\\r\\n <label for=\\\"column_pivots\\\"></label>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"rrow\\\">\\r\\n <div id=\\\"sort\\\">\\r\\n <div class=\\\"psp-text-field\\\">\\r\\n <ul class=\\\"psp-text-field__input\\\" for=\\\"sort\\\"></ul>\\r\\n <label for=\\\"sort\\\"></label>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"rrow\\\" style='flex-grow:3;height:auto;flex:1 1 400px;max-width:none'>\\r\\n <div id=\\\"filters\\\">\\r\\n <div class=\\\"psp-text-field\\\">\\r\\n <ul class=\\\"psp-text-field__input\\\" for='filters'></ul>\\r\\n <label for=\\\"filters\\\"></label>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n <div id=\\\"pivot_chart_container\\\">\\r\\n <div class=\\\"plugin_information plugin_information--warning hidden\\\" id=\\\"plugin_information--size\\\">\\r\\n <span class=\\\"plugin_information__text\\\" id=\\\"plugin_information_count\\\">Estimated rendering</span>\\r\\n <span class=\\\"plugin_information__actions\\\">\\r\\n <span class=\\\"plugin_information__action\\\">Render all points</span>\\r\\n <span class=\\\"plugin_information__action--close\\\" id=\\\"close_button\\\"></span>\\r\\n </span>\\r\\n </div>\\r\\n <div id=\\\"pivot_chart\\\"></div>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <div id=\\\"config_button\\\" class=\\\"noselect button\\\" title=\\\"Right click for additional options\\\"></div>\\r\\n\\r\\n <div id='drop_target'>\\r\\n <div id='drop_target_inner'>\\r\\n\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <slot></slot>\\r\\n </div>\\r\\n\\r\\n</template>\";","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \":host #app #top_panel #row_pivots label:before{content:var(--row_pivots--before, \\\"Row Pivots\\\")}:host #app #top_panel #column_pivots label:before{content:var(--column_pivots--before, \\\"Column Pivots\\\")}:host #app #top_panel #sort label:before{content:\\\"Sort\\\"}:host #app #top_panel #filters label:before{content:\\\"Filter\\\"}:host #app #side_panel #active_columns perspective-row:before{font-size:10px;margin-left:var(--column_selector--width,20px);left:1px;padding:var(--column_type--padding,0 0 0 5px);color:var(--inactive--color,#666);position:absolute;margin-top:-15px}:host:hover #config_button{opacity:1}#config_button{background:0 0;opacity:1!important}.button{padding:var(--button--padding,12px 14px 24px 8px)}[settings=true] #config_button{opacity:1!important}@keyframes expand{from{opacity:0}}:host{position:relative;display:inline-block;overflow:hidden;word-wrap:normal;--highcharts-full--gradient:linear-gradient(#4d342f 0%, #e4521b 22.5%, #feeb65 42.5%, #f0f0f0 50%, #dcedc8 57.5%, #42b3d5 67.5%, #1a237e 100%);--highcharts-positive--gradient:linear-gradient(#dcedc8 0%, #42b3d5 35%, #1a237e 100%);--highcharts-negative--gradient:linear-gradient(#feeb65 100%, #e4521b 70%, #4d342f 0%);--hypergrid-tree-header--background:#fff;--hypergrid-tree-header--color:#666;--hypergrid-header--background:#fff;--hypergrid-separator--color:#666;--hypergrid-header--color:#666;--hypergrid-positive--color:#1078d1;--hypergrid-negative--color:#ff8888;--hypergrid--font-size:12px;--hypergrid-header--font-size:12px;--hypergrid--font-family:Helvetica,Arial,sans-serif;--hypergrid-header--font-family:Helvetica,Arial,sans-serif;--hypergrid-row-hover--background:#f6f6f6;--hypergrid-row-hover--color:#666;--hypergrid-cell-hover--background:#eeeeee;--hypergrid-cell-hover--color:#666;--integer--hypergrid--text-align:right;--float--hypergrid--text-align:right;--d3fc-series:rgba(31, 119, 180, 0.5);--d3fc-series-1:#0366d6;--d3fc-series-2:#ff7f0e;--d3fc-series-3:#2ca02c;--d3fc-series-4:#d62728;--d3fc-series-5:#9467bd;--d3fc-series-6:#8c564b;--d3fc-series-7:#e377c2;--d3fc-series-8:#7f7f7f;--d3fc-series-9:#bcbd22;--d3fc-series-10:#17becf;--d3fc-full--gradient:linear-gradient(#4d342f 0%, #e4521b 22.5%, #feeb65 42.5%, #f0f0f0 50%, #dcedc8 57.5%, #42b3d5 67.5%, #1a237e 100%);--d3fc-positive--gradient:linear-gradient(#dcedc8 0%, #42b3d5 35%, #1a237e 100%);--d3fc-negative--gradient:linear-gradient(#feeb65 100%, #e4521b 70%, #4d342f 0%)}:host #pivot_chart{position:absolute;width:100%;height:100%;display:grid;justify-content:stretch}:host .hidden{display:none}:host .psp-icon{color:#999}:host .psp-icon:hover{cursor:pointer}:host .psp-icon__add{display:flex;width:20px;min-width:20px;margin-top:-2px;height:0;font-family:var(--column-add--font-family,inherit)}:host .psp-icon__add:before{font-feature-settings:\\\"liga\\\";content:var(--column-add--before, \\\"+\\\")}:host .psp-title__columnName{display:flex;margin-left:34px;margin-top:3px;font-size:12px;color:#666}:host .side_panel-action:hover{cursor:pointer}:host *{box-sizing:border-box;line-height:1.42857143}:host #app{display:flex;position:relative;width:100%;height:100%}:host #app.hide_message #drop_target{display:none}:host .chart{padding:15px}:host #pivot_chart_container{flex-grow:1;position:relative;border:var(--plugin--border,none);overflow:hidden}:host .config{display:flex}:host #column_pivots #psp_row,:host #filters #psp_row,:host #row_pivots #psp_row,:host #sort #psp_row{display:inline}:host ul{min-height:20px;padding:0;margin:0;font-size:12px}:host #active_columns perspective-row{animation:.3s ease-out expand;--column-selector--color:var(--active--color, #999);--is_visible--before:var(--active-column-selector--content, \\\"\\\\25CF\\\")}:host #inactive_columns perspective-row{animation:.3s ease-out expand;--column-selector--color:var(--inactive-column-selector--color, #999);--is_visible--before:var(--inactive-column-selector--content, \\\"\\\\25CB\\\");--row_draggable--animation:none;opacity:var(--inactive-column--opacity,1);transition:opacity .3s}:host #inactive_columns perspective-row:hover{transition:none;opacity:1}:host #top_panel perspective-row{animation:.3s ease-out expand;--column-name--flex:1;padding:0 10px 0 0;margin-bottom:-1px;display:var(--top-panel-row--display,inline-block);--psp_row-display:inline-block}:host #active_columns,:host #inactive_columns{list-style:none;padding:0;width:100%;margin:var(--column-container--margin,8px 0 0 0);overflow-y:auto;overflow-x:hidden;position:relative}:host #inactive_columns perspective-row.active{--row_draggable--margin:0px 0px 0px 10px;opacity:0;height:0!important;overflow:hidden}:host .columns_horizontal #sub_columns.collapse #side_panel__actions{margin-top:0}:host #sub_columns{min-height:33.3%;flex-shrink:100000;display:flex;flex-direction:column;overflow-x:hidden;width:100%}:host #sub_columns.collapse{flex-shrink:0;min-height:64px}:host #sub_columns.collapse #inactive_columns{display:none}:host .column{display:flex;list-style:none;flex-direction:column;flex:1}:host .rrow{display:flex;flex-grow:1;min-height:24px;align-items:center;max-width:400px;list-style:none;min-width:140px;margin:var(--column-drop-container--margin,5px 10px 0 0)}:host .rrow>div{display:flex;min-height:24px;flex-direction:column;justify-content:flex-end}:host #top_panel>.rrow>*{width:100%;padding:12px 0;margin:-12px 0}:host .rrow #psp_row{white-space:nowrap}:host #sort perspective-row{--sort_order-display:inline;--sort_order-padding:0 0 0 4px}:host #sort perspective-row[sort-order=asc]{--row-sort-order--before:var(--sort-order-asc--before, \\\"\\\\2191\\\")}:host #sort perspective-row[sort-order=desc]{--row-sort-order--before:var(--sort-order-desc--before, \\\"\\\\2193\\\")}:host #sort perspective-row[sort-order=none]{--row-sort-order--before:var(--sort-order-none--before, \\\"-\\\")}:host #sort perspective-row[sort-order=\\\"asc abs\\\"]{--row-sort-order--before:var(--sort-order-asc-abs--before, \\\"\\\\21E7\\\")}:host #sort perspective-row[sort-order=\\\"desc abs\\\"]{--row-sort-order--before:var(--sort-order-desc-abs--before, \\\"\\\\21E9\\\")}:host #sort perspective-row[sort-order=\\\"col asc\\\"]{--row-sort-order--before:var(--sort-order-col-asc--before, \\\"\\\\2192\\\")}:host #sort perspective-row[sort-order=\\\"col desc\\\"]{--row-sort-order--before:var(--sort-order-col-desc--before, \\\"\\\\2190\\\")}:host #sort perspective-row[sort-order=\\\"col asc abs\\\"]{--row-sort-order--before:var(--sort-order-col-asc-abs--before, \\\"\\\\21E8\\\")}:host #sort perspective-row[sort-order=\\\"col desc abs\\\"]{--row-sort-order--before:var(--sort-order-col-desc-abs--before, \\\"\\\\21E6\\\")}:host #top_panel perspective-row::after{content:\\\",\\\"}:host #top_panel perspective-row:last-child::after{display:none;content:\\\"\\\"!important}:host label{white-space:nowrap;display:inline-block;vertical-align:middle;margin-bottom:0}:host #drop_target{position:absolute;left:0;top:0;right:0;bottom:0;padding:30px}:host #drop_target_inner{width:100%;height:100%;display:flex;align-items:center;justify-content:center}:host #drop_target_inner h3{font-weight:300}:host #config_button{position:absolute;top:0;left:0;opacity:0;display:flex;align-items:center;justify-content:center;transition:opacity .2s ease-out}:host #config_button:hover{color:var(--active--color,inherit)}:host .button{cursor:pointer;font-size:16px;font-weight:400}:host select::-ms-expand{display:none}:host select{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background:var(--select--background,url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgNC45IDEwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0LjkgMTA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojQUFBQUFBO30KPC9zdHlsZT4KPHRpdGxlPmFycm93czwvdGl0bGU+Cjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMS40LDQuNyAyLjUsMy4yIDMuNSw0LjcgIi8+Cjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMy41LDUuMyAyLjUsNi44IDEuNCw1LjMgIi8+Cjwvc3ZnPg==) no-repeat 95% 50%);background-color:#fff;color:inherit;border-radius:5px;height:24px;padding:var(--select--padding,0 0 0 6px);font-size:12px;font-family:inherit}:host input{padding:0 10px}:host .centered{display:flex;align-items:center;justify-content:center}:host #top_panel{display:flex;flex-wrap:wrap;justify-content:flex-start;padding:var(--top_panel--padding,5px 0 10px 0);max-width:1000px;z-index:1}:host #side_panel{position:relative;flex:0 0 auto;padding:var(--side_panel--padding,10px 10px 0 11px)}:host #side_panel>div{display:flex}:host #vis_selector_container{min-height:29px;margin-left:var(--column_selector--width,20px);overflow:hidden}:host #vis_selector{flex-grow:1}:host #transpose_button{cursor:pointer;min-width:5px;max-width:5px;flex-grow:0;color:#999;font-family:Arial;font-size:12px}:host #transpose_button:hover{color:var(--active--color,inherit)}:host #resize_bar{position:absolute;top:0;right:0;bottom:0;width:8px;cursor:col-resize}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".psp-text-field{position:relative;background-color:var(--column-drop-container--background,#fff);border-width:0 0 1px;border-style:solid;border-color:var(--inactive--color,#ccc);display:flex;flex-direction:column;justify-content:flex-end;min-height:24px;transition:border-color .3s ease-out}:host(.dragging) .psp-text-field.dropping{border-bottom-width:2px;border-style:solid;border-color:var(--active--color,#1a7da1)}:host(.dragging) .psp-text-field{border-bottom-width:1px;border-style:solid;border-color:var(--active--color,#1a7da1)}.psp-text-field>.psp-text-field__input{border:0;line-height:20px;vertical-align:bottom;padding-bottom:0;display:none}.psp-text-field__input+label{height:var(--column--height,auto);line-height:17px;box-sizing:border-box;color:var(--inactive--color,#ccc);font-weight:400;white-space:nowrap;padding:var(--column-drop-container--padding,0 0 2px 10px);font-size:12px;display:inline-block;transition:font-size .3s,margin .3s}.dropping .psp-text-field__input,.psp-text-field__input:not(:empty){display:block!important}.dropping .psp-text-field__input::after{content:\\\"|\\\";width:0;overflow:visible;margin-top:-1px;position:absolute}.dropping *{pointer-events:none}.dropping .psp-text-field label,.psp-text-field__input:not(:empty)+label{position:absolute;top:0;margin:var(--column-drop-label--margin,0);font-size:var(--column-drop-label--font-size,12px);display:var(--column-drop-label--display,none)}.dropping perspective-row.inserting{border-top:25px solid transparent}.dropping perspective-row.postserting{border-bottom:25px solid transparent}:host perspective-row{height:var(--column--height,21px);--row_draggable-height:var(--column--height, 21px)}:host([row-pivots]) #active_columns perspective-row{height:var(--active-column--height,41px);min-height:var(--active-column--height,41px);--row_draggable-height:var(--active-column--height, 41px);--column_aggregate-display:inline-block;--is_visible--height:var(--active-column-selector--height, auto)}:host{font-family:Arial,sans-serif;background-color:#eee;color:#333}:host #app.columns_horizontal #columns_container{flex-direction:row-reverse}:host #app.columns_horizontal #active_columns,:host #app.columns_horizontal #inactive_columns{display:flex;flex-direction:column;flex:0 1 auto;width:100%}:host #app.columns_horizontal #inactive_columns{flex:1 1 auto}:host #app.columns_horizontal #sub_columns{flex-shrink:1}:host #app.columns_horizontal #sub_columns perspective-row{--column_name-margin:0 25px 0 0}:host #app.columns_horizontal #side_panel #divider{display:none}:host #app.columns_horizontal perspective-computed-column{max-height:none;margin-right:24px}:host perspective-computed-column{--is_visible--before:var(--active-column-selector--content, \\\"\\\\25CF\\\");--row_draggable-background-color:var(--column--background, white);--row_draggable-border-color:var(--inactive--color, #ccc);--row_draggable-border-width:0 0 1px 0;--row_draggable-overflow:hidden;--column-selector--color:var(--active--color, #999)}:host #side_panel perspective-row{--name-before-display:inline-block;--is_visible-display:inline-block;--row_draggable-padding:0px 10px 0px 0px;--row_close-display:none;--column_name-max-width:180px}:host #top_panel perspective-row{--row_draggable-display:inline-flex;--row-draggable--flex-direction:row;--row-draggable--align-items:center}:host #columns_container{flex-direction:column;height:calc(100% - 29px)}:host #columns_container #active_columns{flex:0 1 auto}:host #columns_container #active_columns perspective-row{margin-bottom:2px;--row_draggable-background-color:var(--column--background, white);--row_draggable-border-color:var(--inactive--color, #ccc);--row_draggable-border-width:0 0 1px 0;--row_draggable-overflow:hidden;--row_draggable--justify-content:space-evenly}:host #columns_container #active_columns perspective-row:last-child{--row_draggable-border-width:var(--row_draggable-border-last-child-width, 0 0 1px 0)}:host #columns_container #active_columns perspective-row[drop-target]{--row_draggable_children-opacity:0}:host #columns_container #active_columns perspective-row.null-column{--row_draggable_children-opacity:0;pointer-events:none}:host #columns_container #active_columns.one_lock perspective-row:first-child,:host #columns_container #active_columns.two_lock perspective-row:first-child{--active--color:#ccc;--is_visible--cursor:normal}:host #columns_container #active_columns.two_lock perspective-row:nth-child(2){--active--color:#ccc;--is_visible--cursor:normal}:host #columns_container #active_columns perspective-row:only-child{--active--color:#ccc;--is_visible--cursor:normal}:host #columns_container #active_columns,:host #columns_container #inactive_columns{border:none!important}:host ul{transition:background-color .2s,border-color .2s;outline:0;border-style:solid;border-color:var(--inactive--color,#ccc);font-size:12px;padding:var(--column-drop-container--padding,0 10px 0 10px);border-width:0 0 1px}:host #side_panel #side_panel__actions{display:flex;flex-direction:column;flex-shrink:1000;justify-content:flex-start;position:relative;overflow-y:hidden;width:100%;padding-top:20px;margin:var(--column-container--margin,8px);min-height:36px}:host #side_panel #side_panel__actions button.side_panel-action{align-items:center;align-content:center;background:0 0;border:none;display:flex;flex-direction:row;font-size:12px;padding-right:10px;-webkit-appearance:none;-moz-appearance:none;appearance:none}:host #side_panel #side_panel__actions button.side_panel-action span{margin-left:5px;font-size:15px}:host #side_panel #side_panel__actions button.side_panel-action:hover{cursor:pointer}:host .noselect{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host svg .highcharts-legend-box{fill:none}:host #pivot_chart{background-color:var(--plugin--background,#fff)}:host #drop_target{border:var(--plugin--border,none);background:var(--plugin--background,#fff)}:host #pivot_chart_container{box-shadow:var(--plugin--box-shadow,none)}:host #filters perspective-row{margin:0;--filter_operator-display:inline-block;--filter_operand-display:inline-block}:host .plugin_information{color:var(--warning--color,inherit);display:flex;position:absolute;flex-direction:row;justify-content:flex-start;padding:.5rem;width:100%;z-index:10000;transition:opacity .3s ease-out;opacity:1}:host .plugin_information.hidden{display:none;opacity:0}:host .plugin_information.plugin_information--warning{background:#ffca28}:host .plugin_information .plugin_information__text{font-size:12px;margin-right:.25rem;display:flex;flex-wrap:wrap;align-items:center}:host .plugin_information .plugin_information__text:before{content:var(--overflow_hint--before);font-family:var(--overflow_hint--font-family);color:var(--overflow_hint--color);padding:var(--overflow_hint--padding);font-size:16px}:host .plugin_information .plugin_information__action{font-size:12px;text-decoration:underline;cursor:pointer;margin-right:.25rem}:host .plugin_information .plugin_information__action--close{margin-left:12px;display:inline-flex;font-size:12px;cursor:pointer}:host .plugin_information .plugin_information__actions{margin-left:auto;display:flex;align-items:center;flex-direction:row;justify-content:flex-start}:host .plugin_information .plugin_information--overflow-hint-percent{font-weight:700}:host .plugin_information .plugin_information--overflow-hint{white-space:nowrap}:host #drop_target_inner h3{color:#aaa;font-weight:300}:host #config_button,:host #copy_button,:host #download_button,:host #reset_button{font-weight:400;font-family:var(--button--font-family,Arial);color:var(--inactive--color,#999);font-size:var(--button--font-size,16px);transition:opacity .3s;overflow:hidden}:host #config_button:hover,:host #copy_button:hover,:host #download_button:hover,:host #reset_button:hover{color:var(--active--color,inherit)}:host #config_button:before{font-feature-settings:\\\"liga\\\";content:var(--settings-button--content, \\\"\\\\1F527\\\")}:host #reset_button:before{font-feature-settings:\\\"liga\\\";content:var(--reset_button--before, \\\"Reset\\\")}:host #close_button:before{font-family:var(--button--font-family,Arial);font-feature-settings:\\\"liga\\\";content:var(--close_button--before, \\\"Close\\\")}:host #download_button:before{font-feature-settings:\\\"liga\\\";content:var(--download_button--before, \\\"Save\\\")}:host #copy_button:before{font-feature-settings:\\\"liga\\\";content:var(--copy_button--before, \\\"Copy\\\")}:host #menubar{display:none;flex-direction:column;padding-top:55px}:host #app.show_menu #menubar{display:flex}:host select{border-radius:0;background-color:var(--select--background-color,#fff);border-style:solid;border-color:var(--inactive--color,#ccc);border-width:0 0 1px}:host select:focus{outline:0}:host input{border-style:solid;border-color:var(--inactive--color,#ccc);border-width:0 0 1px}:host input::placeholder{color:var(--inactive--color,#ccc)}:host option[value=\\\"\\\"]{color:#fff!important}:host #app{background-color:inherit}:host ::-webkit-scrollbar,:host ::shadow ::-webkit-scrollbar{width:12px}:host ::-webkit-scrollbar-thumb,:host ::shadow ::-webkit-scrollbar-thumb{background:#ccc}:host ::-webkit-scrollbar-track,:host ::shadow ::-webkit-scrollbar-track{background:0 0}\", \"\"]);\n\n// exports\n","module.exports = __WEBPACK_EXTERNAL_MODULE__27__;","module.exports = __WEBPACK_EXTERNAL_MODULE__28__;","module.exports = __WEBPACK_EXTERNAL_MODULE__29__;","module.exports = __WEBPACK_EXTERNAL_MODULE__30__;","module.exports = __WEBPACK_EXTERNAL_MODULE__31__;","module.exports = __WEBPACK_EXTERNAL_MODULE__32__;","/*\n\nForked from https://github.com/timruffles/mobile-drag-drop/ v2.3.0-rc.2\n\nCopyright (c) 2013 Tim Ruffles\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nconst CLASS_PREFIX = \"dnd-poly-\";\nconst CLASS_DRAG_IMAGE = CLASS_PREFIX + \"drag-image\";\nconst CLASS_DRAG_IMAGE_SNAPBACK = CLASS_PREFIX + \"snapback\";\nconst CLASS_DRAG_OPERATION_ICON = CLASS_PREFIX + \"icon\";\nconst EVENT_PREFIX = \"dnd-poly-\";\nconst EVENT_DRAG_DRAGSTART_PENDING = EVENT_PREFIX + \"dragstart-pending\";\nconst EVENT_DRAG_DRAGSTART_CANCEL = EVENT_PREFIX + \"dragstart-cancel\";\nconst ALLOWED_EFFECTS = [\"none\", \"copy\", \"copyLink\", \"copyMove\", \"link\", \"linkMove\", \"move\", \"all\"];\nconst DROP_EFFECTS = [\"none\", \"copy\", \"move\", \"link\"];\n\nfunction detectFeatures() {\n const features = {\n dragEvents: \"ondragstart\" in document.documentElement,\n draggable: \"draggable\" in document.documentElement,\n userAgentSupportingNativeDnD: undefined\n };\n const isBlinkEngine = !!window.chrome || /chrome/i.test(navigator.userAgent);\n features.userAgentSupportingNativeDnD = !(/iPad|iPhone|iPod|Android/.test(navigator.userAgent) || (isBlinkEngine && \"ontouchstart\" in document.documentElement));\n return features;\n}\nfunction supportsPassiveEventListener() {\n let supportsPassiveEventListeners = false;\n try {\n const opts = Object.defineProperty({}, \"passive\", {\n get: function() {\n supportsPassiveEventListeners = true;\n }\n });\n window.addEventListener(\"test\", null, opts);\n } catch (e) {}\n return supportsPassiveEventListeners;\n}\n\nconst supportsPassive = supportsPassiveEventListener();\nfunction isDOMElement(object) {\n return object && object.tagName;\n}\nfunction addDocumentListener(ev, handler, passive) {\n if (passive === void 0) {\n passive = true;\n }\n document.addEventListener(ev, handler, supportsPassive ? {passive: passive} : false);\n}\nfunction removeDocumentListener(ev, handler) {\n document.removeEventListener(ev, handler);\n}\nfunction onEvt(el, event, handler, capture) {\n if (capture === void 0) {\n capture = false;\n }\n const options = supportsPassive ? {passive: true, capture: capture} : capture;\n el.addEventListener(event, handler, options);\n return {\n off: function() {\n el.removeEventListener(event, handler, options);\n }\n };\n}\nfunction prepareNodeCopyAsDragImage(srcNode, dstNode) {\n if (srcNode.nodeType === 1) {\n const cs = getComputedStyle(srcNode);\n for (let i = 0; i < cs.length; i++) {\n const csName = cs[i];\n dstNode.style.setProperty(csName, cs.getPropertyValue(csName), cs.getPropertyPriority(csName));\n }\n dstNode.style.pointerEvents = \"none\";\n dstNode.removeAttribute(\"id\");\n dstNode.removeAttribute(\"class\");\n dstNode.removeAttribute(\"draggable\");\n if (dstNode.nodeName === \"CANVAS\") {\n const canvasSrc = srcNode;\n const canvasDst = dstNode;\n const canvasSrcImgData = canvasSrc.getContext(\"2d\").getImageData(0, 0, canvasSrc.width, canvasSrc.height);\n canvasDst.getContext(\"2d\").putImageData(canvasSrcImgData, 0, 0);\n }\n }\n if (srcNode.hasChildNodes()) {\n for (let i = 0; i < srcNode.childNodes.length; i++) {\n prepareNodeCopyAsDragImage(srcNode.childNodes[i], dstNode.childNodes[i]);\n }\n }\n}\nfunction createDragImage(sourceNode) {\n const dragImage = sourceNode.cloneNode(true);\n prepareNodeCopyAsDragImage(sourceNode, dragImage);\n return dragImage;\n}\nfunction average(array) {\n if (array.length === 0) {\n return 0;\n }\n return (\n array.reduce(function(s, v) {\n return v + s;\n }, 0) / array.length\n );\n}\nfunction isTouchIdentifierContainedInTouchEvent(touchEvent, touchIdentifier) {\n for (let i = 0; i < touchEvent.changedTouches.length; i++) {\n const touch = touchEvent.changedTouches[i];\n if (touch.identifier === touchIdentifier) {\n return true;\n }\n }\n return false;\n}\nfunction updateCentroidCoordinatesOfTouchesIn(coordinateProp, event, outPoint) {\n const pageXs = [],\n pageYs = [];\n for (let i = 0; i < event.touches.length; i++) {\n const touch = event.touches[i];\n pageXs.push(touch[coordinateProp + \"X\"]);\n pageYs.push(touch[coordinateProp + \"Y\"]);\n }\n outPoint.x = average(pageXs);\n outPoint.y = average(pageYs);\n}\nconst TRANSFORM_CSS_VENDOR_PREFIXES = [\"\", \"-webkit-\"];\nfunction extractTransformStyles(sourceNode) {\n return TRANSFORM_CSS_VENDOR_PREFIXES.map(function(prefix) {\n const transform = sourceNode.style[prefix + \"transform\"];\n if (!transform || transform === \"none\") {\n return \"\";\n }\n return transform.replace(/translate\\(\\D*\\d+[^,]*,\\D*\\d+[^,]*\\)\\s*/g, \"\");\n });\n}\nfunction translateElementToPoint(element, pnt, originalTransforms, offset, centerOnCoordinates) {\n if (centerOnCoordinates === void 0) {\n centerOnCoordinates = true;\n }\n let x = pnt.x,\n y = pnt.y;\n if (offset) {\n x += offset.x;\n y += offset.y;\n }\n if (centerOnCoordinates) {\n x -= parseInt(element.offsetWidth, 10) / 2;\n y -= parseInt(element.offsetHeight, 10) / 2;\n }\n const translate = \"translate3d(\" + x + \"px,\" + y + \"px, 0)\";\n for (let i = 0; i < TRANSFORM_CSS_VENDOR_PREFIXES.length; i++) {\n const transformProp = TRANSFORM_CSS_VENDOR_PREFIXES[i] + \"transform\";\n element.style[transformProp] = translate + \" \" + originalTransforms[i];\n }\n}\nfunction applyDragImageSnapback(sourceEl, dragImage, dragImageTransforms, transitionEndCb) {\n const cs = getComputedStyle(sourceEl);\n if (cs.visibility === \"hidden\" || cs.display === \"none\") {\n console.log(\"dnd-poly: source node is not visible. skipping snapback transition.\");\n transitionEndCb();\n return;\n }\n dragImage.classList.add(CLASS_DRAG_IMAGE_SNAPBACK);\n const csDragImage = getComputedStyle(dragImage);\n const durationInS = parseFloat(csDragImage.transitionDuration);\n if (isNaN(durationInS) || durationInS === 0) {\n console.log(\"dnd-poly: no transition used - skipping snapback\");\n transitionEndCb();\n return;\n }\n console.log(\"dnd-poly: starting dragimage snap back\");\n const rect = sourceEl.getBoundingClientRect();\n const pnt = {\n x: rect.left,\n y: rect.top\n };\n pnt.x += document.body.scrollLeft || document.documentElement.scrollLeft;\n pnt.y += document.body.scrollTop || document.documentElement.scrollTop;\n pnt.x -= parseInt(cs.marginLeft, 10);\n pnt.y -= parseInt(cs.marginTop, 10);\n const delayInS = parseFloat(csDragImage.transitionDelay);\n const durationInMs = Math.round((durationInS + delayInS) * 1000);\n translateElementToPoint(dragImage, pnt, dragImageTransforms, undefined, false);\n setTimeout(transitionEndCb, durationInMs);\n}\n\nconst DataTransfer = (function() {\n function DataTransfer(_dataStore, _setDragImageHandler) {\n this._dataStore = _dataStore;\n this._setDragImageHandler = _setDragImageHandler;\n this._dropEffect = DROP_EFFECTS[0];\n }\n Object.defineProperty(DataTransfer.prototype, \"dropEffect\", {\n get: function() {\n return this._dropEffect;\n },\n set: function(value) {\n if (this._dataStore.mode !== 0 && ALLOWED_EFFECTS.indexOf(value) > -1) {\n this._dropEffect = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTransfer.prototype, \"types\", {\n get: function() {\n if (this._dataStore.mode !== 0) {\n return Object.freeze(this._dataStore.types);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTransfer.prototype, \"effectAllowed\", {\n get: function() {\n return this._dataStore.effectAllowed;\n },\n set: function(value) {\n if (this._dataStore.mode === 2 && ALLOWED_EFFECTS.indexOf(value) > -1) {\n this._dataStore.effectAllowed = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n DataTransfer.prototype.setData = function(type, data) {\n if (this._dataStore.mode === 2) {\n if (type.indexOf(\" \") > -1) {\n throw new Error(\"illegal arg: type contains space\");\n }\n this._dataStore.data[type] = data;\n if (this._dataStore.types.indexOf(type) === -1) {\n this._dataStore.types.push(type);\n }\n }\n };\n DataTransfer.prototype.getData = function(type) {\n if (this._dataStore.mode === 1 || this._dataStore.mode === 2) {\n return this._dataStore.data[type] || \"\";\n }\n };\n DataTransfer.prototype.clearData = function(format) {\n if (this._dataStore.mode === 2) {\n if (format && this._dataStore.data[format]) {\n delete this._dataStore.data[format];\n const index = this._dataStore.types.indexOf(format);\n if (index > -1) {\n this._dataStore.types.splice(index, 1);\n }\n return;\n }\n this._dataStore.data = {};\n this._dataStore.types = [];\n }\n };\n DataTransfer.prototype.setDragImage = function(image, x, y) {\n if (this._dataStore.mode === 2) {\n this._setDragImageHandler(image, x, y);\n }\n };\n return DataTransfer;\n})();\n\nfunction tryFindDraggableTarget(event) {\n let el = event.target;\n do {\n if (el.draggable === false) {\n continue;\n }\n if (el.draggable === true) {\n return el;\n }\n if (el.getAttribute && el.getAttribute(\"draggable\") === \"true\") {\n return el;\n }\n } while ((el = el.parentNode) && el !== document.body);\n}\nfunction determineDropEffect(effectAllowed, sourceNode) {\n if (!effectAllowed) {\n if (sourceNode.nodeType === 3 && sourceNode.tagName === \"A\") {\n return DROP_EFFECTS[3];\n }\n return DROP_EFFECTS[1];\n }\n if (effectAllowed === ALLOWED_EFFECTS[0]) {\n return DROP_EFFECTS[0];\n }\n if (effectAllowed.indexOf(ALLOWED_EFFECTS[1]) === 0 || effectAllowed === ALLOWED_EFFECTS[7]) {\n return DROP_EFFECTS[1];\n }\n if (effectAllowed.indexOf(ALLOWED_EFFECTS[4]) === 0) {\n return DROP_EFFECTS[3];\n }\n if (effectAllowed === ALLOWED_EFFECTS[6]) {\n return DROP_EFFECTS[2];\n }\n return DROP_EFFECTS[1];\n}\nfunction createDragEventFromTouch(targetElement, e, type, cancelable, window, dataTransfer, relatedTarget) {\n if (relatedTarget === void 0) {\n relatedTarget = null;\n }\n const touch = e.changedTouches[0];\n const dndEvent = new Event(type, {\n bubbles: true,\n cancelable: cancelable\n });\n dndEvent.dataTransfer = dataTransfer;\n dndEvent.relatedTarget = relatedTarget;\n dndEvent.screenX = touch.screenX;\n dndEvent.screenY = touch.screenY;\n dndEvent.clientX = touch.clientX;\n dndEvent.clientY = touch.clientY;\n dndEvent.pageX = touch.pageX;\n dndEvent.pageY = touch.pageY;\n const targetRect = targetElement.getBoundingClientRect();\n dndEvent.offsetX = dndEvent.clientX - targetRect.left;\n dndEvent.offsetY = dndEvent.clientY - targetRect.top;\n return dndEvent;\n}\nfunction dispatchDragEvent(dragEvent, targetElement, touchEvent, dataStore, dataTransfer, cancelable, relatedTarget) {\n if (cancelable === void 0) {\n cancelable = true;\n }\n if (relatedTarget === void 0) {\n relatedTarget = null;\n }\n console.log(\"dnd-poly: dispatching \" + dragEvent);\n const leaveEvt = createDragEventFromTouch(targetElement, touchEvent, dragEvent, cancelable, document.defaultView, dataTransfer, relatedTarget);\n const cancelled = !targetElement.dispatchEvent(leaveEvt);\n dataStore.mode = 0;\n return cancelled;\n}\nfunction determineDragOperation(effectAllowed, dropEffect) {\n if (!effectAllowed || effectAllowed === ALLOWED_EFFECTS[7]) {\n return dropEffect;\n }\n if (dropEffect === DROP_EFFECTS[1]) {\n if (effectAllowed.indexOf(DROP_EFFECTS[1]) === 0) {\n return DROP_EFFECTS[1];\n }\n } else if (dropEffect === DROP_EFFECTS[3]) {\n if (effectAllowed.indexOf(DROP_EFFECTS[3]) === 0 || effectAllowed.indexOf(\"Link\") > -1) {\n return DROP_EFFECTS[3];\n }\n } else if (dropEffect === DROP_EFFECTS[2]) {\n if (effectAllowed.indexOf(DROP_EFFECTS[2]) === 0 || effectAllowed.indexOf(\"Move\") > -1) {\n return DROP_EFFECTS[2];\n }\n }\n return DROP_EFFECTS[0];\n}\n\nconst DragOperationController = (function() {\n function DragOperationController(_initialEvent, _config, _sourceNode, _dragOperationEndedCb) {\n this._initialEvent = _initialEvent;\n this._config = _config;\n this._sourceNode = _sourceNode;\n this._dragOperationEndedCb = _dragOperationEndedCb;\n this._dragOperationState = 0;\n this._immediateUserSelection = null;\n this._currentDropTarget = null;\n console.log(\"dnd-poly: setting up potential drag operation..\");\n this._lastTouchEvent = _initialEvent;\n this._initialTouch = _initialEvent.changedTouches[0];\n this._touchMoveHandler = this._onTouchMove.bind(this);\n this._touchEndOrCancelHandler = this._onTouchEndOrCancel.bind(this);\n addDocumentListener(\"touchmove\", this._touchMoveHandler, false);\n addDocumentListener(\"touchend\", this._touchEndOrCancelHandler, false);\n addDocumentListener(\"touchcancel\", this._touchEndOrCancelHandler, false);\n }\n DragOperationController.prototype._setup = function() {\n const _this = this;\n console.log(\"dnd-poly: starting drag and drop operation\");\n this._dragOperationState = 1;\n this._currentDragOperation = DROP_EFFECTS[0];\n this._dragDataStore = {\n data: {},\n effectAllowed: undefined,\n mode: 3,\n types: []\n };\n this._currentHotspotCoordinates = {\n x: null,\n y: null\n };\n this._dragImagePageCoordinates = {\n x: null,\n y: null\n };\n let dragImageSrc = this._sourceNode;\n this._dataTransfer = new DataTransfer(this._dragDataStore, function(element, x, y) {\n dragImageSrc = element;\n if (typeof x === \"number\" || typeof y === \"number\") {\n _this._dragImageOffset = {\n x: x || 0,\n y: y || 0\n };\n }\n });\n this._dragDataStore.mode = 2;\n this._dataTransfer.dropEffect = DROP_EFFECTS[0];\n if (dispatchDragEvent(\"dragstart\", this._sourceNode, this._lastTouchEvent, this._dragDataStore, this._dataTransfer)) {\n console.log(\"dnd-poly: dragstart cancelled\");\n this._dragOperationState = 3;\n this._cleanup();\n return false;\n }\n updateCentroidCoordinatesOfTouchesIn(\"page\", this._lastTouchEvent, this._dragImagePageCoordinates);\n const dragImage = this._config.dragImageSetup(dragImageSrc);\n this._dragImageTransforms = extractTransformStyles(dragImage);\n dragImage.style.position = \"absolute\";\n dragImage.style.left = \"0px\";\n dragImage.style.top = \"0px\";\n dragImage.style.zIndex = \"999999\";\n dragImage.classList.add(CLASS_DRAG_IMAGE);\n dragImage.classList.add(CLASS_DRAG_OPERATION_ICON);\n this._dragImage = dragImage;\n if (!this._dragImageOffset) {\n if (this._config.dragImageOffset) {\n this._dragImageOffset = {\n x: this._config.dragImageOffset.x,\n y: this._config.dragImageOffset.y\n };\n } else if (this._config.dragImageCenterOnTouch) {\n const cs = getComputedStyle(dragImageSrc);\n this._dragImageOffset = {\n x: 0 - parseInt(cs.marginLeft, 10),\n y: 0 - parseInt(cs.marginTop, 10)\n };\n } else {\n const targetRect = dragImageSrc.getBoundingClientRect();\n const cs = getComputedStyle(dragImageSrc);\n this._dragImageOffset = {\n x: targetRect.left - this._initialTouch.clientX - parseInt(cs.marginLeft, 10) + targetRect.width / 2,\n y: targetRect.top - this._initialTouch.clientY - parseInt(cs.marginTop, 10) + targetRect.height / 2\n };\n }\n }\n translateElementToPoint(this._dragImage, this._dragImagePageCoordinates, this._dragImageTransforms, this._dragImageOffset, this._config.dragImageCenterOnTouch);\n document.body.appendChild(this._dragImage);\n this._iterationIntervalId = window.setInterval(function() {\n if (_this._iterationLock) {\n console.log(\"dnd-poly: iteration skipped because previous iteration hast not yet finished.\");\n return;\n }\n _this._iterationLock = true;\n _this._dragAndDropProcessModelIteration();\n _this._iterationLock = false;\n }, this._config.iterationInterval);\n return true;\n };\n DragOperationController.prototype._cleanup = function() {\n console.log(\"dnd-poly: cleanup\");\n if (this._iterationIntervalId) {\n clearInterval(this._iterationIntervalId);\n this._iterationIntervalId = null;\n }\n removeDocumentListener(\"touchmove\", this._touchMoveHandler);\n removeDocumentListener(\"touchend\", this._touchEndOrCancelHandler);\n removeDocumentListener(\"touchcancel\", this._touchEndOrCancelHandler);\n if (this._dragImage) {\n this._dragImage.parentNode.removeChild(this._dragImage);\n this._dragImage = null;\n }\n this._dragOperationEndedCb(this._config, this._lastTouchEvent, this._dragOperationState);\n };\n DragOperationController.prototype._onTouchMove = function(event) {\n const _this = this;\n if (isTouchIdentifierContainedInTouchEvent(event, this._initialTouch.identifier) === false) {\n return;\n }\n this._lastTouchEvent = event;\n if (this._dragOperationState === 0) {\n let startDrag = void 0;\n if (this._config.dragStartConditionOverride) {\n try {\n startDrag = this._config.dragStartConditionOverride(event);\n } catch (e) {\n console.error(\"dnd-poly: error in dragStartConditionOverride hook: \" + e);\n startDrag = false;\n }\n } else {\n startDrag = event.touches.length === 1;\n }\n if (!startDrag) {\n this._cleanup();\n return;\n }\n if (this._setup() === true) {\n this._initialEvent.preventDefault();\n event.preventDefault();\n }\n return;\n }\n console.log(\"dnd-poly: moving draggable..\");\n event.preventDefault();\n updateCentroidCoordinatesOfTouchesIn(\"client\", event, this._currentHotspotCoordinates);\n updateCentroidCoordinatesOfTouchesIn(\"page\", event, this._dragImagePageCoordinates);\n if (this._config.dragImageTranslateOverride) {\n try {\n let handledDragImageTranslate_1 = false;\n this._config.dragImageTranslateOverride(\n event,\n {\n x: this._currentHotspotCoordinates.x,\n y: this._currentHotspotCoordinates.y\n },\n this._immediateUserSelection,\n function(offsetX, offsetY) {\n if (!_this._dragImage) {\n return;\n }\n handledDragImageTranslate_1 = true;\n _this._currentHotspotCoordinates.x += offsetX;\n _this._currentHotspotCoordinates.y += offsetY;\n _this._dragImagePageCoordinates.x += offsetX;\n _this._dragImagePageCoordinates.y += offsetY;\n translateElementToPoint(_this._dragImage, _this._dragImagePageCoordinates, _this._dragImageTransforms, _this._dragImageOffset, _this._config.dragImageCenterOnTouch);\n }\n );\n if (handledDragImageTranslate_1) {\n return;\n }\n } catch (e) {\n console.log(\"dnd-poly: error in dragImageTranslateOverride hook: \" + e);\n }\n }\n translateElementToPoint(this._dragImage, this._dragImagePageCoordinates, this._dragImageTransforms, this._dragImageOffset, this._config.dragImageCenterOnTouch);\n };\n DragOperationController.prototype._onTouchEndOrCancel = function(event) {\n if (isTouchIdentifierContainedInTouchEvent(event, this._initialTouch.identifier) === false) {\n return;\n }\n if (this._config.dragImageTranslateOverride) {\n try {\n this._config.dragImageTranslateOverride(undefined, undefined, undefined, function() {});\n } catch (e) {\n console.log(\"dnd-poly: error in dragImageTranslateOverride hook: \" + e);\n }\n }\n if (this._dragOperationState === 0) {\n this._cleanup();\n return;\n }\n event.preventDefault();\n this._dragOperationState = event.type === \"touchcancel\" ? 3 : 2;\n };\n DragOperationController.prototype._dragAndDropProcessModelIteration = function() {\n const _this = this;\n const previousDragOperation = this._currentDragOperation;\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = DROP_EFFECTS[0];\n const dragCancelled = dispatchDragEvent(\"drag\", this._sourceNode, this._lastTouchEvent, this._dragDataStore, this._dataTransfer);\n if (dragCancelled) {\n console.log(\"dnd-poly: drag event cancelled.\");\n this._currentDragOperation = DROP_EFFECTS[0];\n }\n if (dragCancelled || this._dragOperationState === 2 || this._dragOperationState === 3) {\n const dragFailed = this._dragOperationEnded(this._dragOperationState);\n if (dragFailed) {\n applyDragImageSnapback(this._sourceNode, this._dragImage, this._dragImageTransforms, function() {\n _this._finishDragOperation();\n });\n return;\n }\n this._finishDragOperation();\n return;\n }\n const newUserSelection = this._config.elementFromPoint(this._currentHotspotCoordinates.x, this._currentHotspotCoordinates.y);\n console.log(\"dnd-poly: new immediate user selection is: \" + newUserSelection);\n const previousTargetElement = this._currentDropTarget;\n if (newUserSelection !== this._immediateUserSelection && newUserSelection !== this._currentDropTarget) {\n this._immediateUserSelection = newUserSelection;\n if (this._currentDropTarget !== null) {\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = DROP_EFFECTS[0];\n dispatchDragEvent(\"dragexit\", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false);\n }\n if (this._immediateUserSelection === null) {\n this._currentDropTarget = this._immediateUserSelection;\n console.log(\"dnd-poly: current drop target changed to null\");\n } else {\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = determineDropEffect(this._dragDataStore.effectAllowed, this._sourceNode);\n if (dispatchDragEvent(\"dragenter\", this._immediateUserSelection, this._lastTouchEvent, this._dragDataStore, this._dataTransfer)) {\n console.log(\"dnd-poly: dragenter default prevented\");\n this._currentDropTarget = this._immediateUserSelection;\n this._currentDragOperation = determineDragOperation(this._dataTransfer.effectAllowed, this._dataTransfer.dropEffect);\n } else {\n if (this._immediateUserSelection !== document.body) {\n this._currentDropTarget = document.body;\n }\n }\n }\n }\n if (previousTargetElement !== this._currentDropTarget && isDOMElement(previousTargetElement)) {\n console.log(\"dnd-poly: current drop target changed.\");\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = DROP_EFFECTS[0];\n dispatchDragEvent(\"dragleave\", previousTargetElement, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false, this._currentDropTarget);\n }\n if (isDOMElement(this._currentDropTarget)) {\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = determineDropEffect(this._dragDataStore.effectAllowed, this._sourceNode);\n if (dispatchDragEvent(\"dragover\", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer) === false) {\n console.log(\"dnd-poly: dragover not prevented on possible drop-target.\");\n this._currentDragOperation = DROP_EFFECTS[0];\n } else {\n console.log(\"dnd-poly: dragover prevented.\");\n this._currentDragOperation = determineDragOperation(this._dataTransfer.effectAllowed, this._dataTransfer.dropEffect);\n }\n }\n console.log(\"dnd-poly: d'n'd iteration ended. current drag operation: \" + this._currentDragOperation);\n if (previousDragOperation !== this._currentDragOperation) {\n this._dragImage.classList.remove(CLASS_PREFIX + previousDragOperation);\n }\n const currentDragOperationClass = CLASS_PREFIX + this._currentDragOperation;\n this._dragImage.classList.add(currentDragOperationClass);\n };\n DragOperationController.prototype._dragOperationEnded = function(state) {\n console.log(\"dnd-poly: drag operation end detected with \" + this._currentDragOperation);\n const dragFailed = this._currentDragOperation === DROP_EFFECTS[0] || this._currentDropTarget === null || state === 3;\n if (dragFailed) {\n if (isDOMElement(this._currentDropTarget)) {\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = DROP_EFFECTS[0];\n dispatchDragEvent(\"dragleave\", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false);\n }\n } else {\n if (isDOMElement(this._currentDropTarget)) {\n this._dragDataStore.mode = 1;\n this._dataTransfer.dropEffect = this._currentDragOperation;\n if (dispatchDragEvent(\"drop\", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer) === true) {\n this._currentDragOperation = this._dataTransfer.dropEffect;\n } else {\n this._currentDragOperation = DROP_EFFECTS[0];\n }\n }\n }\n return dragFailed;\n };\n DragOperationController.prototype._finishDragOperation = function() {\n console.log(\"dnd-poly: dragimage snap back transition ended\");\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = this._currentDragOperation;\n dispatchDragEvent(\"dragend\", this._sourceNode, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false);\n this._dragOperationState = 2;\n this._cleanup();\n };\n return DragOperationController;\n})();\n\nconst config = {\n iterationInterval: 150,\n tryFindDraggableTarget: tryFindDraggableTarget,\n dragImageSetup: createDragImage,\n elementFromPoint: function(x, y) {\n return document.elementFromPoint(x, y);\n }\n};\nlet activeDragOperation;\nfunction onTouchstart(e, composePath) {\n console.log(\"dnd-poly: global touchstart\");\n if (activeDragOperation) {\n console.log(\"dnd-poly: drag operation already active\");\n return;\n }\n const dragTarget = config.tryFindDraggableTarget(e, composePath);\n if (!dragTarget) {\n console.log(\"dnd-poly: no draggable at touchstart coordinates\");\n return;\n }\n try {\n activeDragOperation = new DragOperationController(e, config, dragTarget, dragOperationEnded);\n } catch (err) {\n dragOperationEnded(config, e, 3);\n throw err;\n }\n}\nfunction onDelayTouchstart(evt) {\n console.log(\"dnd-poly: setup delayed dragstart..\");\n const el = evt.target;\n const composePath = evt.composedPath();\n const heldItem = function() {\n console.log(\"dnd-poly: starting delayed drag..\");\n end.off();\n cancel.off();\n move.off();\n scroll.off();\n onTouchstart(evt, composePath);\n };\n const onReleasedItem = function(event) {\n console.log(\"dnd-poly: aborting delayed drag because of \" + event.type);\n end.off();\n cancel.off();\n move.off();\n scroll.off();\n if (el) {\n el.dispatchEvent(new CustomEvent(EVENT_DRAG_DRAGSTART_CANCEL, {bubbles: true, cancelable: true}));\n }\n clearTimeout(timer);\n };\n if (el) {\n el.dispatchEvent(new CustomEvent(EVENT_DRAG_DRAGSTART_PENDING, {bubbles: true, cancelable: true}));\n }\n const timer = window.setTimeout(heldItem, config.holdToDrag);\n const end = onEvt(el, \"touchend\", onReleasedItem);\n const cancel = onEvt(el, \"touchcancel\", onReleasedItem);\n const move = onEvt(el, \"touchmove\", onReleasedItem);\n const scroll = onEvt(window, \"scroll\", onReleasedItem, true);\n}\n\nfunction dragOperationEnded(_config, event, state) {\n if (state === 0) {\n console.log(\"dnd-poly: Drag never started. Last event was \" + event.type);\n if (_config.defaultActionOverride) {\n try {\n _config.defaultActionOverride(event);\n if (event.defaultPrevented) {\n console.log(\"dnd-poly: defaultActionOverride has taken care of triggering the default action. preventing default on original event\");\n }\n } catch (e) {\n console.log(\"dnd-poly: error in defaultActionOverride: \" + e);\n }\n }\n }\n activeDragOperation = null;\n}\n\nfunction polyfill(override) {\n if (override) {\n Object.keys(override).forEach(function(key) {\n config[key] = override[key];\n });\n }\n if (!config.forceApply) {\n const detectedFeatures = detectFeatures();\n if (detectedFeatures.userAgentSupportingNativeDnD && detectedFeatures.draggable && detectedFeatures.dragEvents) {\n return false;\n }\n }\n console.log(\"dnd-poly: Applying mobile drag and drop polyfill.\");\n if (config.holdToDrag) {\n console.log(\"dnd-poly: holdToDrag set to \" + config.holdToDrag);\n addDocumentListener(\"touchstart\", onDelayTouchstart, false);\n } else {\n addDocumentListener(\"touchstart\", onTouchstart, false);\n }\n return true;\n}\n\nfunction tryFindDraggableTarget_override(event, composePath) {\n const cp = composePath || event.composedPath();\n for (let o of cp) {\n let el = o;\n do {\n if (el.draggable === false) {\n continue;\n }\n if (el.getAttribute && el.getAttribute(\"draggable\") === \"true\") {\n return el;\n }\n } while ((el = el.parentNode) && el !== document.body);\n }\n}\n\nfunction elementFromPoint(x, y) {\n for (let o of this._path) {\n if (o.elementFromPoint) {\n let el = o.elementFromPoint(x, y);\n if (el) {\n while (el.shadowRoot) {\n el = el.shadowRoot.elementFromPoint(x, y);\n }\n return el;\n }\n }\n }\n}\n\nfunction dragStartConditionOverride(event) {\n this._path = event.composedPath();\n return true;\n}\n\npolyfill({\n tryFindDraggableTarget: tryFindDraggableTarget_override,\n elementFromPoint: elementFromPoint,\n dragStartConditionOverride: dragStartConditionOverride,\n holdToDrag: 500\n});\n","module.exports = __WEBPACK_EXTERNAL_MODULE__34__;","module.exports = __WEBPACK_EXTERNAL_MODULE__35__;","module.exports = __WEBPACK_EXTERNAL_MODULE__36__;","module.exports = __WEBPACK_EXTERNAL_MODULE__37__;","module.exports = __WEBPACK_EXTERNAL_MODULE__38__;","module.exports = __WEBPACK_EXTERNAL_MODULE__39__;","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport values from \"lodash/values\";\n\nexport default class State {\n constructor() {\n this.edit = false;\n this.column_name = undefined;\n this.computation = undefined;\n this.input_columns = [];\n this.swap_target = false;\n this.name_edited = false;\n this.computed_function_name = \"\";\n }\n\n is_valid() {\n const vals = values(this);\n return !vals.includes(null) && !vals.includes(undefined) && !vals.includes(\"\") && this.input_columns.length === this.computation.num_params;\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nexport const FORMATTER = Symbol(\"formatter\");\n\n// TODO: need to change this to method and method name\n\nexport class Computation {\n constructor(name, formatter, input_type, return_type, func, category, num_params = 1) {\n this.category = category;\n this.name = name;\n this[FORMATTER] = formatter;\n this.input_type = input_type;\n this.return_type = return_type;\n this.func = func.toString();\n this.num_params = num_params;\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {swap} from \"../utils.js\";\n\nfunction calc_index(event) {\n if (this._active_columns.children.length == 0) {\n return 0;\n } else {\n let is_last_null = false;\n for (let cidx in this._active_columns.children) {\n let child = this._active_columns.children[cidx];\n is_last_null = is_last_null || child?.classList?.contains(\"null-column\");\n if (child.offsetTop + child.offsetHeight > event.offsetY + this._active_columns.scrollTop) {\n return parseInt(cidx);\n }\n }\n let last_index = this._active_columns.children.length;\n if (is_last_null) {\n last_index--;\n }\n return last_index;\n }\n}\n\nexport function dragend(event) {\n let div = event.target.getRootNode().host;\n let parent = div;\n if (parent.tagName === \"PERSPECTIVE-VIEWER\") {\n parent = event.target.parentElement;\n } else {\n parent = div.parentElement;\n }\n let idx = Array.prototype.slice.call(parent.children).indexOf(div.tagName === \"PERSPECTIVE-ROW\" ? div : event.target);\n let attr_name = parent.getAttribute(\"for\");\n if (this.hasAttribute(attr_name)) {\n let attr_value = JSON.parse(this.getAttribute(attr_name));\n attr_value.splice(idx, 1);\n if (attr_value.length === 0) {\n this.removeAttribute(attr_name);\n } else {\n this.setAttribute(attr_name, JSON.stringify(attr_value));\n }\n }\n}\n\nexport function drop(ev) {\n ev.preventDefault();\n ev.currentTarget.classList.remove(\"dropping\");\n if (this._drop_target_hover) {\n this._drop_target_hover.removeAttribute(\"drop-target\");\n }\n let data = ev.dataTransfer.getData(\"text\");\n if (!data) return;\n data = JSON.parse(data);\n\n // Update the columns attribute\n let name = ev.currentTarget.querySelector(\"ul\").getAttribute(\"for\") || ev.currentTarget.getAttribute(\"id\").replace(\"_\", \"-\");\n let columns = JSON.parse(this.getAttribute(name) || \"[]\");\n let data_index = columns.indexOf(data[0]);\n if (data_index !== -1) {\n columns.splice(data_index, 1);\n }\n\n const filtering = name.indexOf(\"filter\") > -1;\n if (filtering) {\n this.setAttribute(name, JSON.stringify(columns.concat([data])));\n } else if (name.indexOf(\"sort\") > -1) {\n this.setAttribute(name, JSON.stringify(columns.concat([[data[0]]])));\n } else {\n this.setAttribute(name, JSON.stringify(columns.concat([data[0]])));\n }\n\n // Deselect the dropped column\n if (this._plugin.deselectMode === \"pivots\" && this._get_visible_column_count() > 1 && name !== \"sort\" && !filtering) {\n for (let x of this.shadowRoot.querySelectorAll(\"#active_columns perspective-row\")) {\n if (x.getAttribute(\"name\") === data[0]) {\n this._active_columns.removeChild(x);\n break;\n }\n }\n this._update_column_view();\n }\n\n this._debounce_update();\n}\n\nexport function column_dragend(event) {\n let data = event.target.parentElement.parentElement;\n if (Array.prototype.slice(this._active_columns.children).indexOf(data) > -1 && this._get_visible_column_count() > 1 && event.dataTransfer.dropEffect !== \"move\") {\n this._active_columns.removeChild(data);\n this._update_column_view();\n }\n this._active_columns.classList.remove(\"dropping\");\n}\n\nexport function column_dragleave(event) {\n let src = event.relatedTarget;\n while (src && src !== this._active_columns) {\n src = src.parentElement;\n }\n if (src === null) {\n this._active_columns.classList.remove(\"dropping\");\n if (this._drop_target_null) {\n this._active_columns.replaceChild(this._drop_target_null, this._drop_target_hover);\n delete this._drop_target_null;\n }\n if (this._drop_target_hover.parentElement === this._active_columns) {\n this._active_columns.removeChild(this._drop_target_hover);\n }\n if (this._original_index !== -1) {\n this._active_columns.insertBefore(this._drop_target_hover, this._active_columns.children[this._original_index]);\n }\n this._drop_target_hover.removeAttribute(\"drop-target\");\n }\n}\n\nfunction _unset_drop_target_null() {\n if (this._drop_target_null) {\n if (this._drop_target_null.parentElement === this._active_columns) {\n swap(this._active_columns, this._drop_target_hover, this._drop_target_null);\n } else {\n this._active_columns.replaceChild(this._drop_target_null, this._drop_target_hover);\n }\n delete this._drop_target_null;\n }\n}\n\nfunction column_swap(new_index) {\n _unset_drop_target_null.call(this);\n if (this._active_columns.children[new_index]) {\n if (this._drop_target_hover !== this._active_columns.children[new_index]) {\n this._drop_target_null = this._active_columns.children[new_index];\n swap(this._active_columns, this._active_columns.children[new_index], this._drop_target_hover);\n }\n }\n}\n\nfunction column_replace(new_index) {\n _unset_drop_target_null.call(this);\n if (this._active_columns.children[new_index]) {\n this._drop_target_null = this._active_columns.children[new_index];\n this._active_columns.replaceChild(this._drop_target_hover, this._active_columns.children[new_index]);\n }\n}\n\nexport function column_dragover(event) {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n if (event.currentTarget.className !== \"dropping\") {\n event.currentTarget.classList.add(\"dropping\");\n }\n if (!this._drop_target_hover.hasAttribute(\"drop-target\")) {\n this._drop_target_hover.toggleAttribute(\"drop-target\", true);\n }\n let new_index = calc_index.call(this, event);\n const current_index = Array.prototype.slice.call(this._active_columns.children).indexOf(this._drop_target_hover);\n const over_elem = this._active_columns.children[new_index];\n const to_replace = new_index < this._plugin.initial?.names?.length - 1;\n const is_diff = this._drop_target_hover !== this._active_columns.children[new_index];\n const from_active = this._original_index !== -1;\n const from_replace = from_active && this._original_index < this._plugin.initial?.names?.length - 1;\n const from_append = from_active && this._original_index >= this._plugin.initial?.names?.length - 1;\n const from_required = from_active && this._original_index < this._plugin.initial?.count;\n const to_required = new_index < this._plugin.initial?.count;\n const to_null = !to_required && over_elem?.classList.contains(\"null-column\");\n if (from_required && to_null) {\n _unset_drop_target_null.call(this);\n } else if (to_replace && from_append && is_diff) {\n _unset_drop_target_null.call(this);\n const from_last =\n this._original_index === this._plugin.initial?.names?.length - 1 &&\n this._drop_target_hover === this._active_columns.children[this._original_index] &&\n this._active_columns.children.length === this._plugin.initial?.names?.length;\n if (from_last) {\n this._drop_target_null = this._active_columns.children[new_index];\n swap(this._active_columns, this._active_columns.children[new_index], this._drop_target_hover);\n } else if (!this._active_columns.children[new_index]?.classList.contains(\"null-column\")) {\n this._drop_target_null = this._active_columns.children[new_index];\n this._active_columns.replaceChild(this._drop_target_hover, this._active_columns.children[new_index]);\n this._active_columns.insertBefore(this._drop_target_null, this._active_columns.children[this._original_index]);\n } else {\n if (this._drop_target_hover !== this._active_columns.children[new_index]) {\n this._drop_target_null = this._active_columns.children[new_index];\n this._active_columns.replaceChild(this._drop_target_hover, this._active_columns.children[new_index]);\n }\n }\n } else if (to_replace && from_active && is_diff) {\n column_swap.call(this, new_index);\n } else if (to_replace && !from_active && is_diff) {\n column_replace.call(this, new_index);\n } else if (!to_replace && from_replace && is_diff) {\n column_swap.call(this, new_index);\n } else if (to_null && from_active) {\n column_swap.call(this, new_index);\n } else if (to_null && !from_active) {\n column_replace.call(this, new_index);\n } else if (current_index < new_index) {\n if (new_index + 1 < this._active_columns.children.length) {\n if (!this._active_columns.children[new_index + 1].hasAttribute(\"drop-target\")) {\n _unset_drop_target_null.call(this);\n this._active_columns.insertBefore(this._drop_target_hover, this._active_columns.children[new_index + 1]);\n }\n } else {\n if (!this._active_columns.children[this._active_columns.children.length - 1].hasAttribute(\"drop-target\")) {\n _unset_drop_target_null.call(this);\n this._active_columns.appendChild(this._drop_target_hover);\n }\n }\n } else if (new_index < this._active_columns.children.length) {\n if (!this._active_columns.children[new_index].hasAttribute(\"drop-target\")) {\n _unset_drop_target_null.call(this);\n this._active_columns.insertBefore(this._drop_target_hover, this._active_columns.children[new_index]);\n }\n } else {\n if (!this._active_columns.children[this._active_columns.children.length - 1].hasAttribute(\"drop-target\")) {\n _unset_drop_target_null.call(this);\n this._active_columns.appendChild(this._drop_target_hover);\n }\n }\n}\n\nexport function column_drop(ev) {\n ev.preventDefault();\n delete this._drop_target_null;\n ev.currentTarget.classList.remove(\"dropping\");\n if (this._drop_target_hover.parentElement === this._active_columns) {\n this._drop_target_hover.removeAttribute(\"drop-target\");\n }\n let data = ev.dataTransfer.getData(\"text\");\n if (!data) return;\n\n this._update_column_view();\n}\n\nexport function dragenter(ev) {\n ev.stopPropagation();\n ev.preventDefault();\n ev.currentTarget.classList.add(\"dropping\");\n}\n\nexport function dragover(ev) {\n ev.stopPropagation();\n ev.preventDefault();\n ev.currentTarget.classList.add(\"dropping\");\n ev.dataTransfer.dropEffect = \"move\";\n}\n\nexport function dragleave(ev) {\n if (ev.currentTarget == ev.target) {\n ev.stopPropagation();\n ev.preventDefault();\n ev.currentTarget.classList.remove(\"dropping\");\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {bindTemplate} from \"./utils.js\";\nimport State from \"./computed_column/state.js\";\nimport {Computation, FORMATTER} from \"./computed_column/computation.js\";\n\nimport template from \"../html/computed_column.html\";\n\nimport style from \"../less/computed_column.less\";\n\nimport {dragleave} from \"./viewer/dragdrop.js\";\nimport {html, render} from \"lit-html\";\n\n// Computations\nconst hour_of_day = function(val) {\n return new Date(val).getHours();\n};\n\nconst day_of_week = function(val) {\n return [\"1 Sunday\", \"2 Monday\", \"3 Tuesday\", \"4 Wednesday\", \"5 Thursday\", \"6 Friday\", \"7 Saturday\"][new Date(val).getDay()];\n};\n\nconst month_of_year = function(val) {\n return [\"01 January\", \"02 February\", \"03 March\", \"04 April\", \"05 May\", \"06 June\", \"07 July\", \"08 August\", \"09 September\", \"10 October\", \"11 November\", \"12 December\"][new Date(val).getMonth()];\n};\n\nconst second_bucket = function(val) {\n return new Date(Math.floor(new Date(val).getTime() / 1000) * 1000);\n};\n\nconst minute_bucket = function(val) {\n let date = new Date(val);\n date.setSeconds(0);\n date.setMilliseconds(0);\n return date;\n};\n\nconst hour_bucket = function(val) {\n let date = new Date(val);\n date.setMinutes(0);\n date.setSeconds(0);\n date.setMilliseconds(0);\n return date;\n};\n\nconst day_bucket = function(val) {\n let date = new Date(val);\n date.setHours(0);\n date.setMinutes(0);\n date.setSeconds(0);\n date.setMilliseconds(0);\n return date;\n};\n\nconst week_bucket = function(val) {\n let date = new Date(val);\n let day = date.getDay();\n let diff = date.getDate() - day + (day == 0 ? -6 : 1);\n date.setHours(0);\n date.setMinutes(0);\n date.setSeconds(0);\n date.setDate(diff);\n return date;\n};\n\nconst month_bucket = function(val) {\n let date = new Date(val);\n date.setHours(0);\n date.setMinutes(0);\n date.setSeconds(0);\n date.setDate(1);\n return date;\n};\n\nconst year_bucket = function(val) {\n let date = new Date(val);\n date.setHours(0);\n date.setMinutes(0);\n date.setSeconds(0);\n date.setDate(1);\n date.setMonth(1);\n return date;\n};\n\nexport const COMPUTATIONS = {\n hour_of_day: new Computation(\"Hour of Day\", x => `hour_of_day(${x})`, \"datetime\", \"integer\", hour_of_day, [\"Time\"]),\n day_of_week: new Computation(\"Day of Week\", x => `day_of_week(${x})`, \"datetime\", \"string\", day_of_week, [\"Time\"]),\n month_of_year: new Computation(\"Month of Year\", x => `month_of_year(${x})`, \"datetime\", \"string\", month_of_year, [\"Time\"]),\n second_bucket: new Computation(\"Bucket (s)\", x => `second_bucket(${x})`, \"datetime\", \"datetime\", second_bucket, [\"Time\"]),\n minute_bucket: new Computation(\"Bucket (m)\", x => `minute_bucket(${x})`, \"datetime\", \"datetime\", minute_bucket, [\"Time\"]),\n hour_bucket: new Computation(\"Bucket (h)\", x => `hour_bucket(${x})`, \"datetime\", \"datetime\", hour_bucket, [\"Time\"]),\n day_bucket: new Computation(\"Bucket (D)\", x => `day_bucket(${x})`, \"datetime\", \"date\", day_bucket, [\"Time\"]),\n week_bucket: new Computation(\"Bucket (W)\", x => `week_bucket(${x})`, \"datetime\", \"date\", week_bucket, [\"Time\"]),\n month_bucket: new Computation(\"Bucket (M)\", x => `month_bucket(${x})`, \"datetime\", \"date\", month_bucket, [\"Time\"]),\n year_bucket: new Computation(\"Bucket (Y)\", x => `year_bucket(${x})`, \"datetime\", \"date\", year_bucket, [\"Time\"]),\n \"10_bucket\": new Computation(\n \"Bucket (10)\",\n x => `bin10(${x})`,\n \"float\",\n \"float\",\n x => Math.floor(x / 10) * 10,\n [\"Math\"]\n ),\n \"100_bucket\": new Computation(\n \"Bucket (100)\",\n x => `bin100(${x})`,\n \"float\",\n \"float\",\n x => Math.floor(x / 100) * 100,\n [\"Math\"]\n ),\n \"1000_bucket\": new Computation(\n \"Bucket (1000)\",\n x => `bin1000(${x})`,\n \"float\",\n \"float\",\n x => Math.floor(x / 1000) * 1000,\n [\"Math\"]\n ),\n \"0.1_bucket\": new Computation(\n \"Bucket (1/10)\",\n x => `bin10th(${x})`,\n \"float\",\n \"float\",\n x => Math.floor(x / 0.1) * 0.1,\n [\"Math\"]\n ),\n \"0.01_bucket\": new Computation(\n \"Bucket (1/100)\",\n x => `bin100th(${x})`,\n \"float\",\n \"float\",\n x => Math.floor(x / 0.01) * 0.01,\n [\"Math\"]\n ),\n \"0.001_bucket\": new Computation(\n \"Bucket (1/1000)\",\n x => `bin1000th(${x})`,\n \"float\",\n \"float\",\n x => Math.floor(x / 0.001) * 0.001,\n [\"Math\"]\n ),\n add: new Computation(\n \"+\",\n (x, y) => `(${x} + ${y})`,\n \"float\",\n \"float\",\n (a, b) => a + b,\n [\"Math\"],\n 2\n ),\n subtract: new Computation(\n \"-\",\n (x, y) => `(${x} - ${y})`,\n \"float\",\n \"float\",\n (a, b) => a - b,\n [\"Math\"],\n 2\n ),\n multiply: new Computation(\n \"*\",\n (x, y) => `(${x} * ${y})`,\n \"float\",\n \"float\",\n (a, b) => a * b,\n [\"Math\"],\n 2\n ),\n divide: new Computation(\n \"/\",\n (x, y) => `(${x} / ${y})`,\n \"float\",\n \"float\",\n (a, b) => a / b,\n [\"Math\"],\n 2\n ),\n invert: new Computation(\n \"1/x\",\n x => `(1 / ${x})`,\n \"float\",\n \"float\",\n a => 1 / a,\n [\"Math\"],\n 1\n ),\n pow: new Computation(\n \"x^2\",\n x => `(${x} ^ 2)`,\n \"float\",\n \"float\",\n a => Math.pow(a, 2),\n [\"Math\"],\n 1\n ),\n sqrt: new Computation(\n \"sqrt\",\n x => `sqrt(${x})`,\n \"float\",\n \"float\",\n a => Math.sqrt(a),\n [\"Math\"],\n 1\n ),\n abs: new Computation(\n \"abs\",\n x => `abs(${x})`,\n \"float\",\n \"float\",\n a => Math.abs(a),\n [\"Math\"],\n 1\n ),\n percent_a_of_b: new Computation(\n \"%\",\n (x, y) => `(${x} %% ${y})`,\n \"float\",\n \"float\",\n (a, b) => (a / b) * 100,\n [\"Math\"],\n 2\n ),\n uppercase: new Computation(\n \"Uppercase\",\n x => `uppercase(${x})`,\n \"string\",\n \"string\",\n x => x.toUpperCase(),\n [\"Text\"]\n ),\n lowercase: new Computation(\n \"Lowercase\",\n x => `lowercase(${x})`,\n \"string\",\n \"string\",\n x => x.toLowerCase(),\n [\"Text\"]\n ),\n length: new Computation(\n \"length\",\n x => `length(${x})`,\n \"string\",\n \"integer\",\n x => x.length,\n [\"Text\"]\n ),\n concat_space: new Computation(\n \"concat_space\",\n x => `concat_space(${x})`,\n \"string\",\n \"string\",\n (a, b) => a + \" \" + b,\n [\"Text\"],\n 2\n ),\n concat_comma: new Computation(\n \"concat_comma\",\n x => `concat_comma(${x})`,\n \"string\",\n \"string\",\n (a, b) => a + \", \" + b,\n [\"Text\"],\n 2\n )\n};\n\nfunction _insert_tree(name, elem, tree) {\n let pointer = tree;\n const path = elem.category;\n for (const category of path) {\n pointer = pointer[category] = pointer[category] || {};\n }\n pointer[name] = elem;\n}\n\nfunction _get_tree() {\n const tree = {};\n for (const comp in COMPUTATIONS) {\n _insert_tree(comp, COMPUTATIONS[comp], tree);\n }\n return tree;\n}\n\nlet TREE = _get_tree();\n\n// Eslint complains here because we don't do anything, but actually we globally\n// register this class as a CustomElement\n@bindTemplate(template, style) // eslint-disable-next-line no-unused-vars\nclass ComputedColumn extends HTMLElement {\n constructor() {\n super();\n\n this.state = new State();\n this.column_names = [];\n\n this.type_markers = {\n float: \"123\",\n integer: \"123\",\n string: \"abc\",\n boolean: \"t/f\",\n datetime: \"mdy\",\n date: \"mdy\"\n };\n }\n\n get computations() {\n return COMPUTATIONS;\n }\n\n connectedCallback() {\n this._register_ids();\n render(Array.from(this._selector_template()), this._computation_selector);\n this._register_callbacks();\n this._update_computation(null);\n this._register_inputs();\n }\n\n _register_computations() {\n TREE = _get_tree();\n render(Array.from(this._selector_template()), this._computation_selector);\n }\n\n *_selector_template(tree = TREE) {\n for (const [category, comp] of Object.entries(tree)) {\n if (comp.name) {\n yield html`\n <option value=${category}>${comp.name}</option>\n `;\n } else {\n yield html`\n <optgroup label=${category}>${Array.from(this._selector_template(comp))}</optgroup>\n `;\n }\n }\n }\n\n // Generate input column holders, reset input column state\n _register_inputs() {\n this._clear_error_messages();\n this._disable_save_button();\n this._input_columns.innerHTML = \"\";\n const computation = this.state.computation;\n const input_type = computation.input_type;\n\n this.state.input_columns = [];\n this.state.swap_target = false;\n\n for (let i = 0; i < computation.num_params; i++) {\n this._input_columns.innerHTML += `<div class=\"psp-cc-computation__input-column\"\n data-index=\"${i}\"\n drop-target>\n <span class=\"psp-label__requiredType ${input_type}\"></span>\n <span class=\"psp-label__placeholder\">Param ${i + 1}</span>\n <div class=\"psp-cc-computation__drop-target-hover\"></div>\n </div>`;\n }\n\n for (let column of this._input_columns.children) {\n column.addEventListener(\"drop\", this._drop_column.bind(this));\n column.addEventListener(\"dragstart\", this._drag_column.bind(this));\n column.addEventListener(\"dragend\", this._remove_column.bind(this));\n column.addEventListener(\"dragover\", this._hover_column.bind(this));\n column.addEventListener(\"dragleave\", this._pass_column.bind(this));\n }\n\n this._clear_column_name();\n }\n\n // Drag & Drop\n _parse_data_transfer(data) {\n const column_data = JSON.parse(data);\n if (!column_data) return;\n\n return {\n column_name: column_data[0],\n column_type: column_data[3]\n };\n }\n\n _drag_column(event) {\n // called when columns are dragged from inside the UI\n if (this.state.computation.num_params > 1) {\n // if there is a chance of a swap happening, cache the swap target\n this.state.swap_target = event.currentTarget;\n }\n }\n\n _hover_column(event) {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n\n const drop_target = event.currentTarget;\n const drop_target_hover = drop_target.querySelector(\".psp-cc-computation__drop-target-hover\");\n if (drop_target.className !== \"dropping\") {\n //event.currentTarget.classList.remove('dropped');\n drop_target.classList.add(\"dropping\");\n }\n if (drop_target_hover && !drop_target_hover.hasAttribute(\"drop-target\")) {\n drop_target_hover.toggleAttribute(\"drop-target\", \"true\");\n }\n\n if (drop_target.children.length === 2) {\n // drop_target_hover is the blue box\n drop_target.parentNode.insertBefore(drop_target_hover, drop_target.nextSibling);\n }\n }\n\n _drop_column(event) {\n const target = event.currentTarget;\n event.preventDefault();\n\n target.classList.remove(\"dropping\");\n\n const is_swap = this.state.swap_target !== undefined && target.innerHTML.indexOf(\"perspective-row\") > -1;\n\n // column must match return type of computation\n const data = this._parse_data_transfer(event.dataTransfer.getData(\"text\"));\n if (!data) return;\n\n if (is_swap) {\n const current_column = target.children[0];\n const current_column_name = current_column.getAttribute(\"name\");\n const current_column_type = current_column.getAttribute(\"type\");\n event.swapTarget = this.state.swap_target;\n\n // take the column at the drop target, and set it to the column\n // being swapped\n this._set_input_column(event, current_column_name, current_column_type);\n\n // reset swap_target and currentTarget\n this.state.swap_target = false;\n delete event.swapTarget;\n }\n\n this._set_input_column(event, data.column_name, data.column_type);\n }\n\n deselect_column(name) {\n this.state.input_columns = this.state.input_columns.map(x => (x && x.name === name ? undefined : x));\n this._apply_state(this.state.input_columns, this.state.computation);\n }\n\n // Called when a column is dragged out of the computed column UI\n _remove_column(event) {\n event.currentTarget.classList.remove(\"dropping\");\n }\n\n // Called when the column passes over and then leaves the drop target\n _pass_column(event) {\n const src = event.currentTarget;\n // are we inside the column? if we are, prevent further calls which\n // cause flickering\n const bounds = src.getBoundingClientRect();\n const inside_x = event.pageX >= bounds.left && event.pageX <= bounds.right - 2;\n const inside_y = event.pageY >= bounds.top && event.pageY <= bounds.bottom - 2;\n if (inside_x && inside_y) {\n return;\n }\n if (src !== null && src.nodeName !== \"SPAN\") {\n src.classList.remove(\"dropping\");\n const drop_target_hover = src.querySelector(\".psp-cc-computation__drop-target-hover\");\n if (drop_target_hover) drop_target_hover.removeAttribute(\"drop-target\");\n }\n }\n\n // When state changes are made manually, apply them to the UI\n _apply_state(columns, computation, name) {\n this._update_computation(null, this.state.computed_function_name);\n this.state[\"input_columns\"] = columns;\n const inputs = this._input_columns.children;\n\n for (let i = 0; i < this.state[\"input_columns\"].length; i++) {\n if (this.state[\"input_columns\"][i] !== undefined) {\n this._set_input_column({currentTarget: inputs[i]}, this.state[\"input_columns\"][i].name, this.state[\"input_columns\"][i].type);\n }\n }\n\n this._column_name_input.innerText = name || \"\";\n this._set_column_name();\n this.state[\"name_edited\"] = name !== undefined;\n\n if (this.state.is_valid()) {\n this._enable_save_button();\n }\n }\n\n // column_name\n _set_column_name() {\n const input = this._column_name_input;\n let name = input.innerText;\n if (name.length == 0) {\n this.state[\"column_name\"] = undefined;\n this._disable_save_button();\n return;\n }\n this.state[\"column_name\"] = name;\n\n if (this.state.is_valid()) {\n this._enable_save_button();\n }\n }\n\n _auto_column_name() {\n if (this.state.name_edited) {\n return;\n }\n if (this.state.input_columns.length > 0) {\n let names = [];\n for (let column of this.state.input_columns) names.push(column.name);\n if (this.state.computation[FORMATTER]) {\n this._column_name_input.innerText = this.state.computation[FORMATTER].apply(undefined, names);\n } else {\n this._column_name_input.innerText = `${this.state.computation.name}(${names.join(\", \")})`;\n }\n } else {\n this._column_name_input.innerText = \"\";\n }\n this._set_column_name();\n }\n\n _clear_column_name() {\n const input = this._column_name_input;\n input.innerText = \"\";\n this.state[\"name_edited\"] = false;\n this._set_column_name();\n }\n\n // input column\n _set_input_column(event, name, type) {\n const computation = this.state.computation;\n const computation_type = computation.input_type;\n const inputs = this.state.input_columns;\n\n let target;\n if (event.swapTarget) {\n target = event.swapTarget;\n } else {\n target = event.currentTarget;\n }\n\n const index = Number.parseInt(target.getAttribute(\"data-index\"));\n\n if (\n (computation_type !== \"float\" && computation_type !== \"datetime\" && type !== computation_type) ||\n (computation_type === \"float\" && type !== \"float\" && type !== \"integer\") ||\n (computation_type === \"datetime\" && type !== \"datetime\" && type !== \"date\")\n ) {\n this._register_inputs();\n target.classList.remove(\"dropped\");\n return;\n }\n\n target.classList.add(\"dropped\");\n\n const drop_target_hover = target.querySelector(\".psp-cc-computation__drop-target-hover\");\n if (drop_target_hover) drop_target_hover.removeAttribute(\"drop-target\");\n\n target.innerHTML = \"\";\n\n const column = {\n name: name,\n type: type\n };\n\n inputs[index] = column;\n\n this.state[\"input_columns\"] = inputs;\n if (inputs.filter(x => x).length === computation.num_params) {\n this._auto_column_name();\n }\n\n this.dispatchEvent(\n new CustomEvent(\"perspective-computed-column-update\", {\n detail: {\n target,\n column\n }\n })\n );\n\n if (this.state.is_valid()) {\n this._enable_save_button();\n }\n }\n\n // computation\n _update_computation(event, computation_name) {\n const select = this._computation_selector;\n\n if (!computation_name) {\n computation_name = select[select.selectedIndex].value;\n } else if (event === null || event === undefined) {\n select.value = computation_name;\n }\n\n const computation = Object.assign({}, COMPUTATIONS[computation_name]);\n\n if (computation === undefined) {\n throw \"Undefined computation could not be set.\";\n }\n\n const num_params = computation.num_params;\n const input_type = computation.input_type;\n const return_type = computation.return_type;\n let reset_inputs = true;\n\n if (this.state[\"computation\"]) {\n // do we need to reset the input? if types/num_params differ then\n // yes\n reset_inputs = input_type !== this.state[\"computation\"].input_type || num_params !== this.state[\"computation\"].num_params;\n }\n\n this._computation_type.innerHTML = `<span class=\"${return_type}\">${this.type_markers[return_type]}</span>`;\n\n this.state[\"computation\"] = computation;\n this.state.computed_function_name = computation_name;\n\n if (reset_inputs || event === null) {\n this._register_inputs();\n this._clear_column_name();\n } else {\n this._auto_column_name();\n }\n }\n\n // error message handlers\n _set_error_message(message, target) {\n if (target) {\n target.innerText = message;\n target.style.display = \"block\";\n }\n }\n\n _clear_error_messages() {\n this._column_name_error.innerText = \"\";\n this._column_name_error.style.display = \"none\";\n }\n\n // save button handlers\n _disable_save_button() {\n this._save_button.toggleAttribute(\"disabled\", true);\n }\n\n _enable_save_button() {\n this._save_button.removeAttribute(\"disabled\");\n }\n\n // save\n _save_computed_column() {\n if (this.state.is_valid()) {\n const computed_column = this.state;\n\n if (this.column_names.includes(this.state.column_name)) {\n this._set_error_message(\"Column names must be unique.\", this._column_name_error);\n return;\n }\n\n this._clear_error_messages();\n\n const event = new CustomEvent(\"perspective-computed-column-save\", {\n detail: {\n name: computed_column.column_name,\n inputs: computed_column.input_columns.map(x => x.name),\n func: computed_column.computed_function_name\n }\n });\n this.dispatchEvent(event);\n\n this.column_names.push(computed_column.column_name);\n }\n }\n\n // close\n _close_computed_column() {\n this.style.display = \"none\";\n this._side_panel_actions.style.display = \"flex\";\n\n this.classList.remove(\"edit\");\n this._column_name_input.innerText = \"\";\n this._input_columns.innerHTML = \"\";\n\n for (let child of this._input_columns.children) child.classList.remove(\"dropped\");\n\n this.state = new State();\n this._update_computation();\n }\n\n _register_ids() {\n this._side_panel_actions = this.parentElement.querySelector(\"#side_panel__actions\");\n this._close_button = this.shadowRoot.querySelector(\"#psp-cc__close\");\n this._column_name_input = this.shadowRoot.querySelector(\"#psp-cc-name\");\n this._column_name_error = this.shadowRoot.querySelector(\"#psp-cc__error--name\");\n this._computation_selector = this.shadowRoot.querySelector(\"#psp-cc-computation__select\");\n this._computation_type = this.shadowRoot.querySelector(\"#psp-cc-computation__type\");\n this._input_columns = this.shadowRoot.querySelector(\"#psp-cc-computation-inputs\");\n //this._delete_button =\n //this.shadowRoot.querySelector('#psp-cc-button-delete');\n this._save_button = this.shadowRoot.querySelector(\"#psp-cc-button-save\");\n }\n\n _register_callbacks() {\n this._close_button.addEventListener(\"click\", this._close_computed_column.bind(this));\n this._computation_selector.addEventListener(\"change\", this._update_computation.bind(this));\n this._column_name_input.addEventListener(\"dragover\", dragleave.bind(this));\n this._column_name_input.addEventListener(\"keyup\", event => {\n this.state[\"name_edited\"] = this._column_name_input.innerText && this._column_name_input.innerText.length > 0;\n this._set_column_name(event);\n });\n //this._delete_button.addEventListener('click',\n //this._delete_computed_column.bind(this));\n this._save_button.addEventListener(\"click\", this._save_computed_column.bind(this));\n }\n}\n","/******************************************************************************\r\n *\r\n * Copyright (c) 2017, the Perspective Authors.\r\n *\r\n * This file is part of the Perspective library, distributed under the terms of\r\n * the Apache License 2.0. The full license can be found in the LICENSE file.\r\n *\r\n */\r\n\r\nimport debounce from \"lodash/debounce\";\r\n\r\nimport Awesomplete from \"awesomplete\";\r\nimport awesomplete_style from \"!!css-loader!awesomplete/awesomplete.css\";\r\n\r\nimport {bindTemplate} from \"./utils.js\";\r\n\r\nimport perspective from \"@finos/perspective\";\r\nimport {get_type_config} from \"@finos/perspective/dist/esm/config\";\r\nimport template from \"../html/row.html\";\r\n\r\nimport style from \"../less/row.less\";\r\nimport {html, render, nothing} from \"lit-html\";\r\n\r\nconst SPAN = document.createElement(\"span\");\r\nSPAN.style.visibility = \"hidden\";\r\nSPAN.style.fontFamily = \"monospace\";\r\nSPAN.style.fontSize = \"12px\";\r\nSPAN.style.position = \"absolute\";\r\n\r\nfunction get_text_width(text, max = 0) {\r\n // FIXME get these values form the stylesheet\r\n SPAN.innerHTML = text;\r\n document.body.appendChild(SPAN);\r\n const width = `${Math.max(max, SPAN.offsetWidth) + 20}px`;\r\n document.body.removeChild(SPAN);\r\n return width;\r\n}\r\n\r\n// Eslint complains here because we don't do anything, but actually we globally\r\n// register this class as a CustomElement\r\n@bindTemplate(template, {toString: () => style + \"\\n\" + awesomplete_style}) // eslint-disable-next-line no-unused-vars\r\nclass Row extends HTMLElement {\r\n set name(n) {\r\n const elem = this.shadowRoot.querySelector(\"#name\");\r\n elem.innerHTML = this.getAttribute(\"name\");\r\n }\r\n\r\n _option_template(agg, name) {\r\n return html`\r\n <option value=\"${agg}\" data-desc=\"${name}\">${name || agg}</option>\r\n `;\r\n }\r\n\r\n _select_template(category, type) {\r\n const items = perspective[category][type] || [];\r\n const weighted_options = html`\r\n <optgroup label=\"weighted mean\">\r\n ${this._weights.map(x => this._option_template(JSON.stringify([\"weighted mean\", x]), x))}\r\n </optgroup>\r\n `;\r\n return html`\r\n ${items.map(x => this._option_template(x))} ${type === \"integer\" || type === \"float\" ? weighted_options : nothing}\r\n `;\r\n }\r\n\r\n set_weights(xs) {\r\n this._weights = xs;\r\n }\r\n\r\n set type(t) {\r\n const elem = this.shadowRoot.querySelector(\"#name\");\r\n const type = this.getAttribute(\"type\");\r\n if (!type) return;\r\n const type_config = get_type_config(type);\r\n if (type_config.type) {\r\n elem.classList.add(type_config.type);\r\n }\r\n elem.classList.add(type);\r\n const agg_dropdown = this.shadowRoot.querySelector(\"#column_aggregate\");\r\n const filter_dropdown = this.shadowRoot.querySelector(\"#filter_operator\");\r\n\r\n render(this._select_template(\"TYPE_AGGREGATES\", type_config.type || type), agg_dropdown);\r\n render(this._select_template(\"TYPE_FILTERS\", type_config.type || type), filter_dropdown);\r\n\r\n if (!this.hasAttribute(\"aggregate\")) {\r\n this.aggregate = type_config.aggregate;\r\n } else {\r\n this.aggregate = this.getAttribute(\"aggregate\");\r\n }\r\n if (this.hasAttribute(\"filter\")) {\r\n this.filter = this.getAttribute(\"filter\");\r\n }\r\n\r\n const filter_operand = this.shadowRoot.querySelector(\"#filter_operand\");\r\n this._callback = event => this._update_filter(event);\r\n filter_operand.addEventListener(\"keyup\", this._callback.bind(this));\r\n }\r\n\r\n choices(choices) {\r\n const filter_operand = this.shadowRoot.querySelector(\"#filter_operand\");\r\n const filter_operator = this.shadowRoot.querySelector(\"#filter_operator\");\r\n const selector = new Awesomplete(filter_operand, {\r\n label: this.getAttribute(\"name\"),\r\n list: choices,\r\n minChars: 0,\r\n autoFirst: true,\r\n filter: function(text, input) {\r\n return Awesomplete.FILTER_CONTAINS(text, input.match(/[^,]*$/)[0]);\r\n },\r\n item: function(text, input) {\r\n return Awesomplete.ITEM(text, input.match(/[^,]*$/)[0]);\r\n },\r\n replace: function(text) {\r\n const before = this.input.value.match(/^.+,\\s*|/)[0];\r\n if (filter_operator.value === \"in\" || filter_operator.value === \"not in\") {\r\n this.input.value = before + text + \", \";\r\n } else {\r\n this.input.value = before + text;\r\n }\r\n }\r\n });\r\n if (filter_operand.value === \"\") {\r\n selector.evaluate();\r\n }\r\n filter_operand.focus();\r\n this._filter_operand.addEventListener(\"focus\", () => {\r\n if (filter_operand.value.trim().length === 0) {\r\n selector.evaluate();\r\n }\r\n });\r\n filter_operand.addEventListener(\"awesomplete-selectcomplete\", this._callback);\r\n }\r\n\r\n set filter(f) {\r\n const filter_dropdown = this.shadowRoot.querySelector(\"#filter_operator\");\r\n const filter = JSON.parse(this.getAttribute(\"filter\"));\r\n if (filter_dropdown.value !== filter.operator) {\r\n filter_dropdown.value = filter.operator || get_type_config(this.getAttribute(\"type\")).filter_operator;\r\n }\r\n filter_dropdown.style.width = get_text_width(filter_dropdown.value);\r\n const filter_input = this.shadowRoot.querySelector(\"#filter_operand\");\r\n const operand = filter.operand ? filter.operand.toString() : \"\";\r\n if (!this._initialized) {\r\n filter_input.value = operand;\r\n }\r\n if (filter_dropdown.value === perspective.FILTER_OPERATORS.isNull || filter_dropdown.value === perspective.FILTER_OPERATORS.isNotNull) {\r\n filter_input.style.display = \"none\";\r\n } else {\r\n filter_input.style.display = \"inline-block\";\r\n filter_input.style.width = get_text_width(operand, 30);\r\n }\r\n }\r\n\r\n set aggregate(a) {\r\n const agg_dropdown = this.shadowRoot.querySelector(\"#column_aggregate\");\r\n const aggregate = this.getAttribute(\"aggregate\");\r\n if (agg_dropdown.value !== aggregate && this.hasAttribute(\"type\")) {\r\n const type = this.getAttribute(\"type\");\r\n agg_dropdown.value = aggregate || get_type_config(type).aggregate;\r\n }\r\n this._blur_agg_dropdown();\r\n }\r\n\r\n set computed_column(c) {\r\n // const data = this._get_computed_data();\r\n // const computed_input_column =\r\n // this.shadowRoot.querySelector('#computed_input_column');\r\n // const computation_name =\r\n // this.shadowRoot.querySelector('#computation_name');\r\n // computation_name.textContent = data.computation.name;\r\n // computed_input_column.textContent = data.input_column;\r\n }\r\n\r\n _get_computed_data() {\r\n const data = JSON.parse(this.getAttribute(\"computed_column\"));\r\n return {\r\n column_name: data.column_name,\r\n input_columns: data.input_columns,\r\n input_type: data.input_type,\r\n computation: data.computation,\r\n type: data.type\r\n };\r\n }\r\n\r\n _update_filter(event) {\r\n const filter_operand = this.shadowRoot.querySelector(\"#filter_operand\");\r\n const filter_operator = this.shadowRoot.querySelector(\"#filter_operator\");\r\n let val = filter_operand.value;\r\n const type = this.getAttribute(\"type\");\r\n switch (type) {\r\n case \"float\":\r\n val = parseFloat(val);\r\n break;\r\n case \"integer\":\r\n val = parseInt(val);\r\n break;\r\n case \"boolean\":\r\n val = val.toLowerCase().indexOf(\"true\") > -1;\r\n break;\r\n case \"string\":\r\n default:\r\n }\r\n if (filter_operator.value === perspective.FILTER_OPERATORS.isIn || filter_operator.value === perspective.FILTER_OPERATORS.isNotIn) {\r\n val = val.split(\",\").map(x => x.trim());\r\n }\r\n this.setAttribute(\"filter\", JSON.stringify({operator: filter_operator.value, operand: val}));\r\n this.dispatchEvent(new CustomEvent(\"filter-selected\", {detail: event}));\r\n }\r\n\r\n _set_data_transfer(event) {\r\n if (this.hasAttribute(\"filter\")) {\r\n const {operator, operand} = JSON.parse(this.getAttribute(\"filter\"));\r\n event.dataTransfer.setData(\"text\", JSON.stringify([this.getAttribute(\"name\"), operator, operand, this.getAttribute(\"type\"), this.getAttribute(\"aggregate\")]));\r\n } else {\r\n event.dataTransfer.setData(\r\n \"text\",\r\n JSON.stringify([this.getAttribute(\"name\"), get_type_config(this.getAttribute(\"type\")).filter_operator, undefined, this.getAttribute(\"type\"), this.getAttribute(\"aggregate\")])\r\n );\r\n }\r\n this.dispatchEvent(new CustomEvent(\"row-drag\"));\r\n }\r\n\r\n _register_ids() {\r\n this._li = this.shadowRoot.querySelector(\".row_draggable\");\r\n this._visible = this.shadowRoot.querySelector(\".is_visible\");\r\n this._row_close = this.shadowRoot.querySelector(\"#row_close\");\r\n this._agg_dropdown = this.shadowRoot.querySelector(\"#column_aggregate\");\r\n this._sort_order = this.shadowRoot.querySelector(\"#sort_order\");\r\n this._filter_operand = this.shadowRoot.querySelector(\"#filter_operand\");\r\n this._filter_operator = this.shadowRoot.querySelector(\"#filter_operator\");\r\n this._edit_computed_column_button = this.shadowRoot.querySelector(\"#row_edit\");\r\n this._column_aggregate_category = this.shadowRoot.querySelector(\"#column_aggregate_category\");\r\n }\r\n\r\n _blur_agg_dropdown() {\r\n this._agg_dropdown.blur();\r\n if (this._agg_dropdown.value[0] === \"[\") {\r\n for (const option of this._agg_dropdown.querySelectorAll(\"optgroup option\")) {\r\n const name = option.getAttribute(\"data-desc\");\r\n option.innerHTML = `mean by ${name}`;\r\n }\r\n }\r\n }\r\n\r\n _focus_agg_dropdown() {\r\n for (const option of this._agg_dropdown.querySelectorAll(\"optgroup option\")) {\r\n const name = option.getAttribute(\"data-desc\");\r\n option.innerHTML = `by ${name}`;\r\n }\r\n }\r\n\r\n _register_callbacks() {\r\n this._li.addEventListener(\"dragstart\", this._set_data_transfer.bind(this));\r\n this._li.addEventListener(\"dragend\", () => {\r\n this.dispatchEvent(new CustomEvent(\"row-dragend\"));\r\n });\r\n this._visible.addEventListener(\"mousedown\", event => this.dispatchEvent(new CustomEvent(\"visibility-clicked\", {detail: event})));\r\n this._row_close.addEventListener(\"mousedown\", event => this.dispatchEvent(new CustomEvent(\"close-clicked\", {detail: event})));\r\n this._agg_dropdown.addEventListener(\"focus\", this._focus_agg_dropdown.bind(this));\r\n\r\n this._agg_dropdown.addEventListener(\"change\", event => {\r\n this._blur_agg_dropdown();\r\n const value = this._agg_dropdown.value;\r\n this.setAttribute(\"aggregate\", value);\r\n this.dispatchEvent(new CustomEvent(\"aggregate-selected\", {detail: event}));\r\n });\r\n this._sort_order.addEventListener(\"click\", event => {\r\n this.dispatchEvent(new CustomEvent(\"sort-order\", {detail: event}));\r\n });\r\n\r\n const debounced_filter = debounce(event => this._update_filter(event), 50);\r\n this._filter_operator.addEventListener(\"change\", () => {\r\n this._filter_operand.focus();\r\n this._filter_operator.style.width = get_text_width(this._filter_operator.value);\r\n const filter_input = this.shadowRoot.querySelector(\"#filter_operand\");\r\n filter_input.style.width = get_text_width(\"\" + this._filter_operand.value, 30);\r\n debounced_filter();\r\n });\r\n this._edit_computed_column_button.addEventListener(\"click\", () => {\r\n this.dispatchEvent(\r\n new CustomEvent(\"perspective-computed-column-edit\", {\r\n bubbles: true,\r\n detail: this._get_computed_data()\r\n })\r\n );\r\n });\r\n }\r\n\r\n connectedCallback() {\r\n this._register_ids();\r\n this._register_callbacks();\r\n }\r\n}\r\n","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nexport class CancelTask {\n constructor(on_cancel, initial = false) {\n this._on_cancel = on_cancel;\n this._cancelled = false;\n this.initial = initial;\n }\n\n cancel() {\n if (!this._cancelled && this._on_cancel) {\n this._on_cancel();\n this._on_cancel = undefined;\n }\n this._cancelled = true;\n }\n\n get cancelled() {\n return this._cancelled;\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {renderers} from \"./renderers.js\";\n\nexport class StateElement extends HTMLElement {\n get _plugin() {\n let current_renderers = renderers.getInstance();\n let view = this.getAttribute(\"plugin\");\n if (!view) {\n view = Object.keys(current_renderers)[0];\n this.setAttribute(\"plugin\", view);\n }\n return current_renderers[view] || current_renderers[Object.keys(current_renderers)[0]];\n }\n\n // deprecate\n _get_view_dom_columns(selector, callback) {\n selector = selector || \"#active_columns perspective-row\";\n let columns = Array.prototype.slice.call(this.shadowRoot.querySelectorAll(selector));\n if (!callback) {\n return columns;\n }\n return columns.map(callback).filter(x => x);\n }\n\n _get_view_all_columns() {\n return Array.prototype.slice.call(this.shadowRoot.querySelectorAll(\"#inactive_columns perspective-row\"));\n }\n\n _get_view_active_columns() {\n return Array.prototype.slice.call(this.shadowRoot.querySelectorAll(\"#active_columns perspective-row\"));\n }\n\n _get_view_active_valid_columns() {\n return Array.prototype.slice.call(this.shadowRoot.querySelectorAll(\"#active_columns perspective-row\")).filter(x => !x.classList.contains(\"null-column\"));\n }\n\n _get_view_all_column_names() {\n return this._get_view_all_columns().map(x => x.getAttribute(\"name\"));\n }\n\n _get_view_active_column_names() {\n return this._get_view_active_columns().map(x => x.getAttribute(\"name\"));\n }\n\n _get_view_all_valid_column_names() {\n return this._get_view_all_column_names().filter(x => x);\n }\n\n _get_view_active_valid_column_names() {\n return this._get_view_active_column_names().filter(x => x);\n }\n\n _get_view_active_valid_column_count() {\n return this._get_view_active_valid_column_names().length;\n }\n\n // deprecate\n _get_view_columns({active = true} = {}) {\n let selector;\n if (active) {\n selector = \"#active_columns perspective-row\";\n } else {\n selector = \"#inactive_columns perspective-row\";\n }\n return this._get_view_dom_columns(selector, col => {\n return col.getAttribute(\"name\");\n });\n }\n\n _get_view_aggregates(selector) {\n selector = selector || \"#active_columns perspective-row\";\n return this._get_view_dom_columns(selector, s => {\n let op = s.getAttribute(\"aggregate\");\n if (op[0] === \"[\") {\n try {\n op = JSON.parse(op);\n } catch (e) {\n console.error(e);\n }\n }\n const column = s.getAttribute(\"name\");\n return column && {op, column};\n });\n }\n\n _get_view_row_pivots() {\n return this._get_view_dom_columns(\"#row_pivots perspective-row\", col => {\n return col.getAttribute(\"name\");\n });\n }\n\n _get_view_column_pivots() {\n return this._get_view_dom_columns(\"#column_pivots perspective-row\", col => {\n return col.getAttribute(\"name\");\n });\n }\n\n _get_view_filter_nodes() {\n return this._get_view_dom_columns(\"#filters perspective-row\");\n }\n\n _get_view_filters() {\n return this._get_view_dom_columns(\"#filters perspective-row\", col => {\n let {operator, operand} = JSON.parse(col.getAttribute(\"filter\"));\n return [col.getAttribute(\"name\"), operator, operand];\n });\n }\n\n _get_view_sorts() {\n return this._get_view_dom_columns(\"#sort perspective-row\", col => {\n let order = col.getAttribute(\"sort-order\") || \"asc\";\n return [col.getAttribute(\"name\"), order];\n });\n }\n\n _get_visible_column_count() {\n return this._get_view_dom_columns().length;\n }\n\n get_aggregate_attribute() {\n const aggs = JSON.parse(this.getAttribute(\"aggregates\")) || {};\n const found = new Set();\n const new_aggs = Object.keys(aggs).map(col => {\n found.add(col);\n return {column: col, op: aggs[col]};\n });\n if (this._aggregate_defaults) {\n for (const column of Object.keys(this._aggregate_defaults)) {\n if (!found.has(column)) {\n new_aggs.push({\n column,\n op: this._aggregate_defaults[column]\n });\n }\n }\n }\n return new_aggs;\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport debounce from \"lodash/debounce\";\nimport isEqual from \"lodash/isEqual\";\nimport {html, render} from \"lit-html\";\n\nimport perspective from \"@finos/perspective\";\nimport {get_type_config} from \"@finos/perspective/dist/esm/config\";\nimport {CancelTask} from \"./cancel_task.js\";\nimport {COMPUTATIONS} from \"../computed_column.js\";\n\nimport {StateElement} from \"./state_element.js\";\n\n/******************************************************************************\n *\n * Helpers\n *\n */\n\nfunction numberWithCommas(x) {\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n\nlet TYPE_ORDER = {integer: 2, string: 0, float: 3, boolean: 4, datetime: 1, date: 1};\n\nconst column_sorter = schema => (a, b) => {\n const s1 = TYPE_ORDER[schema[a]];\n const s2 = TYPE_ORDER[schema[b]];\n let r = 0;\n if (s1 == s2) {\n r = a.toLowerCase() < b.toLowerCase() ? -1 : 1;\n } else {\n r = s1 < s2 ? -1 : 1;\n }\n return r;\n};\n\nfunction get_aggregate_defaults(schema, cols) {\n const aggregates = {};\n for (const col of cols) {\n aggregates[col] = get_type_config(schema[col]).aggregate;\n }\n return aggregates;\n}\n\nfunction get_aggregates_with_defaults(aggregate_attribute, schema, cols) {\n const found = new Set();\n const aggregates = [];\n for (const col of aggregate_attribute) {\n const type = schema[col.column];\n const type_config = get_type_config(type);\n found.add(col.column);\n if (type_config.type || type) {\n if (col.op === \"\" || perspective.TYPE_AGGREGATES[type_config.type || type].indexOf(col.op) === -1) {\n col.op = type_config.aggregate;\n }\n aggregates.push(col);\n } else {\n console.warn(`No column \"${col.column}\" found (specified in aggregates attribute).`);\n }\n }\n\n // Add columns detected from dataset.\n for (const col of cols) {\n if (!found.has(col)) {\n aggregates.push({\n column: col,\n op: get_type_config(schema[col]).aggregate\n });\n }\n }\n\n return aggregates;\n}\n\nconst _total_template = args => {\n if (args) {\n const x = numberWithCommas(args[0]);\n const y = numberWithCommas(args[1]);\n const total = Math.floor((args[0] / args[1]) * 100);\n return html`\n <span title=\"${x} / ${y}\" class=\"plugin_information--overflow-hint\">&nbsp;<span class=\"plugin_information--overflow-hint-percent\">${total}%</span>&nbsp;</span>\n `;\n }\n};\n\nconst _nowrap_template = text => {\n if (text !== \"\") {\n return html`\n <span style=\"white-space:nowrap\">${text}</span>\n `;\n }\n};\n\n/**\n * Render warning template tagged literal.\n * @param {*} strings\n * @param {...[n, m]} args tuples of rationals to be formatted.\n */\nconst _warning = (strings, ...args) => strings.flatMap((str, idx) => [_nowrap_template(str), _total_template(args[idx])]).filter(x => x);\n\n/******************************************************************************\n *\n * PerspectiveElement\n *\n */\n\nexport class PerspectiveElement extends StateElement {\n async _check_recreate_computed_columns() {\n const computed_columns = JSON.parse(this.getAttribute(\"computed-columns\"));\n if (computed_columns.length > 0) {\n for (const col of computed_columns) {\n await this._create_computed_column({\n detail: {\n column_name: col.name,\n input_columns: col.inputs.map(x => ({name: x})),\n computation: COMPUTATIONS[col.func]\n }\n });\n }\n this._debounce_update({ignore_size_check: false});\n return true;\n }\n return false;\n }\n\n async _load_table(table, computed = false) {\n this.shadowRoot.querySelector(\"#app\").classList.add(\"hide_message\");\n const resolve = this._set_updating();\n\n if (this._table && !computed) {\n this.removeAttribute(\"computed-columns\");\n }\n\n this._clear_state();\n this._table = table;\n\n if (this.hasAttribute(\"computed-columns\") && !computed) {\n if (await this._check_recreate_computed_columns()) {\n return;\n }\n }\n\n const [cols, schema, computed_schema] = await Promise.all([table.columns(), table.schema(true), table.computed_schema()]);\n\n this._clear_columns();\n\n this._initial_col_order = cols.slice();\n if (!this.hasAttribute(\"columns\")) {\n this.setAttribute(\"columns\", JSON.stringify(this._initial_col_order));\n }\n\n cols.sort(column_sorter(schema));\n\n // Update aggregates\n const aggregate_attribute = this.get_aggregate_attribute();\n\n Object.entries(computed_schema).forEach(([column, op]) => {\n const already_configured = aggregate_attribute.find(agg => agg.column === column);\n if (!already_configured) {\n aggregate_attribute.push({column, op});\n }\n });\n\n const all_cols = cols.concat(Object.keys(computed_schema));\n const aggregates = get_aggregates_with_defaults(aggregate_attribute, schema, all_cols);\n\n let shown = JSON.parse(this.getAttribute(\"columns\")); //.filter(x => all_cols.indexOf(x) > -1);\n if (shown.filter(x => all_cols.indexOf(x) > -1).length === 0) {\n shown = this._initial_col_order;\n }\n\n this._aggregate_defaults = get_aggregate_defaults(schema, all_cols);\n\n for (const name of all_cols) {\n const aggregate = aggregates.find(a => a.column === name).op;\n const row = this._new_row(name, schema[name], aggregate, null, null, computed_schema[name]);\n this._inactive_columns.appendChild(row);\n if (shown.includes(name)) {\n row.classList.add(\"active\");\n }\n }\n\n while (shown.length < this._plugin.initial?.names?.length) {\n shown.push(null);\n }\n\n for (const x of shown) {\n const active_row = this._new_row(x, schema[x]);\n this._active_columns.appendChild(active_row);\n }\n\n if (all_cols.length === shown.filter(x => all_cols.indexOf(x) > -1).length) {\n this._inactive_columns.parentElement.classList.add(\"collapse\");\n } else {\n this._inactive_columns.parentElement.classList.remove(\"collapse\");\n }\n\n this._show_column_container();\n\n if ((await this._table.compute()) === true) {\n this._show_side_panel_actions();\n }\n\n // Filters need type information to populate e.g. the operator dropdown,\n // so reset them.\n if (this.hasAttribute(\"filters\")) {\n this.filters = this.getAttribute(\"filters\");\n }\n try {\n await this._debounce_update({force_update: true});\n } catch (e) {\n console.warn(\"Initial view failed, resetting UI state\");\n await this.reset();\n throw e;\n }\n resolve();\n }\n\n async get_maxes() {\n let max_cols, max_rows;\n const [schema, num_columns] = await Promise.all([this._view.schema(), this._view.num_columns()]);\n const schema_columns = Object.keys(schema || {}).length || 1;\n\n if (typeof this._plugin.max_columns !== \"undefined\") {\n const column_group_diff = this._plugin.max_columns % schema_columns;\n const column_limit = this._plugin.max_columns + column_group_diff;\n max_cols = column_limit < num_columns ? column_limit : undefined;\n }\n\n if (typeof this._plugin.max_cells !== \"undefined\") {\n max_rows = Math.ceil(max_cols ? this._plugin.max_cells / max_cols : this._plugin.max_cells / (num_columns || 1));\n }\n\n return {max_cols, max_rows};\n }\n\n async _warn_render_size_exceeded(max_cols, max_rows) {\n if (this._show_warnings && (max_cols || max_rows)) {\n const num_columns = await this._view.num_columns();\n const num_rows = await this._view.num_rows();\n const count = num_columns * num_rows;\n const columns_are_truncated = max_cols && max_cols < num_columns;\n const rows_are_truncated = max_rows && max_rows < num_rows;\n if (columns_are_truncated && rows_are_truncated) {\n this._plugin_information.classList.remove(\"hidden\");\n const warning = _warning`Rendering ${[max_cols, num_columns]} of columns and ${[num_columns * max_rows, count]} of points.`;\n render(warning, this._plugin_information_message);\n return true;\n } else if (columns_are_truncated) {\n this._plugin_information.classList.remove(\"hidden\");\n const warning = _warning`Rendering ${[max_cols, num_columns]} of columns.`;\n render(warning, this._plugin_information_message);\n return true;\n } else if (rows_are_truncated) {\n this._plugin_information.classList.remove(\"hidden\");\n const warning = _warning`Rendering ${[num_columns * max_rows, count]} of points.`;\n render(warning, this._plugin_information_message);\n return true;\n } else {\n this._plugin_information.classList.add(\"hidden\");\n }\n }\n return false;\n }\n\n /**\n * Calculates the optimal timeout in milliseconds for render events,\n * calculated by 5 frame moving average of this component's render\n * framerate, or explicit override attribute `\"throttle\"`.\n *\n * @private\n * @returns\n * @memberof PerspectiveElement\n */\n _calculate_throttle_timeout() {\n let timeout;\n const throttle = this.getAttribute(\"throttle\");\n if (throttle === undefined || throttle === \"null\" || !this.hasAttribute(\"throttle\")) {\n if (!this.__render_times || this.__render_times.length < 5) {\n return 0;\n }\n timeout = this.__render_times.reduce((x, y) => x + y, 0) / this.__render_times.length;\n timeout = Math.min(5000, timeout);\n } else {\n timeout = parseInt(throttle);\n if (isNaN(timeout) || timeout < 0) {\n console.warn(`Bad throttle attribute value \"${throttle}\". Can be (non-negative integer) milliseconds.`);\n this.removeAttribute(\"throttle\");\n return 0;\n }\n }\n return Math.max(0, timeout);\n }\n\n _view_on_update(limit_points) {\n if (!this._debounced) {\n this._debounced = setTimeout(async () => {\n this._debounced = undefined;\n const timer = this._render_time();\n if (this._task && !this._task.initial) {\n this._task.cancel();\n }\n const task = (this._task = new CancelTask());\n const updater = this._plugin.update || this._plugin.create;\n try {\n if (limit_points) {\n const {max_cols, max_rows} = await this.get_maxes();\n if (!task.cancelled) {\n await this._warn_render_size_exceeded(max_cols, max_rows);\n await updater.call(this, this._datavis, this._view, task, max_cols, max_rows);\n }\n } else {\n await updater.call(this, this._datavis, this._view, task);\n }\n timer();\n task.cancel();\n } catch (err) {\n console.error(\"Error rendering plugin.\", err);\n } finally {\n this.dispatchEvent(new Event(\"perspective-view-update\"));\n }\n }, this._calculate_throttle_timeout());\n }\n }\n\n async _validate_filters() {\n const filters = [];\n for (const node of this._get_view_filter_nodes()) {\n const operandNode = node.shadowRoot.getElementById(\"filter_operand\");\n const exclamation = node.shadowRoot.getElementById(\"row_exclamation\");\n const {operator, operand} = JSON.parse(node.getAttribute(\"filter\"));\n const filter = [node.getAttribute(\"name\"), operator, operand];\n if (await this._table.is_valid_filter(filter)) {\n filters.push(filter);\n node.title = \"\";\n operandNode.style.borderColor = \"\";\n exclamation.hidden = true;\n } else {\n node.title = \"Invalid Filter\";\n operandNode.style.borderColor = \"red\";\n exclamation.hidden = false;\n }\n }\n\n return filters;\n }\n\n _is_config_changed(config) {\n const plugin_name = this.getAttribute(\"plugin\");\n if (isEqual(config, this._previous_config) && plugin_name === this._previous_plugin_name) {\n return false;\n } else {\n this._previous_config = config;\n this._previous_plugin_name = plugin_name;\n return true;\n }\n }\n\n async _new_view({force_update = false, ignore_size_check = false, limit_points = true} = {}) {\n if (!this._table) return;\n this._check_responsive_layout();\n const row_pivots = this._get_view_row_pivots();\n const column_pivots = this._get_view_column_pivots();\n const filters = await this._validate_filters();\n const view_aggregates = this._get_view_aggregates();\n if (view_aggregates.length === 0) return;\n const sort = this._get_view_sorts();\n\n let columns = view_aggregates.map(x => x.column);\n let aggregates = {};\n for (const a of view_aggregates) {\n aggregates[a.column] = a.op;\n }\n\n for (const s of sort) {\n const name = s[0];\n if (columns.indexOf(name) === -1 && !(column_pivots.indexOf(s) > -1 || row_pivots.indexOf(s) > -1)) {\n const all = this.get_aggregate_attribute();\n const {column, op} = all.reduce((obj, y) => (y.column === name ? y : obj));\n aggregates[column] = op;\n }\n }\n\n const config = {\n filter: filters,\n row_pivots: row_pivots,\n column_pivots: column_pivots,\n aggregates: aggregates,\n columns: columns,\n sort: sort\n };\n\n if (this._view) {\n this._view.remove_update(this._view_updater);\n this._view.delete();\n this._view = undefined;\n }\n\n try {\n this._view = this._table.view(config);\n this._view_updater = () => this._view_on_update(limit_points);\n this._view.on_update(this._view_updater);\n } catch (e) {\n this._view.delete();\n throw e;\n }\n\n const timer = this._render_time();\n this._render_count = (this._render_count || 0) + 1;\n if (this._task) {\n this._task.cancel();\n }\n\n const task = (this._task = new CancelTask(() => this._render_count--, true));\n\n try {\n const {max_cols, max_rows} = await this.get_maxes();\n if (!ignore_size_check) {\n await this._warn_render_size_exceeded(max_cols, max_rows);\n }\n if (limit_points) {\n await this._plugin.create.call(this, this._datavis, this._view, task, max_cols, max_rows, force_update);\n } else {\n await this._plugin.create.call(this, this._datavis, this._view, task, undefined, undefined, force_update);\n }\n } catch (err) {\n console.warn(err);\n } finally {\n if (!this.__render_times) {\n this.__render_times = [];\n this.dispatchEvent(new Event(\"perspective-view-update\"));\n }\n timer();\n task.cancel();\n if (this._render_count === 0) {\n this.removeAttribute(\"updating\");\n this.dispatchEvent(new Event(\"perspective-update-complete\"));\n }\n }\n }\n\n _check_loaded_table() {\n if (this._table) {\n const table = this._table;\n delete this._table;\n this._load_table(table);\n }\n }\n\n _render_time() {\n const t = performance.now();\n return () => {\n this.__render_times.unshift(performance.now() - t);\n this.__render_times = this.__render_times.slice(0, 5);\n };\n }\n\n _restyle_plugin() {\n if (this._plugin.styleElement) {\n const task = (this._task = new CancelTask());\n this._plugin.styleElement.call(this, this._datavis, this._view, task);\n }\n }\n\n _clear_state(clear_table = true) {\n if (this._task) {\n this._task.cancel();\n }\n const all = [];\n if (this._view) {\n const view = this._view;\n this._view = undefined;\n all.push(view.delete());\n view.remove_update(this._view_updater);\n view.remove_delete();\n }\n if (this._table && clear_table) {\n const table = this._table;\n this._table = undefined;\n if (table._owner_viewer && table._owner_viewer === this) {\n all.push(table.delete());\n }\n }\n return Promise.all(all);\n }\n\n _set_updating() {\n this.toggleAttribute(\"updating\", true);\n let resolve;\n this._updating_promise = new Promise(_resolve => {\n resolve = _resolve;\n });\n return resolve;\n }\n\n _register_debounce_instance() {\n const _update = debounce((resolve, ignore_size_check, force_update, limit_points) => {\n this._new_view({ignore_size_check, force_update, limit_points}).then(resolve);\n }, 0);\n\n this._debounce_update = async ({force_update = false, ignore_size_check = false, limit_points = true} = {}) => {\n if (this._table) {\n let resolve = this._set_updating();\n await new Promise(resolve => _update(resolve, ignore_size_check, force_update, limit_points));\n resolve();\n }\n };\n }\n\n _get_worker() {\n if (this._table) {\n return this._table._worker;\n }\n return perspective.shared_worker();\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {get_type_config} from \"@finos/perspective/dist/esm/config\";\nimport {dragend} from \"./dragdrop.js\";\nimport {renderers} from \"./renderers.js\";\n\nimport {PerspectiveElement} from \"./perspective_element.js\";\nimport {html, render} from \"lit-html\";\n\n/**\n * Render `<option>` blocks\n * @param {*} names name objects\n */\nconst options = vals => {\n const opts = [];\n for (name in vals) {\n opts.push(html`\n <option value=\"${name}\">${vals[name].name || name}</option>\n `);\n }\n return opts;\n};\n\nexport class DomElement extends PerspectiveElement {\n _clear_columns() {\n this._inactive_columns.innerHTML = \"\";\n this._active_columns.innerHTML = \"\";\n }\n\n set_aggregate_attribute(aggs) {\n let is_set = false;\n let aggregates = aggs.reduce((obj, agg) => {\n if (this._aggregate_defaults[agg.column] !== agg.op) {\n obj[agg.column] = agg.op;\n is_set = true;\n }\n return obj;\n }, {});\n if (is_set) {\n this.setAttribute(\"aggregates\", JSON.stringify(aggregates));\n } else {\n this.removeAttribute(\"aggregates\");\n }\n }\n\n _get_type(name) {\n let all = this._get_view_dom_columns(\"#inactive_columns perspective-row\");\n if (all.length > 0) {\n const type = all.find(x => x.getAttribute(\"name\") === name);\n if (type) {\n return type.getAttribute(\"type\");\n } else {\n return \"integer\";\n }\n } else {\n return \"\";\n }\n }\n\n _set_row_type(row) {\n const weights = this._get_view_dom_columns(\"#inactive_columns perspective-row\")\n .filter(x => x.getAttribute(\"type\") === \"integer\" || x.getAttribute(\"type\") === \"float\")\n .map(x => x.getAttribute(\"name\"));\n row.set_weights(weights);\n row.setAttribute(\"type\", this._get_type(row.getAttribute(\"name\")));\n }\n\n // Generates a new row in state + DOM\n _new_row(name, type, aggregate, filter, sort, computed) {\n let row = document.createElement(\"perspective-row\");\n type = type || this._get_type(name);\n\n if (!aggregate) {\n let aggregates = this.get_aggregate_attribute();\n if (aggregates) {\n aggregate = aggregates.find(x => x.column === name);\n if (aggregate) {\n aggregate = aggregate.op;\n } else {\n aggregate = get_type_config(type).aggregate;\n }\n } else {\n aggregate = get_type_config(type).aggregate;\n }\n }\n\n if (filter) {\n row.setAttribute(\"filter\", filter);\n\n if (type === \"string\") {\n const view = this._table.view({row_pivots: [name], aggregates: {}});\n view.to_json().then(json => {\n row.choices(this._autocomplete_choices(json));\n });\n view.delete();\n }\n }\n\n if (sort) {\n row.setAttribute(\"sort-order\", sort);\n } else {\n if (this._get_view_column_pivots().indexOf(name) > -1) {\n row.setAttribute(\"sort-order\", \"col asc\");\n } else {\n row.setAttribute(\"sort-order\", \"asc\");\n }\n }\n\n const weights = this._get_view_dom_columns(\"#inactive_columns perspective-row\")\n .filter(x => x.getAttribute(\"type\") === \"integer\" || x.getAttribute(\"type\") === \"float\")\n .map(x => x.getAttribute(\"name\"));\n row.set_weights(weights);\n\n if (name === null) {\n row.classList.add(\"null-column\");\n } else {\n row.setAttribute(\"type\", type);\n row.setAttribute(\"name\", name);\n }\n\n row.setAttribute(\"aggregate\", Array.isArray(aggregate) ? JSON.stringify(aggregate) : aggregate);\n\n row.addEventListener(\"visibility-clicked\", this._column_visibility_clicked.bind(this));\n row.addEventListener(\"aggregate-selected\", this._column_aggregate_clicked.bind(this));\n row.addEventListener(\"filter-selected\", this._column_filter_clicked.bind(this));\n row.addEventListener(\"close-clicked\", event => dragend.call(this, event.detail));\n row.addEventListener(\"sort-order\", this._sort_order_clicked.bind(this));\n\n row.addEventListener(\"row-drag\", () => {\n this.classList.add(\"dragging\");\n this._active_columns.style.overflow = \"hidden\";\n this._original_index = Array.prototype.slice.call(this._active_columns.children).findIndex(x => x.getAttribute(\"name\") === name);\n if (this._original_index !== -1) {\n this._drop_target_hover = this._active_columns.children[this._original_index];\n setTimeout(() => row.setAttribute(\"drop-target\", true));\n } else {\n this._drop_target_hover = this._new_row(name, type, aggregate);\n }\n });\n row.addEventListener(\"row-dragend\", () => {\n this._active_columns.style.overflow = \"auto\";\n this.classList.remove(\"dragging\");\n });\n\n if (computed) {\n row.setAttribute(\"computed_column\", JSON.stringify(computed));\n row.classList.add(\"computed\");\n }\n\n return row;\n }\n\n _update_column_view(columns, reset = false) {\n if (!columns) {\n columns = this._get_view_active_column_names();\n }\n if (this._plugin.initial && this._plugin.initial.names) {\n while (columns.length < this._plugin.initial.names.length) {\n columns.push(null);\n }\n }\n this.setAttribute(\"columns\", JSON.stringify(columns));\n const pop_cols = columns.filter(x => typeof x !== \"undefined\" && x !== null);\n const lis = this._get_view_dom_columns(\"#inactive_columns perspective-row\");\n if (pop_cols.length === lis.length) {\n this._inactive_columns.parentElement.classList.add(\"collapse\");\n } else {\n this._inactive_columns.parentElement.classList.remove(\"collapse\");\n }\n lis.forEach(x => {\n const index = pop_cols.indexOf(x.getAttribute(\"name\"));\n if (index === -1) {\n x.classList.remove(\"active\");\n } else {\n x.classList.add(\"active\");\n }\n });\n if (reset) {\n this._update_column_list(columns, this._active_columns, name => {\n if (name === null) {\n return this._new_row(null);\n } else {\n const ref = lis.find(x => x.getAttribute(\"name\") === name);\n if (ref) {\n return this._new_row(ref.getAttribute(\"name\"), ref.getAttribute(\"type\"));\n }\n }\n });\n }\n }\n\n _update_column_list(columns, container, callback, accessor) {\n accessor = accessor || ((x, y) => y.getAttribute(\"name\") === x);\n const active_columns = Array.prototype.slice.call(container.children);\n for (let i = 0, j = 0; i < active_columns.length || j < columns.length; i++, j++) {\n const name = columns[j];\n const col = active_columns[i];\n const next_col = active_columns[i + 1];\n if (!col) {\n const node = callback(name);\n if (node) {\n container.appendChild(node);\n }\n } else if (typeof name === \"undefined\") {\n container.removeChild(col);\n } else if (accessor(name, col)) {\n this._set_row_type(col);\n } else {\n if (col.classList.contains(\"null-column\")) {\n const node = callback(name);\n if (node) {\n container.replaceChild(node, col);\n }\n } else if (next_col && accessor(name, next_col)) {\n container.removeChild(col);\n i++;\n // j--;\n } else {\n const node = callback(name);\n if (node) {\n container.insertBefore(node, col);\n i--;\n }\n }\n }\n }\n }\n\n _set_row_styles() {\n let style = \"\";\n if (this._plugin.initial && this._plugin.initial.names) {\n for (const nidx in this._plugin.initial.names) {\n const name = this._plugin.initial.names[nidx];\n style += `#active_columns perspective-row:nth-child(${parseInt(nidx) + 1}){margin-top:23px;}`;\n style += `#active_columns perspective-row:nth-child(${parseInt(nidx) + 1}):before{content:\"${name}\";}`;\n }\n }\n this.shadowRoot.querySelector(\"#psp_styles\").innerHTML = style;\n }\n\n _show_column_container() {\n this.shadowRoot.querySelector(\"#columns_container\").style.visibility = \"visible\";\n }\n\n _show_side_panel_actions() {\n this.shadowRoot.querySelector(\"#side_panel__actions\").style.visibility = \"visible\";\n }\n\n _remove_null_columns(since_index = 0) {\n const elems = this._get_view_active_columns();\n while (++since_index < elems.length) {\n const elem = elems[since_index];\n if (elem.classList.contains(\"null-column\")) {\n this.shadowRoot.querySelector(\"#active_columns\").removeChild(elem);\n }\n }\n }\n\n _set_column_defaults() {\n const cols = this._get_view_all_columns();\n const active_cols = this._get_view_active_valid_columns();\n const valid_active_cols = this._get_view_active_valid_column_names();\n if (cols.length > 0) {\n if (this._plugin.initial) {\n let pref = [];\n let count = this._plugin.initial.count || 2;\n this._fill_numeric(active_cols, pref);\n this._fill_numeric(cols, pref);\n this._fill_numeric(cols, pref, true);\n pref = pref.slice(0, count);\n const labels = this._plugin.initial.names;\n while (labels && pref.length < labels.length) {\n pref.push(null);\n }\n this.setAttribute(\"columns\", JSON.stringify(pref));\n } else if (this._plugin.selectMode === \"select\") {\n this.setAttribute(\"columns\", JSON.stringify([cols[0].getAttribute(\"name\")]));\n } else {\n this.setAttribute(\"columns\", JSON.stringify(valid_active_cols));\n this._remove_null_columns();\n }\n }\n }\n\n _fill_numeric(cols, pref, bypass = false) {\n for (let col of cols) {\n let type = col.getAttribute(\"type\");\n let name = col.getAttribute(\"name\");\n if (bypass || ([\"float\", \"integer\"].indexOf(type) > -1 && pref.indexOf(name) === -1)) {\n pref.push(name);\n }\n }\n }\n\n async _check_responsive_layout() {\n if (this.shadowRoot) {\n const app = this.shadowRoot.querySelector(\"#app\");\n if (this.clientHeight < 500 && this.clientWidth > 600 && this._get_view_columns({active: false}).length > this._get_view_columns().length) {\n if (!app.classList.contains(\"columns_horizontal\")) {\n const old = this._persisted_side_panel_width;\n this._persisted_side_panel_width = this._side_panel.style.width;\n this._side_panel.style.width = old || \"\";\n app.classList.add(\"columns_horizontal\");\n return false;\n }\n return false;\n } else if (app.classList.contains(\"columns_horizontal\")) {\n const panel = this.shadowRoot.querySelector(\"#pivot_chart_container\");\n panel.clientWidth + this._side_panel.clientWidth;\n const width = this._persisted_side_panel_width || panel.clientWidth + this._side_panel.clientWidth / 2;\n const height = panel.clientHeight + 50;\n await this._pre_resize(width, height, () => {\n const old = this._persisted_side_panel_width;\n this._persisted_side_panel_width = this._side_panel.style.width;\n this._side_panel.style.width = old || \"\";\n app.classList.remove(\"columns_horizontal\");\n });\n return true;\n }\n }\n return false;\n }\n\n // setup functions\n _register_ids() {\n this._aggregate_selector = this.shadowRoot.querySelector(\"#aggregate_selector\");\n this._vis_selector = this.shadowRoot.querySelector(\"#vis_selector\");\n this._filters = this.shadowRoot.querySelector(\"#filters\");\n this._row_pivots = this.shadowRoot.querySelector(\"#row_pivots\");\n this._column_pivots = this.shadowRoot.querySelector(\"#column_pivots\");\n this._datavis = this.shadowRoot.querySelector(\"#pivot_chart\");\n this._active_columns = this.shadowRoot.querySelector(\"#active_columns\");\n this._inactive_columns = this.shadowRoot.querySelector(\"#inactive_columns\");\n this._side_panel_actions = this.shadowRoot.querySelector(\"#side_panel__actions\");\n this._add_computed_column = this.shadowRoot.querySelector(\"#add-computed-column\");\n this._computed_column = this.shadowRoot.querySelector(\"perspective-computed-column\");\n this._computed_column_inputs = this._computed_column.querySelector(\"#psp-cc-computation-inputs\");\n this._inner_drop_target = this.shadowRoot.querySelector(\"#drop_target_inner\");\n this._drop_target = this.shadowRoot.querySelector(\"#drop_target\");\n this._config_button = this.shadowRoot.querySelector(\"#config_button\");\n this._reset_button = this.shadowRoot.querySelector(\"#reset_button\");\n this._download_button = this.shadowRoot.querySelector(\"#download_button\");\n this._copy_button = this.shadowRoot.querySelector(\"#copy_button\");\n this._side_panel = this.shadowRoot.querySelector(\"#side_panel\");\n this._top_panel = this.shadowRoot.querySelector(\"#top_panel\");\n this._sort = this.shadowRoot.querySelector(\"#sort\");\n this._transpose_button = this.shadowRoot.querySelector(\"#transpose_button\");\n this._plugin_information = this.shadowRoot.querySelector(\".plugin_information\");\n this._plugin_information_action = this.shadowRoot.querySelector(\".plugin_information__action\");\n this._plugin_information_action_close = this.shadowRoot.querySelector(\".plugin_information__action--close\");\n this._plugin_information_message = this.shadowRoot.querySelector(\"#plugin_information_count\");\n this._resize_bar = this.shadowRoot.querySelector(\"#resize_bar\");\n }\n\n // sets state, manipulates DOM\n _register_view_options() {\n let current_renderers = renderers.getInstance();\n render(options(current_renderers), this._vis_selector);\n }\n\n // sets state\n _register_data_attribute() {\n // TODO this feature needs to become a real attribute.\n if (this.getAttribute(\"data\")) {\n let data = this.getAttribute(\"data\");\n try {\n data = JSON.parse(data);\n } catch (e) {}\n this.load(data);\n }\n }\n\n _autocomplete_choices(json) {\n return json\n .slice(1, json.length)\n .map(x => x.__ROW_PATH__)\n .filter(x => (Array.isArray(x) ? x.filter(v => !!v).length > 0 : !!x));\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {dragend, column_dragend, column_dragleave, column_dragover, column_drop, drop, dragenter, dragover, dragleave} from \"./dragdrop.js\";\n\nimport {DomElement} from \"./dom_element.js\";\n\nexport class ActionElement extends DomElement {\n _show_context_menu(event) {\n this.shadowRoot.querySelector(\"#app\").classList.toggle(\"show_menu\");\n event.stopPropagation();\n event.preventDefault();\n return false;\n }\n\n _hide_context_menu() {\n this.shadowRoot.querySelector(\"#app\").classList.remove(\"show_menu\");\n }\n\n async _toggle_config(event) {\n if (!event || event.button !== 2) {\n this._show_config = !this._show_config;\n this._hide_context_menu();\n const panel = this.shadowRoot.querySelector(\"#pivot_chart_container\");\n if (!this._show_config) {\n await this._pre_resize(\n panel.clientWidth + this._side_panel.clientWidth,\n panel.clientHeight + this._top_panel.clientHeight,\n () => {\n this._side_panel.style.display = \"none\";\n this._top_panel.style.display = \"none\";\n this.removeAttribute(\"settings\");\n },\n () => this.dispatchEvent(new CustomEvent(\"perspective-toggle-settings\", {detail: this._show_config}))\n );\n } else {\n await this._post_resize(\n () => {\n this.toggleAttribute(\"settings\", true);\n },\n () => {\n this._side_panel.style.display = \"flex\";\n this._top_panel.style.display = \"flex\";\n this.dispatchEvent(new CustomEvent(\"perspective-toggle-settings\", {detail: this._show_config}));\n }\n );\n }\n }\n }\n\n /**\n * Given a targe `width` and `height`, pre-size the plugin before modifying\n * the HTML to reduce visual tearing.\n *\n * @private\n * @param {*} width\n * @param {*} height\n * @param {*} post Function to run once action is complete\n * @param {*} [pre=undefined] Function to run once visual effects have been\n * applied. This may be before `post`, as pre-sizing will be delayed when\n * the target size is a sub-window of the current view.\n * @memberof ActionElement\n */\n async _pre_resize(width, height, post, pre = undefined) {\n this._datavis.style.width = `${width}px`;\n this._datavis.style.height = `${height}px`;\n try {\n if (!document.hidden && this.offsetParent) {\n await this._plugin.resize.call(this);\n }\n } finally {\n pre?.();\n this._datavis.style.width = \"100%\";\n this._datavis.style.height = \"100%\";\n post();\n }\n }\n\n async _post_resize(post, pre) {\n pre?.();\n try {\n if (!document.hidden && this.offsetParent) {\n await this._plugin.resize.call(this);\n }\n } finally {\n post();\n }\n }\n\n // UI action\n _open_computed_column(event) {\n //const data = event.detail;\n event.stopImmediatePropagation();\n /*if (event.type === 'perspective-computed-column-edit') {\n this._computed_column._edit_computed_column(data);\n }*/\n this._computed_column.style.display = \"flex\";\n this._side_panel_actions.style.display = \"none\";\n }\n\n // edits state\n _set_computed_column_input(event) {\n event.detail.target.appendChild(this._new_row(event.detail.column.name, event.detail.column.type));\n this._update_column_view();\n }\n\n // edits state\n _validate_computed_column(event) {\n const new_column = event.detail;\n let computed_columns = JSON.parse(this.getAttribute(\"computed-columns\"));\n if (computed_columns === null) {\n computed_columns = [];\n }\n // names cannot be duplicates\n for (let col of computed_columns) {\n if (new_column.name === col.name) {\n return;\n }\n }\n computed_columns.push(new_column);\n this.setAttribute(\"computed-columns\", JSON.stringify(computed_columns));\n }\n\n // edits state, calls reload\n async _create_computed_column(event) {\n const data = event.detail;\n let computed_column_name = data.column_name;\n\n const cols = await this._table.columns();\n // edit overwrites last column, otherwise avoid name collision\n if (cols.includes(computed_column_name)) {\n computed_column_name += ` ${Math.round(Math.random() * 100)}`;\n }\n\n const params = [\n {\n computation: data.computation,\n column: computed_column_name,\n computed_function_name: data.computation.name,\n func: data.computation.func,\n inputs: data.input_columns.map(col => col.name),\n input_type: data.computation.input_type,\n type: data.computation.return_type\n }\n ];\n\n const table = this._table.add_computed(params);\n await this._load_table(table, true);\n this._update_column_view();\n }\n\n _column_visibility_clicked(ev) {\n const parent = ev.currentTarget;\n const is_active = parent.parentElement.getAttribute(\"id\") === \"active_columns\";\n if (is_active) {\n const min_columns = this._plugin.initial?.count || 1;\n if (this._get_view_active_valid_column_count() === min_columns) {\n return;\n }\n if (ev.detail.shiftKey) {\n for (let child of Array.prototype.slice.call(this._active_columns.children)) {\n if (child !== parent) {\n this._active_columns.removeChild(child);\n }\n }\n } else {\n const index = Array.prototype.slice.call(this._active_columns.children).indexOf(parent);\n if (index < this._plugin.initial?.count) {\n return;\n } else if (index < this._plugin.initial?.names?.length - 1) {\n this._active_columns.insertBefore(this._new_row(null), parent);\n }\n this._active_columns.removeChild(parent);\n }\n } else {\n // check if we're manipulating computed column input\n if (ev.path[1]?.classList.contains(\"psp-cc-computation__input-column\")) {\n // this._computed_column._register_inputs();\n this._computed_column.deselect_column(ev.currentTarget.getAttribute(\"name\"));\n this._update_column_view();\n return;\n }\n if ((ev.detail.shiftKey && this._plugin.selectMode === \"toggle\") || (!ev.detail.shiftKey && this._plugin.selectMode === \"select\")) {\n for (let child of Array.prototype.slice.call(this._active_columns.children)) {\n this._active_columns.removeChild(child);\n }\n }\n let row = this._new_row(parent.getAttribute(\"name\"), parent.getAttribute(\"type\"));\n const cols = this._get_view_active_columns();\n let i = cols.length - 1;\n if (!cols[i] || !cols[i]?.classList.contains(\"null-column\")) {\n this._active_columns.appendChild(row);\n } else\n while (i-- > 0) {\n if (!cols[i].classList.contains(\"null-column\")) {\n this._active_columns.replaceChild(row, cols[i + 1]);\n break;\n }\n }\n }\n this._check_responsive_layout();\n this._update_column_view();\n }\n\n _column_aggregate_clicked() {\n let aggregates = this.get_aggregate_attribute();\n let new_aggregates = this._get_view_aggregates();\n for (let aggregate of aggregates) {\n let updated_agg = new_aggregates.find(x => x.column === aggregate.column);\n if (updated_agg) {\n aggregate.op = updated_agg.op;\n }\n }\n this.set_aggregate_attribute(aggregates);\n this._update_column_view();\n this._debounce_update();\n }\n\n _column_filter_clicked() {\n let new_filters = this._get_view_filters();\n this._updating_filter = true;\n this.setAttribute(\"filters\", JSON.stringify(new_filters));\n this._updating_filter = false;\n this._debounce_update();\n }\n\n _increment_sort(sort, column_sorting, abs_sorting) {\n let sort_orders = [\"asc\", \"desc\"];\n if (column_sorting) {\n sort_orders.push(\"col asc\", \"col desc\");\n }\n if (abs_sorting) {\n sort_orders = sort_orders.map(x => `${x} abs`);\n }\n sort_orders.push(\"none\");\n return sort_orders[(sort_orders.indexOf(sort) + 1) % sort_orders.length];\n }\n\n _sort_order_clicked(event) {\n const row = event.target;\n const abs_sorting = event.detail.shiftKey && row.getAttribute(\"type\") !== \"string\";\n const new_sort_order = this._increment_sort(row.getAttribute(\"sort-order\"), this._get_view_column_pivots().length > 0, abs_sorting);\n row.setAttribute(\"sort-order\", new_sort_order);\n\n const sort = this._get_view_sorts();\n this.setAttribute(\"sort\", JSON.stringify(sort));\n }\n\n // edits state\n _transpose() {\n const has_row = this.hasAttribute(\"row-pivots\");\n const has_col = this.hasAttribute(\"column-pivots\");\n if (has_row && has_col) {\n let row_pivots = this.getAttribute(\"row-pivots\");\n this.setAttribute(\"row-pivots\", this.getAttribute(\"column-pivots\"));\n this.setAttribute(\"column-pivots\", row_pivots);\n } else if (has_row) {\n let row_pivots = this.getAttribute(\"row-pivots\");\n this.removeAttribute(\"row-pivots\");\n this.setAttribute(\"column-pivots\", row_pivots);\n } else if (has_col) {\n let column_pivots = this.getAttribute(\"column-pivots\");\n this.removeAttribute(\"column-pivots\");\n this.setAttribute(\"row-pivots\", column_pivots);\n } else {\n this.removeAttribute(\"column-pivots\");\n this.removeAttribute(\"row-pivots\");\n }\n }\n\n _reset_sidepanel() {\n this._side_panel.style.width = \"\";\n }\n\n _resize_sidepanel(event) {\n const initial = document.body.style.cursor;\n document.body.style.cursor = \"col-resize\";\n const start = event.clientX;\n const width = this._side_panel.offsetWidth;\n const resize = event => {\n const new_width = Math.max(0, Math.min(width + (event.clientX - start), this.offsetWidth - 10));\n this._side_panel.style.width = `${new_width}px`;\n if (this._plugin) {\n this.notifyResize();\n }\n };\n const stop = () => {\n document.body.style.cursor = initial;\n document.removeEventListener(\"mousemove\", resize);\n document.removeEventListener(\"mouseup\", stop);\n };\n document.addEventListener(\"mousemove\", resize);\n document.addEventListener(\"mouseup\", stop);\n }\n\n _vis_selector_changed() {\n this._plugin_information.classList.add(\"hidden\");\n this.setAttribute(\"plugin\", this._vis_selector.value);\n this._active_columns.classList.remove(\"one_lock\", \"two_lock\");\n const classname = [\"one_lock\", \"two_lock\"][this._plugin.initial?.count - 1];\n if (classname) {\n this._active_columns.classList.add(classname);\n }\n this._debounce_update();\n }\n\n // most of these are drag and drop handlers - how to clean up?\n _register_callbacks() {\n this._sort.addEventListener(\"drop\", drop.bind(this));\n this._sort.addEventListener(\"dragend\", dragend.bind(this));\n this._sort.addEventListener(\"dragenter\", dragenter.bind(this));\n this._sort.addEventListener(\"dragover\", dragover.bind(this));\n this._sort.addEventListener(\"dragleave\", dragleave.bind(this));\n this._row_pivots.addEventListener(\"drop\", drop.bind(this));\n this._row_pivots.addEventListener(\"dragend\", dragend.bind(this));\n this._row_pivots.addEventListener(\"dragenter\", dragenter.bind(this));\n this._row_pivots.addEventListener(\"dragover\", dragover.bind(this));\n this._row_pivots.addEventListener(\"dragleave\", dragleave.bind(this));\n this._column_pivots.addEventListener(\"drop\", drop.bind(this));\n this._column_pivots.addEventListener(\"dragend\", dragend.bind(this));\n this._column_pivots.addEventListener(\"dragenter\", dragenter.bind(this));\n this._column_pivots.addEventListener(\"dragover\", dragover.bind(this));\n this._column_pivots.addEventListener(\"dragleave\", dragleave.bind(this));\n this._filters.addEventListener(\"drop\", drop.bind(this));\n this._filters.addEventListener(\"dragend\", dragend.bind(this));\n this._filters.addEventListener(\"dragenter\", dragenter.bind(this));\n this._filters.addEventListener(\"dragover\", dragover.bind(this));\n this._filters.addEventListener(\"dragleave\", dragleave.bind(this));\n this._active_columns.addEventListener(\"drop\", column_drop.bind(this));\n this._active_columns.addEventListener(\"dragenter\", dragenter.bind(this));\n this._active_columns.addEventListener(\"dragend\", column_dragend.bind(this));\n this._active_columns.addEventListener(\"dragover\", column_dragover.bind(this));\n this._active_columns.addEventListener(\"dragleave\", column_dragleave.bind(this));\n this._add_computed_column.addEventListener(\"click\", this._open_computed_column.bind(this));\n this._computed_column.addEventListener(\"perspective-computed-column-save\", this._validate_computed_column.bind(this));\n this._computed_column.addEventListener(\"perspective-computed-column-update\", this._set_computed_column_input.bind(this));\n // this._side_panel.addEventListener('\n // perspective-computed-column-edit',\n // this._open_computed_column.bind(this)\n // );\n this._config_button.addEventListener(\"mousedown\", this._toggle_config.bind(this));\n this._config_button.addEventListener(\"contextmenu\", this._show_context_menu.bind(this));\n this._reset_button.addEventListener(\"click\", this.reset.bind(this));\n this._copy_button.addEventListener(\"click\", event => this.copy(event.shiftKey));\n this._download_button.addEventListener(\"click\", event => this.download(event.shiftKey));\n this._transpose_button.addEventListener(\"click\", this._transpose.bind(this));\n this._drop_target.addEventListener(\"dragover\", dragover.bind(this));\n this._resize_bar.addEventListener(\"mousedown\", this._resize_sidepanel.bind(this));\n this._resize_bar.addEventListener(\"dblclick\", this._reset_sidepanel.bind(this));\n\n this._vis_selector.addEventListener(\"change\", this._vis_selector_changed.bind(this));\n\n this._plugin_information_action.addEventListener(\"click\", () => {\n this._debounce_update({ignore_size_check: true, limit_points: false});\n this._plugin_information.classList.add(\"hidden\");\n });\n\n this._plugin_information_action_close.addEventListener(\"click\", () => {\n this._plugin_information.classList.add(\"hidden\");\n });\n }\n}\n","/******************************************************************************\r\n *\r\n * Copyright (c) 2017, the Perspective Authors.\r\n *\r\n * This file is part of the Perspective library, distributed under the terms of\r\n * the Apache License 2.0. The full license can be found in the LICENSE file.\r\n *\r\n */\r\n\r\nimport \"@webcomponents/webcomponentsjs\";\r\nimport \"./polyfill.js\";\r\n\r\nimport {bindTemplate, json_attribute, array_attribute, copy_to_clipboard, throttlePromise} from \"./utils.js\";\r\nimport {renderers, register_debug_plugin} from \"./viewer/renderers.js\";\r\nimport {COMPUTATIONS} from \"./computed_column.js\";\r\nimport \"./row.js\";\r\n\r\nimport template from \"../html/viewer.html\";\r\n\r\nimport view_style from \"../less/viewer.less\";\r\nimport default_style from \"../less/default.less\";\r\n\r\nimport {ActionElement} from \"./viewer/action_element.js\";\r\n\r\n/**\r\n * Module for the `<perspective-viewer>` custom element.\r\n *\r\n * This module has no exports, but importing it has a side\r\n * effect: the {@link module:perspective_viewer~PerspectiveViewer} class is\r\n * registered as a custom element, after which it can be used as a standard DOM\r\n * element.\r\n *\r\n * The documentation in this module defines the instance structure of a\r\n * `<perspective-viewer>` DOM object instantiated typically, through HTML or any\r\n * relevent DOM method e.g. `document.createElement(\"perspective-viewer\")` or\r\n * `document.getElementsByTagName(\"perspective-viewer\")`.\r\n *\r\n * @module perspective-viewer\r\n */\r\n\r\nconst PERSISTENT_ATTRIBUTES = [\"selectable\", \"editable\", \"plugin\", \"row-pivots\", \"column-pivots\", \"aggregates\", \"filters\", \"sort\", \"computed-columns\", \"columns\"];\r\n\r\n/**\r\n * The HTMLElement class for `<perspective-viewer>` custom element.\r\n *\r\n * This class is not exported, so this constructor cannot be invoked in the\r\n * typical manner; instead, instances of the class are created through the\r\n * Custom Elements DOM API.\r\n *\r\n * Properties of an instance of this class, such as\r\n * {@link module:perspective_viewer~PerspectiveViewer#columns}, are reflected on\r\n * the DOM element as Attributes, and should be accessed as such - e.g.\r\n * `instance.setAttribute(\"columns\", JSON.stringify([\"a\", \"b\"]))`.\r\n *\r\n * @class PerspectiveViewer\r\n * @extends {HTMLElement}\r\n * @example\r\n * // Create a new `<perspective-viewer>`\r\n * const elem = document.createElement(\"perspective-viewer\");\r\n * elem.setAttribute(\"columns\", JSON.stringify([\"a\", \"b\"]));\r\n * document.body.appendChild(elem);\r\n *\r\n */\r\n@bindTemplate(template, view_style, default_style) // eslint-disable-next-line no-unused-vars\r\nclass PerspectiveViewer extends ActionElement {\r\n constructor() {\r\n super();\r\n this._register_debounce_instance();\r\n this._show_config = true;\r\n this._show_warnings = true;\r\n this.__render_times = [];\r\n this._resize_handler = this.notifyResize.bind(this);\r\n window.addEventListener(\"resize\", this._resize_handler);\r\n }\r\n\r\n connectedCallback() {\r\n if (Object.keys(renderers.getInstance()).length === 0) {\r\n register_debug_plugin();\r\n }\r\n\r\n this.toggleAttribute(\"settings\", true);\r\n\r\n this._register_ids();\r\n this._register_callbacks();\r\n this._register_view_options();\r\n this._register_data_attribute();\r\n this.toggleConfig();\r\n this._check_loaded_table();\r\n }\r\n\r\n /**\r\n * Sets this `perspective.table.view`'s `sort` property, an array of column\r\n * names.\r\n *\r\n * @kind member\r\n * @type {array<string>} Array of arrays tuples of column name and\r\n * direction, where the possible values are \"asc\", \"desc\", \"asc abs\", \"desc\r\n * abs\" and \"none\".\r\n * @fires PerspectiveViewer#perspective-config-update\r\n * @example <caption>via Javascript DOM</caption>\r\n * let elem = document.getElementById('my_viewer');\r\n * elem.setAttribute('sort', JSON.stringify([[\"x\",\"desc\"]));\r\n * @example <caption>via HTML</caption>\r\n * <perspective-viewer sort='[[\"x\",\"desc\"]]'></perspective-viewer>\r\n */\r\n @array_attribute\r\n sort(sort) {\r\n if (sort === null || sort === undefined || sort.length === 0) {\r\n if (this.hasAttribute(\"sort\")) {\r\n this.removeAttribute(\"sort\");\r\n }\r\n sort = [];\r\n }\r\n var inner = this._sort.querySelector(\"ul\");\r\n this._update_column_list(\r\n sort,\r\n inner,\r\n s => {\r\n let dir = \"asc\";\r\n if (Array.isArray(s)) {\r\n dir = s[1];\r\n s = s[0];\r\n }\r\n return this._new_row(s, false, false, false, dir);\r\n },\r\n (sort, node) => {\r\n if (Array.isArray(sort)) {\r\n return node.getAttribute(\"name\") === sort[0] && node.getAttribute(\"sort-order\") === sort[1];\r\n }\r\n return node.getAttribute(\"name\") === sort;\r\n }\r\n );\r\n this.dispatchEvent(new Event(\"perspective-config-update\"));\r\n this._debounce_update();\r\n }\r\n\r\n /**\r\n * The set of visible columns.\r\n *\r\n * @kind member\r\n * @param {array} columns An array of strings, the names of visible columns.\r\n * @fires PerspectiveViewer#perspective-config-update\r\n * @example <caption>via Javascript DOM</caption>\r\n * let elem = document.getElementById('my_viewer');\r\n * elem.setAttribute('columns', JSON.stringify([\"x\", \"y'\"]));\r\n * @example <caption>via HTML</caption>\r\n * <perspective-viewer columns='[\"x\", \"y\"]'></perspective-viewer>\r\n */\r\n @array_attribute\r\n columns(show) {\r\n if (show === null || show === undefined || show.length === 0) {\r\n if (this.hasAttribute(\"columns\")) {\r\n if (this._initial_col_order) {\r\n this.setAttribute(\"columns\", JSON.stringify(this._initial_col_order));\r\n } else {\r\n this.removeAttribute(\"columns\");\r\n }\r\n }\r\n show = (this._initial_col_order || []).slice();\r\n }\r\n this._update_column_view(show, true);\r\n this.dispatchEvent(new Event(\"perspective-config-update\"));\r\n this._debounce_update();\r\n }\r\n\r\n /* eslint-disable max-len */\r\n\r\n /**\r\n * The set of visible columns.\r\n *\r\n * @kind member\r\n * @param {array} computed-columns An array of computed column objects\r\n * @fires PerspectiveViewer#perspective-config-update\r\n * @example <caption>via Javascript DOM</caption>\r\n * let elem = document.getElementById('my_viewer');\r\n * elem.setAttribute('computed-columns', JSON.stringify([{name: \"x+y\", func: \"add\", inputs: [\"x\", \"y\"]}]));\r\n * @example <caption>via HTML</caption>\r\n * <perspective-viewer computed-columns=\"[{name:'x+y',func:'add',inputs:['x','y']}]\"\"></perspective-viewer>\r\n */\r\n @array_attribute\r\n \"computed-columns\"(computed_columns) {\r\n if (computed_columns === null || computed_columns === undefined || computed_columns.length === 0) {\r\n if (this.hasAttribute(\"computed-columns\")) {\r\n this.removeAttribute(\"computed-columns\");\r\n }\r\n computed_columns = [];\r\n }\r\n const resolve = this._set_updating();\r\n\r\n (async () => {\r\n if (this._table) {\r\n const computed_schema = await this._table.computed_schema();\r\n this._computed_column._close_computed_column();\r\n for (let col of computed_columns) {\r\n if (!computed_schema[col.name]) {\r\n await this._create_computed_column({\r\n detail: {\r\n column_name: col.name,\r\n input_columns: col.inputs.map(x => ({name: x})),\r\n computation: COMPUTATIONS[col.func]\r\n }\r\n });\r\n }\r\n }\r\n\r\n await this._debounce_update();\r\n resolve();\r\n } else {\r\n this._computed_column._close_computed_column();\r\n }\r\n this.dispatchEvent(new Event(\"perspective-config-update\"));\r\n this.dispatchEvent(new Event(\"perspective-computed-column-update\"));\r\n })();\r\n }\r\n\r\n /* eslint-enable max-len */\r\n\r\n /**\r\n * The set of column aggregate configurations.\r\n *\r\n * @kind member\r\n * @param {object} aggregates A dictionary whose keys are column names, and\r\n * values are valid aggregations. The `aggregates` attribute works as an\r\n * override; in lieu of a key for a column supplied by the developers, a\r\n * default will be selected and reflected to the attribute based on the\r\n * column's type. See {@link perspective/src/js/defaults.js}\r\n * @fires PerspectiveViewer#perspective-config-update\r\n * @example <caption>via Javascript DOM</caption>\r\n * let elem = document.getElementById('my_viewer');\r\n * elem.setAttribute('aggregates', JSON.stringify({x: \"distinct count\"}));\r\n * @example <caption>via HTML</caption>\r\n * <perspective-viewer aggregates='{\"x\": \"distinct count\"}'>\r\n * </perspective-viewer>\r\n */\r\n @json_attribute\r\n aggregates(show) {\r\n if (show === null || show === undefined || Object.keys(show).length === 0) {\r\n if (this.hasAttribute(\"aggregates\")) {\r\n this.removeAttribute(\"aggregates\");\r\n }\r\n show = {};\r\n }\r\n\r\n let lis = this._get_view_dom_columns();\r\n lis.map(x => {\r\n let agg = show[x.getAttribute(\"name\")];\r\n if (agg) {\r\n x.setAttribute(\"aggregate\", Array.isArray(agg) ? JSON.stringify(agg) : agg);\r\n }\r\n });\r\n this.dispatchEvent(new Event(\"perspective-config-update\"));\r\n this._debounce_update();\r\n }\r\n\r\n /**\r\n * The set of column filter configurations.\r\n *\r\n * @kind member\r\n * @type {array} filters An array of filter config objects. A filter config\r\n * object is an array of three elements: * The column name. * The filter\r\n * operation as a string. See\r\n * {@link perspective/src/js/config/constants.js} * The filter argument, as\r\n * a string, float or Array<string> as the filter operation demands.\r\n * @fires PerspectiveViewer#perspective-config-update\r\n * @example <caption>via Javascript DOM</caption>\r\n * let filters = [\r\n * [\"x\", \"<\", 3],\r\n * [\"y\", \"contains\", \"abc\"]\r\n * ];\r\n * let elem = document.getElementById('my_viewer');\r\n * elem.setAttribute('filters', JSON.stringify(filters));\r\n * @example <caption>via HTML</caption>\r\n * <perspective-viewer filters='[[\"x\", \"<\", 3], [\"y\", \"contains\", \"abc\"]]'>\r\n * </perspective-viewer>\r\n */\r\n @array_attribute\r\n filters(filters) {\r\n if (filters === null || filters === undefined || filters.length === 0) {\r\n if (this.hasAttribute(\"filters\")) {\r\n this.removeAttribute(\"filters\");\r\n }\r\n filters = [];\r\n }\r\n if (!this._updating_filter) {\r\n var inner = this._filters.querySelector(\"ul\");\r\n this._update_column_list(\r\n filters,\r\n inner,\r\n filter => {\r\n const fterms = JSON.stringify({\r\n operator: filter[1],\r\n operand: filter[2]\r\n });\r\n return this._new_row(filter[0], undefined, undefined, fterms);\r\n },\r\n (filter, node) =>\r\n node.getAttribute(\"name\") === filter[0] &&\r\n node.getAttribute(\"filter\") ===\r\n JSON.stringify({\r\n operator: filter[1],\r\n operand: filter[2]\r\n })\r\n );\r\n }\r\n this.dispatchEvent(new Event(\"perspective-config-update\"));\r\n this._debounce_update();\r\n }\r\n\r\n /**\r\n * Sets the currently selected plugin, via its `name` field.\r\n *\r\n * @type {string}\r\n * @fires PerspectiveViewer#perspective-config-update\r\n */\r\n set plugin(v) {\r\n if (v === \"null\" || v === null || v === undefined) {\r\n this.setAttribute(\"plugin\", this._vis_selector.options[0].value);\r\n return;\r\n }\r\n\r\n const plugin_names = Object.keys(renderers.getInstance());\r\n if (this.hasAttribute(\"plugin\")) {\r\n let plugin = this.getAttribute(\"plugin\");\r\n if (plugin_names.indexOf(plugin) === -1) {\r\n const guess_plugin = plugin_names.find(x => x.indexOf(plugin) > -1);\r\n if (guess_plugin) {\r\n console.warn(`Unknown plugin \"${plugin}\", using \"${guess_plugin}\"`);\r\n this.setAttribute(\"plugin\", guess_plugin);\r\n } else {\r\n console.error(`Unknown plugin \"${plugin}\"`);\r\n this.setAttribute(\"plugin\", this._vis_selector.options[0].value);\r\n }\r\n } else {\r\n if (this._vis_selector.value !== plugin) {\r\n this._vis_selector.value = plugin;\r\n this._vis_selector_changed();\r\n }\r\n this._set_row_styles();\r\n this._set_column_defaults();\r\n this.dispatchEvent(new Event(\"perspective-config-update\"));\r\n }\r\n } else {\r\n this.setAttribute(\"plugin\", this._vis_selector.options[0].value);\r\n }\r\n }\r\n\r\n /**\r\n * Sets this `perspective.table.view`'s `column_pivots` property.\r\n *\r\n * @kind member\r\n * @type {Array<String>} Array of column names\r\n * @fires PerspectiveViewer#perspective-config-update\r\n */\r\n @array_attribute\r\n \"column-pivots\"(pivots) {\r\n if (pivots === null || pivots === undefined || pivots.length === 0) {\r\n if (this.hasAttribute(\"column-pivots\")) {\r\n this.removeAttribute(\"column-pivots\");\r\n }\r\n pivots = [];\r\n }\r\n\r\n var inner = this._column_pivots.querySelector(\"ul\");\r\n this._update_column_list(pivots, inner, pivot => this._new_row(pivot));\r\n this.dispatchEvent(new Event(\"perspective-config-update\"));\r\n this._debounce_update();\r\n }\r\n\r\n /**\r\n * Sets this `perspective.table.view`'s `row_pivots` property.\r\n *\r\n * @kind member\r\n * @type {array<string>} Array of column names\r\n * @fires PerspectiveViewer#perspective-config-update\r\n */\r\n @array_attribute\r\n \"row-pivots\"(pivots) {\r\n if (pivots === null || pivots === undefined || pivots.length === 0) {\r\n if (this.hasAttribute(\"row-pivots\")) {\r\n this.removeAttribute(\"row-pivots\");\r\n }\r\n pivots = [];\r\n }\r\n\r\n var inner = this._row_pivots.querySelector(\"ul\");\r\n this._update_column_list(pivots, inner, pivot => this._new_row(pivot));\r\n this.dispatchEvent(new Event(\"perspective-config-update\"));\r\n this._debounce_update();\r\n }\r\n\r\n /**\r\n * Determines whether this viewer is editable or not (though it is\r\n * ultimately up to the plugin as to whether editing is implemented).\r\n *\r\n * @kind member\r\n * @type {boolean} Is this viewer editable?\r\n * @fires PerspectiveViewer#perspective-config-update\r\n */\r\n set editable(x) {\r\n if (x === \"null\") {\r\n if (this.hasAttribute(\"editable\")) {\r\n this.removeAttribute(\"editable\");\r\n }\r\n } else {\r\n this.toggleAttribute(\"editable\", true);\r\n }\r\n this._debounce_update({force_update: true});\r\n this.dispatchEvent(new Event(\"perspective-config-update\"));\r\n }\r\n\r\n /**\r\n * Determines the render throttling behavior. Can be an integer, for\r\n * millisecond window to throttle render event; or, if `undefined`,\r\n * will try to determine the optimal throttle time from this component's\r\n * render framerate.\r\n *\r\n * @kind member\r\n * @type {integer|string} The throttle rate - milliseconds (integer), or the\r\n * enum \"adaptive\" for a dynamic throttle based on render time.\r\n * @example\r\n * <!-- Only draws at most 1 frame/sec. -->\r\n * <perspective-viewer throttle=\"1000\"></perspective-viewer>\r\n */\r\n set throttle(x) {\r\n if (x === \"null\") {\r\n if (this.hasAttribute(\"throttle\")) {\r\n this.removeAttribute(\"throttle\");\r\n }\r\n }\r\n // Returns the throttle time, but also perform validaiton - we only want\r\n // the latter here.\r\n this._calculate_throttle_timeout();\r\n }\r\n\r\n /*\r\n * Determines whether row selections is enabled on this viewer (though it is\r\n * ultimately up to the plugin as to whether selectable is implemented).\r\n *\r\n * @kind member\r\n * @type {boolean} Is this viewer editable?\r\n * @fires PerspectiveViewer#perspective-config-update\r\n */\r\n set selectable(x) {\r\n if (x === \"null\") {\r\n if (this.hasAttribute(\"selectable\")) {\r\n this.removeAttribute(\"selectable\");\r\n }\r\n } else {\r\n this.toggleAttribute(\"selectable\", true);\r\n }\r\n this._debounce_update({force_update: true});\r\n this.dispatchEvent(new Event(\"perspective-config-update\"));\r\n }\r\n\r\n /**\r\n * This element's `perspective` worker instance. This property is not\r\n * reflected as an HTML attribute, and is readonly; it can be effectively\r\n * set however by calling the `load() method with a `perspective.table`\r\n * instance from the preferred worker.\r\n *\r\n * @readonly\r\n * @example\r\n * let elem = document.getElementById('my_viewer');\r\n * let table = elem.worker.table([{x:1, y:2}]);\r\n * elem.load(table);\r\n */\r\n get worker() {\r\n return this._get_worker();\r\n }\r\n\r\n /**\r\n * This element's `perspective.table` instance.\r\n *\r\n * @readonly\r\n */\r\n get table() {\r\n return this._table;\r\n }\r\n\r\n /**\r\n * This element's `perspective.table.view` instance. The instance itself\r\n * will change after every `PerspectiveViewer#perspective-config-update`\r\n * event.\r\n *\r\n * @readonly\r\n */\r\n get view() {\r\n return this._view;\r\n }\r\n\r\n /**\r\n * Load data. If `load` or `update` have already been called on this\r\n * element, its internal `perspective.table` will also be deleted.\r\n *\r\n * @async\r\n * @param {any} data The data to load. Works with the same input types\r\n * supported by `perspective.table`.\r\n * @returns {Promise<void>} A promise which resolves once the data is loaded\r\n * and a `perspective.view` has been created.\r\n * @fires module:perspective_viewer~PerspectiveViewer#perspective-click\r\n * PerspectiveViewer#perspective-view-update\r\n * ]);\r\n * @example <caption>Load CSV</caption>\r\n * const my_viewer = document.getElementById('#my_viewer');\r\n * my_viewer.load(\"x,y\\n1,a\\n2,b\");\r\n * @example <caption>Load perspective.table</caption>\r\n * const my_viewer = document.getElementById('#my_viewer');\r\n * const tbl = perspective.table(\"x,y\\n1,a\\n2,b\");\r\n * my_viewer.load(tbl);\r\n * @example <caption>Load Promise<perspective.table></caption>\r\n * const my_viewer = document.getElementById('#my_viewer');\r\n * const tbl = async () => perspective.table(\"x,y\\n1,a\\n2,b\");\r\n * my_viewer.load(tbl);\r\n */\r\n async load(data, options) {\r\n let table;\r\n if (data instanceof Promise) {\r\n table = await data;\r\n } else {\r\n try {\r\n data = data.trim();\r\n } catch (e) {}\r\n if (data.type === \"table\") {\r\n table = data;\r\n } else {\r\n table = this.worker.table(data, options);\r\n table._owner_viewer = this;\r\n }\r\n }\r\n if (this.isConnected) {\r\n await this._load_table(table);\r\n } else {\r\n this._table = table;\r\n }\r\n }\r\n\r\n /**\r\n * Updates this element's `perspective.table` with new data.\r\n *\r\n * @param {any} data The data to load. Works with the same input types\r\n * supported by `perspective.table.update`.\r\n * @fires PerspectiveViewer#perspective-view-update\r\n * @example\r\n * const my_viewer = document.getElementById('#my_viewer');\r\n * my_viewer.update([\r\n * {x: 1, y: 'a'},\r\n * {x: 2, y: 'b'}\r\n * ]);\r\n */\r\n update(data) {\r\n if (this._table === undefined) {\r\n this.load(data);\r\n } else {\r\n this._table.update(data);\r\n }\r\n }\r\n\r\n /**\r\n * Determine whether to reflow the viewer and redraw.\r\n *\r\n */\r\n @throttlePromise\r\n async notifyResize(immediate) {\r\n const resized = await this._check_responsive_layout();\r\n if (!resized && !document.hidden && this.offsetParent) {\r\n await this._plugin.resize.call(this, immediate);\r\n }\r\n }\r\n\r\n /**\r\n * Duplicate an existing `<perspective-element>`, including data and view\r\n * settings. The underlying `perspective.table` will be shared between both\r\n * elements\r\n *\r\n * @param {any} widget A `<perspective-viewer>` instance to clone.\r\n */\r\n clone(widget) {\r\n if (this._inner_drop_target) {\r\n this._inner_drop_target.innerHTML = widget._inner_drop_target.innerHTML;\r\n }\r\n\r\n this._load_table(widget.table);\r\n this.restore(widget.save());\r\n }\r\n\r\n /**\r\n * Deletes this element's data and clears it's internal state (but not its\r\n * user state). This (or the underlying `perspective.table`'s equivalent\r\n * method) must be called in order for its memory to be reclaimed.\r\n *\r\n * @param {boolean} delete_table Should a delete call also be made to the\r\n * underlying `table()`.\r\n * @returns {Promise<boolean>} Whether or not this call resulted in the\r\n * underlying `perspective.table` actually being deleted.\r\n */\r\n delete(delete_table = true) {\r\n let x = this._clear_state(delete_table);\r\n if (this._plugin.delete) {\r\n this._plugin.delete.call(this);\r\n }\r\n window.removeEventListener(\"load\", this._resize_handler);\r\n window.removeEventListener(\"resize\", this._resize_handler);\r\n return x;\r\n }\r\n\r\n /**\r\n * Restyles the elements and to pick up any style changes\r\n */\r\n restyleElement() {\r\n this._restyle_plugin();\r\n }\r\n\r\n /**\r\n * Serialize this element's attribute/interaction state.\r\n *\r\n * @returns {object} a serialized element.\r\n */\r\n save() {\r\n let obj = {};\r\n const cols = new Set(PERSISTENT_ATTRIBUTES);\r\n for (let key = 0; key < this.attributes.length; key++) {\r\n let attr = this.attributes[key];\r\n if (cols.has(attr.name)) {\r\n if (attr.value === \"\") {\r\n obj[attr.name] = true;\r\n } else if (attr.name !== \"plugin\" && attr.value !== undefined && attr.value !== null) {\r\n obj[attr.name] = JSON.parse(attr.value);\r\n } else {\r\n obj[attr.name] = attr.value;\r\n }\r\n cols.delete(attr.name);\r\n }\r\n }\r\n for (const col of cols) {\r\n obj[col] = null;\r\n }\r\n if (this._plugin.save) {\r\n obj.plugin_config = this._plugin.save.call(this);\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * Restore this element to a state as generated by a reciprocal call to\r\n * `save` or `serialize`.\r\n *\r\n * @param {object|string} config returned by `save` or `serialize`.\r\n * @returns {Promise<void>} A promise which resolves when the changes have\r\n * been applied.\r\n */\r\n async restore(config) {\r\n if (typeof config === \"string\") {\r\n config = JSON.parse(config);\r\n }\r\n for (const key of PERSISTENT_ATTRIBUTES) {\r\n if (config.hasOwnProperty(key)) {\r\n let val = config[key];\r\n if (val === true) {\r\n this.toggleAttribute(key, true);\r\n } else if (val !== undefined && val !== null && val !== false) {\r\n if (typeof val !== \"string\") {\r\n val = JSON.stringify(val);\r\n }\r\n this.setAttribute(key, val);\r\n } else {\r\n this.removeAttribute(key);\r\n }\r\n }\r\n }\r\n\r\n if (this._plugin.restore && config.plugin_config) {\r\n this._plugin.restore.call(this, config.plugin_config);\r\n }\r\n await this._debounce_update();\r\n }\r\n\r\n /**\r\n * Flush any pending attribute modifications to this element.\r\n *\r\n * @returns {Promise<void>} A promise which resolves when the current\r\n * attribute state has been applied.\r\n */\r\n async flush() {\r\n await new Promise(setTimeout);\r\n while (this.hasAttribute(\"updating\")) {\r\n await this._updating_promise;\r\n }\r\n }\r\n\r\n /**\r\n * Clears the rows in the current {@link table}.\r\n */\r\n clear() {\r\n this._table?.clear();\r\n }\r\n\r\n /**\r\n * Replaces all rows in the current {@link table}.\r\n */\r\n replace(data) {\r\n this._table ? this._table.replace(data) : this._load(data);\r\n }\r\n\r\n /**\r\n * Reset's this element's view state and attributes to default. Does not\r\n * delete this element's `perspective.table` or otherwise modify the data\r\n * state.\r\n */\r\n reset() {\r\n this.removeAttribute(\"row-pivots\");\r\n this.removeAttribute(\"column-pivots\");\r\n this.removeAttribute(\"filters\");\r\n this.removeAttribute(\"sort\");\r\n if (this._initial_col_order) {\r\n this.setAttribute(\"columns\", JSON.stringify(this._initial_col_order));\r\n } else {\r\n this.removeAttribute(\"columns\");\r\n }\r\n this.setAttribute(\"plugin\", Object.keys(renderers.getInstance())[0]);\r\n this.dispatchEvent(new Event(\"perspective-config-update\"));\r\n this._hide_context_menu();\r\n }\r\n\r\n /**\r\n * Download this element's data as a CSV file.\r\n *\r\n * @param {boolean} [flat=false] Whether to use the element's current view\r\n * config, or to use a default \"flat\" view.\r\n * @memberof PerspectiveViewer\r\n */\r\n async download(flat = false) {\r\n const view = flat ? this._table.view() : this._view;\r\n const csv = await view.to_csv();\r\n const element = document.createElement(\"a\");\r\n const binStr = csv;\r\n const len = binStr.length;\r\n const arr = new Uint8Array(len);\r\n for (let i = 0; i < len; i++) {\r\n arr[i] = binStr.charCodeAt(i);\r\n }\r\n const blob = new Blob([arr]);\r\n element.setAttribute(\"href\", URL.createObjectURL(blob));\r\n element.setAttribute(\"download\", \"perspective.csv\");\r\n element.style.display = \"none\";\r\n document.body.appendChild(element);\r\n element.click();\r\n document.body.removeChild(element);\r\n this._hide_context_menu();\r\n }\r\n\r\n /**\r\n * Copies this element's view data (as a CSV) to the clipboard. This method\r\n * must be called from an event handler, subject to the browser's\r\n * restrictions on clipboard access. See\r\n * {@link https://www.w3.org/TR/clipboard-apis/#allow-read-clipboard}.\r\n */\r\n copy(flat = false) {\r\n let data;\r\n const view = flat ? this._table.view() : this._view;\r\n view.to_csv()\r\n .then(csv => {\r\n data = csv;\r\n })\r\n .catch(err => {\r\n console.error(err);\r\n data = \"\";\r\n });\r\n let count = 0;\r\n let f = () => {\r\n if (typeof data !== \"undefined\") {\r\n copy_to_clipboard(data);\r\n } else if (count < 200) {\r\n count++;\r\n setTimeout(f, 50);\r\n } else {\r\n console.warn(\"Timeout expired - copy to clipboard cancelled.\");\r\n }\r\n };\r\n f();\r\n this._hide_context_menu();\r\n }\r\n\r\n /**\r\n * Opens/closes the element's config menu.\r\n *\r\n * @async\r\n */\r\n async toggleConfig() {\r\n await this._toggle_config();\r\n }\r\n}\r\n\r\n/**\r\n * `perspective-click` is fired whenever underlying `view`'s grid or chart are\r\n * clicked providing a detail that includes a `config`, `column_names` and\r\n * `row`.\r\n *\r\n * @event module:perspective_viewer~PerspectiveViewer#perspective-click\r\n * @type {object}\r\n * @property {array} column_names - Includes a list of column names.\r\n * @property {object} config - Contains a property `filters` that can be applied\r\n * to a `<perspective-viewer>` through the use of `restore()` updating it to\r\n * show the filtered subset of data..\r\n * @property {array} row - Includes the data row.\r\n */\r\n\r\n/**\r\n * `perspective-config-update` is fired whenever an configuration attribute has\r\n * been modified, by the user or otherwise.\r\n *\r\n * @event module:perspective_viewer~PerspectiveViewer#perspective-config-update\r\n * @type {string}\r\n */\r\n\r\n/**\r\n * `perspective-view-update` is fired whenever underlying `view`'s data has\r\n * updated, including every invocation of `load` and `update`.\r\n *\r\n * @event module:perspective_viewer~PerspectiveViewer#perspective-view-update\r\n * @type {string}\r\n */\r\n"],"sourceRoot":""}
\No newline at end of file