forked from tvjsx/trading-vue-js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtrading-vue.js.map
1 lines (1 loc) · 828 KB
/
trading-vue.js.map
1
{"version":3,"sources":["webpack://TradingVueJs/webpack/universalModuleDefinition","webpack://TradingVueJs/./node_modules/@babel/runtime/regenerator/index.js","webpack://TradingVueJs/./node_modules/arrayslicer/lib/compare/index.js","webpack://TradingVueJs/./node_modules/arrayslicer/lib/index.js","webpack://TradingVueJs/./node_modules/arrayslicer/lib/search/binary.js","webpack://TradingVueJs/./node_modules/arrayslicer/lib/util.js","webpack://TradingVueJs/./src/TradingVue.vue?0d24","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://TradingVueJs/./src/stuff/constants.js","webpack://TradingVueJs/./src/components/Chart.vue?9363","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://TradingVueJs/./src/stuff/context.js","webpack://TradingVueJs/./src/stuff/utils.js","webpack://TradingVueJs/./src/stuff/math.js","webpack://TradingVueJs/./src/components/js/layout_fn.js","webpack://TradingVueJs/./src/components/js/log_scale.js","webpack://TradingVueJs/./src/components/js/grid_maker.js","webpack://TradingVueJs/./src/components/js/layout.js","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://TradingVueJs/./src/components/js/updater.js","webpack://TradingVueJs/./src/components/Section.vue?da6c","webpack://TradingVueJs/./src/stuff/frame.js","webpack://TradingVueJs/./src/components/js/grid.js","webpack://TradingVueJs/./src/mixins/canvas.js","webpack://TradingVueJs/./src/mixins/uxlist.js","webpack://TradingVueJs/./src/components/js/crosshair.js","webpack://TradingVueJs/src/components/Crosshair.vue","webpack://TradingVueJs/./src/components/Crosshair.vue?c740","webpack://TradingVueJs/./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack://TradingVueJs/./src/components/Crosshair.vue","webpack://TradingVueJs/src/components/KeyboardListener.vue","webpack://TradingVueJs/./src/components/KeyboardListener.vue?4fff","webpack://TradingVueJs/./src/components/KeyboardListener.vue","webpack://TradingVueJs/./src/components/UxLayer.vue?aa9b","webpack://TradingVueJs/./src/components/UxWrapper.vue?ded6","webpack://TradingVueJs/src/components/UxWrapper.vue","webpack://TradingVueJs/./src/components/UxWrapper.vue?786a","webpack://TradingVueJs/./src/components/UxWrapper.vue","webpack://TradingVueJs/src/components/UxLayer.vue","webpack://TradingVueJs/./src/components/UxLayer.vue?deed","webpack://TradingVueJs/./src/components/UxLayer.vue","webpack://TradingVueJs/./src/stuff/mouse.js","webpack://TradingVueJs/./src/mixins/overlay.js","webpack://TradingVueJs/src/components/overlays/Spline.vue","webpack://TradingVueJs/./src/components/overlays/Spline.vue?abb8","webpack://TradingVueJs/./src/components/overlays/Spline.vue","webpack://TradingVueJs/src/components/overlays/Splines.vue","webpack://TradingVueJs/./src/components/overlays/Splines.vue?0768","webpack://TradingVueJs/./src/components/overlays/Splines.vue","webpack://TradingVueJs/src/components/overlays/Range.vue","webpack://TradingVueJs/./src/components/overlays/Range.vue?39da","webpack://TradingVueJs/./src/components/overlays/Range.vue","webpack://TradingVueJs/src/components/overlays/Trades.vue","webpack://TradingVueJs/./src/components/overlays/Trades.vue?d55f","webpack://TradingVueJs/./src/components/overlays/Trades.vue","webpack://TradingVueJs/src/components/overlays/Channel.vue","webpack://TradingVueJs/./src/components/overlays/Channel.vue?0d30","webpack://TradingVueJs/./src/components/overlays/Channel.vue","webpack://TradingVueJs/src/components/overlays/Segment.vue","webpack://TradingVueJs/./src/components/overlays/Segment.vue?1066","webpack://TradingVueJs/./src/components/overlays/Segment.vue","webpack://TradingVueJs/./src/components/js/layout_cnv.js","webpack://TradingVueJs/./src/components/primitives/candle.js","webpack://TradingVueJs/./src/components/primitives/volbar.js","webpack://TradingVueJs/./src/components/primitives/price.js","webpack://TradingVueJs/src/components/overlays/Candles.vue","webpack://TradingVueJs/./src/components/overlays/Candles.vue?710c","webpack://TradingVueJs/./src/components/overlays/Candles.vue","webpack://TradingVueJs/src/components/overlays/Volume.vue","webpack://TradingVueJs/./src/components/overlays/Volume.vue?7fcf","webpack://TradingVueJs/./src/components/overlays/Volume.vue","webpack://TradingVueJs/src/components/overlays/Splitters.vue","webpack://TradingVueJs/./src/components/overlays/Splitters.vue?6811","webpack://TradingVueJs/./src/components/overlays/Splitters.vue","webpack://TradingVueJs/./src/stuff/keys.js","webpack://TradingVueJs/./src/mixins/tool.js","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://TradingVueJs/./src/components/primitives/pin.js","webpack://TradingVueJs/./src/components/primitives/seg.js","webpack://TradingVueJs/./src/components/primitives/line.js","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/inherits.js","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack://TradingVueJs/./src/components/primitives/ray.js","webpack://TradingVueJs/src/components/overlays/LineTool.vue","webpack://TradingVueJs/./src/components/overlays/LineTool.vue?278b","webpack://TradingVueJs/./src/components/overlays/LineTool.vue","webpack://TradingVueJs/src/components/overlays/RangeTool.vue","webpack://TradingVueJs/./src/components/overlays/RangeTool.vue?c1b9","webpack://TradingVueJs/./src/components/overlays/RangeTool.vue","webpack://TradingVueJs/src/components/Grid.vue","webpack://TradingVueJs/./src/components/Grid.vue?6c80","webpack://TradingVueJs/./src/components/Grid.vue","webpack://TradingVueJs/./src/components/js/sidebar.js","webpack://TradingVueJs/src/components/Sidebar.vue","webpack://TradingVueJs/./src/components/Sidebar.vue?7406","webpack://TradingVueJs/./src/components/Sidebar.vue","webpack://TradingVueJs/./src/components/Legend.vue?d092","webpack://TradingVueJs/./src/components/ButtonGroup.vue?12aa","webpack://TradingVueJs/./src/components/LegendButton.vue?1347","webpack://TradingVueJs/src/components/LegendButton.vue","webpack://TradingVueJs/./src/components/LegendButton.vue?1f6d","webpack://TradingVueJs/./src/components/LegendButton.vue","webpack://TradingVueJs/src/components/ButtonGroup.vue","webpack://TradingVueJs/./src/components/ButtonGroup.vue?0207","webpack://TradingVueJs/./src/components/ButtonGroup.vue","webpack://TradingVueJs/./src/components/Spinner.vue?9796","webpack://TradingVueJs/src/components/Spinner.vue","webpack://TradingVueJs/./src/components/Spinner.vue?548d","webpack://TradingVueJs/./src/components/Spinner.vue","webpack://TradingVueJs/src/components/Legend.vue","webpack://TradingVueJs/./src/components/Legend.vue?d65b","webpack://TradingVueJs/./src/components/Legend.vue","webpack://TradingVueJs/./src/mixins/shaders.js","webpack://TradingVueJs/src/components/Section.vue","webpack://TradingVueJs/./src/components/Section.vue?5c3f","webpack://TradingVueJs/./src/components/Section.vue","webpack://TradingVueJs/./src/components/js/botbar.js","webpack://TradingVueJs/src/components/Botbar.vue","webpack://TradingVueJs/./src/components/Botbar.vue?a929","webpack://TradingVueJs/./src/components/Botbar.vue","webpack://TradingVueJs/src/components/Keyboard.vue","webpack://TradingVueJs/./src/components/Keyboard.vue?e91c","webpack://TradingVueJs/./src/components/Keyboard.vue","webpack://TradingVueJs/./src/mixins/datatrack.js","webpack://TradingVueJs/./src/components/js/ti_mapping.js","webpack://TradingVueJs/src/components/Chart.vue","webpack://TradingVueJs/./src/components/Chart.vue?0b4f","webpack://TradingVueJs/./src/components/Chart.vue","webpack://TradingVueJs/./src/components/Toolbar.vue?ebcc","webpack://TradingVueJs/./src/components/ToolbarItem.vue?4569","webpack://TradingVueJs/./src/components/ItemList.vue?1c00","webpack://TradingVueJs/src/components/ItemList.vue","webpack://TradingVueJs/./src/components/ItemList.vue?eba1","webpack://TradingVueJs/./src/components/ItemList.vue","webpack://TradingVueJs/src/components/ToolbarItem.vue","webpack://TradingVueJs/./src/components/ToolbarItem.vue?3143","webpack://TradingVueJs/./src/components/ToolbarItem.vue","webpack://TradingVueJs/src/components/Toolbar.vue","webpack://TradingVueJs/./src/components/Toolbar.vue?8d8b","webpack://TradingVueJs/./src/components/Toolbar.vue","webpack://TradingVueJs/./src/components/Widgets.vue?cd30","webpack://TradingVueJs/src/components/Widgets.vue","webpack://TradingVueJs/./src/components/Widgets.vue?1b5d","webpack://TradingVueJs/./src/components/Widgets.vue","webpack://TradingVueJs/./src/components/TheTip.vue?f722","webpack://TradingVueJs/src/components/TheTip.vue","webpack://TradingVueJs/./src/components/TheTip.vue?9863","webpack://TradingVueJs/./src/components/TheTip.vue","webpack://TradingVueJs/./src/mixins/xcontrol.js","webpack://TradingVueJs/src/TradingVue.vue","webpack://TradingVueJs/./src/TradingVue.vue?6601","webpack://TradingVueJs/./src/TradingVue.vue","webpack://TradingVueJs/./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack://TradingVueJs/./src/helpers/script_ww_api.js","webpack://TradingVueJs/./src/helpers/script_utils.js","webpack://TradingVueJs/./src/helpers/dataset.js","webpack://TradingVueJs/./src/helpers/dc_events.js","webpack://TradingVueJs/./src/helpers/dc_core.js","webpack://TradingVueJs/./src/helpers/sett_proxy.js","webpack://TradingVueJs/./src/helpers/agg_tool.js","webpack://TradingVueJs/./src/helpers/datacube.js","webpack://TradingVueJs/./src/mixins/interface.js","webpack://TradingVueJs/./src/index.js","webpack://TradingVueJs/./src/TradingVue.vue?6f7a","webpack://TradingVueJs/./src/components/Botbar.vue?cd08","webpack://TradingVueJs/./src/components/ButtonGroup.vue?1d8f","webpack://TradingVueJs/./src/components/ItemList.vue?f18c","webpack://TradingVueJs/./src/components/Legend.vue?7996","webpack://TradingVueJs/./src/components/LegendButton.vue?28a4","webpack://TradingVueJs/./src/components/Section.vue?db49","webpack://TradingVueJs/./src/components/Spinner.vue?fec7","webpack://TradingVueJs/./src/components/TheTip.vue?27db","webpack://TradingVueJs/./src/components/Toolbar.vue?5d0d","webpack://TradingVueJs/./src/components/ToolbarItem.vue?c8f7","webpack://TradingVueJs/./src/components/UxWrapper.vue?401e","webpack://TradingVueJs/./src/components/Widgets.vue?6a8b","webpack://TradingVueJs/./node_modules/css-loader/dist/runtime/api.js","webpack://TradingVueJs/./node_modules/hammerjs/hammer.js","webpack://TradingVueJs/./node_modules/hamsterjs/hamster.js","webpack://TradingVueJs/./node_modules/lz-string/libs/lz-string.js","webpack://TradingVueJs/./node_modules/regenerator-runtime/runtime.js","webpack://TradingVueJs/./src/TradingVue.vue?a5bb","webpack://TradingVueJs/./src/components/Botbar.vue?d73b","webpack://TradingVueJs/./src/components/ButtonGroup.vue?da26","webpack://TradingVueJs/./src/components/ItemList.vue?c5f5","webpack://TradingVueJs/./src/components/Legend.vue?29ad","webpack://TradingVueJs/./src/components/LegendButton.vue?c143","webpack://TradingVueJs/./src/components/Section.vue?d3ce","webpack://TradingVueJs/./src/components/Spinner.vue?1a21","webpack://TradingVueJs/./src/components/TheTip.vue?4685","webpack://TradingVueJs/./src/components/Toolbar.vue?be45","webpack://TradingVueJs/./src/components/ToolbarItem.vue?c8c2","webpack://TradingVueJs/./src/components/UxWrapper.vue?7d59","webpack://TradingVueJs/./src/components/Widgets.vue?92b8","webpack://TradingVueJs/./node_modules/vue-style-loader/lib/listToStyles.js","webpack://TradingVueJs/./node_modules/vue-style-loader/lib/addStylesClient.js","webpack://TradingVueJs/webpack/bootstrap","webpack://TradingVueJs/webpack/runtime/compat get default export","webpack://TradingVueJs/webpack/runtime/define property getters","webpack://TradingVueJs/webpack/runtime/hasOwnProperty shorthand","webpack://TradingVueJs/webpack/runtime/make namespace object","webpack://TradingVueJs/webpack/startup"],"names":["SECOND","MINUTE","MINUTE3","MINUTE5","MINUTE15","MINUTE30","HOUR","HOUR4","HOUR12","DAY","WEEK","MONTH","YEAR","MONTHMAP","TIMESCALES","$SCALES","ChartConfig","SBMIN","SBMAX","Infinity","TOOLBAR","TB_ICON","TB_ITEM_M","TB_ICON_BRI","TB_ICON_HOLD","TB_BORDER","TB_B_STYLE","TOOL_COLL","EXPAND","CANDLEW","GRIDX","GRIDY","BOTBAR","PANHEIGHT","DEFAULT_LEN","MINIMUM_LEN","MIN_ZOOM","MAX_ZOOM","VOLSCALE","UX_OPACITY","ZOOM_MODE","L_BTN_SIZE","L_BTN_MARGIN","SCROLL_WHEEL","FONT","IB_TF_WARN","MAP_UNIT","map_unit","Context","$p","el","document","createElement","ctx","getContext","font","clamp","num","min","max","add_zero","i","day_start","t","start","Date","setUTCHours","month_start","date","UTC","getFullYear","getMonth","year_start","get_year","undefined","getUTCFullYear","get_month","getUTCMonth","nearest_a","x","array","dist","val","index","length","xi","Math","abs","round","decimals","parseFloat","toFixed","strip","number","toPrecision","get_day","getDate","overwrite","arr","new_arr","splice","copy_layout","obj","new_obj","k","Array","isArray","m","Object","assign","detect_interval","ohlcv","len","slice","forEach","d","Const","get_num_id","id","parseInt","split","pop","fast_filter","t1","t2","ia","IndexedArray","res","getRange","i0","valpos","next","e","filter","fast_filter_i","i1","floor","i2","fast_nearest","fetch","nextlow","nexthigh","now","getTime","pause","delay","Promise","rs","rj","setTimeout","smart_wheel","delta","log","sign","get_deltaX","event","originalEvent","deltaX","get_deltaY","deltaY","apply_opacity","c","op","n","toString","parse_tf","smth","index_shift","sub","data","first","second","j","measureText","text","tv_id","measureTextOrg","width","doc","getElementById","base","style","position","top","appendChild","innerText","replace","offsetWidth","uuid","temp","r","random","v","uuid2","warn","f","console","is_scr_props_upd","prev","p","find","$uuid","props","settings","$props","some","delayed_exec","script","execInterval","dt","$last_exec","format_name","ov","name","reg","RegExp","xmode","is_mobile","default_prevented","original","defaultPrevented","w","navigator","maxTouchPoints","msMaxTouchPoints","DocumentTouch","window","point2line","p1","p2","p3","tri","area","tri_h","point2seg","proj","dot_prod","l1","l2","h","point2ray","dx","dy","sqrt","v1","v2","exp","log_mid","log_hi","log_lo","px","gx","re_range","r1","hi2","mid","log_hi1","log_lo1","log_hi2","log_$","W","self","range","ib","ti_map","spacex","ls","grid","logScale","t2screen","smth2i","$2screen","y","math","A","B","t_magnet","cn","candles","master_grid","map","raw","Utils","screen2$","screen2t","$_magnet","price","c_magnet","data_magnet","candle","px_step","config","o","l","expand","height","$_hi","$_lo","bot","MAX_INT","Number","MAX_SAFE_INTEGER","GridMaker","params","interval","layers_meta","y_t","timezone","lm","y_range_fn","keys","yrs","values","y_range","calc_$range","hi","lo","auto","log_scale","calc_sidebar","prec","sb","calc_precision","lens","push","str","repeat","max_r","max_l","even","calc_positions","capacity","startx","time_step","xrange","s","dollar_step","yrange","toExponential","pow","dollar_mult","mult_hi","dollar_mult_hi","mult_lo","dollar_mult_lo","yratio","grid_x","t_step","xs","prev_xs","insert_line","extend_left","extend_right","m0","prev_t","i2t","p_t","tf","isFinite","unshift","grid_y","$_step","ys","y1","y$","grid_y_log","$_mult","search_start_pos","y2","search_start_neg","yp","q","log_rounder","value","N","count","quality","div","nice","ro","apply_sizes","create","layout_fn","get_layout","set_sidebar","get_sidebar","Layout","chart","offsub","y_ts","y_transforms","mgrid","grid_hs","weighted_hs","off_h","concat","fill","hs","sum","reduce","a","b","candles_n_vol","volume","maxv","vs","x1","x2","splitter","hf_px_step","green","specs","gms","entries","grids","offset","botbar","CursorUpdater","comp","_layout","cursor","grid_id","once","cursor_data","locked","cursor_time","$set","ids","ts","type","main_section","overlay_data","mouse","FrameAnimation","cb","t0","setInterval","stop","clearInterval","Grid","canvas","layout","offset_x","offset_y","deltas","wmode","listeners","overlays","hm","Hamster","wheel","mousezoom","mc","Hammer","T","add","threshold","get","set","enable","on","scroll_lock","mode","emit_cursor_coord","tfrm","y_transform","drug","center","y_r","$emit","calc_offset","propagate","touch2mouse","mousedrag","pan_fade","sim_mousedown","fade","update","pinch","pinchzoom","scale","addEventListener","gesturestart","gesturechange","gestureend","preventDefault","layerX","layerY","args","srcEvent","v0","change_range","rect","getBoundingClientRect","layer","crosshair","display","clearRect","shaders","apply_shaders","sort","z","save","renderer","pre_draw","draw","post_draw","restore","colors","meta","strokeStyle","beginPath","ymax","moveTo","lineTo","stroke","upper_border","activated","trackpad","trackpad_scroll","diff","tl","ctrlKey","offsetX","diff1","diff2","offsetY","d$","nt","emit","rm","removeEventListener","destroy","unwheel","methods","setup","_id","dpr","devicePixelRatio","_attrs","$nextTick","redraw","create_canvas","attrs","left","mousemove","mouseout","mouseup","mousedown","ref","watch","on_ux_event","target","vars","overlay_id","uxs","ux","modify","hidden","remove_all_ux","overlay","Crosshair","_visible","visible","cross","setLineDash","Mouse","pressed","handler","dir","indexOf","mounted","main","meta_info","Function","_$emit","custom_event","$options","layer_id","legend","data_colors","exec_script","init_tool","init","beforeDestroy","use_for","last_ux_id","uxs_count","calc","src","watch_uuid","deep","render","layout_cnv","avg_w","new_interval","interval2","ratio","px_step2","layout_vol","dim","_i1","_i2","volscale","CandleExt","body_color","colorCandleUp","colorCandleDw","wick_color","colorWickUp","colorWickDw","hw","max_h","x05","fillStyle","fillRect","VolbarExt","y0","colorVolUp","colorVolDw","Price","last_bar","bar","lbl","color","textHL","textAlign","fillText","shader","last","init_shader","red","Keys","keymap","key","collisions","pins","show_pins","drag","drag_update","selected","start_drag","remove_tool","render_pins","set_state","$state","re_init","rec_position","update_from","y$1","computed","$selected","state","Pin","RADIUS","PIN_RADIUS","RADIUS_SQ","COLOR_BACK","back","COLOR_BR","moved","draw_circle","lw","lineWidth","arc","PI","force","on_settled","hover","Seg","make","Math2","Line","ray","Ray","Sidebar","side","direction","taps","posThreshold","zoom","calc_zoom","calc_range","drugging","points","offst","panel","panwidth","speed","zk","px_mid","new_hi","new_lo","copy","init_shaders","skin","owner","Shader","on_shader_event","rerender","join","Botbar","grid_0","format_date","lbl_highlight","globalAlpha","bot_shaders","format_cursor_x","measure","panheight","ti","tZ","getUTCDate","getUTCHours","getUTCMinutes","yr","mo","dd","time","data_changed","changed","_data_n0","_data_len","check_all_data","reindex_delta","save_data_t","_data_t","cndl","off","interval_ms","t2i","MAX_ARR","TI","sub_start","it_map","sub_i","ss","map_sub","_i","shift","k1","tN","tk","tk2","di","sub1","sub2","E","ctrllist","skin_styles","ctrl_destroy","controllers","extensions","Main","__name__","xSettings","nc","pre_dc","ctrl","post_dc","post_update","stbr","parent","parentNode","removeChild","skin_proto","styles","sheet","setAttribute","innerHTML","$el","ws","widgets","skins","sks","colorpack","sel","resetChart","onsettings","WebWork","dc","tasks","onevent","worker","terminate","URL","webkitURL","lz","worker_data","blob","Blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","append","getBlob","Worker","createObjectURL","onmessage","sett","node_url","socket","WebSocket","JSON","parse","msg_queue","msg","tx_keys","send_node","tx_objs","postMessage","start_socket","readyState","send","stringify","just","FDEFS","SBRACKETS","TFSTR","BUF_INC","tf_cache","f_args","lastIndex","exec","fkeyword","trim","fname","fargs","f_body","lastIndexOf","wrap_idxs","pre","vname","vindex","wrap","make_module_lib","mod","lib","get_raw_src","tf_from_pair","pf","mult","tf_from_str","get_fn_id","ovf","nw","nextt","iN","size_of_dss","bytes","s0","size_of","object","list","stack","Dataset","desc","ww","proto","getPrototypeOf","setPrototypeOf","defineProperty","del","dss","ds","nids","pids","includes","remove","types","DatasetWW","last_upd","se","recalc_size","merge","dp","DCEvents","tv","_data_uploading","send_meta_2_ww","on_overlay_data","on_overlay_update","se_state","modify_overlay","post_ww","register_tools","exec_all_scripts","system_tool","drawing_mode_off","grid_mousedown","change_settings","scripts_onrange","on_scroll_lock","object_selected","before_destroy","scripts","$refs","rem","tools","preset","tool","icon","Icons","info","merge_presets","mods","mp","get_overlay","def","error","output","set_loading","execOnRange","upd","fields","data_change_exec","flag","skrr","loading","shiftMode","drawingMode","build_tool","showTheTip","shift_measure","shiftKey","add_trash_icon","remove_trash_icon","$synth","get_one","new_ovs","onchart","offchart","fast_merge","dcid","gldc","DCCore","$root","init_data","update_ids","$watch","get_by_query","on_settings","on_ids_changed","datasets","check","loader","prom","chunk_loaded","then","last_chunk","range_changed","dcgl","gid","rgid","ri","t_next","agg","update_overlays","tick","scroll_to","query","chuck","tuple","result","chart_as_piv","query_search","field","path","r2","ts_overlap","od","d1","d2","combine","arr1","arr2","a1","a2","id11","id12","id21","id22","ts_sorted","dst","point","last_t","upd_t","auto_scroll","last_candle","Proxy","AggTool","int","symbols","st_id","sym","old","isds","refine","out","update_ds","DataCube","def_sett","aggregation","script_depth","ww_ram_limit","SettProxy","objects","merge_ts","merge_objects","$delete","update_candle","update_tick","callback","set_loader","close","uxr","primitives","Candle","Volbar","TradingVue","Vue","component","use","TradingVueLib","Overlay","Constants","Tool","Interface"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;ACVA,yCAA+C;;;;;;;;ACA/C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,eAAe,cAAc;AAC7B,eAAe,cAAc;AAC7B,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;;;;;;;;AC5BA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,mBAAO,CAAC,GAAQ;AAC3B,UAAU,mBAAO,CAAC,GAAW;AAC7B,UAAU,mBAAO,CAAC,GAAiB;;AAEnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,uCAAuC;AACvC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACzNA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;;;;;;;;ACvDrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,cAAc,aAAa;AAC3B,WAAW;AACX,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD,qBAAqB;AACrB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,0CAA0C;AAC9D;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;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Ac;AACV,aAAO,KAAKwe,QAAZ;AACH,K;SAED,aAAYhe,GAAZ,EAAiB;AACb,WAAKge,QAAL,GAAgBhe,GAAhB;AACH;;;;;;;;ACtDL;AACA;AAEA;AACA,mBADA;AAEA,8CAFA;AAGA;AACA,UADA,oBACA;AACA,oCADA,CAGA;AACA;;AACA;AACA,yBADA;AAEA;AAFA;AAIA;AAVA,GAHA;AAeA;AACA;AACA;AAEA,oCAFA,CAIA;;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AACA;AACA,OAfA;AAgBA;AAhBA;AADA,GAfA;AAmCA,QAnCA,kBAmCA,CAnCA,EAmCA;AAAA;AAAA;AAnCA,G;;ACLyK,CAAC,mFAAe,iCAAG,EAAC,C;;ACA7L;;AAEA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;ACjGA,IAAI,gBAAM,EAAE,yBAAe;AAC3B,CAA6D;AACL;;;AAGxD;AACA,CAA0F;AAC1F,gBAAgB,kBAAU;AAC1B,EAAE,4CAAM;AACR,EAAE,gBAAM;AACR,EAAE,yBAAe;AACjB;AACA;AACA;AACA;;AAEA;;AAEA;AACA,IAAI,KAAU,EAAE,YAYf;AACD;AACA,2DAAe,iB;;;;;;AC3Bf;AACA,0BADA;AAEA,QAFA,kBAEA,CAFA,EAEA;AAAA;AAAA,GAFA;AAGA;AACA;AACA,mBADA;AAEA,2BAFA;AAGA,uBAHA;AAIA;AAJA;AAMA,GAVA;AAWA;AACA;AACA;AADA;AAGA,GAfA;AAgBA;AACA,WADA,mBACA,KADA,EACA;AACA;AACA,KAHA;AAIA,SAJA,iBAIA,KAJA,EAIA;AACA;AACA,KANA;AAOA,YAPA,oBAOA,KAPA,EAOA;AACA;AACA;AATA;AAhBA,G;;ACNgL,CAAC,0FAAe,wCAAG,EAAC,C;;ACApM,IAAI,uBAAM,EAAE,gCAAe;AAC3B,CAAoE;AACL;;;AAG/D;AACA,CAA0F;AAC1F,IAAI,0BAAS,GAAG,kBAAU;AAC1B,EAAE,mDAAM;AACR,EAAE,uBAAM;AACR,EAAE,gCAAe;AACjB;AACA;AACA;AACA;;AAEA;;AAEA;AACA,IAAI,KAAU,EAAE,6BAYf;AACD,0BAAS;AACT,uDAAe,0BAAS,Q;;ACjCxB,IAAI,2CAAM;AACV;AACA;AACA;AACA;AACA;AACA,KAAK,2DAA2D;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,aAAa;AACb,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,IAAI,oDAAe;AACnB,2CAAM;;;;;;ACvBN,IAAI,6CAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,iBAAiB;AACjB,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,yBAAyB,sCAAsC;AAC/D;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,sDAAe;AACnB,6CAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbN;AAEA;AACA,mBADA;AAEA,8CAFA;AAGA,SAHA,qBAGA;AACA;AACA,mCAFA,CAEA;;AACA,oCAHA,CAGA;;AACA;AACA,GARA;AASA,SATA,qBASA;AACA;AACA;AACA,GAZA;AAaA,eAbA,2BAaA;AACA;AACA;AACA,GAhBA;AAiBA;AACA,mBADA,6BACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AACA;AACA;AACA;;AACA;AACA;AACA;AACA,WAFA,MAEA;AACA;AACA;;AAZA;;AAcA;AACA;AACA;AACA;;AACA;AACA;AACA;;AACA;AACA;AACA;AACA,WAFA,MAEA;AACA;AACA;;AAZA;;AAcA;AACA;AACA,KArCA;AAsCA,eAtCA,uBAsCA,GAtCA,EAsCA,KAtCA,EAsCA;AACA;AACA;AACA;;AACA;AACA,eACA,mCACA,gCAFA;AAIA;;AACA;;AACA;AACA,eACA,oCACA,iCAFA;AAIA;;AACA;;AACA;AACA;AACA;;AACA;;AACA;AACA;AACA;;AACA;AACA,KAhEA;AAiEA,aAjEA,uBAiEA;AACA;AACA;AACA,KApEA;AAqEA,YArEA,sBAqEA;AACA,6CACA,8BADA,EAEA;AACA,KAzEA;AA0EA,mBA1EA,2BA0EA,KA1EA,EA0EA;AACA;;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA,KAnFA;AAoFA,SApFA,mBAoFA;AACA;AACA,gCADA;AAEA;AAFA;AAIA;AAzFA,GAjBA;AA4GA;AACA,OADA,iBACA;AACA,4BADA,CACA;AACA,KAHA;AAIA,UAJA,oBAIA;AACA;AACA,KANA;AAOA,YAPA,sBAOA;AACA;AACA,KATA;AAUA,QAVA,kBAUA;AACA;AACA,KAZA;AAaA,SAbA,mBAaA;AACA;AACA,KAfA;AAgBA,SAhBA,mBAgBA;AACA;AACA,uDADA;AAEA,uCAFA;AAGA,sCAHA;AAIA,0DAJA;AAKA;AALA;AAOA,0CACA;AACA,8DADA;AAEA,8BAFA;AAGA;AAHA;AAKA;AACA,KA/BA;AAgCA,aAhCA,uBAgCA;AACA;AACA,yCADA;AAEA,wCAFA;AAGA;AAHA;AAKA,KAtCA;AAuCA,aAvCA,uBAuCA;AACA;AACA,wDADA;AAEA;AAFA;AAIA,KA5CA;AA6CA,WA7CA,qBA6CA;AACA,qCACA,gCADA,GACA,UADA;AAEA,KAhDA;AAiDA;AACA,MAlDA,gBAkDA;AACA;AACA;AACA;AA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BADA,EAFA,CAKA;;AACA,gCACA,wBADA,EACA,wBADA;AAGA,OAhBA,CAkBA;;;AACA;AACA;AACA;AAEA,mBAvBA,CAyBA;;AACA;AACA;AACA,8BACA,6CADA,EAEA,6CAFA;AAIA;AACA;AAEA,KArHA;AAsHA,cAtHA,sBAsHA,GAtHA,EAsHA,EAtHA,EAsHA,EAtHA,EAsHA,EAtHA,EAsHA,EAtHA,EAsHA,EAtHA,EAsHA;AAEA;AACA;AACA,gBACA,8BACA,2BAFA,IAGA,CAHA;AAKA;;AAEA;AACA;AACA,gCACA,wBADA,EACA,wBADA,EAFA,CAKA;;AACA,gCACA,wBADA,EACA,wBADA;AAGA,OApBA,CAsBA;;;AACA;AACA;AACA;AAEA,mBA3BA,CA6BA;;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,KA3JA;AA4JA;AACA,cA7JA,sBA6JA,GA7JA,EA6JA,GA7JA,EA6JA,EA7JA,EA6JA,CA7JA,EA6JA;AAAA;;AACA,+BADA,CAEA;;AACA;AACA,uEAJA,CAKA;;AACA;AAAA;AAAA;;AACA;AACA,qCARA,CASA;;AACA;AACA;;AACA,0CACA,iCADA;AAEA;AACA,OALA,CAVA,CAgBA;;;AACA,8CAjBA,CAkBA;AACA;;AACA;AACA;AACA;AACA;AACA,6BAxBA,CAyBA;;AACA;AACA,sDACA;AAAA;AAAA,QADA,UAEA,GAFA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAFA;AAGA,KApMA;AAqMA;AACA,SAtMA,iBAsMA,CAtMA,EAsMA;AACA;AACA;AACA,iBACA,eADA,EAEA,gBAFA,EAGA,kBAHA,EAIA,kBAJA,EAKA,mBALA,EAMA,qBANA,EAOA,4BAPA,EAQA,gCARA;;AAUA;AACA;;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;;AACA;;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA,KApOA;AAqOA,WArOA,qBAqOA;AAAA;AAAA,KArOA;AAsOA,eAtOA,yBAsOA;AAAA;AAAA;AAtOA,GAHA;AA2OA;AACA;AACA,QADA,kBACA;AACA;AACA,KAHA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B;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,2BAA2B;AACtC;AACA,wBAAwB,6BAA6B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,mBAAmB;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA,mBAAmB,+BAA+B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA,4BAA4B,+BAA+B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS,sBAAsB,EAAE;AAChD;AACA;AACA,mCAAmC,SAAS,4BAA4B,EAAE;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,IAAI,mDAAe;AACnB,0CAAM;;;;;;ACrJN,IAAI,+CAAM;AACV;AACA;AACA;AACA;AACA;AACA,KAAK,gCAAgC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,aAAa;AACb,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,IAAI,wDAAe;AACnB,+CAAM;;;;;;AC3BN,IAAI,gDAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,YAAY,gCAAgC;AAC5C,SAAS;AACT,GAAG;AACH;AACA,IAAI,yDAAe;AACnB,gDAAM;;;;;;;;;;;;;;;ACLN;AAEA;AACA,sBADA;AAEA,iEACA,MADA,EACA,QADA,CAFA;AAIA,SAJA,qBAIA,CACA,CALA;AAMA;AACA,UADA,oBACA;AACA;AACA,KAHA;AAIA,aAJA,uBAIA;AACA;;AACA;AACA;AACA;;AACA;AACA,KAVA;AAWA,QAXA,kBAWA;AACA;AACA;AACA;AACA;AACA,KAhBA;AAiBA,a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,CA/BA,EA+BA,CA/BA,EA+BA;AACA;AACA;AACA,KAlCA;AAmCA;AACA;AACA;AACA,gCAFA,CAGA;AACA;;AACA;AACA,UAAU;AACV;;AACA;AACA;AACA,QAAQ;AACR;;AACA;AACA;AACA;;AACA;AACA,kCAhBA,CAiBA;;AACA;AACA,OApBA;AAqBA;AArBA;AAnCA;AA7UA,G;;ACxCqK,CAAC,+EAAe,6BAAG,EAAC,C;;ACArG;AAC3B;AACL;;;AAGpD;AACA,CAA0F;AAC1F,IAAI,eAAS,GAAG,kBAAU;AAC1B,EAAE,wCAAM;AACR,EAAE,yCAAM;AACR,EAAE,kDAAe;AACjB;AACA;AACA;AACA;;AAEA;;AAEA;AACA,IAAI,KAAU,EAAE,kBAiBf;AACD,eAAS;AACT,4CAAe,eAAS,Q;;ACtCxB,IAAI,2CAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,iBAAiB;AACjB,WAAW;AACX;AACA,KAAK;AACL;AACA;AACA;AACA,IAAI,oDAAe;AACnB,2CAAM;;;;;;AC/BN,IAAI,+CAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,IAAI,wDAAe;AACnB,+CAAM;;;;;;AC9DN,IAAI,4CAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AA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9B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,CAAC;;;AAGD;AACA;AACA;AACA,qDAAqD,cAAc;AACnE;AACA,C;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,UAAU;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,MAAM;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,YAAY;AACvB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK;AAC3C,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,MAAM,GAAG,KAAK,EAAE,KAAK;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB,EAAE;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,YAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO,KAAK;AACvB,WAAW,OAAO,KAAK;AACvB,WAAW,MAAM;AACjB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB;;AAEzB;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,CAAC;;AAED;AACA,UAAU;AACV,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,gBAAgB;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,CAAC;;AAED;AACA,UAAU;AACV,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,gBAAgB;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,6BAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;;AAEL;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA,4BAA4B,8BAA8B;;AAE1D;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA,gBAAgB;;AAEhB;AACA;AACA,eAAe,OAAO;AACtB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,eAAe,WAAW;AAC1B,iBAAiB,WAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,eAAe,WAAW;AAC1B,iBAAiB,WAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,eAAe,WAAW;AAC1B,iBAAiB,WAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,eAAe,WAAW;AAC1B,iBAAiB,WAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,eAAe,WAAW;AAC1B,iBAAiB;AACjB;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iCAAiC;;AAEjC,oCAAoC;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA,kCAAkC,EAAE;;AAEpC;AACA;AACA;AACA,iBAAiB;AACjB;AACA,gCAAgC,EAAE;;AAElC;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,WAAW;AACtB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,WAAW,YAAY;AACvB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,4BAA4B,cAAc;AAC1C,2BAA2B,cAAc;AACzC,2BAA2B,gCAAgC;AAC3D,yBAAyB,gCAAgC;AACzD;AACA,yBAAyB,4BAA4B;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,OAAO;AAClB;AACA;AACA;AACA,4BAA4B,gCAAgC;;AAE5D;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE;AAClE;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,eAAe,kBAAkB;AACjC,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,eAAe,WAAW;AAC1B,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,eAAe,kBAAkB;AACjC,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;;AAEL;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA,KAAK;;AAEL;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,mGAAmG,GAAG;AACtG;;AAEA,IAAI,IAA0C;AAC9C,IAAI,mCAAO;AACX;AACA,KAAK;AAAA,kGAAC;AACN,CAAC,MAAM,EAIN;;AAED,CAAC;;;;;;;;ACllFD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,YAAY;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,QAAQ;AACvB,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA,eAAe,SAAS;AACxB,eAAe,QAAQ;AACvB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA,kDAAkD,SAAS;AAC3D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;;AAEH;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA,eAAe,SAAS;AACxB,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,UAAU,IAA2B;AACtC;AACA;AACA,CAAC,MAAM,EAGN;;AAED,CAAC;;;;;;;;ACtUD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uDAAuD,+BAA+B;AACtF,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,mEAAmE,wDAAwD,EAAE;AAC7H,GAAG;;AAEH;AACA;AACA,qDAAqD,gBAAgB;AACrE,GAAG;;AAEH;AACA;AACA;AACA,2EAA2E,0CAA0C,EAAE;AACvH,GAAG;;AAEH;AACA;AACA;AACA,gDAAgD;;AAEhD,6CAA6C,YAAY;AACzD;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,KAAK;AACL,+CAA+C;AAC/C,0CAA0C,YAAY;AACtD;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;;AAEA,GAAG;;;AAGH;AACA;AACA;AACA,oDAAoD,gCAAgC;AACpF,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,mEAAmE,yDAAyD,EAAE;AAC9H,GAAG;;AAEH;AACA,4DAA4D,aAAa;AACzE,GAAG;AACH;AACA;AACA;AACA,8BAA8B;AAC9B,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,0BAA0B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,sBAAsB,MAAM;AAC5B;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,oBAAoB,MAAM;AAC1B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,oBAAoB;AAClC;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,2EAA2E,qCAAqC,EAAE;AAClH,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED,IAAI,IAA0C;AAC9C,EAAE,mCAAO,aAAa,iBAAiB,EAAE;AAAA,kGAAC;AAC1C,CAAC,MAAM,EAEN;;;;;;;;ACpfD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa;AACb,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;;AAEA;AACA;AACA,wCAAwC,WAAW;AACnD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,kBAAkB;AACnD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,8CAA8C,QAAQ;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;AACA;AACA;AACA;AACA,EAAE,KAA0B,oBAAoB,CAAE;AAClD;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC3uBA;;AAEA;AACA,cAAc,mBAAO,CAAC,GAAkN;AACxO;AACA;AACA;AACA;AACA,UAAU,yCAA2E;AACrF,+CAA+C;AAC/C;AACA,GAAG,KAAU,EAAE,E;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,GAAuN;AAC7O;AACA;AACA;AACA;AACA,UAAU,yCAA8E;AACxF,+CAA+C;AAC/C;AACA,GAAG,KAAU,EAAE,E;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,GAA4N;AAClP;AACA;AACA;AACA;AACA,UAAU,yCAA8E;AACxF,+CAA+C;AAC/C;AACA,GAAG,KAAU,EAAE,E;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,GAAyN;AAC/O;AACA;AACA;AACA;AACA,UAAU,yCAA8E;AACxF,+CAA+C;AAC/C;AACA,GAAG,KAAU,EAAE,E;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,GAAuN;AAC7O;AACA;AACA;AACA;AACA,UAAU,yCAA8E;AACxF,+CAA+C;AAC/C;AACA,GAAG,KAAU,EAAE,E;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,GAA6N;AACnP;AACA;AACA;AACA;AACA,UAAU,yCAA8E;AACxF,+CAA+C;AAC/C;AACA,GAAG,KAAU,EAAE,E;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,GAAwN;AAC9O;AACA;AACA;AACA;AACA,UAAU,yCAA8E;AACxF,+CAA+C;AAC/C;AACA,GAAG,KAAU,EAAE,E;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,GAAwN;AAC9O;AACA;AACA;AACA;AACA,UAAU,yCAA8E;AACxF,+CAA+C;AAC/C;AACA,GAAG,KAAU,EAAE,E;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,EAAuN;AAC7O;AACA;AACA;AACA;AACA,UAAU,yCAA8E;AACxF,+CAA+C;AAC/C;AACA,GAAG,KAAU,EAAE,E;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,GAAwN;AAC9O;AACA;AACA;AACA;AACA,UAAU,yCAA8E;AACxF,+CAA+C;AAC/C;AACA,GAAG,KAAU,EAAE,E;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,GAA4N;AAClP;AACA;AACA;AACA;AACA,UAAU,yCAA8E;AACxF,+CAA+C;AAC/C;AACA,GAAG,KAAU,EAAE,E;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,EAA0N;AAChP;AACA;AACA;AACA;AACA,UAAU,yCAA8E;AACxF,+CAA+C;AAC/C;AACA,GAAG,KAAU,EAAE,E;;;;;;;ACXf;;AAEA;AACA,cAAc,mBAAO,CAAC,GAAwN;AAC9O;AACA;AACA;AACA;AACA,UAAU,yCAA8E;AACxF,+CAA+C;AAC/C;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;;;;;ACXf;AACA;AACA;AACA;AACe;AACf;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wBAAwB;AAC3D,KAAK;AACL;AACA;AACA;AACA;AACA;;;AC1BA;AACA;AACA;AACA;AACA;;AAEyC;;AAEzC;;AAEA;AACA;AACA;AACA;AACA,UAAU,iBAAiB;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEe;AACf;;AAEA;;AAEA,eAAe,YAAY;AAC3B;;AAEA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA,KAAK;AACL;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA,uBAAuB,2BAA2B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;AACA,qBAAqB,2BAA2B;AAChD;AACA;AACA,YAAY,uBAAuB;AACnC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;;;;;;UC7NA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCrBA;WACA;WACA;WACA;WACA;WACA,gCAAgC,YAAY;WAC5C;WACA,E;;;;;WCPA;WACA;WACA;WACA;WACA,wCAAwC,yCAAyC;WACjF;WACA;WACA,E;;;;;WCPA,wF;;;;;WCAA;WACA;WACA;WACA,sDAAsD,kBAAkB;WACxE;WACA,+CAA+C,cAAc;WAC7D,E;;;;;UCNA;UACA;UACA;UACA","file":"trading-vue.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TradingVueJs\"] = factory();\n\telse\n\t\troot[\"TradingVueJs\"] = factory();\n})(self, function() {\nreturn ","module.exports = require(\"regenerator-runtime\");\n","/**\n * Utility compare functions\n */\n\nmodule.exports = {\n\n /**\n * Compare two numbers.\n *\n * @param {Number} a\n * @param {Number} b\n * @returns {Number} 1 if a > b, 0 if a = b, -1 if a < b\n */\n numcmp: function (a, b) {\n return a - b;\n },\n\n /**\n * Compare two strings.\n *\n * @param {Number|String} a\n * @param {Number|String} b\n * @returns {Number} 1 if a > b, 0 if a = b, -1 if a < b\n */\n strcmp: function (a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n }\n\n};\n","/**\n * Indexed Array Binary Search module\n */\n\n/**\n * Dependencies\n */\nvar util = require(\"./util\"),\n cmp = require(\"./compare\"),\n bin = require(\"./search/binary\");\n\n/**\n * Module interface definition\n */\nmodule.exports = IndexedArray;\n\n/**\n * Indexed Array constructor\n *\n * It loads the array data, defines the index field and the comparison function\n * to be used.\n *\n * @param {Array} data is an array of objects\n * @param {String} index is the object's property used to search the array\n */\nfunction IndexedArray(data, index) {\n\n // is data sortable array or array-like object?\n if (!util.isSortableArrayLike(data))\n throw new Error(\"Invalid data\");\n\n // is index a valid property?\n if (!index || data.length > 0 && !(index in data[0]))\n throw new Error(\"Invalid index\");\n\n // data array\n this.data = data;\n\n // name of the index property\n this.index = index;\n\n // set index boundary values\n this.setBoundaries();\n\n // default comparison function\n this.compare = typeof this.minv === \"number\" ? cmp.numcmp : cmp.strcmp;\n\n // default search function\n this.search = bin.search;\n\n // cache of index values to array positions\n // each value stores an object as { found: true|false, index: array-index }\n this.valpos = {};\n\n // cursor and adjacent positions\n this.cursor = null;\n this.nextlow = null;\n this.nexthigh = null;\n}\n\n/**\n * Set the comparison function\n *\n * @param {Function} fn to compare index values that returnes 1, 0, -1\n */\nIndexedArray.prototype.setCompare = function (fn) {\n if (typeof fn !== \"function\")\n throw new Error(\"Invalid argument\");\n\n this.compare = fn;\n return this;\n};\n\n/**\n * Set the search function\n *\n * @param {Function} fn to search index values in the array of objects\n */\nIndexedArray.prototype.setSearch = function (fn) {\n if (typeof fn !== \"function\")\n throw new Error(\"Invalid argument\");\n\n this.search = fn;\n return this;\n};\n\n/**\n * Sort the data array by its index property\n */\nIndexedArray.prototype.sort = function () {\n var self = this,\n index = this.index;\n\n // sort the array\n this.data.sort(function (a, b) {\n return self.compare(a[index], b[index]);\n });\n\n // recalculate boundary values\n this.setBoundaries();\n\n return this;\n};\n\n/**\n * Inspect and set the boundaries of the internal data array\n */\nIndexedArray.prototype.setBoundaries = function () {\n var data = this.data,\n index = this.index;\n\n this.minv = data.length && data[0][index];\n this.maxv = data.length && data[data.length - 1][index];\n\n return this;\n};\n\n/**\n * Get the position of the object corresponding to the given index\n *\n * @param {Number|String} index is the id of the requested object\n * @returns {Number} the position of the object in the array\n */\nIndexedArray.prototype.fetch = function (value) {\n // check data has objects\n if (this.data.length === 0) {\n this.cursor = null;\n this.nextlow = null;\n this.nexthigh = null;\n return this;\n }\n\n // check the request is within range\n if (this.compare(value, this.minv) === -1) {\n this.cursor = null;\n this.nextlow = null;\n this.nexthigh = 0;\n return this;\n }\n if (this.compare(value, this.maxv) === 1) {\n this.cursor = null;\n this.nextlow = this.data.length - 1;\n this.nexthigh = null;\n return this;\n }\n\n var valpos = this.valpos,\n pos = valpos[value];\n\n // if the request is memorized, just give it back\n if (pos) {\n if (pos.found) {\n this.cursor = pos.index;\n this.nextlow = null;\n this.nexthigh = null;\n } else {\n this.cursor = null;\n this.nextlow = pos.prev;\n this.nexthigh = pos.next;\n }\n return this;\n }\n\n // if not, do the search\n var result = this.search.call(this, value);\n this.cursor = result.index;\n this.nextlow = result.prev;\n this.nexthigh = result.next;\n return this;\n};\n\n/**\n * Get the object corresponding to the given index\n *\n * When no value is given, the function will default to the last fetched item.\n *\n * @param {Number|String} [optional] index is the id of the requested object\n * @returns {Object} the found object or null\n */\nIndexedArray.prototype.get = function (value) {\n if (value)\n this.fetch(value);\n\n var pos = this.cursor;\n return pos !== null ? this.data[pos] : null;\n};\n\n/**\n * Get an slice of the data array\n *\n * Boundaries have to be in order.\n *\n * @param {Number|String} begin index is the id of the requested object\n * @param {Number|String} end index is the id of the requested object\n * @returns {Object} the slice of data array or []\n */\nIndexedArray.prototype.getRange = function (begin, end) {\n // check if boundaries are in order\n if (this.compare(begin, end) === 1) {\n return [];\n }\n\n // fetch start and default to the next index above\n this.fetch(begin);\n var start = this.cursor || this.nexthigh;\n\n // fetch finish and default to the next index below\n this.fetch(end);\n var finish = this.cursor || this.nextlow;\n\n // if any boundary is not set, return no range\n if (start === null || finish === null) {\n return [];\n }\n\n // return range\n return this.data.slice(start, finish + 1);\n};\n","/**\n * Binary search implementation\n */\n\n/**\n * Main search recursive function\n */\nfunction loop(data, min, max, index, valpos) {\n\n // set current position as the middle point between min and max\n var curr = (max + min) >>> 1;\n\n // compare current index value with the one we are looking for\n var diff = this.compare(data[curr][this.index], index);\n\n // found?\n if (!diff) {\n return valpos[index] = {\n \"found\": true,\n \"index\": curr,\n \"prev\": null,\n \"next\": null\n };\n }\n\n // no more positions available?\n if (min >= max) {\n return valpos[index] = {\n \"found\": false,\n \"index\": null,\n \"prev\": (diff < 0) ? max : max - 1,\n \"next\": (diff < 0) ? max + 1 : max\n };\n }\n\n // continue looking for index in one of the remaining array halves\n // current position can be skept as index is not there...\n if (diff > 0)\n return loop.call(this, data, min, curr - 1, index, valpos);\n else\n return loop.call(this, data, curr + 1, max, index, valpos);\n}\n\n/**\n * Search bootstrap\n * The function has to be executed in the context of the IndexedArray object\n */\nfunction search(index) {\n var data = this.data;\n return loop.call(this, data, 0, data.length - 1, index, this.valpos);\n}\n\n/**\n * Export search function\n */\nmodule.exports.search = search;\n","/**\n * Utils module\n */\n\n/**\n * Check if an object is an array-like object\n *\n * @credit Javascript: The Definitive Guide, O'Reilly, 2011\n */\nfunction isArrayLike(o) {\n if (o && // o is not null, undefined, etc.\n typeof o === \"object\" && // o is an object\n isFinite(o.length) && // o.length is a finite number\n o.length >= 0 && // o.length is non-negative\n o.length === Math.floor(o.length) && // o.length is an integer\n o.length < 4294967296) // o.length < 2^32\n return true; // Then o is array-like\n else\n return false; // Otherwise it is not\n}\n\n/**\n * Check for the existence of the sort function in the object\n */\nfunction isSortable(o) {\n if (o && // o is not null, undefined, etc.\n typeof o === \"object\" && // o is an object\n typeof o.sort === \"function\") // o.sort is a function\n return true; // Then o is array-like\n else\n return false; // Otherwise it is not\n}\n\n/**\n * Check for sortable-array-like objects\n */\nmodule.exports.isSortableArrayLike = function (o) {\n return isArrayLike(o) && isSortable(o);\n};\n","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"trading-vue\",\n style: {\n color: this.chart_props.colors.text,\n font: this.font_comp,\n width: this.width + \"px\",\n height: this.height + \"px\"\n },\n attrs: { id: _vm.id },\n on: { mousedown: _vm.mousedown, mouseleave: _vm.mouseleave }\n },\n [\n _vm.toolbar\n ? _c(\n \"toolbar\",\n _vm._b(\n {\n ref: \"toolbar\",\n attrs: { config: _vm.chart_config },\n on: { \"custom-event\": _vm.custom_event }\n },\n \"toolbar\",\n _vm.chart_props,\n false\n )\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.controllers.length\n ? _c(\"widgets\", {\n ref: \"widgets\",\n attrs: {\n map: _vm.ws,\n width: _vm.width,\n height: _vm.height,\n tv: this,\n dc: _vm.data\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"chart\",\n _vm._b(\n {\n key: _vm.reset,\n ref: \"chart\",\n attrs: { tv_id: _vm.id, config: _vm.chart_config },\n on: {\n \"custom-event\": _vm.custom_event,\n \"range-changed\": _vm.range_changed,\n \"legend-button-click\": _vm.legend_button\n }\n },\n \"chart\",\n _vm.chart_props,\n false\n )\n ),\n _vm._v(\" \"),\n _c(\n \"transition\",\n { attrs: { name: \"tvjs-drift\" } },\n [\n _vm.tip\n ? _c(\"the-tip\", {\n attrs: { data: _vm.tip },\n on: {\n \"remove-me\": function($event) {\n _vm.tip = null\n }\n }\n })\n : _vm._e()\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","\r\nconst SECOND = 1000\r\nconst MINUTE = SECOND * 60\r\nconst MINUTE3 = MINUTE * 3\r\nconst MINUTE5 = MINUTE * 5\r\nconst MINUTE15 = MINUTE * 15\r\nconst MINUTE30 = MINUTE * 30\r\nconst HOUR = MINUTE * 60\r\nconst HOUR4 = HOUR * 4\r\nconst HOUR12 = HOUR * 12\r\nconst DAY = HOUR * 24\r\nconst WEEK = DAY * 7\r\nconst MONTH = WEEK * 4\r\nconst YEAR = DAY * 365\r\n\r\nconst MONTHMAP = [\r\n \"Jan\", \"Feb\", \"Mar\", \"Apr\",\r\n \"May\", \"Jun\",\"Jul\", \"Aug\",\r\n \"Sep\", \"Oct\",\"Nov\", \"Dec\"\r\n]\r\n\r\n// Grid time steps\r\nconst TIMESCALES = [\r\n YEAR * 10, YEAR * 5, YEAR * 3, YEAR * 2, YEAR,\r\n MONTH * 6, MONTH * 4, MONTH * 3, MONTH * 2, MONTH,\r\n DAY * 15, DAY * 10, DAY * 7, DAY * 5, DAY * 3, DAY * 2, DAY,\r\n HOUR * 12, HOUR * 6, HOUR * 3, HOUR * 1.5, HOUR,\r\n MINUTE30, MINUTE15, MINUTE * 10, MINUTE5, MINUTE * 2, MINUTE\r\n]\r\n\r\n// Grid $ steps\r\nconst $SCALES = [0.05, 0.1, 0.2, 0.25, 0.5, 0.8, 1, 2, 5]\r\n\r\nconst ChartConfig = {\r\n SBMIN: 60, // Minimal sidebar px\r\n SBMAX: Infinity, // Max sidebar, px\r\n TOOLBAR: 57, // Toolbar width px\r\n TB_ICON: 25, // Toolbar icon size px\r\n TB_ITEM_M: 6, // Toolbar item margin px\r\n TB_ICON_BRI: 1, // Toolbar icon brightness\r\n TB_ICON_HOLD: 420, // ms, wait to expand\r\n TB_BORDER: 1, // Toolbar border px\r\n TB_B_STYLE: 'dotted', // Toolbar border style\r\n TOOL_COLL: 7, // Tool collision threshold\r\n EXPAND: 0.15, // %/100 of range\r\n CANDLEW: 0.6, // %/100 of step\r\n GRIDX: 100, // px\r\n GRIDY: 47, // px\r\n BOTBAR: 28, // px\r\n PANHEIGHT: 22, // px\r\n DEFAULT_LEN: 50, // candles\r\n MINIMUM_LEN: 5, // candles,\r\n MIN_ZOOM: 25, // candles\r\n MAX_ZOOM: 1000, // candles,\r\n VOLSCALE: 0.15, // %/100 of height\r\n UX_OPACITY: 0.9, // Ux background opacity\r\n ZOOM_MODE: 'tv', // 'tv' or 'tl'\r\n L_BTN_SIZE: 21, // Legend Button size, px\r\n L_BTN_MARGIN: '-6px 0 -6px 0', // css margin\r\n SCROLL_WHEEL: 'prevent', // 'pass', 'click'\r\n}\r\n\r\nChartConfig.FONT =\r\n `11px -apple-system,BlinkMacSystemFont,\r\n Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,\r\n Fira Sans,Droid Sans,Helvetica Neue,\r\n sans-serif`\r\n\r\nconst IB_TF_WARN =\r\n `When using IB mode you should specify ` +\r\n `timeframe ('tf' filed in 'chart' object),` +\r\n `otherwise you can get an unexpected behaviour`\r\n\r\nconst MAP_UNIT = {\r\n \"1s\": SECOND,\r\n \"5s\": SECOND * 5,\r\n \"10s\": SECOND * 10,\r\n \"20s\": SECOND * 20,\r\n \"30s\": SECOND * 30,\r\n \"1m\": MINUTE,\r\n \"3m\": MINUTE3,\r\n \"5m\": MINUTE5,\r\n \"15m\": MINUTE15,\r\n \"30m\": MINUTE30,\r\n \"1H\": HOUR,\r\n \"2H\": HOUR * 2,\r\n \"3H\": HOUR * 3,\r\n \"4H\": HOUR4,\r\n \"12H\": HOUR12,\r\n \"1D\": DAY,\r\n \"1W\": WEEK,\r\n \"1M\": MONTH,\r\n \"1Y\": YEAR\r\n}\r\n\r\nexport default {\r\n SECOND: SECOND,\r\n MINUTE: MINUTE,\r\n MINUTE5: MINUTE5,\r\n MINUTE15: MINUTE15,\r\n MINUTE30: MINUTE30,\r\n HOUR: HOUR,\r\n HOUR4: HOUR4,\r\n DAY: DAY,\r\n WEEK: WEEK,\r\n MONTH: MONTH,\r\n YEAR: YEAR,\r\n MONTHMAP: MONTHMAP,\r\n TIMESCALES: TIMESCALES,\r\n $SCALES: $SCALES,\r\n ChartConfig: ChartConfig,\r\n map_unit: MAP_UNIT,\r\n IB_TF_WARN\r\n}\r\n","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"trading-vue-chart\", style: _vm.styles },\n [\n _c(\"keyboard\", { ref: \"keyboard\" }),\n _vm._v(\" \"),\n _vm._l(this._layout.grids, function(grid, i) {\n return _c(\"grid-section\", {\n key: grid.id,\n ref: \"sec\",\n refInFor: true,\n attrs: { common: _vm.section_props(i), grid_id: i },\n on: {\n \"register-kb-listener\": _vm.register_kb,\n \"remove-kb-listener\": _vm.remove_kb,\n \"range-changed\": _vm.range_changed,\n \"cursor-changed\": _vm.cursor_changed,\n \"cursor-locked\": _vm.cursor_locked,\n \"sidebar-transform\": _vm.set_ytransform,\n \"layer-meta-props\": _vm.layer_meta_props,\n \"custom-event\": _vm.emit_custom_event,\n \"legend-button-click\": _vm.legend_button_click\n }\n })\n }),\n _vm._v(\" \"),\n _c(\n \"botbar\",\n _vm._b(\n { attrs: { shaders: _vm.shaders, timezone: _vm.timezone } },\n \"botbar\",\n _vm.botbar_props,\n false\n )\n )\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","// Canvas context for text measurments\n\nfunction Context($p) {\n\n let el = document.createElement('canvas')\n let ctx = el.getContext(\"2d\")\n ctx.font = $p.font\n\n return ctx\n\n}\n\nexport default Context\n","\nimport IndexedArray from 'arrayslicer'\nimport Const from './constants.js'\n\nexport default {\n\n clamp(num, min, max) {\n return num <= min ? min : num >= max ? max : num\n },\n\n add_zero(i) {\n if (i < 10) {\n i = \"0\" + i;\n }\n return i\n },\n\n // Start of the day (zero millisecond)\n day_start(t) {\n let start = new Date(t)\n return start.setUTCHours(0,0,0,0)\n },\n\n // Start of the month\n month_start(t) {\n let date = new Date(t)\n return Date.UTC(\n date.getFullYear(),\n date.getMonth(), 1\n )\n },\n\n // Start of the year\n year_start(t) {\n return Date.UTC(new Date(t).getFullYear())\n },\n\n get_year(t) {\n if (!t) return undefined\n return new Date(t).getUTCFullYear()\n },\n\n get_month(t) {\n if (!t) return undefined\n return new Date(t).getUTCMonth()\n },\n\n // Nearest in array\n nearest_a(x, array) {\n let dist = Infinity\n let val = null\n let index = -1\n for (var i = 0; i < array.length; i++) {\n var xi = array[i]\n if (Math.abs(xi - x) < dist) {\n dist = Math.abs(xi - x)\n val = xi\n index = i\n }\n }\n return [index, val]\n },\n\n round(num, decimals = 8) {\n return parseFloat(num.toFixed(decimals))\n },\n\n // Strip? No, it's ugly floats in js\n strip(number) {\n return parseFloat(\n parseFloat(number).toPrecision(12)\n )\n },\n\n get_day(t) {\n return t ? new Date(t).getDate() : null\n },\n\n // Update array keeping the same reference\n overwrite(arr, new_arr) {\n arr.splice(0, arr.length, ...new_arr)\n },\n\n // Copy layout in reactive way\n copy_layout(obj, new_obj) {\n for (var k in obj) {\n if (Array.isArray(obj[k])) {\n // (some offchart indicators are added/removed)\n // we need to update layout in a reactive way\n if (obj[k].length !== new_obj[k].length) {\n this.overwrite(obj[k], new_obj[k])\n continue\n }\n for (var m in obj[k]) {\n Object.assign(obj[k][m], new_obj[k][m])\n }\n } else {\n Object.assign(obj[k], new_obj[k])\n }\n }\n },\n\n // Detects candles interval\n detect_interval(ohlcv) {\n let len = Math.min(ohlcv.length - 1, 99)\n let min = Infinity\n ohlcv.slice(0, len).forEach((x, i) => {\n let d = ohlcv[i+1][0] - x[0]\n if (d === d && d < min) min = d\n })\n // This saves monthly chart from being awkward\n if (min >= Const.MONTH && min <= Const.DAY * 30) {\n return Const.DAY * 31\n }\n return min\n },\n\n // Gets numberic part of overlay id (e.g 'EMA_1' = > 1)\n get_num_id(id) {\n return parseInt(id.split('_').pop())\n },\n\n // Fast filter. Really fast, like 10X\n fast_filter(arr, t1, t2) {\n if (!arr.length) return [arr, undefined]\n try {\n let ia = new IndexedArray(arr, \"0\")\n let res = ia.getRange(t1, t2)\n let i0 = ia.valpos[t1].next\n return [res, i0]\n } catch(e) {\n // Something wrong with fancy slice lib\n // Fast fix: fallback to filter\n return [arr.filter(x =>\n x[0] >= t1 && x[0] <= t2\n ), 0]\n }\n },\n\n // Fast filter (index-based)\n fast_filter_i(arr, t1, t2) {\n if (!arr.length) return [arr, undefined]\n let i1 = Math.floor(t1)\n if (i1 < 0) i1 = 0\n let i2 = Math.floor(t2 + 1)\n let res = arr.slice(i1, i2)\n return [res, i1]\n },\n\n // Nearest indexes (left and right)\n fast_nearest(arr, t1) {\n let ia = new IndexedArray(arr, \"0\")\n ia.fetch(t1)\n return [ia.nextlow, ia.nexthigh]\n },\n\n now() { return (new Date()).getTime() },\n\n pause(delay) {\n return new Promise((rs, rj) => setTimeout(rs, delay))\n },\n\n // Limit crazy wheel delta values\n smart_wheel(delta) {\n let abs = Math.abs(delta)\n if (abs > 500) {\n return (200 + Math.log(abs)) * Math.sign(delta)\n }\n return delta\n },\n\n // Parse the original mouse event to find deltaX\n get_deltaX(event) {\n return event.originalEvent.deltaX / 12\n },\n\n // Parse the original mouse event to find deltaY\n get_deltaY(event) {\n return event.originalEvent.deltaY / 12\n },\n\n // Apply opacity to a hex color\n apply_opacity(c, op) {\n if (c.length === 7) {\n let n = Math.floor(op * 255)\n n = this.clamp(n, 0, 255)\n c += n.toString(16)\n }\n return c\n },\n\n // Parse timeframe or return value in ms\n parse_tf(smth) {\n if (typeof smth === 'string') {\n return Const.map_unit[smth]\n } else {\n return smth\n }\n },\n\n // Detect index shift between the main data sub\n // and the overlay's sub (for IB-mode)\n index_shift(sub, data) {\n\n // Find the second timestamp (by value)\n if (!data.length) return 0\n let first = data[0][0]\n let second\n\n for (var i = 1; i < data.length; i++) {\n if (data[i][0] !== first) {\n second = data[i][0]\n break\n }\n }\n\n for (var j = 0; j < sub.length; j++) {\n if (sub[j][0] === second) {\n return j - i\n }\n }\n\n return 0\n },\n\n // Fallback fix for Brave browser\n // https://github.com/brave/brave-browser/issues/1738\n measureText(ctx, text, tv_id) {\n let m = ctx.measureTextOrg(text)\n if (m.width === 0) {\n const doc = document\n const id = 'tvjs-measure-text'\n let el = doc.getElementById(id)\n if (!el) {\n let base = doc.getElementById(tv_id)\n el = doc.createElement(\"div\")\n el.id = id\n el.style.position = 'absolute'\n el.style.top = '-1000px'\n base.appendChild(el)\n }\n if(ctx.font) el.style.font = ctx.font\n el.innerText = text.replace(/ /g, '.');\n return { width: el.offsetWidth }\n } else {\n return m\n }\n },\n\n uuid(temp = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx') {\n return temp\n .replace(/[xy]/g, c => {\n var r = Math.random() * 16 | 0, v = c == 'x' ?\n r :\n (r & 0x3 | 0x8)\n return v.toString(16)\n })\n },\n\n uuid2() {\n return this.uuid('xxxxxxxxxxxx')\n },\n\n // Delayed warning, f = condition lambda fn\n warn(f, text, delay = 0) {\n setTimeout(() => {\n if (f()) console.warn(text)\n }, delay)\n },\n\n // Checks if script props updated\n // (and not style settings or something else)\n is_scr_props_upd(n, prev) {\n let p = prev.find(x => x.v.$uuid === n.v.$uuid)\n if (!p) return false\n\n let props = n.p.settings.$props\n if (!props) return false\n\n return props.some(x => n.v[x] !== p.v[x])\n },\n\n // Checks if it's time to make a script update\n // (based on execInterval in ms)\n delayed_exec(v) {\n if (!v.script || !v.script.execInterval)\n return true\n let t = this.now()\n let dt = v.script.execInterval\n if (!v.settings.$last_exec ||\n t > v.settings.$last_exec + dt) {\n v.settings.$last_exec = t\n return true\n }\n return false\n },\n\n // Format names such 'RSI, $length', where\n // length - is one of the settings\n format_name(ov) {\n if (!ov.name) return undefined\n\n let name = ov.name\n\n for (var k in ov.settings || {}) {\n let val = ov.settings[k]\n let reg = new RegExp(`\\\\$${k}`, 'g')\n name = name.replace(reg, val)\n }\n\n return name\n },\n\n // Default cursor mode\n xmode() {\n return this.is_mobile ? 'explore' : 'default'\n },\n\n default_prevented(event) {\n if (event.original) {\n return event.original.defaultPrevented\n }\n return event.defaultPrevented\n },\n\n // WTF with modern web development\n is_mobile: (w => 'onorientationchange' in w &&\n (!!navigator.maxTouchPoints ||\n !!navigator.msMaxTouchPoints ||\n ('ontouchstart' in w ||\n (w.DocumentTouch &&\n document instanceof w.DocumentTouch))))\n (typeof window !== 'undefined' ? window : {})\n\n}\n","\n// Math/Geometry\n\nexport default {\n\n // Distance from point to line\n // p1 = point, (p2, p3) = line\n point2line(p1, p2, p3) {\n\n let { area, base } = this.tri(p1, p2, p3)\n return Math.abs(this.tri_h(area, base))\n },\n\n // Distance from point to segment\n // p1 = point, (p2, p3) = segment\n point2seg(p1, p2, p3) {\n\n let { area, base } = this.tri(p1, p2, p3)\n // Vector projection\n let proj = this.dot_prod(p1, p2, p3) / base\n // Distance from left pin\n let l1 = Math.max(-proj, 0)\n // Distance from right pin\n let l2 = Math.max(proj - base, 0)\n // Normal\n let h = Math.abs(this.tri_h(area, base))\n return Math.max(h, l1, l2)\n },\n\n // Distance from point to ray\n // p1 = point, (p2, p3) = ray\n point2ray(p1, p2, p3) {\n\n let { area, base } = this.tri(p1, p2, p3)\n // Vector projection\n let proj = this.dot_prod(p1, p2, p3) / base\n // Distance from left pin\n let l1 = Math.max(-proj, 0)\n // Normal\n let h = Math.abs(this.tri_h(area, base))\n return Math.max(h, l1)\n },\n\n tri(p1, p2, p3) {\n let area = this.area(p1, p2, p3)\n let dx = p3[0] - p2[0]\n let dy = p3[1] - p2[1]\n let base = Math.sqrt(dx * dx + dy * dy)\n return { area, base }\n },\n\n /* Area of triangle:\n p1\n / \\\n p2 _ p3\n */\n area (p1, p2, p3) {\n\t return (\n p1[0] * (p2[1] - p3[1]) +\n p2[0] * (p3[1] - p1[1]) +\n p3[0] * (p1[1] - p2[1])\n )\n },\n\n // Triangle height\n tri_h(area, base) {\n\t return area / base\n },\n\n // Dot product of (p2, p3) and (p2, p1)\n dot_prod(p1, p2, p3) {\n let v1 = [p3[0] - p2[0], p3[1] - p2[1]]\n let v2 = [p1[0] - p2[0], p1[1] - p2[1]]\n return v1[0] * v2[0] + v1[1] * v2[1]\n },\n\n // Symmetrical log\n log(x) {\n // TODO: log for small values\n return Math.sign(x) * Math.log(Math.abs(x) + 1)\n },\n\n // Symmetrical exp\n exp(x) {\n return Math.sign(x) * (Math.exp(Math.abs(x)) - 1)\n },\n\n // Middle line on log scale based on range & px height\n log_mid(r, h) {\n let log_hi = this.log(r[0])\n let log_lo = this.log(r[1])\n let px = h / 2\n let gx = log_hi - px * (log_hi - log_lo) / h\n return this.exp(gx)\n },\n\n // Return new adjusted range, based on the previous\n // range, new $_hi, target middle line\n re_range(r1, hi2, mid) {\n let log_hi1 = this.log(r1[0])\n let log_lo1 = this.log(r1[1])\n let log_hi2 = this.log(hi2)\n let log_$ = this.log(mid)\n\n let W = (log_hi2 - log_$) * (log_hi1 - log_lo1) /\n (log_hi1 - log_$)\n\n return this.exp(log_hi2 - W)\n\n },\n\n // Return new adjusted range, based on the previous\n // range, new $_hi, target middle line + dy (shift)\n // WASTE\n /*range_shift(r1, hi2, mid, dy, h) {\n let log_hi1 = this.log(r1[0])\n let log_lo1 = this.log(r1[1])\n let log_hi2 = this.log(hi2)\n let log_$ = this.log(mid)\n\n let W = h * (log_hi2 - log_$) /\n (h * (log_hi1 - log_$) / (log_hi1 - log_lo1) + dy)\n\n return this.exp(log_hi2 - W)\n\n }*/\n\n}\n","// Layout functional interface\n\nimport Utils from '../../stuff/utils.js'\nimport math from '../../stuff/math.js'\n\nexport default function(self, range) {\n\n const ib = self.ti_map.ib\n const dt = range[1] - range[0]\n const r = self.spacex / dt\n const ls = self.grid.logScale || false\n\n Object.assign(self, {\n // Time to screen coordinates\n t2screen: t => {\n if (ib) t = self.ti_map.smth2i(t)\n return Math.floor((t - range[0]) * r) - 0.5\n },\n // $ to screen coordinates\n $2screen: y => {\n if (ls) y = math.log(y)\n return Math.floor(y * self.A + self.B) - 0.5\n },\n // Time-axis nearest step\n t_magnet: t => {\n if (ib) t = self.ti_map.smth2i(t)\n const cn = self.candles || self.master_grid.candles\n const arr = cn.map(x => x.raw[0])\n const i = Utils.nearest_a(t, arr)[0]\n if (!cn[i]) return\n return Math.floor(cn[i].x) - 0.5\n },\n // Screen-Y to dollar value (or whatever)\n screen2$: y => {\n if (ls) return math.exp((y - self.B) / self.A)\n return (y - self.B) / self.A\n },\n // Screen-X to timestamp\n screen2t: x => {\n // TODO: most likely Math.floor not needed\n // return Math.floor(range[0] + x / r)\n return range[0] + x / r\n },\n // $-axis nearest step\n $_magnet: price => { },\n // Nearest candlestick\n c_magnet: t => {\n const cn = self.candles || self.master_grid.candles\n const arr = cn.map(x => x.raw[0])\n const i = Utils.nearest_a(t, arr)[0]\n return cn[i]\n },\n // Nearest data points\n data_magnet: t => { /* TODO: implement */ }\n })\n\n return self\n\n}\n","\n// Log-scale mode helpers\n\n// TODO: all-negative numbers (sometimes wrong scaling)\n\nimport math from '../../stuff/math.js'\n\nexport default {\n\n candle(self, mid, p, $p) {\n return {\n x: mid,\n w: self.px_step * $p.config.CANDLEW,\n o: Math.floor(math.log(p[1]) * self.A + self.B),\n h: Math.floor(math.log(p[2]) * self.A + self.B),\n l: Math.floor(math.log(p[3]) * self.A + self.B),\n c: Math.floor(math.log(p[4]) * self.A + self.B),\n raw: p\n }\n },\n\n expand(self, height) {\n // expand log scale\n let A = - height / (math.log(self.$_hi) - math.log(self.$_lo))\n let B = - math.log(self.$_hi) * A\n\n let top = -height * 0.1\n let bot = height * 1.1\n\n self.$_hi = math.exp((top - B) / A)\n self.$_lo = math.exp((bot - B) / A)\n }\n\n}\n","import Const from '../../stuff/constants.js'\nimport Utils from '../../stuff/utils.js'\nimport math from '../../stuff/math.js'\n\nimport layout_fn from './layout_fn.js'\nimport log_scale from './log_scale.js'\n\nconst { TIMESCALES, $SCALES, WEEK, MONTH, YEAR, HOUR, DAY } = Const\nconst MAX_INT = Number.MAX_SAFE_INTEGER\n\n\n// master_grid - ref to the master grid\nfunction GridMaker(id, params, master_grid = null) {\n\n\n let {\n sub, interval, range, ctx, $p, layers_meta, height, y_t, ti_map,\n grid, timezone\n } = params\n\n var self = { ti_map }\n var lm = layers_meta[id]\n var y_range_fn = null\n var ls = grid.logScale\n\n if (lm && Object.keys(lm).length) {\n // Gets last y_range fn()\n let yrs = Object.values(lm).filter(x => x.y_range)\n // The first y_range() determines the range\n if (yrs.length) y_range_fn = yrs[0].y_range\n }\n\n // Calc vertical ($/₿) range\n function calc_$range() {\n if (!master_grid) {\n // $ candlestick range\n if (y_range_fn) {\n var [hi, lo] = y_range_fn(hi, lo)\n } else {\n hi = -Infinity, lo = Infinity\n for (var i = 0, n = sub.length; i < n; i++) {\n let x = sub[i]\n if (x[2] > hi) hi = x[2]\n if (x[3] < lo) lo = x[3]\n }\n }\n } else {\n // Offchart indicator range\n hi = -Infinity, lo = Infinity\n for (var i = 0; i < sub.length; i++) {\n for (var j = 1; j < sub[i].length; j++) {\n let v = sub[i][j]\n if (v > hi) hi = v\n if (v < lo) lo = v\n }\n }\n if (y_range_fn) { var [hi, lo, exp] = y_range_fn(hi, lo) }\n }\n\n // Fixed y-range in non-auto mode\n if (y_t && !y_t.auto && y_t.range) {\n self.$_hi = y_t.range[0]\n self.$_lo = y_t.range[1]\n } else {\n if (!ls) {\n exp = exp === false ? 0 : 1\n self.$_hi = hi + (hi - lo) * $p.config.EXPAND * exp\n self.$_lo = lo - (hi - lo) * $p.config.EXPAND * exp\n } else {\n self.$_hi = hi\n self.$_lo = lo\n log_scale.expand(self, height)\n }\n\n if (self.$_hi === self.$_lo) {\n if (!ls) {\n self.$_hi *= 1.05 // Expand if height range === 0\n self.$_lo *= 0.95\n } else {\n log_scale.expand(self, height)\n }\n }\n }\n\n }\n\n function calc_sidebar() {\n\n if (sub.length < 2) {\n self.prec = 0\n self.sb = $p.config.SBMIN\n return\n }\n\n // TODO: improve sidebar width calculation\n // at transition point, when one precision is\n // replaced with another\n\n // Gets formated levels (their lengths),\n // calculates max and measures the sidebar length\n // from it:\n\n // TODO: add custom formatter f()\n\n self.prec = calc_precision(sub)\n let lens = []\n lens.push(self.$_hi.toFixed(self.prec).length)\n lens.push(self.$_lo.toFixed(self.prec).length)\n let str = '0'.repeat(Math.max(...lens)) + ' '\n self.sb = ctx.measureText(str).width\n self.sb = Math.max(Math.floor(self.sb), $p.config.SBMIN)\n self.sb = Math.min(self.sb, $p.config.SBMAX)\n\n }\n\n // Calculate $ precision for the Y-axis\n function calc_precision(data) {\n\n var max_r = 0, max_l = 0\n\n let min = Infinity\n let max = -Infinity\n\n // Speed UP\n for (var i = 0, n = data.length; i < n; i++) {\n let x = data[i]\n if (x[1] > max) max = x[1]\n else if (x[1] < min) min = x[1]\n }\n // Get max lengths of integer and fractional parts\n [min, max].forEach(x => {\n // Fix undefined bug\n var str = x != null ? x.toString() : ''\n if (x < 0.000001) {\n // Parsing the exponential form. Gosh this\n // smells trickily\n var [ls, rs] = str.split('e-')\n var [l, r] = ls.split('.')\n if (!r) r = ''\n r = { length: r.length + parseInt(rs) || 0 }\n } else {\n var [l, r] = str.split('.')\n }\n if (r && r.length > max_r) {\n max_r = r.length\n }\n if (l && l.length > max_l) {\n max_l = l.length\n }\n })\n\n // Select precision scheme depending\n // on the left and right part lengths\n //\n let even = max_r - max_r % 2 + 2\n\n if (max_l === 1) {\n return Math.min(8, Math.max(2, even))\n }\n if (max_l <= 2) {\n return Math.min(4, Math.max(2, even))\n }\n\n return 2\n\n }\n\n function calc_positions() {\n\n if (sub.length < 2) return\n\n let dt = range[1] - range[0]\n\n // A pixel space available to draw on (x-axis)\n self.spacex = $p.width - self.sb\n\n // Candle capacity\n let capacity = dt / interval\n self.px_step = self.spacex / capacity\n\n // px / time ratio\n let r = self.spacex / dt\n self.startx = (sub[0][0] - range[0]) * r\n\n // Candle Y-transform: (A = scale, B = shift)\n if (!grid.logScale) {\n self.A = - height / (self.$_hi - self.$_lo)\n self.B = - self.$_hi * self.A\n } else {\n self.A = - height / (math.log(self.$_hi) -\n math.log(self.$_lo))\n self.B = - math.log(self.$_hi) * self.A\n }\n\n }\n\n // Select nearest good-loking t step (m is target scale)\n function time_step() {\n let k = ti_map.ib ? 60000 : 1\n let xrange = (range[1] - range[0]) * k\n let m = xrange * ($p.config.GRIDX / $p.width)\n let s = TIMESCALES\n return Utils.nearest_a(m, s)[1] / k\n }\n\n // Select nearest good-loking $ step (m is target scale)\n function dollar_step() {\n let yrange = self.$_hi - self.$_lo\n let m = yrange * ($p.config.GRIDY / height)\n let p = parseInt(yrange.toExponential().split('e')[1])\n let d = Math.pow(10, p)\n let s = $SCALES.map(x => x * d)\n\n // TODO: center the range (look at RSI for example,\n // it looks ugly when \"80\" is near the top)\n return Utils.strip(Utils.nearest_a(m, s)[1])\n }\n\n function dollar_mult() {\n let mult_hi = dollar_mult_hi()\n let mult_lo = dollar_mult_lo()\n return Math.max(mult_hi, mult_lo)\n }\n\n // Price step multiplier (for the log-scale mode)\n function dollar_mult_hi() {\n\n let h = Math.min(self.B, height)\n if (h < $p.config.GRIDY) return 1\n let n = h / $p.config.GRIDY // target grid N\n let yrange = self.$_hi\n if (self.$_lo > 0) {\n var yratio = self.$_hi / self.$_lo\n } else {\n yratio = self.$_hi / 1 // TODO: small values\n }\n let m = yrange * ($p.config.GRIDY / h)\n let p = parseInt(yrange.toExponential().split('e')[1])\n return Math.pow(yratio, 1/n)\n }\n\n function dollar_mult_lo() {\n\n let h = Math.min(height - self.B, height)\n if (h < $p.config.GRIDY) return 1\n let n = h / $p.config.GRIDY // target grid N\n let yrange = Math.abs(self.$_lo)\n if (self.$_hi < 0 && self.$_lo < 0) {\n var yratio = Math.abs(self.$_lo / self.$_hi)\n } else {\n yratio = Math.abs(self.$_lo) / 1\n }\n let m = yrange * ($p.config.GRIDY / h)\n let p = parseInt(yrange.toExponential().split('e')[1])\n return Math.pow(yratio, 1/n)\n }\n\n function grid_x() {\n\n // If this is a subgrid, no need to calc a timeline,\n // we just borrow it from the master_grid\n if (!master_grid) {\n\n self.t_step = time_step()\n self.xs = []\n const dt = range[1] - range[0]\n const r = self.spacex / dt\n\n /* TODO: remove the left-side glitch\n\n let year_0 = Utils.get_year(sub[0][0])\n for (var t0 = year_0; t0 < range[0]; t0 += self.t_step) {}\n\n let m0 = Utils.get_month(t0)*/\n\n for (var i = 0; i < sub.length; i++) {\n let p = sub[i]\n let prev = sub[i-1] || []\n let prev_xs = self.xs[self.xs.length - 1] || [0,[]]\n let x = Math.floor((p[0] - range[0]) * r)\n\n insert_line(prev, p, x)\n\n // Filtering lines that are too near\n let xs = self.xs[self.xs.length - 1] || [0, []]\n\n if (prev_xs === xs) continue\n\n if (xs[1][0] - prev_xs[1][0] < self.t_step * 0.8) {\n\n // prev_xs is a higher \"rank\" label\n if (xs[2] <= prev_xs[2]) {\n self.xs.pop()\n } else {\n // Otherwise\n self.xs.splice(self.xs.length - 2, 1)\n }\n }\n }\n\n // TODO: fix grid extension for bigger timeframes\n if (interval < WEEK && r > 0) {\n extend_left(dt, r)\n extend_right(dt, r)\n }\n\n } else {\n\n self.t_step = master_grid.t_step\n self.px_step = master_grid.px_step\n self.startx = master_grid.startx\n self.xs = master_grid.xs\n\n }\n }\n\n function insert_line(prev, p, x, m0) {\n\n let prev_t = ti_map.ib ? ti_map.i2t(prev[0]) : prev[0]\n let p_t = ti_map.ib ? ti_map.i2t(p[0]) : p[0]\n\n if (ti_map.tf < DAY) {\n prev_t += timezone * HOUR\n p_t += timezone * HOUR\n }\n let d = timezone * HOUR\n\n // TODO: take this block =========> (see below)\n if ((prev[0] || interval === YEAR) &&\n Utils.get_year(p_t) !== Utils.get_year(prev_t)) {\n self.xs.push([x, p, YEAR]) // [px, [...], rank]\n }\n else if (prev[0] &&\n Utils.get_month(p_t) !== Utils.get_month(prev_t)) {\n self.xs.push([x, p, MONTH])\n }\n // TODO: should be added if this day !== prev day\n // And the same for 'botbar.js', TODO(*)\n else if (Utils.day_start(p_t) === p_t) {\n self.xs.push([x, p, DAY])\n }\n else if (p[0] % self.t_step === 0) {\n self.xs.push([x, p, interval])\n }\n }\n\n function extend_left(dt, r) {\n\n if (!self.xs.length || !isFinite(r)) return\n\n let t = self.xs[0][1][0]\n while (true) {\n t -= self.t_step\n let x = Math.floor((t - range[0]) * r)\n if (x < 0) break\n // TODO: ==========> And insert it here somehow\n if (t % interval === 0) {\n self.xs.unshift([x,[t], interval])\n }\n }\n }\n\n function extend_right(dt, r) {\n\n if (!self.xs.length || !isFinite(r)) return\n\n let t = self.xs[self.xs.length - 1][1][0]\n while (true) {\n t += self.t_step\n let x = Math.floor((t - range[0]) * r)\n if (x > self.spacex) break\n if (t % interval === 0) {\n self.xs.push([x,[t], interval])\n }\n }\n }\n\n function grid_y() {\n\n // Prevent duplicate levels\n let m = Math.pow(10, -self.prec)\n self.$_step = Math.max(m, dollar_step())\n self.ys = []\n\n let y1 = self.$_lo - self.$_lo % self.$_step\n\n for (var y$ = y1; y$ <= self.$_hi; y$ += self.$_step) {\n let y = Math.floor(y$ * self.A + self.B)\n if (y > height) continue\n self.ys.push([y, Utils.strip(y$)])\n }\n\n }\n\n function grid_y_log() {\n\n // TODO: Prevent duplicate levels, is this even\n // a problem here ?\n self.$_mult = dollar_mult()\n self.ys = []\n\n if (!sub.length) return\n\n let v = Math.abs(sub[sub.length - 1][1] || 1)\n let y1 = search_start_pos(v)\n let y2 = search_start_neg(-v)\n let yp = -Infinity // Previous y value\n let n = height / $p.config.GRIDY // target grid N\n\n let q = 1 + (self.$_mult - 1) / 2\n\n // Over 0\n for (var y$ = y1; y$ > 0; y$ /= self.$_mult) {\n y$ = log_rounder(y$, q)\n let y = Math.floor(math.log(y$) * self.A + self.B)\n self.ys.push([y, Utils.strip(y$)])\n if (y > height) break\n if (y - yp < $p.config.GRIDY * 0.7) break\n if (self.ys.length > n + 1) break\n yp = y\n }\n\n // Under 0\n yp = Infinity\n for (var y$ = y2; y$ < 0; y$ /= self.$_mult) {\n y$ = log_rounder(y$, q)\n let y = Math.floor(math.log(y$) * self.A + self.B)\n if (yp - y < $p.config.GRIDY * 0.7) break\n self.ys.push([y, Utils.strip(y$)])\n if (y < 0) break\n if (self.ys.length > n * 3 + 1) break\n yp = y\n }\n\n // TODO: remove lines near to 0\n\n }\n\n // Search a start for the top grid so that\n // the fixed value always included\n function search_start_pos(value) {\n let N = height / $p.config.GRIDY // target grid N\n var y = Infinity, y$ = value, count = 0\n while (y > 0) {\n y = Math.floor(math.log(y$) * self.A + self.B)\n y$ *= self.$_mult\n if (count++ > N * 3) return 0 // Prevents deadloops\n }\n return y$\n }\n\n function search_start_neg(value) {\n let N = height / $p.config.GRIDY // target grid N\n var y = -Infinity, y$ = value, count = 0\n while (y < height) {\n y = Math.floor(math.log(y$) * self.A + self.B)\n y$ *= self.$_mult\n if (count++ > N * 3) break // Prevents deadloops\n }\n return y$\n }\n\n // Make log scale levels look great again\n function log_rounder(x, quality) {\n let s = Math.sign(x)\n x = Math.abs(x)\n if (x > 10) {\n for (var div = 10; div < MAX_INT; div *= 10) {\n let nice = Math.floor(x / div) * div\n if (x / nice > quality) { // More than 10% off\n break\n }\n }\n div /= 10\n return s * Math.floor(x / div) * div\n } else if (x < 1) {\n for (var ro = 10; ro >= 1; ro--) {\n let nice = Utils.round(x, ro)\n if (x / nice > quality) { // More than 10% off\n break\n }\n }\n return s * Utils.round(x, ro + 1)\n } else {\n return s * Math.floor(x)\n }\n }\n\n function apply_sizes() {\n self.width = $p.width - self.sb\n self.height = height\n }\n\n calc_$range()\n calc_sidebar()\n\n return {\n // First we need to calculate max sidebar width\n // (among all grids). Then we can actually make\n // them\n create: () => {\n calc_positions()\n grid_x()\n if (grid.logScale) {\n grid_y_log()\n } else {\n grid_y()\n }\n apply_sizes()\n\n // Link to the master grid (candlesticks)\n if (master_grid) {\n self.master_grid = master_grid\n }\n\n self.grid = grid // Grid params\n\n // Here we add some helpful functions for\n // plugin creators\n return layout_fn(self, range)\n\n },\n get_layout: () => self,\n set_sidebar: v => self.sb = v,\n get_sidebar: () => self.sb,\n }\n}\n\nexport default GridMaker\n","// Calculates all necessary s*it to build the chart\n// Heights, widths, transforms, ... = everything\n// Why such a mess you ask? Well, that's because\n// one components size can depend on other component\n// data formatting (e.g. grid width depends on sidebar precision)\n// So it's better to calc all in one place.\n\nimport GridMaker from './grid_maker.js'\nimport Utils from '../../stuff/utils.js'\nimport math from '../../stuff/math.js'\nimport log_scale from './log_scale.js'\n\nfunction Layout(params) {\n\n let {\n chart, sub, offsub, interval, range, ctx, layers_meta,\n ti_map, $props:$p, y_transforms: y_ts\n } = params\n\n let mgrid = chart.grid || {}\n\n offsub = offsub.filter((x, i) => {\n // Skip offchart overlays with custom grid id,\n // because they will be mergred with the existing grids\n return !(x.grid && x.grid.id)\n })\n\n // Splits space between main chart\n // and offchart indicator grids\n function grid_hs() {\n\n const height = $p.height - $p.config.BOTBAR\n\n // When at least one height defined (default = 1),\n // Pxs calculated as: (sum of weights) / number\n if (mgrid.height || offsub.find(x => x.grid.height)) {\n return weighted_hs(mgrid, height)\n }\n\n const n = offsub.length\n const off_h = (2 * Math.sqrt(n) / 7) / (n || 1)\n\n // Offchart grid height\n const px = Math.floor(height * off_h)\n\n // Main grid height\n const m = height - px * n\n return [m].concat(Array(n).fill(px))\n\n }\n\n function weighted_hs(grid, height) {\n let hs = [{grid}, ...offsub].map(x => x.grid.height || 1)\n let sum = hs.reduce((a, b) => a + b, 0)\n hs = hs.map(x => Math.floor((x / sum) * height))\n\n // Refine the height if Math.floor decreased px sum\n sum = hs.reduce((a, b) => a + b, 0)\n for (var i = 0; i < height - sum; i++) hs[i % hs.length]++\n return hs\n }\n\n function candles_n_vol() {\n\n self.candles = []\n self.volume = []\n\n let maxv = Math.max(...sub.map(x => x[5]))\n let vs = $p.config.VOLSCALE * $p.height / maxv\n var x1, x2, mid, prev = undefined\n\n let splitter = self.px_step > 5 ? 1 : 0\n let hf_px_step = self.px_step * 0.5\n\n for (var i = 0; i < sub.length; i++) {\n let p = sub[i]\n mid = self.t2screen(p[0]) + 0.5\n self.candles.push(mgrid.logScale ?\n log_scale.candle(self, mid, p, $p): {\n x: mid,\n w: self.px_step * $p.config.CANDLEW,\n o: Math.floor(p[1] * self.A + self.B),\n h: Math.floor(p[2] * self.A + self.B),\n l: Math.floor(p[3] * self.A + self.B),\n c: Math.floor(p[4] * self.A + self.B),\n raw: p\n })\n // Clear volume bar if there is a time gap\n if (sub[i-1] && p[0] - sub[i-1][0] > interval) {\n prev = null\n }\n x1 = prev || Math.floor(mid - hf_px_step)\n x2 = Math.floor(mid + hf_px_step) - 0.5\n self.volume.push({\n x1: x1,\n x2: x2,\n h: p[5] * vs,\n green: p[4] >= p[1],\n raw: p\n })\n prev = x2 + splitter\n }\n }\n\n // Main grid\n const hs = grid_hs()\n let specs = {\n sub, interval, range, ctx, $p, layers_meta,\n ti_map, height: hs[0], y_t: y_ts[0],\n grid: mgrid, timezone: $p.timezone\n }\n let gms = [new GridMaker(0, specs)]\n\n // Sub grids\n for (var [i, { data, grid }] of offsub.entries()) {\n specs.sub = data\n specs.height = hs[i + 1]\n specs.y_t = y_ts[i + 1]\n specs.grid = grid || {}\n gms.push(new GridMaker(i + 1, specs, gms[0].get_layout()))\n }\n\n // Max sidebar among all grinds\n let sb = Math.max(...gms.map(x => x.get_sidebar()))\n\n let grids = [], offset = 0\n\n for (i = 0; i < gms.length; i++) {\n gms[i].set_sidebar(sb)\n grids.push(gms[i].create())\n grids[i].id = i\n grids[i].offset = offset\n offset += grids[i].height\n }\n\n let self = grids[0]\n\n candles_n_vol()\n\n return {\n grids: grids,\n botbar: {\n width: $p.width,\n height: $p.config.BOTBAR,\n offset: offset,\n xs: grids[0] ? grids[0].xs : []\n }\n }\n}\n\nexport default Layout\n","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","// Cursor updater: calculates current values for\n// OHLCV and all other indicators\n\nimport Utils from '../../stuff/utils.js'\n\nclass CursorUpdater {\n\n constructor(comp) {\n this.comp = comp, this.grids = comp._layout.grids,\n this.cursor = comp.cursor\n }\n\n sync(e) {\n // TODO: values not displaying if a custom grid id is set:\n // grid: { id: N }\n this.cursor.grid_id = e.grid_id\n let once = true\n for (var grid of this.grids) {\n const c = this.cursor_data(grid, e)\n if (!this.cursor.locked) {\n // TODO: find a better fix to invisible cursor prob\n if (once) {\n this.cursor.t = this.cursor_time(grid, e, c)\n if (this.cursor.t) once = false\n }\n if(c.values) {\n this.comp.$set(this.cursor.values, grid.id, c.values)\n }\n }\n if (grid.id !== e.grid_id) continue\n this.cursor.x = grid.t2screen(this.cursor.t)\n this.cursor.y = c.y\n this.cursor.y$ = c.y$\n }\n }\n\n overlay_data(grid, e) {\n\n const s = grid.id === 0 ? 'main_section' : 'sub_section'\n let data = this.comp[s].data\n\n // Split offchart data between offchart grids\n if (grid.id > 0) {\n // Sequential grids\n let d = data.filter(x => x.grid.id === undefined)\n // grids with custom ids (for merging)\n let m = data.filter(x => x.grid.id === grid.id)\n data = [d[grid.id - 1], ...m]\n }\n\n const t = grid.screen2t(e.x)\n let ids = {}, res = {}\n for (var d of data) {\n let ts = d.data.map(x => x[0])\n let i = Utils.nearest_a(t, ts)[0]\n d.type in ids ? (ids[d.type]++) : (ids[d.type] = 0)\n res[`${d.type}_${ids[d.type]}`] = d.data[i]\n }\n return res\n\n }\n\n // Nearest datapoints\n cursor_data(grid, e) {\n\n const data = this.comp.main_section.sub\n\n let xs = data.map(x => grid.t2screen(x[0]) + 0.5)\n let i = Utils.nearest_a(e.x, xs)[0]\n if (!xs[i]) return {}\n return {\n x: Math.floor(xs[i]) - 0.5,\n y: Math.floor(e.y - 2) - 0.5 - grid.offset,\n y$: grid.screen2$(e.y - 2 - grid.offset),\n t: (data[i] || [])[0],\n values: Object.assign({\n ohlcv: grid.id === 0 ? data[i] : undefined\n },\n this.overlay_data(grid, e))\n }\n }\n\n // Get cursor t-position (extended)\n cursor_time(grid, mouse, candle) {\n let t = grid.screen2t(mouse.x)\n let r = Math.abs((t - candle.t) / this.comp.interval)\n let sign = Math.sign(t - candle.t)\n if (r >= 0.5) {\n // Outside the data range\n let n = Math.round(r)\n return candle.t + n * this.comp.interval * sign\n }\n // Inside the data range\n return candle.t\n }\n\n}\n\nexport default CursorUpdater\n","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"trading-vue-section\" },\n [\n _c(\"chart-legend\", {\n ref: \"legend\",\n attrs: {\n values: _vm.section_values,\n grid_id: _vm.grid_id,\n common: _vm.legend_props,\n meta_props: _vm.get_meta_props\n },\n on: { \"legend-button-click\": _vm.button_click }\n }),\n _vm._v(\" \"),\n _c(\n \"grid\",\n _vm._b(\n {\n ref: \"grid\",\n attrs: { grid_id: _vm.grid_id },\n on: {\n \"register-kb-listener\": _vm.register_kb,\n \"remove-kb-listener\": _vm.remove_kb,\n \"range-changed\": _vm.range_changed,\n \"cursor-changed\": _vm.cursor_changed,\n \"cursor-locked\": _vm.cursor_locked,\n \"layer-meta-props\": _vm.emit_meta_props,\n \"custom-event\": _vm.emit_custom_event,\n \"sidebar-transform\": _vm.sidebar_transform,\n \"rezoom-range\": _vm.rezoom_range\n }\n },\n \"grid\",\n _vm.grid_props,\n false\n )\n ),\n _vm._v(\" \"),\n _c(\n \"sidebar\",\n _vm._b(\n {\n ref: \"sb-\" + _vm.grid_id,\n attrs: { grid_id: _vm.grid_id, rerender: _vm.rerender },\n on: { \"sidebar-transform\": _vm.sidebar_transform }\n },\n \"sidebar\",\n _vm.sidebar_props,\n false\n )\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n// Annimation frame with a fallback for\n// slower devices\n\nimport Utils from './utils.js'\n\nexport default class FrameAnimation {\n constructor(cb) {\n\n this.t0 = this.t = Utils.now()\n this.id = setInterval(() => {\n // The prev frame took too long\n if (Utils.now() - this.t > 100) return\n if (Utils.now() - this.t0 > 1200) {\n this.stop()\n }\n if (this.id) cb(this)\n this.t = Utils.now()\n }, 16)\n }\n stop() {\n clearInterval(this.id)\n this.id = null\n }\n}\n","// Grid.js listens to various user-generated events,\n// emits Vue-events if something has changed (e.g. range)\n// Think of it as an I/O system for Grid.vue\n\nimport FrameAnimation from '../../stuff/frame.js'\nimport * as Hammer from 'hammerjs'\nimport Hamster from 'hamsterjs'\nimport Utils from '../../stuff/utils.js'\nimport math from '../../stuff/math.js'\n\n// Grid is good.\nexport default class Grid {\n\n constructor(canvas, comp) {\n\n this.MIN_ZOOM = comp.config.MIN_ZOOM\n this.MAX_ZOOM = comp.config.MAX_ZOOM\n\n if (Utils.is_mobile) this.MIN_ZOOM *= 0.5\n\n this.canvas = canvas\n this.ctx = canvas.getContext('2d')\n this.comp = comp\n this.$p = comp.$props\n this.data = this.$p.sub\n this.range = this.$p.range\n this.id = this.$p.grid_id\n this.layout = this.$p.layout.grids[this.id]\n this.interval = this.$p.interval\n this.cursor = comp.$props.cursor\n this.offset_x = 0\n this.offset_y = 0\n this.deltas = 0 // Wheel delta events\n this.wmode = this.$p.config.SCROLL_WHEEL\n\n this.listeners()\n this.overlays = []\n\n }\n\n listeners() {\n\n this.hm = Hamster(this.canvas)\n this.hm.wheel((event, delta) => this.mousezoom(-delta * 50, event))\n\n let mc = this.mc = new Hammer.Manager(this.canvas)\n let T = Utils.is_mobile ? 10 : 0\n mc.add(new Hammer.Pan({ threshold: T}))\n mc.add(new Hammer.Tap())\n mc.add(new Hammer.Pinch({ threshold: 0}))\n mc.get('pinch').set({ enable: true })\n if (Utils.is_mobile) mc.add(new Hammer.Press())\n\n mc.on('panstart', event => {\n if (this.cursor.scroll_lock) return\n if (this.cursor.mode === 'aim') {\n return this.emit_cursor_coord(event)\n }\n let tfrm = this.$p.y_transform\n this.drug = {\n x: event.center.x + this.offset_x,\n y: event.center.y + this.offset_y,\n r: this.range.slice(),\n t: this.range[1] - this.range[0],\n o: tfrm ?\n (tfrm.offset || 0) : 0,\n y_r: tfrm && tfrm.range ?\n tfrm.range.slice() : undefined,\n B: this.layout.B,\n t0: Utils.now()\n }\n this.comp.$emit('cursor-changed', {\n grid_id: this.id,\n x: event.center.x + this.offset_x,\n y: event.center.y + this.offset_y\n })\n this.comp.$emit('cursor-locked', true)\n })\n\n mc.on('panmove', event => {\n if (Utils.is_mobile) {\n this.calc_offset()\n this.propagate('mousemove', this.touch2mouse(event))\n }\n if (this.drug) {\n this.mousedrag(\n this.drug.x + event.deltaX,\n this.drug.y + event.deltaY,\n )\n this.comp.$emit('cursor-changed', {\n grid_id: this.id,\n x: event.center.x + this.offset_x,\n y: event.center.y + this.offset_y\n })\n } else if (this.cursor.mode === 'aim') {\n this.emit_cursor_coord(event)\n }\n })\n\n mc.on('panend', event => {\n if (Utils.is_mobile && this.drug) {\n this.pan_fade(event)\n }\n this.drug = null\n this.comp.$emit('cursor-locked', false)\n })\n\n mc.on('tap', event => {\n if (!Utils.is_mobile) return\n this.sim_mousedown(event)\n if (this.fade) this.fade.stop()\n this.comp.$emit('cursor-changed', {})\n this.comp.$emit('cursor-changed', {\n /*grid_id: this.id,\n x: undefined,//event.center.x + this.offset_x,\n y: undefined,//event.center.y + this.offset_y,*/\n mode: 'explore'\n })\n this.update()\n })\n\n mc.on('pinchstart', () => {\n this.drug = null\n this.pinch = {\n t: this.range[1] - this.range[0],\n r: this.range.slice()\n }\n })\n\n mc.on('pinchend', () => {\n this.pinch = null\n })\n\n mc.on('pinch', event => {\n if (this.pinch) this.pinchzoom(event.scale)\n })\n\n mc.on('press', event => {\n if (!Utils.is_mobile) return\n if (this.fade) this.fade.stop()\n this.calc_offset()\n this.emit_cursor_coord(event, { mode: 'aim' })\n setTimeout(() => this.update())\n this.sim_mousedown(event)\n })\n\n let add = addEventListener\n add(\"gesturestart\", this.gesturestart)\n add(\"gesturechange\", this.gesturechange)\n add(\"gestureend\", this.gestureend)\n\n }\n\n gesturestart(event) { event.preventDefault() }\n gesturechange(event) { event.preventDefault() }\n gestureend(event) { event.preventDefault() }\n\n mousemove(event) {\n if (Utils.is_mobile) return\n this.comp.$emit('cursor-changed', {\n grid_id: this.id,\n x: event.layerX,\n y: event.layerY + this.layout.offset\n })\n this.calc_offset()\n this.propagate('mousemove', event)\n }\n\n mouseout(event) {\n if (Utils.is_mobile) return\n this.comp.$emit('cursor-changed', {})\n this.propagate('mouseout', event)\n }\n\n mouseup(event) {\n this.drug = null\n this.comp.$emit('cursor-locked', false)\n this.propagate('mouseup', event)\n }\n\n mousedown(event) {\n if (Utils.is_mobile) return\n this.propagate('mousedown', event)\n this.comp.$emit('cursor-locked', true)\n if (event.defaultPrevented) return\n this.comp.$emit('custom-event', {\n event: 'grid-mousedown', args: [this.id, event]\n })\n }\n\n // Simulated mousedown (for mobile)\n sim_mousedown(event) {\n if (event.srcEvent.defaultPrevented) return\n this.comp.$emit('custom-event', {\n event: 'grid-mousedown',\n args: [this.id, event]\n })\n this.propagate('mousemove', this.touch2mouse(event))\n this.update()\n this.propagate('mousedown', this.touch2mouse(event))\n setTimeout(() => {\n this.propagate('click', this.touch2mouse(event))\n })\n }\n\n // Convert touch to \"mouse\" event\n touch2mouse(e) {\n this.calc_offset()\n return {\n original: e.srcEvent,\n layerX: e.center.x + this.offset_x,\n layerY: e.center.y + this.offset_y,\n preventDefault: function() {\n this.original.preventDefault()\n }\n }\n }\n\n click(event) {\n this.propagate('click', event)\n }\n\n emit_cursor_coord(event, add = {}) {\n this.comp.$emit('cursor-changed', Object.assign({\n grid_id: this.id,\n x: event.center.x + this.offset_x,\n y: event.center.y + this.offset_y + this.layout.offset\n }, add))\n }\n\n pan_fade(event) {\n let dt = Utils.now() - this.drug.t0\n let dx = this.range[1] - this.drug.r[1]\n let v = 42 * dx / dt\n let v0 = Math.abs(v * 0.01)\n if (dt > 500) return\n if (this.fade) this.fade.stop()\n this.fade = new FrameAnimation(self => {\n v *= 0.85\n if (Math.abs(v) < v0) {\n self.stop()\n }\n this.range[0] += v\n this.range[1] += v\n this.change_range()\n })\n }\n\n calc_offset() {\n let rect = this.canvas.getBoundingClientRect()\n this.offset_x = -rect.x\n this.offset_y = -rect.y\n }\n\n new_layer(layer) {\n if (layer.name === 'crosshair') {\n this.crosshair = layer\n } else {\n this.overlays.push(layer)\n }\n this.update()\n }\n\n del_layer(id) {\n this.overlays = this.overlays.filter(x => x.id !== id)\n this.update()\n }\n\n show_hide_layer(event) {\n let l = this.overlays.filter(x => x.id === event.id)\n if (l.length) l[0].display = event.display\n }\n\n update() {\n // Update reference to the grid\n // TODO: check what happens if data changes interval\n this.layout = this.$p.layout.grids[this.id]\n this.interval = this.$p.interval\n\n if (!this.layout) return\n\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height)\n if (this.$p.shaders.length) this.apply_shaders()\n\n this.grid()\n\n let overlays = []\n overlays.push(...this.overlays)\n\n // z-index sorting\n overlays.sort((l1, l2) => l1.z - l2.z)\n\n overlays.forEach(l => {\n if (!l.display) return\n this.ctx.save()\n let r = l.renderer\n if (r.pre_draw) r.pre_draw(this.ctx)\n r.draw(this.ctx)\n if (r.post_draw) r.post_draw(this.ctx)\n this.ctx.restore()\n })\n\n if (this.crosshair) {\n this.crosshair.renderer.draw(this.ctx)\n }\n }\n\n apply_shaders() {\n let layout = this.$p.layout.grids[this.id]\n let props = {\n layout: layout,\n range: this.range,\n interval: this.interval,\n tf: layout.ti_map.tf,\n cursor: this.cursor,\n colors: this.$p.colors,\n sub: this.data,\n font: this.$p.font,\n config: this.$p.config,\n meta: this.$p.meta\n }\n for (var s of this.$p.shaders) {\n this.ctx.save()\n s.draw(this.ctx, props)\n this.ctx.restore()\n }\n }\n\n // Actually draws the grid (for real)\n grid() {\n\n this.ctx.strokeStyle = this.$p.colors.grid\n this.ctx.beginPath()\n\n const ymax = this.layout.height\n for (var [x, p] of this.layout.xs) {\n\n this.ctx.moveTo(x - 0.5, 0)\n this.ctx.lineTo(x - 0.5, ymax)\n\n }\n\n for (var [y, y$] of this.layout.ys) {\n\n this.ctx.moveTo(0, y - 0.5)\n this.ctx.lineTo(this.layout.width, y - 0.5)\n\n }\n\n this.ctx.stroke()\n\n if (this.$p.grid_id) this.upper_border()\n\n }\n\n upper_border() {\n this.ctx.strokeStyle = this.$p.colors.scale\n this.ctx.beginPath()\n this.ctx.moveTo(0, 0.5)\n this.ctx.lineTo(this.layout.width, 0.5)\n this.ctx.stroke()\n }\n\n mousezoom(delta, event) {\n\n // TODO: for mobile\n if (this.wmode !== 'pass') {\n if (this.wmode === 'click' && !this.$p.meta.activated) {\n return\n }\n event.originalEvent.preventDefault()\n event.preventDefault()\n }\n\n event.deltaX = event.deltaX || Utils.get_deltaX(event)\n event.deltaY = event.deltaY || Utils.get_deltaY(event)\n\n if (Math.abs(event.deltaX) > 0) {\n this.trackpad = true\n if (Math.abs(event.deltaX) >= Math.abs(event.deltaY)) {\n delta *= 0.1\n }\n this.trackpad_scroll(event)\n }\n\n if (this.trackpad) delta *= 0.032\n\n delta = Utils.smart_wheel(delta)\n\n // TODO: mouse zooming is a little jerky,\n // needs to follow f(mouse_wheel_speed) and\n // if speed is low, scroll shoud be slower\n if (delta < 0 && this.data.length <= this.MIN_ZOOM) return\n if (delta > 0 && this.data.length > this.MAX_ZOOM) return\n let k = this.interval / 1000\n let diff = delta * k * this.data.length\n let tl = this.comp.config.ZOOM_MODE === 'tl'\n if (event.originalEvent.ctrlKey || tl) {\n let offset = event.originalEvent.offsetX\n let diff1 = offset / (this.canvas.width-1) * diff\n let diff2 = diff - diff1\n this.range[0] -= diff1\n this.range[1] += diff2\n } else {\n this.range[0] -= diff\n }\n\n if (tl) {\n let offset = event.originalEvent.offsetY\n let diff1 = offset / (this.canvas.height-1) * 2\n let diff2 = 2 - diff1\n let z = diff / (this.range[1] - this.range[0])\n //rezoom_range(z, diff_x, diff_y)\n this.comp.$emit('rezoom-range', {\n grid_id: this.id, z, diff1, diff2\n })\n }\n\n this.change_range()\n\n }\n\n mousedrag(x, y) {\n\n let dt = this.drug.t * (this.drug.x - x) / this.layout.width\n\n let d$ = this.layout.$_hi - this.layout.$_lo\n d$ *= (this.drug.y - y) / this.layout.height\n let offset = this.drug.o + d$\n\n let ls = this.layout.grid.logScale\n\n if (ls && this.drug.y_r) {\n let dy = this.drug.y - y\n var range = this.drug.y_r.slice()\n range[0] = math.exp((0 - this.drug.B + dy) /\n this.layout.A)\n range[1] = math.exp(\n (this.layout.height - this.drug.B + dy) /\n this.layout.A)\n }\n\n if (this.drug.y_r && this.$p.y_transform &&\n !this.$p.y_transform.auto) {\n this.comp.$emit('sidebar-transform', {\n grid_id: this.id,\n range: ls ? (range || this.drug.y_r) : [\n this.drug.y_r[0] - offset,\n this.drug.y_r[1] - offset,\n ]\n })\n }\n\n this.range[0] = this.drug.r[0] + dt\n this.range[1] = this.drug.r[1] + dt\n\n this.change_range()\n\n }\n\n pinchzoom(scale) {\n\n if (scale > 1 && this.data.length <= this.MIN_ZOOM) return\n if (scale < 1 && this.data.length > this.MAX_ZOOM) return\n\n let t = this.pinch.t\n let nt = t * 1 / scale\n\n this.range[0] = this.pinch.r[0] - (nt - t) * 0.5\n this.range[1] = this.pinch.r[1] + (nt - t) * 0.5\n\n this.change_range()\n\n }\n\n trackpad_scroll(event) {\n\n let dt = this.range[1] - this.range[0]\n\n this.range[0] += event.deltaX * dt * 0.011\n this.range[1] += event.deltaX * dt * 0.011\n\n this.change_range()\n\n\n }\n\n change_range() {\n\n // TODO: better way to limit the view. Problem:\n // when you are at the dead end of the data,\n // and keep scrolling,\n // the chart continues to scale down a little.\n // Solution: I don't know yet\n\n if (!this.range.length || this.data.length < 2) return\n\n let l = this.data.length - 1\n let data = this.data\n let range = this.range\n\n range[0] = Utils.clamp(\n range[0],\n -Infinity, data[l][0] - this.interval * 5.5,\n )\n\n range[1] = Utils.clamp(\n range[1],\n data[0][0] + this.interval * 5.5, Infinity\n )\n\n // TODO: IMPORTANT scrolling is jerky The Problem caused\n // by the long round trip of 'range-changed' event.\n // First it propagates up to update layout in Chart.vue,\n // then it moves back as watch() update. It takes 1-5 ms.\n // And because the delay is different each time we see\n // the lag. No smooth movement and it's annoying.\n // Solution: we could try to calc the layout immediatly\n // somewhere here. Still will hurt the sidebar & bottombar\n this.comp.$emit('range-changed', range)\n }\n\n // Propagate mouse event to overlays\n propagate(name, event) {\n for (var layer of this.overlays) {\n if (layer.renderer[name]) {\n layer.renderer[name](event)\n }\n const mouse = layer.renderer.mouse\n const keys = layer.renderer.keys\n if (mouse.listeners) {\n mouse.emit(name, event)\n }\n if (keys && keys.listeners) {\n keys.emit(name, event)\n }\n }\n }\n\n destroy() {\n let rm = removeEventListener\n rm(\"gesturestart\", this.gesturestart)\n rm(\"gesturechange\", this.gesturechange)\n rm(\"gestureend\", this.gestureend)\n if (this.mc) this.mc.destroy()\n if (this.hm) this.hm.unwheel()\n }\n}\n","// Interactive canvas-based component\n// Should implement: mousemove, mouseout, mouseup, mousedown, click\n\nimport Utils from '../stuff/utils.js'\n\nexport default {\n methods: {\n setup() {\n const id = `${this.$props.tv_id}-${this._id}-canvas`\n const canvas = document.getElementById(id)\n let dpr = window.devicePixelRatio || 1\n canvas.style.width = `${this._attrs.width}px`\n canvas.style.height = `${this._attrs.height}px`\n if (dpr < 1) dpr = 1 // Realy ? That's it? Issue #63\n this.$nextTick(() => {\n var rect = canvas.getBoundingClientRect()\n canvas.width = rect.width * dpr\n canvas.height = rect.height * dpr\n const ctx = canvas.getContext('2d', {\n // TODO: test the boost:\n //alpha: false,\n //desynchronized: true,\n //preserveDrawingBuffer: false\n })\n ctx.scale(dpr, dpr)\n this.redraw()\n // Fallback fix for Brave browser\n // https://github.com/brave/brave-browser/issues/1738\n if (!ctx.measureTextOrg) {\n ctx.measureTextOrg = ctx.measureText\n }\n ctx.measureText = text =>\n Utils.measureText(ctx, text, this.$props.tv_id)\n })\n },\n create_canvas(h, id, props) {\n this._id = id\n this._attrs = props.attrs\n return h('div', {\n class: `trading-vue-${id}`,\n style: {\n left: props.position.x + 'px',\n top: props.position.y + 'px',\n position: 'absolute',\n }\n }, [\n h('canvas', {\n on: {\n mousemove: e => this.renderer.mousemove(e),\n mouseout: e => this.renderer.mouseout(e),\n mouseup: e => this.renderer.mouseup(e),\n mousedown: e => this.renderer.mousedown(e)\n },\n attrs: Object.assign({\n id: `${this.$props.tv_id}-${id}-canvas`\n }, props.attrs),\n ref: 'canvas',\n style: props.style,\n })\n ].concat(props.hs || []))\n },\n redraw() {\n if (!this.renderer) return\n this.renderer.update()\n }\n },\n watch: {\n width(val) {\n this._attrs.width = val\n this.setup()\n },\n height(val) {\n this._attrs.height = val\n this.setup()\n }\n }\n}\n","\n// Manager for Inteerface objects\n\nexport default {\n methods: {\n on_ux_event(d, target) {\n if (d.event === 'new-interface') {\n if (d.args[0].target === target) {\n d.args[0].vars = d.args[0].vars || {}\n d.args[0].grid_id = d.args[1]\n d.args[0].overlay_id = d.args[2]\n this.uxs.push(d.args[0])\n // this.rerender++\n }\n }\n else if (d.event === 'close-interface') {\n this.uxs = this.uxs\n .filter(x => x.uuid !== d.args[0])\n }\n else if (d.event === 'modify-interface') {\n let ux = this.uxs\n .filter(x => x.uuid === d.args[0])\n\n if (ux.length) {\n this.modify(ux[0], d.args[1])\n }\n }\n else if (d.event === 'hide-interface') {\n let ux = this.uxs\n .filter(x => x.uuid === d.args[0])\n\n if (ux.length) {\n ux[0].hidden = true\n this.modify(ux[0], { hidden: true })\n }\n }\n else if (d.event === 'show-interface') {\n let ux = this.uxs\n .filter(x => x.uuid === d.args[0])\n\n if (ux.length) {\n this.modify(ux[0], { hidden: false })\n }\n }\n else {\n return d\n }\n },\n modify(ux, obj = {}) {\n for (var k in obj) {\n if (k in ux) {\n this.$set(ux, k, obj[k])\n }\n }\n },\n // Remove all UXs for a given overlay id\n remove_all_ux(id) {\n this.uxs = this.uxs.filter(\n x => x.overlay.id !== id)\n }\n },\n data() { return { uxs: [] } }\n}\n","\n\nexport default class Crosshair {\n\n constructor(comp) {\n\n this.comp = comp\n this.$p = comp.$props\n this.data = this.$p.sub\n this._visible = false\n this.locked = false\n this.layout = this.$p.layout\n\n }\n\n draw(ctx) {\n // Update reference to the grid\n this.layout = this.$p.layout\n\n const cursor = this.comp.$props.cursor\n if (!this.visible && cursor.mode === 'explore') return\n\n this.x = this.$p.cursor.x\n this.y = this.$p.cursor.y\n\n ctx.save()\n ctx.strokeStyle = this.$p.colors.cross\n ctx.beginPath()\n ctx.setLineDash([5])\n\n // H\n if (this.$p.cursor.grid_id === this.layout.id) {\n ctx.moveTo(0, this.y)\n ctx.lineTo(this.layout.width - 0.5, this.y)\n }\n\n // V\n ctx.moveTo(this.x, 0)\n ctx.lineTo(this.x, this.layout.height)\n ctx.stroke()\n ctx.restore()\n\n }\n\n hide() {\n this.visible = false\n this.x = undefined\n this.y = undefined\n }\n\n get visible() {\n return this._visible\n }\n\n set visible(val) {\n this._visible = val\n }\n\n}\n","<script>\n\nimport Crosshair from './js/crosshair.js'\nimport Utils from '../stuff/utils.js'\n\nexport default {\n name: 'Crosshair',\n props: [ 'cursor', 'colors', 'layout', 'sub' ],\n methods: {\n create() {\n this.ch = new Crosshair(this)\n\n // New grid overlay-renderer descriptor.\n // Should implement draw() (see Spline.vue)\n this.$emit('new-grid-layer', {\n name: 'crosshair',\n renderer: this.ch\n })\n }\n },\n watch: {\n cursor: {\n handler: function() {\n\n if (!this.ch) this.create()\n\n // Explore = default mode on mobile\n const cursor = this.$props.cursor\n const explore = cursor.mode === 'explore'\n\n if (!cursor.x || !cursor.y) {\n this.ch.hide()\n this.$emit('redraw-grid')\n return\n }\n this.ch.visible = !explore\n },\n deep: true\n }\n },\n render(h) { return h() }\n}\n</script>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Crosshair.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Crosshair.vue?vue&type=script&lang=js&\"","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","var render, staticRenderFns\nimport script from \"./Crosshair.vue?vue&type=script&lang=js&\"\nexport * from \"./Crosshair.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('5d394f22')) {\n api.createRecord('5d394f22', component.options)\n } else {\n api.reload('5d394f22', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"src/components/Crosshair.vue\"\nexport default component.exports","\n<!-- Waits for an event from Keyboard.vue\n and converts it to a Vue.js event -->\n\n<script>\n\nexport default {\n name: 'KeyboardListener',\n render(h) { return h() },\n created: function () {\n this.$emit('register-kb-listener', {\n id: this._uid,\n keydown: this.keydown,\n keyup: this.keyup,\n keypress: this.keypress\n })\n },\n beforeDestroy: function () {\n this.$emit('remove-kb-listener', {\n id: this._uid\n })\n },\n methods: {\n keydown (event) {\n this.$emit('keydown', event)\n },\n keyup (event) {\n this.$emit('keyup', event)\n },\n keypress (event) {\n this.$emit('keypress', event)\n },\n }\n}\n\n</script>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./KeyboardListener.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./KeyboardListener.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./KeyboardListener.vue?vue&type=script&lang=js&\"\nexport * from \"./KeyboardListener.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('280f0f2a')) {\n api.createRecord('280f0f2a', component.options)\n } else {\n api.reload('280f0f2a', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"src/components/KeyboardListener.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"span\",\n { class: \"trading-vue-grid-ux-\" + _vm.id, style: _vm.style },\n _vm._l(_vm.uxs, function(ux) {\n return _c(\"ux-wrapper\", {\n key: ux.uuid,\n attrs: {\n ux: ux,\n updater: _vm.updater,\n colors: _vm.colors,\n config: _vm.config\n },\n on: { \"custom-event\": _vm.on_custom_event }\n })\n }),\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.visible\n ? _c(\n \"div\",\n {\n staticClass: \"trading-vue-ux-wrapper\",\n style: _vm.style,\n attrs: { id: \"tvjs-ux-wrapper-\" + _vm.ux.uuid }\n },\n [\n _c(_vm.ux.component, {\n tag: \"component\",\n attrs: {\n ux: _vm.ux,\n updater: _vm.updater,\n wrapper: _vm.wrapper,\n colors: _vm.colors\n },\n on: { \"custom-event\": _vm.on_custom_event }\n }),\n _vm._v(\" \"),\n _vm.ux.show_pin\n ? _c(\"div\", {\n staticClass: \"tvjs-ux-wrapper-pin\",\n style: _vm.pin_style\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.ux.win_header !== false\n ? _c(\"div\", { staticClass: \"tvjs-ux-wrapper-head\" }, [\n _c(\n \"div\",\n {\n staticClass: \"tvjs-ux-wrapper-close\",\n style: _vm.btn_style,\n on: { click: _vm.close }\n },\n [_vm._v(\"×\")]\n )\n ])\n : _vm._e()\n ],\n 1\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n<!-- Wrapper window for Interface objects -->\n\n<!-- TODO UxWrapper\n + static pin values\n + wrapper window controls\n * drag'n'drop\n * behaviour on screen edges (h/v): (pass, stick, close)\n + background (trasnparent, backColor by default, etc...)\n * fullscreen mode\n-->\n\n<template>\n<div class=\"trading-vue-ux-wrapper\" v-if=\"visible\"\n :id=\"`tvjs-ux-wrapper-${ux.uuid}`\"\n :style=\"style\">\n <component\n @custom-event=\"on_custom_event\"\n :ux=\"ux\" :updater=\"updater\" :wrapper=\"wrapper\"\n :colors=\"colors\"\n v-bind:is=\"ux.component\"></component>\n <div v-if=\"ux.show_pin\"\n :style=\"pin_style\"\n class=\"tvjs-ux-wrapper-pin\">\n </div>\n <div class=\"tvjs-ux-wrapper-head\"\n v-if=\"ux.win_header !== false\">\n <div class=\"tvjs-ux-wrapper-close\"\n @click=\"close\"\n :style=\"btn_style\"\n >×</div>\n </div>\n</div>\n</template>\n\n<script>\n\nimport Utils from '../stuff/utils.js'\n\nexport default {\n name: 'UxWrapper',\n props: ['ux', 'updater', 'colors', 'config'],\n mounted() {\n this.self = document.getElementById(this.uuid)\n this.w = this.self.offsetWidth // TODO: => width: \"content\"\n this.h = this.self.offsetHeight // TODO: => height: \"content\"\n this.update_position()\n },\n created () {\n this.mouse.on('mousemove', this.mousemove)\n this.mouse.on('mouseout', this.mouseout)\n },\n beforeDestroy() {\n this.mouse.off('mousemove', this.mousemove)\n this.mouse.off('mouseout', this.mouseout)\n },\n methods: {\n update_position() {\n if (this.uxr.hidden) return\n let lw = this.layout.width\n let lh = this.layout.height\n let pin = this.uxr.pin\n\n switch (pin[0]) {\n case 'cursor':\n var x = this.uxr.overlay.cursor.x\n break\n case 'mouse':\n x = this.mouse.x\n break\n default:\n if (typeof pin[0] === 'string') {\n x = this.parse_coord(pin[0], lw)\n } else {\n x = this.layout.t2screen(pin[0])\n }\n }\n switch (pin[1]) {\n case 'cursor':\n var y = this.uxr.overlay.cursor.y\n break\n case 'mouse':\n y = this.mouse.y\n break\n default:\n if (typeof pin[1] === 'string') {\n y = this.parse_coord(pin[1], lh)\n } else {\n y = this.layout.$2screen(pin[1])\n }\n }\n this.x = x + this.ox\n this.y = y + this.oy\n },\n parse_coord(str, scale) {\n str = str.trim()\n if (str === '0' || str === '') return 0\n let plus = str.split('+')\n if (plus.length === 2) {\n return (\n this.parse_coord(plus[0], scale) +\n this.parse_coord(plus[1], scale)\n )\n }\n let minus = str.split('-')\n if (minus.length === 2) {\n return (\n this.parse_coord(minus[0], scale) -\n this.parse_coord(minus[1], scale)\n )\n }\n let per = str.split('%')\n if (per.length === 2) {\n return scale * parseInt(per[0]) / 100\n }\n let px = str.split('px')\n if (px.length === 2) {\n return parseInt(px[0])\n }\n return undefined\n },\n mousemove() {\n this.update_position()\n this.visible = true\n },\n mouseout() {\n if (this.uxr.pin.includes('cursor') ||\n this.uxr.pin.includes('mouse'))\n this.visible = false\n },\n on_custom_event(event) {\n this.$emit('custom-event', event)\n if (event.event === 'modify-interface') {\n if (this.self) {\n this.w = this.self.offsetWidth\n this.h = this.self.offsetHeight\n }\n this.update_position()\n }\n },\n close() {\n this.$emit('custom-event', {\n event: 'close-interface',\n args: [this.$props.ux.uuid]\n })\n }\n },\n computed: {\n uxr() {\n return this.$props.ux // just a ref\n },\n layout() {\n return this.$props.ux.overlay.layout\n },\n settings() {\n return this.$props.ux.overlay.settings\n },\n uuid() {\n return `tvjs-ux-wrapper-${this.uxr.uuid}`\n },\n mouse() {\n return this.uxr.overlay.mouse\n },\n style() {\n let st = {\n 'display': this.uxr.hidden ? 'none' : undefined,\n 'left': `${this.x}px`,\n 'top': `${this.y}px`,\n 'pointer-events': this.uxr.pointer_events || 'all',\n 'z-index': this.z_index\n }\n if (this.uxr.win_styling !== false)\n st = Object.assign(st, {\n 'border': `1px solid ${this.$props.colors.grid}`,\n 'border-radius': '3px',\n 'background': `${this.background}`,\n })\n return st\n },\n pin_style() {\n return {\n 'left': `${ -this.ox }px`,\n 'top': `${ -this.oy }px`,\n 'background-color': this.uxr.pin_color\n }\n },\n btn_style() {\n return {\n 'background': `${this.inactive_btn_color}`,\n 'color': `${this.inactive_btn_color}`,\n }\n },\n pin_pos() {\n return this.uxr.pin_position ?\n this.uxr.pin_position.split(',') : ['0','0']\n },\n // Offset x\n ox() {\n if (this.pin_pos.length !== 2) return undefined\n let x = this.parse_coord(this.pin_pos[0], this.w)\n return -x\n },\n // Offset y\n oy() {\n if (this.pin_pos.length !== 2) return undefined\n let y = this.parse_coord(this.pin_pos[1], this.h)\n return -y\n },\n z_index() {\n let base_index = this.settings['z-index'] ||\n this.settings['zIndex'] || 0\n let ux_index = this.uxr['z_index'] || 0\n return base_index + ux_index\n },\n background() {\n let c = this.uxr.background || this.$props.colors.back\n return Utils.apply_opacity(c,\n this.uxr.background_opacity ||\n this.$props.config.UX_OPACITY\n )\n },\n inactive_btn_color() {\n return this.uxr.inactive_btn_color ||\n this.$props.colors.grid\n },\n wrapper() {\n return {\n x: this.x,\n y: this.y,\n pin_x: this.x - this.ox,\n pin_y: this.y - this.oy\n }\n }\n },\n watch: {\n updater() {\n this.update_position()\n }\n },\n data() {\n return {\n x: 0,\n y: 0,\n w: 0,\n h: 0,\n visible: true\n }\n }\n}\n\n</script>\n<style>\n .trading-vue-ux-wrapper {\n position: absolute;\n display: flex;\n }\n .tvjs-ux-wrapper-pin {\n position: absolute;\n width: 9px;\n height: 9px;\n z-index: 100;\n background-color: #23a776;\n border-radius: 10px;\n margin-left: -6px;\n margin-top: -6px;\n pointer-events: none;\n }\n .tvjs-ux-wrapper-head {\n position: absolute;\n height: 23px;\n width: 100%;\n }\n .tvjs-ux-wrapper-close {\n position: absolute;\n width: 11px;\n height: 11px;\n font-size: 1.5em;\n line-height: 0.5em;\n padding: 1px 1px 1px 1px;\n border-radius: 10px;\n right: 5px;\n top: 5px;\n user-select: none;\n text-align: center;\n z-index: 100;\n }\n .tvjs-ux-wrapper-close-hb {\n\n }\n .tvjs-ux-wrapper-close:hover {\n background-color: #FF605C !important;\n color: #692324 !important;\n }\n .tvjs-ux-wrapper-full {\n\n }\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UxWrapper.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UxWrapper.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UxWrapper.vue?vue&type=template&id=4bc32070&\"\nimport script from \"./UxWrapper.vue?vue&type=script&lang=js&\"\nexport * from \"./UxWrapper.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UxWrapper.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('4bc32070')) {\n api.createRecord('4bc32070', component.options)\n } else {\n api.reload('4bc32070', component.options)\n }\n module.hot.accept(\"./UxWrapper.vue?vue&type=template&id=4bc32070&\", function () {\n api.rerender('4bc32070', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/UxWrapper.vue\"\nexport default component.exports","\n<!-- Layer for Interface objects -->\n\n<template>\n<span :class=\"`trading-vue-grid-ux-${id}`\" :style=\"style\">\n <ux-wrapper v-for=\"ux of uxs\"\n @custom-event=\"on_custom_event\"\n :key=\"ux.uuid\"\n :ux=\"ux\"\n :updater=\"updater\"\n :colors=\"colors\"\n :config=\"config\">\n </ux-wrapper>\n</span>\n</template>\n\n<script>\n\nimport UxWrapper from './UxWrapper.vue'\n\nexport default {\n name: 'UxLayer',\n props: ['tv_id', 'id', 'uxs', 'updater', 'colors', 'config'],\n components: { UxWrapper },\n created () {\n },\n mounted() {\n },\n beforeDestroy () {\n },\n methods: {\n on_custom_event(event) {\n this.$emit('custom-event', event)\n }\n },\n computed: {\n style() {\n return {\n 'top': this.$props.id !== 0 ? '1px' : 0,\n 'left': 0,\n 'width': '100%',\n 'height': 'calc(100% - 2px)',\n 'position': 'absolute',\n 'z-index': '1',\n 'pointer-events': 'none',\n 'overflow': 'hidden'\n }\n }\n }\n}\n\n</script>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UxLayer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UxLayer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UxLayer.vue?vue&type=template&id=390ccf6e&\"\nimport script from \"./UxLayer.vue?vue&type=script&lang=js&\"\nexport * from \"./UxLayer.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('390ccf6e')) {\n api.createRecord('390ccf6e', component.options)\n } else {\n api.reload('390ccf6e', component.options)\n }\n module.hot.accept(\"./UxLayer.vue?vue&type=template&id=390ccf6e&\", function () {\n api.rerender('390ccf6e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/UxLayer.vue\"\nexport default component.exports","// Mouse event handler for overlay\n\nexport default class Mouse {\n\n constructor(comp) {\n this.comp = comp\n this.map = {}\n this.listeners = 0\n this.pressed = false\n this.x = comp.$props.cursor.x\n this.y = comp.$props.cursor.y\n this.t = comp.$props.cursor.t\n this.y$ = comp.$props.cursor.y$\n }\n\n // You can choose where to place the handler\n // (beginning or end of the queue)\n on(name, handler, dir = \"unshift\") {\n if (!handler) return\n this.map[name] = this.map[name] || []\n this.map[name][dir](handler)\n this.listeners++\n }\n\n off(name, handler) {\n if (!this.map[name]) return\n let i = this.map[name].indexOf(handler)\n if (i < 0) return\n this.map[name].splice(i, 1)\n this.listeners--\n }\n\n // Called by grid.js\n emit(name, event) {\n const l = this.comp.layout\n if (name in this.map) {\n for (var f of this.map[name]) {\n f(event)\n }\n }\n if (name === 'mousemove') {\n this.x = event.layerX\n this.y = event.layerY\n this.t = l.screen2t(this.x)\n this.y$ = l.screen2$(this.y)\n }\n if (name === 'mousedown') {\n this.pressed = true\n }\n if (name === 'mouseup') {\n this.pressed = false\n }\n }\n\n}\n","\n// Usuful stuff for creating overlays. Include as mixin\n\nimport Mouse from '../stuff/mouse.js'\n\nexport default {\n props: [\n 'id', 'num', 'interval', 'cursor', 'colors',\n 'layout', 'sub', 'data', 'settings', 'grid_id',\n 'font', 'config', 'meta', 'tf', 'i0', 'last'\n ],\n mounted() {\n // TODO(1): when hot reloading, dynamicaly changed mixins\n // dissapear (cuz it's a hack), the only way for now\n // is to reload the browser\n if (!this.draw) {\n this.draw = ctx => {\n let text = 'EARLY ADOPTER BUG: reload the browser & enjoy'\n console.warn(text)\n }\n }\n // Main chart?\n let main = this.$props.sub === this.$props.data\n\n this.meta_info()\n\n // TODO(1): quick fix for vue2, in vue3 we use 3rd party emit\n try {\n new Function('return ' + this.$emit)()\n this._$emit = this.$emit\n this.$emit = this.custom_event\n } catch(e) {\n return\n }\n\n this._$emit('new-grid-layer', {\n name: this.$options.name,\n id: this.$props.id,\n renderer: this,\n display: 'display' in this.$props.settings ?\n this.$props.settings['display'] : true,\n z: this.$props.settings['z-index'] ||\n this.$props.settings['zIndex'] || (main ? 0 : -1),\n })\n\n // Overlay meta-props (adjusting behaviour)\n this._$emit('layer-meta-props', {\n grid_id: this.$props.grid_id,\n layer_id: this.$props.id,\n legend: this.legend,\n data_colors: this.data_colors,\n y_range: this.y_range\n })\n this.exec_script()\n this.mouse = new Mouse(this)\n if (this.init_tool) this.init_tool()\n if (this.init) this.init()\n },\n beforeDestroy() {\n if (this.destroy) this.destroy()\n this._$emit('delete-grid-layer', this.$props.id)\n },\n methods: {\n use_for() {\n /* override it (mandatory) */\n console.warn('use_for() should be implemented')\n console.warn(\n `Format: use_for() {\n return ['type1', 'type2', ...]\n }`)\n },\n meta_info() {\n /* override it (optional) */\n let id = this.$props.id\n console.warn(\n `${id} meta_info() is req. for publishing`)\n console.warn(\n `Format: meta_info() {\n author: 'Satoshi Smith',\n version: '1.0.0',\n contact (opt) '<email>'\n github: (opt) '<GitHub Page>',\n }`)\n },\n custom_event(event, ...args) {\n if (event.split(':')[0] === 'hook') return\n if (event === 'change-settings' ||\n event === 'object-selected' ||\n event === 'new-shader' ||\n event === 'new-interface' ||\n event === 'remove-tool') {\n args.push(this.grid_id, this.id)\n if (this.$props.settings.$uuid) {\n args.push(this.$props.settings.$uuid)\n }\n }\n if (event === 'new-interface') {\n args[0].overlay = this\n args[0].uuid = this.last_ux_id =\n `${this.grid_id}-${this.id}-${this.uxs_count++}`\n }\n // TODO: add a namespace to the event name\n // TODO(2): this prevents call overflow, but\n // the root of evil is in (1)\n if (event === 'custom-event') return\n this._$emit('custom-event', {event, args})\n },\n // TODO: the event is not firing when the same\n // overlay type is added to the offchart[]\n exec_script() {\n if (this.calc) this.$emit('exec-script', {\n grid_id: this.$props.grid_id,\n layer_id: this.$props.id,\n src: this.calc(),\n use_for: this.use_for()\n })\n }\n },\n watch: {\n settings: {\n handler: function(n, p) {\n if (this.watch_uuid) this.watch_uuid(n, p)\n this._$emit('show-grid-layer', {\n id: this.$props.id,\n display: 'display' in this.$props.settings ?\n this.$props.settings['display'] : true,\n })\n },\n deep: true\n }\n },\n data() { return { uxs_count: 0, last_ux_id: null } },\n render(h) { return h() }\n}\n","<script>\n// Spline renderer. (SMAs, EMAs, TEMAs...\n// you know what I mean)\n// TODO: make a real spline, not a bunch of lines...\n\n// Adds all necessary stuff for you.\nimport Overlay from '../../mixins/overlay.js'\n\nexport default {\n name: 'Spline',\n mixins: [Overlay],\n methods: {\n meta_info() {\n return { author: 'C451', version: '1.1.2' }\n },\n // Here goes your code. You are provided with:\n // { All stuff is reactive }\n // $props.layout -> positions of all chart elements +\n // some helper functions (see layout_fn.js)\n // $props.interval -> candlestick time interval\n // $props.sub -> current subset of candlestick data\n // $props.data -> your indicator's data subset.\n // Comes \"as is\", should have the following format:\n // [[<timestamp>, ... ], ... ]\n // $props.colors -> colors (see TradingVue.vue)\n // $props.cursor -> current position of crosshair\n // $props.settings -> indicator's custom settings\n // E.g. colors, line thickness, etc. You define it.\n // $props.num -> indicator's layer number (of All\n // layers in the current grid)\n // $props.id -> indicator's id (e.g. EMA_0)\n // ~\n // Finally, let's make the canvas dirty!\n draw(ctx) {\n ctx.lineWidth = this.line_width\n ctx.strokeStyle = this.color\n ctx.beginPath()\n\n const layout = this.$props.layout\n const i = this.data_index\n const data = this.$props.data\n\n if (!this.skip_nan) {\n for (var k = 0, n = data.length; k < n; k++) {\n let p = data[k]\n let x = layout.t2screen(p[0])\n let y = layout.$2screen(p[i])\n ctx.lineTo(x, y)\n }\n } else {\n var skip = false\n for (var k = 0, n = data.length; k < n; k++) {\n let p = data[k]\n let x = layout.t2screen(p[0])\n let y = layout.$2screen(p[i])\n if (p[i] == null || y !== y) {\n skip = true\n } else {\n if (skip) ctx.moveTo(x, y)\n ctx.lineTo(x, y)\n skip = false\n }\n }\n }\n ctx.stroke()\n },\n\n // For all data with these types overlay will be\n // added to the renderer list. And '$props.data'\n // will have the corresponding values. If you want to\n // redefine the default behviour for a prticular\n // indicator (let's say EMA),\n // just create a new overlay with the same type:\n // e.g. use_for() { return ['EMA'] }.\n use_for() { return ['Spline', 'EMA', 'SMA'] },\n\n // Colors for the legend, should have the\n // same dimention as a data point (excl. timestamp)\n data_colors() { return [this.color] }\n },\n // Define internal setting & constants here\n computed: {\n sett() {\n return this.$props.settings\n },\n line_width() {\n return this.sett.lineWidth || 0.75\n },\n color() {\n const n = this.$props.num % 5\n return this.sett.color || this.COLORS[n]\n },\n data_index() {\n return this.sett.dataIndex || 1\n },\n // Don't connect separate parts if true\n skip_nan() {\n return this.sett.skipNaN\n }\n },\n data() {\n return {\n COLORS:\n [\n '#42b28a', '#5691ce', '#612ff9',\n '#d50b90', '#ff2316'\n ]\n }\n }\n\n}\n</script>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Spline.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Spline.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./Spline.vue?vue&type=script&lang=js&\"\nexport * from \"./Spline.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('170bbcfd')) {\n api.createRecord('170bbcfd', component.options)\n } else {\n api.reload('170bbcfd', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"src/components/overlays/Spline.vue\"\nexport default component.exports","<script>\n// Channel renderer. (Keltner, Bollinger)\nimport Overlay from '../../mixins/overlay.js'\n\nexport default {\n name: 'Splines',\n mixins: [Overlay],\n methods: {\n meta_info() {\n return { author: 'C451', version: '1.1.0' }\n },\n draw(ctx) {\n for (var i = 0; i < this.lines_num; i++) {\n let _i = i % this.clrx.length\n ctx.strokeStyle = this.clrx[_i]\n ctx.lineWidth = this.widths[i] || this.line_width\n ctx.beginPath()\n this.draw_spline(ctx, i)\n ctx.stroke()\n }\n },\n draw_spline(ctx, i) {\n const layout = this.$props.layout\n const data = this.$props.data\n if (!this.skip_nan) {\n for (var k = 0, n = data.length; k < n; k++) {\n let p = data[k]\n let x = layout.t2screen(p[0])\n let y = layout.$2screen(p[i+1])\n ctx.lineTo(x, y)\n }\n } else {\n var skip = false\n for (var k = 0, n = data.length; k < n; k++) {\n let p = data[k]\n let x = layout.t2screen(p[0])\n let y = layout.$2screen(p[i+1])\n if (p[i+1] == null || y !== y) {\n skip = true\n } else {\n if (skip) ctx.moveTo(x, y)\n ctx.lineTo(x, y)\n skip = false\n }\n }\n }\n },\n use_for() { return ['Splines', 'DMI'] },\n data_colors() { return this.clrx }\n },\n // Define internal setting & constants here\n computed: {\n sett() {\n return this.$props.settings\n },\n line_width() {\n return this.sett.lineWidth || 0.75\n },\n widths() {\n return this.sett.lineWidths || []\n },\n clrx() {\n let colors = this.sett.colors || []\n let n = this.$props.num\n if (!colors.length) {\n for (var i = 0; i < this.lines_num; i++) {\n colors.push(this.COLORS[(n + i) % 5])\n }\n }\n return colors\n },\n lines_num() {\n if (!this.$props.data[0]) return 0\n return this.$props.data[0].length - 1\n },\n // Don't connect separate parts if true\n skip_nan() {\n return this.sett.skipNaN\n }\n },\n data() {\n return {\n COLORS:\n [\n '#42b28a', '#5691ce', '#612ff9',\n '#d50b90', '#ff2316'\n ]\n }\n }\n}\n\n</script>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Splines.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Splines.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./Splines.vue?vue&type=script&lang=js&\"\nexport * from \"./Splines.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('63d0f874')) {\n api.createRecord('63d0f874', component.options)\n } else {\n api.reload('63d0f874', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"src/components/overlays/Splines.vue\"\nexport default component.exports","<script>\n// R S I . Because we love it\n\n// Adds all necessary stuff for you.\nimport Overlay from '../../mixins/overlay.js'\n\nexport default {\n name: 'Range',\n mixins: [Overlay],\n methods: {\n meta_info() {\n return { author: 'C451', version: '1.0.1' }\n },\n // Here goes your code. You are provided with:\n // { All stuff is reactive }\n // $props.layout -> positions of all chart elements +\n // some helper functions (see layout_fn.js)\n // $props.interval -> candlestick time interval\n // $props.sub -> current subset of candlestick data\n // $props.data -> your indicator's data subset.\n // Comes \"as is\", should have the following format:\n // [[<timestamp>, ... ], ... ]\n // $props.colors -> colors (see TradingVue.vue)\n // $props.cursor -> current position of crosshair\n // $props.settings -> indicator's custom settings\n // E.g. colors, line thickness, etc. You define it.\n // $props.num -> indicator's layer number (of All\n // layers in the current grid)\n // $props.id -> indicator's id (e.g. EMA_0)\n // ~\n // Finally, let's make the canvas dirty!\n draw(ctx) {\n\n const layout = this.$props.layout\n const upper = layout.$2screen(this.sett.upper || 70)\n const lower = layout.$2screen(this.sett.lower || 30)\n const data = this.$props.data\n\n // RSI values\n\n ctx.lineWidth = this.line_width\n ctx.strokeStyle = this.color\n ctx.beginPath()\n\n for (var k = 0, n = data.length; k < n; k++) {\n let p = data[k]\n let x = layout.t2screen(p[0])\n let y = layout.$2screen(p[1])\n ctx.lineTo(x, y)\n }\n\n ctx.stroke()\n\n ctx.strokeStyle = this.band_color\n ctx.setLineDash([5]) // Will be removed after draw()\n ctx.beginPath()\n\n // Fill the area between the bands\n ctx.fillStyle = this.back_color\n ctx.fillRect(0, upper, layout.width, lower - upper)\n\n // Upper band\n ctx.moveTo(0, upper)\n ctx.lineTo(layout.width, upper)\n\n // Lower band\n ctx.moveTo(0, lower)\n ctx.lineTo(layout.width, lower)\n\n ctx.stroke()\n },\n\n // For all data with these types overlay will be\n // added to the renderer list. And '$props.data'\n // will have the corresponding values. If you want to\n // redefine the default behviour for a prticular\n // indicator (let's say EMA),\n // just create a new overlay with the same type:\n // e.g. use_for() { return ['EMA'] }.\n use_for() { return ['Range', 'RSI'] },\n\n // Colors for the legend, should have the\n // same dimention as a data point (excl. timestamp)\n data_colors() { return [this.color] },\n\n // Y-Range tansform. For example you need a fixed\n // Y-range for an indicator, you can do it here!\n // Gets estimated range, @return you favorite range\n y_range(hi, lo) {\n return [\n Math.max(hi, this.sett.upper || 70),\n Math.min(lo, this.sett.lower || 30)\n ]\n }\n },\n // Define internal setting & constants here\n computed: {\n sett() {\n return this.$props.settings\n },\n line_width() {\n return this.sett.lineWidth || 0.75\n },\n color() {\n return this.sett.color || '#ec206e'\n },\n band_color() {\n return this.sett.bandColor || '#ddd'\n },\n back_color() {\n return this.sett.backColor || '#381e9c16'\n }\n }\n\n}\n</script>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Range.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Range.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./Range.vue?vue&type=script&lang=js&\"\nexport * from \"./Range.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('87d7807e')) {\n api.createRecord('87d7807e', component.options)\n } else {\n api.reload('87d7807e', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"src/components/overlays/Range.vue\"\nexport default component.exports","<script>\n\nimport Overlay from '../../mixins/overlay.js'\n\nexport default {\n name: 'Trades',\n mixins: [Overlay],\n methods: {\n meta_info() {\n return { author: 'C451', version: '1.0.2' }\n },\n draw(ctx) {\n const layout = this.$props.layout\n const data = this.$props.data\n ctx.lineWidth = 1.5\n ctx.strokeStyle = 'black'\n for (var k = 0, n = data.length; k < n; k++) {\n let p = data[k]\n ctx.fillStyle = p[1] ? this.buy_color : this.sell_color\n ctx.beginPath()\n let x = layout.t2screen(p[0]) // x - Mapping\n let y = layout.$2screen(p[2]) // y - Mapping\n ctx.arc(x, y, this.marker_size + 0.5, 0, Math.PI * 2, true)\n ctx.fill()\n ctx.stroke()\n\n if (this.show_label && p[3]) {\n this.draw_label(ctx, x, y, p)\n }\n }\n },\n\n draw_label(ctx, x, y, p) {\n\n ctx.fillStyle = this.label_color\n ctx.font = this.new_font\n ctx.textAlign = 'center'\n ctx.fillText(p[3], x, y - 25)\n },\n use_for() { return ['Trades'] },\n\n // Defines legend format (values & colors)\n legend(values) {\n switch (values[1]) {\n case 0:\n var pos = 'Sell'\n break\n case 1:\n pos = 'Buy'\n break\n default:\n pos = 'Unknown'\n }\n\n return [\n {\n value: pos\n },\n {\n value: values[2].toFixed(4),\n color: this.$props.colors.text\n }\n ].concat(values[3] ? [\n {\n value: values[3]\n }\n ] : [])\n }\n\n\n },\n // Define internal setting & constants here\n computed: {\n sett() {\n return this.$props.settings\n },\n default_font() {\n return '12px ' + this.$props.font.split('px').pop()\n },\n buy_color() {\n return this.sett.buyColor || '#63df89'\n },\n sell_color() {\n return this.sett.sellColor || '#ec4662'\n },\n label_color() {\n return this.sett.labelColor || '#999'\n },\n marker_size() {\n return this.sett.markerSize || 5\n },\n show_label() {\n return this.sett.showLabel !== false\n },\n new_font() {\n return this.sett.font || this.default_font\n }\n }\n}\n</script>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Trades.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Trades.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./Trades.vue?vue&type=script&lang=js&\"\nexport * from \"./Trades.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('b3c8bc8a')) {\n api.createRecord('b3c8bc8a', component.options)\n } else {\n api.reload('b3c8bc8a', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"src/components/overlays/Trades.vue\"\nexport default component.exports","<script>\n// Channel renderer. (Keltner, Bollinger)\n// TODO: allow color transparency\n// TODO: improve performance: draw in one solid chunk\nimport Overlay from '../../mixins/overlay.js'\n\nexport default {\n name: 'Channel',\n mixins: [Overlay],\n methods: {\n meta_info() {\n return { author: 'C451', version: '1.0.1' }\n },\n /*draw(ctx) {\n ctx.lineWidth = this.line_width\n ctx.strokeStyle = this.color\n ctx.fillStyle = this.back_color\n\n for (var i = 0; i < this.$props.data.length - 1; i++) {\n\n\n let p1 = this.mapp(this.$props.data[i])\n let p2 = this.mapp(this.$props.data[i+1])\n\n if (!p2) continue\n if (p1.y1 !== p1.y1) continue // Fix NaN\n\n // Background\n ctx.beginPath()\n ctx.moveTo(p1.x, p1.y1)\n ctx.lineTo(p2.x + 0.1, p2.y1)\n ctx.lineTo(p2.x + 0.1, p2.y3)\n ctx.lineTo(p1.x, p1.y3)\n ctx.fill()\n\n // Lines\n ctx.beginPath()\n ctx.moveTo(p1.x, p1.y1)\n ctx.lineTo(p2.x, p2.y1)\n if (this.show_mid) {\n ctx.moveTo(p1.x, p1.y2)\n ctx.lineTo(p2.x, p2.y2)\n }\n ctx.moveTo(p1.x, p1.y3)\n ctx.lineTo(p2.x, p2.y3)\n ctx.stroke()\n\n }\n },*/\n\n draw(ctx) {\n // Background\n const data = this.data\n const layout = this.layout\n ctx.beginPath()\n ctx.fillStyle = this.back_color\n for (var i = 0; i < data.length; i++) {\n let p = data[i]\n let x = layout.t2screen(p[0])\n let y = layout.$2screen(p[1] || undefined)\n ctx.lineTo(x, y)\n }\n for (var i = data.length - 1; i >= 0; i--) {\n let p = data[i]\n let x = layout.t2screen(p[0])\n let y = layout.$2screen(p[3] || undefined)\n ctx.lineTo(x, y)\n }\n ctx.fill()\n\n // Lines\n ctx.lineWidth = this.line_width\n ctx.strokeStyle = this.color\n\n // Top line\n ctx.beginPath()\n for (var i = 0; i < data.length; i++) {\n let p = data[i]\n let x = layout.t2screen(p[0])\n let y = layout.$2screen(p[1] || undefined)\n ctx.lineTo(x, y)\n }\n ctx.stroke()\n // Bottom line\n ctx.beginPath()\n for (var i = 0; i < data.length; i++) {\n let p = data[i]\n let x = layout.t2screen(p[0])\n let y = layout.$2screen(p[3] || undefined)\n ctx.lineTo(x, y)\n }\n ctx.stroke()\n // Middle line\n if (!this.show_mid) return\n ctx.beginPath()\n for (var i = 0; i < data.length; i++) {\n let p = data[i]\n let x = layout.t2screen(p[0])\n let y = layout.$2screen(p[2] || undefined)\n ctx.lineTo(x, y)\n }\n ctx.stroke()\n },\n\n mapp(p) {\n const layout = this.$props.layout\n return p && {\n x: layout.t2screen(p[0]),\n y1: layout.$2screen(p[1]),\n y2: layout.$2screen(p[2]),\n y3: layout.$2screen(p[3])\n }\n },\n use_for() { return ['Channel', 'KC', 'BB'] },\n data_colors() { return [this.color, this.color, this.color] }\n },\n // Define internal setting & constants here\n computed: {\n sett() {\n return this.$props.settings\n },\n line_width() {\n return this.sett.lineWidth || 0.75\n },\n color() {\n const n = this.$props.num % 5\n return this.sett.color || this.COLORS[n]\n },\n show_mid() {\n return 'showMid' in this.sett ? this.sett.showMid : true\n },\n back_color() {\n return this.sett.backColor || this.color + '11'\n }\n },\n data() {\n return {\n COLORS:\n [\n '#42b28a', '#5691ce', '#612ff9',\n '#d50b90', '#ff2316'\n ]\n }\n }\n\n}\n</script>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Channel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Channel.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./Channel.vue?vue&type=script&lang=js&\"\nexport * from \"./Channel.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('f4d974f2')) {\n api.createRecord('f4d974f2', component.options)\n } else {\n api.reload('f4d974f2', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"src/components/overlays/Channel.vue\"\nexport default component.exports","<script>\n// Segment renderer.\n\nimport Overlay from '../../mixins/overlay.js'\n\nexport default {\n name: 'Segment',\n mixins: [Overlay],\n methods: {\n meta_info() {\n return { author: 'C451', version: '1.0.0' }\n },\n draw(ctx) {\n\n if (!this.p1 || !this.p2) return\n\n ctx.lineWidth = this.line_width\n ctx.strokeStyle = this.color\n ctx.beginPath()\n\n const layout = this.$props.layout\n\n let x1 = layout.t2screen(this.p1[0])\n let y1 = layout.$2screen(this.p1[1])\n ctx.moveTo(x1, y1)\n\n let x2 = layout.t2screen(this.p2[0])\n let y2 = layout.$2screen(this.p2[1])\n ctx.lineTo(x2, y2)\n\n ctx.stroke()\n },\n use_for() { return ['Segment'] },\n data_colors() { return [this.color] }\n },\n // Define internal setting & constants here\n computed: {\n sett() {\n return this.$props.settings\n },\n p1() {\n return this.$props.settings.p1\n },\n p2() {\n return this.$props.settings.p2\n },\n line_width() {\n return this.sett.lineWidth || 0.9\n },\n color() {\n const n = this.$props.num % 5\n return this.sett.color || this.COLORS[n]\n }\n },\n data() {\n return {\n COLORS:\n [\n '#42b28a', '#5691ce', '#612ff9',\n '#d50b90', '#ff2316'\n ]\n }\n }\n\n}\n</script>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Segment.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Segment.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./Segment.vue?vue&type=script&lang=js&\"\nexport * from \"./Segment.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('3c6fcfb7')) {\n api.createRecord('3c6fcfb7', component.options)\n } else {\n api.reload('3c6fcfb7', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"src/components/overlays/Segment.vue\"\nexport default component.exports","// Claculates postions and sizes for candlestick\n// and volume bars for the given subset of data\n\nimport Utils from '../../stuff/utils.js'\n\nexport function layout_cnv(self) {\n\n let $p = self.$props\n let sub = $p.data\n let t2screen = $p.layout.t2screen\n let layout = $p.layout\n\n let candles = []\n let volume = []\n\n // The volume bar height is determined as a percentage of\n // the chart's height (VOLSCALE)\n let maxv = Math.max(...sub.map(x => x[5]))\n let vs = $p.config.VOLSCALE * layout.height / maxv\n var x1, x2, w, avg_w, mid, prev = undefined\n\n // Subset interval against main interval\n var [interval2, ratio] = new_interval(layout, $p, sub)\n let px_step2 = layout.px_step * ratio\n\n let splitter = px_step2 > 5 ? 1 : 0\n\n // A & B are current chart tranformations:\n // A === scale, B === Y-axis shift\n for (var i = 0; i < sub.length; i++) {\n let p = sub[i]\n mid = t2screen(p[0]) + 1\n\n // Clear volume bar if there is a time gap\n if (sub[i-1] && p[0] - sub[i-1][0] > interval2) {\n prev = null\n }\n\n x1 = prev || Math.floor(mid - px_step2 * 0.5)\n x2 = Math.floor(mid + px_step2 * 0.5) - 0.5\n\n // TODO: add log scale support\n candles.push({\n x: mid,\n w: layout.px_step * $p.config.CANDLEW * ratio,\n o: Math.floor(p[1] * layout.A + layout.B),\n h: Math.floor(p[2] * layout.A + layout.B),\n l: Math.floor(p[3] * layout.A + layout.B),\n c: Math.floor(p[4] * layout.A + layout.B),\n raw: p\n })\n\n volume.push({\n x1: x1,\n x2: x2,\n h: p[5] * vs,\n green: p[4] >= p[1],\n raw: p\n })\n prev = x2 + splitter\n }\n\n return { candles, volume }\n\n}\n\nexport function layout_vol(self) {\n\n let $p = self.$props\n let sub = $p.data\n let t2screen = $p.layout.t2screen\n let layout = $p.layout\n\n let volume = []\n\n // Detect data second dimention size:\n let dim = sub[0] ? sub[0].length : 0\n\n // Support special volume data (see API book), or OHLCV\n // Data indices:\n self._i1 = dim < 6 ? 1 : 5\n self._i2 = dim < 6 ? (p => p[2]) : (p => p[4] >= p[1])\n\n let maxv = Math.max(...sub.map(x => x[self._i1]))\n let volscale = self.volscale || $p.config.VOLSCALE\n let vs = volscale * layout.height / maxv\n var x1, x2, mid, prev = undefined\n\n // Subset interval against main interval\n var [interval2, ratio] = new_interval(layout, $p, sub)\n let px_step2 = layout.px_step * ratio\n\n let splitter = px_step2 > 5 ? 1 : 0\n\n // A & B are current chart tranformations:\n // A === scale, B === Y-axis shift\n for (var i = 0; i < sub.length; i++) {\n let p = sub[i]\n mid = t2screen(p[0]) + 1\n\n // Clear volume bar if there is a time gap\n if (sub[i-1] && p[0] - sub[i-1][0] > interval2) {\n prev = null\n }\n x1 = prev || Math.floor(mid - px_step2 * 0.5)\n x2 = Math.floor(mid + px_step2 * 0.5) - 0.5\n\n volume.push({\n x1: x1,\n x2: x2,\n h: p[self._i1] * vs,\n green: self._i2(p),\n raw: p\n })\n prev = x2 + splitter\n }\n return volume\n\n}\n\nfunction new_interval(layout, $p, sub) {\n // Subset interval against main interval\n if (!layout.ti_map.ib) {\n var interval2 = $p.tf || Utils.detect_interval(sub)\n var ratio = interval2 / $p.interval\n } else {\n if ($p.tf) {\n var ratio = $p.tf / layout.ti_map.tf\n var interval2 = ratio\n } else {\n var interval2 = Utils.detect_interval(sub)\n var ratio = interval2 / $p.interval\n }\n }\n return [interval2, ratio]\n}\n","\n// Candle object for Candles overlay\n\nexport default class CandleExt {\n\n constructor(overlay, ctx, data) {\n this.ctx = ctx\n this.self = overlay\n this.style = data.raw[6] || this.self\n this.draw(data)\n }\n\n draw(data) {\n const green = data.raw[4] >= data.raw[1]\n const body_color = green ?\n this.style.colorCandleUp :\n this.style.colorCandleDw\n\n const wick_color = green ?\n this.style.colorWickUp :\n this.style.colorWickDw\n\n let w = Math.max(data.w, 1)\n let hw = Math.max(Math.floor(w * 0.5), 1)\n let h = Math.abs(data.o - data.c)\n let max_h = data.c === data.o ? 1 : 2\n let x05 = Math.floor(data.x) - 0.5\n\n this.ctx.strokeStyle = wick_color\n\n this.ctx.beginPath()\n this.ctx.moveTo(x05, Math.floor(data.h))\n this.ctx.lineTo(x05, Math.floor(data.l))\n\n this.ctx.stroke()\n\n if (data.w > 1.5) {\n\n this.ctx.fillStyle = body_color\n // TODO: Move common calculations to layout.js\n let s = green ? 1 : -1\n this.ctx.fillRect(\n Math.floor(data.x - hw -1),\n data.c,\n Math.floor(hw * 2 + 1),\n s * Math.max(h, max_h),\n )\n\n } else {\n\n this.ctx.strokeStyle = body_color\n\n this.ctx.beginPath()\n this.ctx.moveTo(\n x05,\n Math.floor(Math.min(data.o, data.c)),\n )\n this.ctx.lineTo(\n x05,\n Math.floor(Math.max(data.o, data.c)) +\n (data.o === data.c ? 1 : 0)\n )\n\n this.ctx.stroke()\n\n }\n\n }\n\n}\n","\nexport default class VolbarExt {\n\n constructor(overlay, ctx, data) {\n this.ctx = ctx\n this.$p = overlay.$props\n this.self = overlay\n this.style = data.raw[6] || this.self\n this.draw(data)\n }\n\n draw(data) {\n let y0 = this.$p.layout.height\n let w = data.x2 - data.x1\n let h = Math.floor(data.h)\n\n this.ctx.fillStyle = data.green ?\n this.style.colorVolUp :\n this.style.colorVolDw\n\n this.ctx.fillRect(\n Math.floor(data.x1),\n Math.floor(y0 - h - 0.5),\n Math.floor(w),\n Math.floor(h + 1)\n )\n\n }\n\n}\n","\n// Price bar & price line (shader)\n\nexport default class Price {\n\n constructor(comp) {\n this.comp = comp\n }\n\n // Defines an inline shader (has access to both\n // target & overlay's contexts)\n init_shader() {\n\n let layout = this.comp.$props.layout\n let config = this.comp.$props.config\n let comp = this.comp\n let last_bar = () => this.last_bar()\n\n this.comp.$emit('new-shader', {\n target: 'sidebar', draw: ctx => {\n\n let bar = last_bar()\n if (!bar) return\n\n let w = ctx.canvas.width\n let h = config.PANHEIGHT\n let lbl = bar.price.toFixed(layout.prec)\n ctx.fillStyle = bar.color\n\n let x = - 0.5\n let y = bar.y - h * 0.5 - 0.5\n let a = 7\n ctx.fillRect(x - 0.5, y, w + 1, h)\n ctx.fillStyle = comp.$props.colors.textHL\n ctx.textAlign = 'left'\n ctx.fillText(lbl, a, y + 15)\n\n }\n })\n this.shader = true\n }\n\n // Regular draw call for overaly\n draw(ctx) {\n if (!this.comp.$props.meta.last) return\n if (!this.shader) this.init_shader()\n\n let layout = this.comp.$props.layout\n let last = this.comp.$props.last\n\n let dir = last[4] >= last[1]\n let color = dir ? this.green() : this.red()\n let y = layout.$2screen(last[4]) + (dir ? 1 : 0)\n\n ctx.strokeStyle = color\n ctx.setLineDash([1, 1])\n ctx.beginPath()\n ctx.moveTo(0, y)\n ctx.lineTo(layout.width, y)\n ctx.stroke()\n ctx.setLineDash([])\n }\n\n last_bar() {\n\n if (!this.comp.data.length) return undefined\n let layout = this.comp.$props.layout\n let last = this.comp.data[this.comp.data.length - 1]\n let y = layout.$2screen(last[4])\n //let cndl = layout.c_magnet(last[0])\n return {\n y: y, //Math.floor(cndl.c) - 0.5,\n price: last[4],\n color: last[4] >= last[1] ? this.green() : this.red()\n }\n }\n\n last_price() {\n return this.comp.$props.meta.last ?\n this.comp.$props.meta.last[4] : undefined\n }\n\n green() {\n return this.comp.colorCandleUp\n }\n\n red() {\n return this.comp.colorCandleDw\n }\n\n}\n","<script>\n// Renedrer for candlesticks + volume (optional)\n// It can be used as the main chart or an indicator\n\nimport Overlay from '../../mixins/overlay.js'\nimport { layout_cnv } from '../js/layout_cnv.js'\nimport Candle from '../primitives/candle.js'\nimport Volbar from '../primitives/volbar.js'\nimport Price from '../primitives/price.js'\n\nexport default {\n name: 'Candles',\n mixins: [Overlay],\n methods: {\n meta_info() {\n return { author: 'C451', version: '1.2.1' }\n },\n init() {\n this.price = new Price(this)\n },\n draw(ctx) {\n\n // If data === main candlestick data\n // render as main chart:\n if (this.$props.sub === this.$props.data) {\n var cnv = {\n candles: this.$props.layout.candles,\n volume: this.$props.layout.volume,\n }\n // Else, as offchart / onchart indicator:\n } else {\n cnv = layout_cnv(this)\n }\n\n if (this.show_volume) {\n var cv = cnv.volume\n for (var i = 0, n = cv.length; i < n; i++) {\n new Volbar(this, ctx, cv[i])\n }\n }\n\n var cc = cnv.candles\n for (var i = 0, n = cc.length; i < n; i++) {\n new Candle(this, ctx, cc[i])\n }\n\n if (this.price_line) this.price.draw(ctx)\n },\n use_for() { return ['Candles'] },\n\n // In case it's added as offchart overlay\n y_range() {\n var hi = -Infinity, lo = Infinity\n for (var i = 0, n = this.sub.length; i < n; i++) {\n let x = this.sub[i]\n if (x[2] > hi) hi = x[2]\n if (x[3] < lo) lo = x[3]\n }\n return [hi, lo]\n }\n },\n\n // Define internal setting & constants here\n computed: {\n sett() {\n return this.$props.settings\n },\n show_volume() {\n return 'showVolume' in this.sett ?\n this.sett.showVolume : true\n },\n price_line() {\n return 'priceLine' in this.sett ?\n this.sett.priceLine : true\n },\n colorCandleUp() {\n return this.sett.colorCandleUp ||\n this.$props.colors.candleUp\n },\n colorCandleDw() {\n return this.sett.colorCandleDw ||\n this.$props.colors.candleDw\n },\n colorWickUp() {\n return this.sett.colorWickUp ||\n this.$props.colors.wickUp\n },\n colorWickDw() {\n return this.sett.colorWickDw ||\n this.$props.colors.wickDw\n },\n colorWickSm() {\n return this.sett.colorWickSm ||\n this.$props.colors.wickSm\n },\n colorVolUp() {\n return this.sett.colorVolUp ||\n this.$props.colors.volUp\n },\n colorVolDw() {\n return this.sett.colorVolDw ||\n this.$props.colors.volDw\n }\n },\n data() {\n return { price: {} }\n }\n\n}\n</script>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Candles.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Candles.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./Candles.vue?vue&type=script&lang=js&\"\nexport * from \"./Candles.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('325583ec')) {\n api.createRecord('325583ec', component.options)\n } else {\n api.reload('325583ec', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"src/components/overlays/Candles.vue\"\nexport default component.exports","<script>\n// Standalone renedrer for the volume\n\nimport Overlay from '../../mixins/overlay.js'\nimport { layout_vol } from '../js/layout_cnv.js'\nimport Volbar from '../primitives/volbar.js'\n\nexport default {\n name: 'Volume',\n mixins: [Overlay],\n methods: {\n meta_info() {\n return { author: 'C451', version: '1.1.0' }\n },\n\n draw(ctx) {\n\n // TODO: volume average\n // TODO: Y-axis scaling\n\n for (var v of layout_vol(this)) {\n new Volbar(this, ctx, v)\n }\n\n },\n use_for() { return ['Volume'] },\n\n // Defines legend format (values & colors)\n // _i2 - detetected data index (see layout_cnv)\n legend(values) {\n\n let flag = this._i2 ?\n this._i2(values) : values[2]\n\n const color = flag ?\n this.colorVolUpLegend :\n this.colorVolDwLegend\n\n return [{\n value: values[this._i1 || 1], color\n }]\n },\n // When added as offchart overlay\n // If data is OHLCV => recalc y-range\n // _i1 - detetected data index (see layout_cnv)\n y_range(hi, lo) {\n if (this._i1 === 5) {\n let sub = this.$props.sub\n return [\n Math.max(...sub.map(x => x[this._i1])),\n Math.min(...sub.map(x => x[this._i1]))\n ]\n } else {\n return [hi, lo]\n }\n }\n },\n\n // Define internal setting & constants here\n computed: {\n sett() {\n return this.$props.settings\n },\n colorVolUp() {\n return this.sett.colorVolUp ||\n this.$props.colors.volUp\n },\n colorVolDw() {\n return this.sett.colorVolDw ||\n this.$props.colors.volDw\n },\n colorVolUpLegend() {\n return this.sett.colorVolUpLegend ||\n this.$props.colors.candleUp\n },\n colorVolDwLegend() {\n return this.sett.colorVolDwLegend ||\n this.$props.colors.candleDw\n },\n volscale() {\n return this.sett.volscale ||\n this.$props.grid_id > 0 ? 0.85 :\n this.$props.config.VOLSCALE\n }\n },\n data() {\n return {}\n }\n\n}\n</script>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Volume.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Volume.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./Volume.vue?vue&type=script&lang=js&\"\nexport * from \"./Volume.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('4e8ce074')) {\n api.createRecord('4e8ce074', component.options)\n } else {\n api.reload('4e8ce074', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"src/components/overlays/Volume.vue\"\nexport default component.exports","<script>\n\n// Data section splitters (with labels)\n\nimport Overlay from '../../mixins/overlay.js'\n\nexport default {\n name: 'Splitters',\n mixins: [Overlay],\n methods: {\n meta_info() {\n return { author: 'C451', version: '1.0.1' }\n },\n draw(ctx) {\n let layout = this.$props.layout\n ctx.lineWidth = this.line_width\n ctx.strokeStyle = this.line_color\n\n this.$props.data.forEach((p, i) => {\n ctx.beginPath()\n let x = layout.t2screen(p[0]) // x - Mapping\n ctx.setLineDash([10, 10])\n ctx.moveTo(x, 0)\n ctx.lineTo(x, this.layout.height)\n ctx.stroke()\n if (p[1]) this.draw_label(ctx, x, p)\n })\n },\n\n draw_label(ctx, x, p) {\n\n let side = p[2] ? 1 : -1\n x += 2.5 * side\n\n ctx.font = this.new_font\n\n let pos = p[4] || this.y_position\n let w = ctx.measureText(p[1]).width + 10\n let y = this.layout.height * (1.0 - pos)\n\n y = Math.floor(y)\n\n ctx.fillStyle = p[3] || this.flag_color\n\n ctx.beginPath()\n ctx.moveTo(x, y)\n ctx.lineTo(x + 10 * side, y - 10 * side)\n ctx.lineTo(x + (w + 10) * side, y - 10 * side)\n ctx.lineTo(x + (w + 10) * side, y + 10 * side)\n ctx.lineTo(x + 10 * side, y + 10 * side)\n ctx.closePath()\n ctx.fill()\n\n ctx.fillStyle = this.label_color\n ctx.textAlign = side < 0 ? 'right' : 'left'\n ctx.fillText(p[1], x + 15 * side, y + 4)\n },\n use_for() { return ['Splitters'] }\n\n },\n // Define internal setting & constants here\n computed: {\n sett() {\n return this.$props.settings\n },\n new_font() {\n return this.sett.font ||\n '12px ' + this.$props.font.split('px').pop()\n },\n flag_color() {\n return this.sett.flagColor || '#4285f4'\n },\n label_color() {\n return this.sett.labelColor || '#fff'\n },\n line_color() {\n return this.sett.lineColor || '#4285f4'\n },\n line_width() {\n return this.sett.lineWidth || 1.0\n },\n y_position() {\n return this.sett.yPosition || 0.9\n }\n },\n data() {\n return {}\n }\n}\n\n</script>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Splitters.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Splitters.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./Splitters.vue?vue&type=script&lang=js&\"\nexport * from \"./Splitters.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('758c18e0')) {\n api.createRecord('758c18e0', component.options)\n } else {\n api.reload('758c18e0', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"src/components/overlays/Splitters.vue\"\nexport default component.exports","// Keyboard event handler for overlay\n\nexport default class Keys {\n\n constructor(comp) {\n this.comp = comp\n this.map = {}\n this.listeners = 0\n this.keymap = {}\n }\n\n on(name, handler) {\n if (!handler) return\n this.map[name] = this.map[name] || []\n this.map[name].push(handler)\n this.listeners++\n }\n\n // Called by grid.js\n emit(name, event) {\n if (name in this.map) {\n for (var f of this.map[name]) {\n f(event)\n }\n }\n if (name === 'keydown') {\n if (!this.keymap[event.key]) {\n this.emit(event.key)\n }\n this.keymap[event.key] = true\n }\n if (name === 'keyup') {\n this.keymap[event.key] = false\n }\n }\n\n pressed(key) {\n return this.keymap[key]\n }\n\n}\n","\n// Usuful stuff for creating tools. Include as mixin\n\nimport Keys from '../stuff/keys.js'\nimport Utils from '../stuff/utils.js'\n\nexport default {\n methods: {\n init_tool() {\n // Collision functions (float, float) => bool,\n this.collisions = []\n this.pins = []\n this.mouse.on('mousemove', e => {\n if (this.collisions.some(f => f(\n this.mouse.x, this.mouse.y,\n ))) {\n this.show_pins = true\n } else {\n this.show_pins = false\n }\n if (this.drag) this.drag_update()\n })\n\n this.mouse.on('mousedown', e => {\n if (Utils.default_prevented(e)) return\n if (this.collisions.some(f => f(\n this.mouse.x, this.mouse.y,\n ))) {\n if (!this.selected) {\n this.$emit('object-selected')\n }\n this.start_drag()\n e.preventDefault()\n this.pins.forEach(x => x.mousedown(e, true))\n }\n })\n this.mouse.on('mouseup', e => {\n this.drag = null\n this.$emit('scroll-lock', false)\n })\n\n this.keys = new Keys(this)\n this.keys.on('Delete', this.remove_tool)\n this.keys.on('Backspace', this.remove_tool)\n\n this.show_pins = false\n this.drag = null\n },\n render_pins(ctx) {\n if (this.selected || this.show_pins) {\n this.pins.forEach(x => x.draw(ctx))\n }\n },\n set_state(name) {\n this.$emit('change-settings', {\n $state: name\n })\n },\n watch_uuid(n, p) {\n // If layer $uuid is changed, then re-init\n // pins & collisions\n if (n.$uuid !== p.$uuid) {\n for (var p of this.pins) p.re_init()\n this.collisions = []\n this.show_pins = false\n this.drag = null\n }\n },\n pre_draw() {\n // Delete all collision functions before\n // the draw() call and let primitives set\n // them again\n this.collisions = []\n },\n remove_tool() {\n if (this.selected) this.$emit('remove-tool')\n },\n start_drag() {\n this.$emit('scroll-lock', true)\n let cursor = this.$props.cursor\n this.drag = { t: cursor.t, y$: cursor.y$ }\n this.pins.forEach(x => x.rec_position())\n },\n drag_update() {\n let dt = this.$props.cursor.t - this.drag.t\n let dy = this.$props.cursor.y$ - this.drag.y$\n this.pins.forEach(x => x.update_from(\n [x.t1 + dt, x.y$1 + dy], true\n ))\n }\n },\n computed: {\n // Settings starting with $ are reserved\n selected() {\n return this.$props.settings.$selected\n },\n state() {\n return this.$props.settings.$state\n },\n }\n}\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","// Semi-automatic pin object. For stretching things.\n\nimport Utils from '../../stuff/utils.js'\n\nexport default class Pin {\n\n // (Comp reference, a name in overlay settings,\n // pin parameters)\n constructor(comp, name, params = {}) {\n\n this.RADIUS = comp.$props.config.PIN_RADIUS || 5.5\n this.RADIUS_SQ = Math.pow(this.RADIUS + 7, 2)\n\n if (Utils.is_mobile) {\n this.RADIUS += 2\n this.RADIUS_SQ *= 2.5\n }\n\n this.COLOR_BACK = comp.$props.colors.back\n this.COLOR_BR = comp.$props.colors.text\n\n this.comp = comp\n this.layout = comp.layout\n this.mouse = comp.mouse\n this.name = name\n this.state = params.state || 'settled'\n this.hidden = params.hidden || false\n\n this.mouse.on('mousemove', e => this.mousemove(e))\n this.mouse.on('mousedown', e => this.mousedown(e))\n this.mouse.on('mouseup', e => this.mouseup(e))\n\n if (comp.state === 'finished') {\n this.state = 'settled'\n this.update_from(comp.$props.settings[name])\n } else {\n this.update()\n }\n\n if (this.state !== 'settled') {\n this.comp.$emit('scroll-lock', true)\n }\n }\n\n re_init() {\n this.update_from(\n this.comp.$props.settings[this.name]\n )\n }\n\n draw(ctx) {\n if (this.hidden) return\n switch (this.state) {\n case 'tracking':\n break\n case 'dragging':\n if (!this.moved) this.draw_circle(ctx)\n break\n case 'settled':\n this.draw_circle(ctx)\n break\n }\n }\n\n draw_circle(ctx) {\n\n this.layout = this.comp.layout\n if (this.comp.selected) {\n var r = this.RADIUS, lw = 1.5\n } else {\n var r = this.RADIUS * 0.95, lw = 1\n }\n\n ctx.lineWidth = lw\n ctx.strokeStyle = this.COLOR_BR\n ctx.fillStyle = this.COLOR_BACK\n ctx.beginPath()\n ctx.arc(\n this.x = this.layout.t2screen(this.t),\n this.y = this.layout.$2screen(this.y$),\n r + 0.5, 0, Math.PI * 2, true)\n ctx.fill()\n ctx.stroke()\n }\n\n update() {\n\n this.y$ = this.comp.$props.cursor.y$\n this.y = this.comp.$props.cursor.y\n this.t = this.comp.$props.cursor.t\n this.x = this.comp.$props.cursor.x\n\n // Save pin as time in IB mode\n //if (this.layout.ti_map.ib) {\n // this.t = this.layout.ti_map.i2t(this.t )\n //}\n\n // Reset the settings attahed to the pin (position)\n this.comp.$emit('change-settings', {\n [this.name]: [this.t, this.y$]\n })\n }\n\n update_from(data, emit = false) {\n\n if (!data) return\n this.layout = this.comp.layout\n\n this.y$ = data[1]\n this.y = this.layout.$2screen(this.y$)\n this.t = data[0]\n this.x = this.layout.t2screen(this.t)\n\n // TODO: Save pin as time in IB mode\n //if (this.layout.ti_map.ib) {\n // this.t = this.layout.ti_map.i2t(this.t )\n //}\n\n if (emit) this.comp.$emit('change-settings', {\n [this.name]: [this.t, this.y$]\n })\n\n }\n\n rec_position() {\n this.t1 = this.t\n this.y$1 = this.y$\n }\n\n mousemove(event) {\n\n switch(this.state) {\n case 'tracking':\n case 'dragging':\n this.moved = true\n this.update()\n break\n }\n\n\n }\n\n mousedown(event, force = false) {\n if (Utils.default_prevented(event) && !force) return\n switch (this.state) {\n case 'tracking':\n this.state = 'settled'\n if (this.on_settled) this.on_settled()\n this.comp.$emit('scroll-lock', false)\n break\n case 'settled':\n if (this.hidden) return\n if (this.hover()) {\n this.state = 'dragging'\n this.moved = false\n this.comp.$emit('scroll-lock', true)\n this.comp.$emit('object-selected')\n }\n break\n }\n if (this.hover()) {\n event.preventDefault()\n }\n }\n\n mouseup(event) {\n switch (this.state) {\n case 'dragging':\n this.state = 'settled'\n if (this.on_settled) this.on_settled()\n this.comp.$emit('scroll-lock', false)\n break\n }\n }\n\n on(name, handler) {\n switch (name) {\n case 'settled':\n this.on_settled = handler\n break\n }\n }\n\n hover() {\n let x = this.x\n let y = this.y\n return (\n (x - this.mouse.x) * (x - this.mouse.x) +\n (y - this.mouse.y) * (y - this.mouse.y)\n ) < this.RADIUS_SQ\n }\n\n}\n","\n// Draws a segment, adds corresponding collision f-n\n\nimport Math2 from '../../stuff/math.js'\nimport Utils from '../../stuff/utils.js'\n\nexport default class Seg {\n\n // Overlay ref, canvas ctx\n constructor(overlay, ctx) {\n this.ctx = ctx\n this.comp = overlay\n this.T = overlay.$props.config.TOOL_COLL\n if (Utils.is_mobile) this.T *= 2\n }\n\n // p1[t, $], p2[t, $] (time-price coordinates)\n draw(p1, p2) {\n\n const layout = this.comp.$props.layout\n\n let x1 = layout.t2screen(p1[0])\n let y1 = layout.$2screen(p1[1])\n let x2 = layout.t2screen(p2[0])\n let y2 = layout.$2screen(p2[1])\n\n this.ctx.moveTo(x1, y1)\n this.ctx.lineTo(x2, y2)\n\n this.comp.collisions.push(\n this.make([x1, y1], [x2, y2])\n )\n }\n\n // Collision function. x, y - mouse coord.\n make(p1, p2) {\n return (x, y) => {\n return Math2.point2seg(\n [x, y], p1, p2\n ) < this.T\n }\n }\n}\n","\n// Draws a line, adds corresponding collision f-n\n\nimport Math2 from '../../stuff/math.js'\nimport Utils from '../../stuff/utils.js'\n\nexport default class Line {\n\n // Overlay ref, canvas ctx\n constructor(overlay, ctx) {\n this.ctx = ctx\n this.comp = overlay\n this.T = overlay.$props.config.TOOL_COLL\n if (Utils.is_mobile) this.T *= 2\n }\n\n // p1[t, $], p2[t, $] (time-price coordinates)\n draw(p1, p2) {\n\n const layout = this.comp.$props.layout\n\n let x1 = layout.t2screen(p1[0])\n let y1 = layout.$2screen(p1[1])\n let x2 = layout.t2screen(p2[0])\n let y2 = layout.$2screen(p2[1])\n\n this.ctx.moveTo(x1, y1)\n this.ctx.lineTo(x2, y2)\n\n let w = layout.width\n let h = layout.height\n // TODO: transform k (angle) to screen ratio\n // (this requires a new a2screen function)\n let k = (y2 - y1) / (x2 - x1)\n let s = Math.sign(x2 - x1 || y2 - y1)\n let dx = w * s * 2\n let dy = w * k * s * 2\n if (dy === Infinity) { dx = 0, dy = h * s}\n\n this.ctx.moveTo(x2, y2)\n this.ctx.lineTo(x2 + dx, y2 + dy)\n if (!this.ray) {\n this.ctx.moveTo(x1, y1)\n this.ctx.lineTo(x1 - dx, y1 - dy)\n }\n\n this.comp.collisions.push(\n this.make([x1, y1], [x2, y2])\n )\n }\n\n // Collision function. x, y - mouse coord.\n make(p1, p2) {\n let f = this.ray ?\n Math2.point2ray.bind(Math2) :\n Math2.point2line.bind(Math2)\n return (x, y) => {\n return f(\n [x, y], p1, p2\n ) < this.T\n }\n }\n}\n","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import _typeof from \"@babel/runtime/helpers/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","\n// Draws a ray, adds corresponding collision f-n\n\nimport Line from './line.js'\n\nexport default class Ray extends Line {\n constructor(overlay, ctx) {\n super(overlay, ctx)\n this.ray = true\n }\n}\n","<script>\n// Line drawing tool\n// TODO: make an angle-snap when \"Shift\" is pressed\n\nimport Overlay from '../../mixins/overlay.js'\nimport Tool from '../../mixins/tool.js'\nimport Icons from '../../stuff/icons.json'\nimport Pin from '../primitives/pin.js'\nimport Seg from '../primitives/seg.js'\nimport Line from '../primitives/line.js'\nimport Ray from '../primitives/ray.js'\n\nexport default {\n name: 'LineTool',\n mixins: [Overlay, Tool],\n methods: {\n meta_info() {\n return { author: 'C451', version: '1.1.0' }\n },\n tool() {\n return {\n // Descriptor for the tool\n group: 'Lines', icon: Icons['segment.png'],\n type: 'Segment',\n hint: 'This hint will be shown on hover',\n data: [], // Default data\n settings: {}, // Default settings\n // Modifications\n mods: {\n 'Extended': {\n // Rewrites the default setting fields\n settings: { extended: true },\n icon: Icons['extended.png']\n },\n 'Ray': {\n // Rewrites the default setting fields\n settings: { ray: true },\n icon: Icons['ray.png']\n }\n }\n }\n },\n // Called after overlay mounted\n init() {\n // First pin is settled at the mouse position\n this.pins.push(new Pin(this, 'p1'))\n // Second one is following mouse until it clicks\n this.pins.push(new Pin(this, 'p2', {\n state: 'tracking'\n }))\n this.pins[1].on('settled', () => {\n // Call when current tool drawing is finished\n // (Optionally) reset the mode back to 'Cursor'\n this.set_state('finished')\n this.$emit('drawing-mode-off')\n })\n },\n draw(ctx) {\n if (!this.p1 || !this.p2) return\n\n ctx.lineWidth = this.line_width\n ctx.strokeStyle = this.color\n ctx.beginPath()\n\n if (this.sett.ray) {\n new Ray(this, ctx).draw(this.p1, this.p2)\n } else if (this.sett.extended) {\n new Line(this, ctx).draw(this.p1, this.p2)\n } else {\n new Seg(this, ctx).draw(this.p1, this.p2)\n }\n\n ctx.stroke()\n this.render_pins(ctx)\n\n },\n use_for() { return ['LineTool'] },\n data_colors() { return [this.color] }\n },\n // Define internal setting & constants here\n computed: {\n sett() {\n return this.$props.settings\n },\n p1() {\n return this.$props.settings.p1\n },\n p2() {\n return this.$props.settings.p2\n },\n line_width() {\n return this.sett.lineWidth || 0.9\n },\n color() {\n return this.sett.color || '#42b28a'\n }\n },\n data() {\n return {}\n }\n\n}\n</script>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LineTool.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LineTool.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./LineTool.vue?vue&type=script&lang=js&\"\nexport * from \"./LineTool.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('7659e350')) {\n api.createRecord('7659e350', component.options)\n } else {\n api.reload('7659e350', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"src/components/overlays/LineTool.vue\"\nexport default component.exports","<script>\n// Price/Time measurment tool\n\nimport Overlay from '../../mixins/overlay.js'\nimport Tool from '../../mixins/tool.js'\nimport Icons from '../../stuff/icons.json'\nimport Pin from '../primitives/pin.js'\nimport Seg from '../primitives/seg.js'\n\nexport default {\n name: 'RangeTool',\n mixins: [Overlay, Tool],\n methods: {\n meta_info() {\n return { author: 'C451', version: '2.0.1' }\n },\n tool() {\n return {\n // Descriptor for the tool\n group: 'Measurements', icon: Icons['price_range.png'],\n type: 'Price',\n hint: 'Price Range',\n data: [], // Default data\n settings: {}, // Default settings\n mods: {\n 'Time': {\n // Rewrites the default setting fields\n icon: Icons['time_range.png'],\n settings: { price: false, time: true }\n },\n 'PriceTime': {\n // Rewrites the default setting fields\n icon: Icons['price_time.png'],\n settings: { price: true, time: true }\n },\n 'ShiftMode': {\n // Rewrites the default setting fields\n settings: {\n price: true, time: true,\n shiftMode: true\n },\n hidden: true\n }\n }\n }\n },\n // Called after overlay mounted\n init() {\n // First pin is settled at the mouse position\n this.pins.push(new Pin(this, 'p1', {\n hidden: this.shift\n }))\n // Second one is following mouse until it clicks\n this.pins.push(new Pin(this, 'p2', {\n state: 'tracking',\n hidden: this.shift\n }))\n this.pins[1].on('settled', () => {\n // Call when current tool drawing is finished\n // (Optionally) reset the mode back to 'Cursor'\n this.set_state('finished')\n this.$emit('drawing-mode-off')\n // Deselect the tool in shiftMode\n if (this.shift) this._$emit('custom-event', {\n event: 'object-selected', args: []\n })\n })\n },\n draw(ctx) {\n if (!this.p1 || !this.p2) return\n\n const dir = Math.sign(this.p2[1] - this.p1[1])\n const layout = this.$props.layout\n const xm = layout.t2screen((this.p1[0] + this.p2[0]) * 0.5)\n\n ctx.lineWidth = this.line_width\n ctx.strokeStyle = this.color\n\n // Background\n ctx.fillStyle = this.back_color\n let x1 = layout.t2screen(this.p1[0])\n let y1 = layout.$2screen(this.p1[1])\n let x2 = layout.t2screen(this.p2[0])\n let y2 = layout.$2screen(this.p2[1])\n ctx.fillRect(x1, y1, x2 - x1, y2 - y1)\n\n if (this.price) this.vertical(ctx, x1, y1, x2, y2, xm)\n if (this.time) this.horizontal(ctx, x1, y1, x2, y2, xm)\n\n this.draw_value(ctx, dir, xm, y2)\n\n this.render_pins(ctx)\n\n },\n vertical(ctx, x1, y1, x2, y2, xm) {\n\n const layout = this.$props.layout\n const dir = Math.sign(this.p2[1] - this.p1[1])\n\n ctx.beginPath()\n\n if (!this.shift) {\n // Top\n new Seg(this, ctx).draw(\n [this.p1[0], this.p2[1]], [this.p2[0], this.p2[1]]\n )\n // Bottom\n new Seg(this, ctx).draw(\n [this.p1[0], this.p1[1]], [this.p2[0], this.p1[1]]\n )\n }\n\n // Vertical Arrow\n ctx.moveTo(xm - 4, y2 + 5 * dir)\n ctx.lineTo(xm, y2)\n ctx.lineTo(xm + 4, y2 + 5 * dir)\n\n ctx.stroke()\n\n // Vertical Line\n ctx.beginPath()\n ctx.setLineDash([5, 5])\n new Seg(this, ctx).draw(\n [(this.p1[0] + this.p2[0]) * 0.5, this.p2[1]],\n [(this.p1[0] + this.p2[0]) * 0.5, this.p1[1]]\n )\n ctx.stroke()\n ctx.setLineDash([])\n\n },\n horizontal(ctx, x1, y1, x2, y2, xm) {\n\n const layout = this.$props.layout\n const xdir = Math.sign(this.p2[0] - this.p1[0])\n const ym = (\n layout.$2screen(this.p1[1]) +\n layout.$2screen(this.p2[1])\n ) / 2\n\n ctx.beginPath()\n\n if (!this.shift) {\n // Left\n new Seg(this, ctx).draw(\n [this.p1[0], this.p1[1]], [this.p1[0], this.p2[1]]\n )\n // Right\n new Seg(this, ctx).draw(\n [this.p2[0], this.p1[1]], [this.p2[0], this.p2[1]]\n )\n }\n\n // Horizontal Arrow\n ctx.moveTo(x2 - 5 * xdir, ym - 4)\n ctx.lineTo(x2, ym)\n ctx.lineTo(x2 - 5 * xdir, ym + 4)\n\n ctx.stroke()\n\n // Horizontal Line\n ctx.beginPath()\n ctx.setLineDash([5, 5])\n ctx.moveTo(x1, ym)\n ctx.lineTo(x2, ym)\n ctx.stroke()\n ctx.setLineDash([])\n\n },\n // WTF? I know dude, a lot of shitty code here\n draw_value(ctx, dir, xm, y) {\n ctx.font = this.new_font\n // Price delta (anf percent)\n let d$ = (this.p2[1] - this.p1[1]).toFixed(this.prec)\n let p = (100 * (this.p2[1] / this.p1[1] - 1)).toFixed(this.prec)\n // Map interval to the actual tf (in ms)\n let f = t => this.layout.ti_map.smth2t(t)\n let dt = f(this.p2[0]) - f(this.p1[0])\n let tf = this.layout.ti_map.tf\n // Bars count (through the candle index)\n let f2 = t => {\n let c = this.layout.c_magnet(t)\n let cn = this.layout.candles ||\n this.layout.master_grid.candles\n return cn.indexOf(c)\n }\n // Bars count (and handling the negative values)\n let b = f2(this.p2[0]) - f2(this.p1[0])\n // Format time delta\n // Format time delta\n let dtstr = this.t2str(dt)\n let text = []\n if (this.price) text.push(`${d$} (${p}%)`)\n if (this.time) text.push(`${b} bars, ${dtstr}`)\n text = text.join('\\n')\n // \"Multiple\" fillText\n let lines = text.split('\\n')\n let w = Math.max(\n ...lines.map(x => ctx.measureText(x).width + 20),\n 100)\n let n = lines.length\n let h = 20 * n\n ctx.fillStyle = this.value_back\n ctx.fillRect(xm - w * 0.5, y - (10+h) * dir, w, h * dir)\n ctx.fillStyle = this.value_color\n ctx.textAlign = 'center'\n lines.forEach((l, i) => {\n ctx.fillText(l, xm, y + (dir > 0 ? 20*i-20*n+5 : 20*i+25))\n })\n },\n // Formats time from ms to `1D 12h` for example\n t2str(t) {\n let sign = Math.sign(t)\n let abs = Math.abs(t)\n let tfs = [\n [1000, 's', 60],\n [60000, 'm', 60],\n [3600000, 'h', 24],\n [86400000, 'D', 7],\n [604800000, 'W', 4],\n [2592000000, 'M', 12],\n [31536000000, 'Y', Infinity],\n [Infinity, 'Eternity', Infinity]\n ]\n for (var i = 0; i < tfs.length; i++) {\n tfs[i][0] = Math.floor(abs / tfs[i][0])\n if (tfs[i][0] === 0) {\n let p1 = tfs[i - 1]\n let p2 = tfs[i - 2]\n let txt = sign < 0 ? '-' : ''\n if (p1) {\n txt += p1.slice(0,2).join('')\n }\n let n2 = p2 ? p2[0] - p1[0] * p2[2] : 0\n if (p2 && n2) {\n txt += ' '\n txt += `${n2}${p2[1]}`\n }\n return txt\n }\n }\n },\n use_for() { return ['RangeTool'] },\n data_colors() { return [this.color] }\n },\n // Define internal setting & constants here\n computed: {\n sett() {\n return this.$props.settings\n },\n p1() {\n return this.$props.settings.p1\n },\n p2() {\n return this.$props.settings.p2\n },\n line_width() {\n return this.sett.lineWidth || 0.9\n },\n color() {\n return this.sett.color ||\n this.$props.colors.cross\n },\n back_color() {\n return this.sett.backColor || '#9b9ba316'\n },\n value_back() {\n return this.sett.valueBack || '#9b9ba316'\n },\n value_color() {\n return this.sett.valueColor ||\n this.$props.colors.text\n },\n prec() {\n return this.sett.precision || 2\n },\n new_font() {\n return '12px ' + this.$props.font.split('px').pop()\n },\n price() {\n return 'price' in this.sett ? this.sett.price : true\n },\n time() {\n return 'time' in this.sett ? this.sett.time : false\n },\n shift() {\n return this.sett.shiftMode\n }\n },\n data() {\n return {}\n }\n\n}\n</script>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RangeTool.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RangeTool.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./RangeTool.vue?vue&type=script&lang=js&\"\nexport * from \"./RangeTool.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('03d9c4f9')) {\n api.createRecord('03d9c4f9', component.options)\n } else {\n api.reload('03d9c4f9', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"src/components/overlays/RangeTool.vue\"\nexport default component.exports","<script>\n// Sets up all layers/overlays for the grid with 'grid_id'\n\nimport Grid from './js/grid.js'\nimport Canvas from '../mixins/canvas.js'\nimport UxList from '../mixins/uxlist.js'\nimport Crosshair from './Crosshair.vue'\nimport KeyboardListener from './KeyboardListener.vue'\nimport UxLayer from './UxLayer.vue'\n\nimport Spline from \"./overlays/Spline.vue\"\nimport Splines from \"./overlays/Splines.vue\"\nimport Range from \"./overlays/Range.vue\"\nimport Trades from \"./overlays/Trades.vue\"\nimport Channel from \"./overlays/Channel.vue\"\nimport Segment from \"./overlays/Segment.vue\"\nimport Candles from \"./overlays/Candles.vue\"\nimport Volume from \"./overlays/Volume.vue\"\nimport Splitters from \"./overlays/Splitters.vue\"\nimport LineTool from \"./overlays/LineTool.vue\"\nimport RangeTool from \"./overlays/RangeTool.vue\"\n\n\nexport default {\n name: 'Grid',\n props: [\n 'sub', 'layout', 'range', 'interval', 'cursor', 'colors', 'overlays',\n 'width', 'height', 'data', 'grid_id', 'y_transform', 'font', 'tv_id',\n 'config', 'meta', 'shaders'\n ],\n mixins: [Canvas, UxList],\n components: { Crosshair, KeyboardListener },\n created() {\n // List of all possible overlays (builtin + custom)\n this._list = [\n Spline, Splines, Range, Trades, Channel, Segment,\n Candles, Volume, Splitters, LineTool, RangeTool\n ]\n .concat(this.$props.overlays)\n this._registry = {}\n\n // We need to know which components we will use.\n // Custom overlay components overwrite built-ins:\n var tools = []\n this._list.forEach((x, i) => {\n let use_for = x.methods.use_for()\n if (x.methods.tool) tools.push({\n use_for, info: x.methods.tool()\n })\n use_for.forEach(indicator => {\n this._registry[indicator] = i\n })\n })\n this.$emit('custom-event', {\n event: 'register-tools', args: tools\n })\n this.$on('custom-event', e =>\n this.on_ux_event(e, 'grid'))\n },\n beforeDestroy () {\n if (this.renderer) this.renderer.destroy()\n },\n mounted() {\n const el = this.$refs['canvas']\n this.renderer = new Grid(el, this)\n this.setup()\n this.$nextTick(() => this.redraw())\n\n },\n render(h) {\n const id = this.$props.grid_id\n const layout = this.$props.layout.grids[id]\n return this.create_canvas(h, `grid-${id}`, {\n position: {\n x: 0,\n y: layout.offset || 0\n },\n attrs: {\n width: layout.width,\n height: layout.height,\n overflow: 'hidden'\n },\n style: {\n backgroundColor: this.$props.colors.back\n },\n hs: [\n h(Crosshair, {\n props: this.common_props(),\n on: this.layer_events\n }),\n h(KeyboardListener, {\n on: this.keyboard_events\n }),\n h(UxLayer, {\n props: {\n id, tv_id: this.$props.tv_id,\n uxs: this.uxs,\n colors: this.$props.colors,\n config: this.$props.config,\n updater: Math.random()\n },\n on: {\n 'custom-event': this.emit_ux_event\n }\n })\n ].concat(this.get_overlays(h))\n })\n },\n methods: {\n new_layer(layer) {\n this.$nextTick(() => this.renderer.new_layer(layer))\n },\n del_layer(layer) {\n this.$nextTick(() => this.renderer.del_layer(layer))\n const grid_id = this.$props.grid_id\n this.$emit('custom-event', {\n event: 'remove-shaders',\n args: [grid_id, layer]\n })\n // TODO: close all interfaces\n this.$emit('custom-event', {\n event: 'remove-layer-meta',\n args: [grid_id, layer]\n })\n this.remove_all_ux(layer)\n },\n get_overlays(h) {\n // Distributes overlay data & settings according\n // to this._registry; returns compo list\n let comp_list = [], count = {}\n\n for (var d of this.$props.data) {\n let comp = this._list[this._registry[d.type]]\n if (comp) {\n if(comp.methods.calc) {\n comp = this.inject_renderer(comp)\n }\n comp_list.push({\n cls: comp,\n type: d.type,\n data: d.data,\n settings: d.settings,\n i0: d.i0,\n tf: d.tf,\n last: d.last\n })\n count[d.type] = 0\n }\n }\n return comp_list.map((x, i) => h(x.cls, {\n on: this.layer_events,\n attrs: Object.assign(this.common_props(), {\n id: `${x.type}_${count[x.type]++}`,\n type: x.type,\n data: x.data,\n settings: x.settings,\n i0: x.i0,\n tf: x.tf,\n num: i,\n grid_id: this.$props.grid_id,\n meta: this.$props.meta,\n last: x.last\n })\n })\n )\n },\n common_props() {\n return {\n cursor: this.$props.cursor,\n colors: this.$props.colors,\n layout: this.$props.layout.grids[this.$props.grid_id],\n interval: this.$props.interval,\n sub: this.$props.sub,\n font: this.$props.font,\n config: this.$props.config,\n }\n },\n emit_ux_event(e) {\n let e_pass = this.on_ux_event(e, 'grid')\n if (e_pass) this.$emit('custom-event', e)\n },\n // Replace the current comp with 'renderer'\n inject_renderer(comp) {\n let src = comp.methods.calc()\n if (!src.conf || !src.conf.renderer || comp.__renderer__) {\n return comp\n }\n\n // Search for an overlay with the target 'name'\n let f = this._list.find(x => x.name === src.conf.renderer)\n if (!f) return comp\n\n comp.mixins.push(f)\n comp.__renderer__ = src.conf.renderer\n\n return comp\n }\n },\n computed: {\n is_active() {\n return this.$props.cursor.t !== undefined &&\n this.$props.cursor.grid_id === this.$props.grid_id\n }\n },\n watch: {\n range: {\n handler: function() {\n // TODO: Left-side render lag fix:\n // Overlay data is updated one tick later than\n // the main sub. Fast fix is to delay redraw()\n // call. It will be a solution until a better\n // one comes by.\n this.$nextTick(() => this.redraw())\n },\n deep: true\n },\n cursor: {\n handler: function() {\n if (!this.$props.cursor.locked) this.redraw()\n },\n deep: true\n },\n overlays: {\n // Track changes in calc() functions\n handler: function(ovs) {\n for (var ov of ovs) {\n for (var comp of this.$children) {\n if (typeof comp.id !== 'string') continue\n let tuple = comp.id.split('_')\n tuple.pop()\n if (tuple.join('_') === ov.name) {\n comp.calc = ov.methods.calc\n if (!comp.calc) continue\n let calc = comp.calc.toString()\n if (calc !== ov.__prevscript__) {\n comp.exec_script()\n }\n ov.__prevscript__ = calc\n }\n }\n }\n },\n deep: true\n },\n // Redraw on the shader list change\n shaders(n, p) { this.redraw() }\n },\n data() {\n return {\n layer_events: {\n 'new-grid-layer': this.new_layer,\n 'delete-grid-layer': this.del_layer,\n 'show-grid-layer': d => {\n this.renderer.show_hide_layer(d)\n this.redraw()\n },\n 'redraw-grid': this.redraw,\n 'layer-meta-props': d => this.$emit('layer-meta-props', d),\n 'custom-event': d => this.$emit('custom-event', d)\n },\n keyboard_events: {\n 'register-kb-listener': event => {\n this.$emit('register-kb-listener', event)\n },\n 'remove-kb-listener': event => {\n this.$emit('remove-kb-listener', event)\n },\n 'keyup': event => {\n if (!this.is_active) return\n this.renderer.propagate('keyup', event)\n },\n 'keydown': event => {\n if (!this.is_active) return // TODO: is this neeeded?\n this.renderer.propagate('keydown', event)\n },\n 'keypress': event => {\n if (!this.is_active) return\n this.renderer.propagate('keypress', event)\n },\n }\n }\n }\n}\n\n</script>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Grid.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Grid.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./Grid.vue?vue&type=script&lang=js&\"\nexport * from \"./Grid.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('2de7b714')) {\n api.createRecord('2de7b714', component.options)\n } else {\n api.reload('2de7b714', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"src/components/Grid.vue\"\nexport default component.exports","import * as Hammer from 'hammerjs'\nimport Utils from '../../stuff/utils.js'\nimport math from '../../stuff/math.js'\n\nvar PANHEIGHT\n\nexport default class Sidebar {\n\n constructor(canvas, comp, side = 'right') {\n\n PANHEIGHT = comp.config.PANHEIGHT\n\n this.canvas = canvas\n this.ctx = canvas.getContext('2d')\n this.comp = comp\n this.$p = comp.$props\n this.data = this.$p.sub\n this.range = this.$p.range\n this.id = this.$p.grid_id\n this.layout = this.$p.layout.grids[this.id]\n\n this.side = side\n this.listeners()\n\n }\n\n listeners() {\n let mc = this.mc = new Hammer.Manager(this.canvas)\n mc.add(new Hammer.Pan({\n direction: Hammer.DIRECTION_VERTICAL,\n threshold: 0\n }))\n\n mc.add( new Hammer.Tap({\n event: 'doubletap',\n taps: 2,\n posThreshold: 50\n }))\n\n mc.on('panstart', event => {\n if (this.$p.y_transform) {\n this.zoom = this.$p.y_transform.zoom\n } else {\n this.zoom = 1.0\n }\n this.y_range = [\n this.layout.$_hi,\n this.layout.$_lo\n ]\n this.drug = {\n y: event.center.y,\n z: this.zoom,\n mid: math.log_mid(this.y_range, this.layout.height),\n A: this.layout.A,\n B: this.layout.B\n }\n })\n\n mc.on('panmove', event => {\n if (this.drug) {\n this.zoom = this.calc_zoom(event)\n this.comp.$emit('sidebar-transform', {\n grid_id: this.id,\n zoom: this.zoom,\n auto: false,\n range: this.calc_range(),\n drugging: true\n })\n this.update()\n }\n })\n\n mc.on('panend', () => {\n this.drug = null\n this.comp.$emit('sidebar-transform', {\n grid_id: this.id,\n drugging: false\n })\n })\n\n mc.on('doubletap', () => {\n this.comp.$emit('sidebar-transform', {\n grid_id: this.id,\n zoom: 1.0,\n auto: true\n })\n this.zoom = 1.0\n this.update()\n })\n\n // TODO: Do later for mobile version\n\n }\n\n update() {\n\n // Update reference to the grid\n this.layout = this.$p.layout.grids[this.id]\n\n var points = this.layout.ys\n var x, y, w, h, side = this.side\n var sb = this.layout.sb\n\n //this.ctx.fillStyle = this.$p.colors.back\n this.ctx.font = this.$p.font\n\n switch(side) {\n case 'left':\n x = 0\n y = 0\n w = Math.floor(sb)\n h = this.layout.height\n\n //this.ctx.fillRect(x, y, w, h)\n this.ctx.clearRect(x, y, w, h)\n\n this.ctx.strokeStyle = this.$p.colors.scale\n\n this.ctx.beginPath()\n this.ctx.moveTo(x + 0.5, 0)\n this.ctx.lineTo(x + 0.5, h)\n this.ctx.stroke()\n\n break\n case 'right':\n x = 0\n y = 0\n w = Math.floor(sb)\n h = this.layout.height\n //this.ctx.fillRect(x, y, w, h)\n this.ctx.clearRect(x, y, w, h)\n\n this.ctx.strokeStyle = this.$p.colors.scale\n\n this.ctx.beginPath()\n this.ctx.moveTo(x + 0.5, 0)\n this.ctx.lineTo(x + 0.5, h)\n this.ctx.stroke()\n break\n }\n\n this.ctx.fillStyle = this.$p.colors.text\n this.ctx.beginPath()\n\n for (var p of points) {\n\n if (p[0] > this.layout.height) continue\n\n var x1 = side === 'left' ? w - 0.5 : x - 0.5\n var x2 = side === 'left' ? x1 - 4.5 : x1 + 4.5\n\n this.ctx.moveTo(x1, p[0] - 0.5)\n this.ctx.lineTo(x2, p[0] - 0.5)\n\n var offst = side === 'left' ? - 10 : 10\n this.ctx.textAlign = side === 'left' ? 'end' : 'start'\n let d = this.layout.prec\n this.ctx.fillText(p[1].toFixed(d), x1 + offst, p[0] + 4)\n }\n\n this.ctx.stroke()\n\n if (this.$p.grid_id) this.upper_border()\n\n this.apply_shaders()\n\n if (this.$p.cursor.y && this.$p.cursor.y$) this.panel()\n\n }\n\n apply_shaders() {\n let layout = this.$p.layout.grids[this.id]\n let props = {\n layout: layout,\n cursor: this.$p.cursor\n }\n for (var s of this.$p.shaders) {\n this.ctx.save()\n s.draw(this.ctx, props)\n this.ctx.restore()\n }\n }\n\n upper_border() {\n this.ctx.strokeStyle = this.$p.colors.scale\n this.ctx.beginPath()\n this.ctx.moveTo(0, 0.5)\n this.ctx.lineTo(this.layout.width, 0.5)\n this.ctx.stroke()\n }\n\n // A gray bar behind the current price\n panel() {\n\n if (this.$p.cursor.grid_id !== this.layout.id) {\n return\n }\n\n let lbl = this.$p.cursor.y$.toFixed(this.layout.prec)\n this.ctx.fillStyle = this.$p.colors.panel\n\n let panwidth = this.layout.sb + 1\n\n let x = - 0.5\n let y = this.$p.cursor.y - PANHEIGHT * 0.5 - 0.5\n let a = 7\n this.ctx.fillRect(x - 0.5, y, panwidth, PANHEIGHT)\n this.ctx.fillStyle = this.$p.colors.textHL\n this.ctx.textAlign = 'left'\n this.ctx.fillText(lbl, a, y + 15)\n\n }\n\n calc_zoom(event) {\n let d = this.drug.y - event.center.y\n let speed = d > 0 ? 3 : 1\n let k = 1 + speed * d / this.layout.height\n return Utils.clamp(this.drug.z * k, 0.005, 100)\n }\n\n // Not the best place to calculate y-range but\n // this is the simplest solution I found up to\n // date\n calc_range(diff1 = 1, diff2 = 1) {\n\n let z = this.zoom / this.drug.z\n let zk = (1 / z - 1) / 2\n\n let range = this.y_range.slice()\n let delta = range[0] - range[1]\n\n if (!this.layout.grid.logScale) {\n range[0] = range[0] + delta * zk * diff1\n range[1] = range[1] - delta * zk * diff2\n } else {\n\n let px_mid = this.layout.height / 2\n let new_hi = px_mid - px_mid * (1/z)\n let new_lo = px_mid + px_mid * (1/z)\n\n // Use old mapping to get a new range\n let f = y => math.exp((y - this.drug.B) / this.drug.A)\n\n let copy = range.slice()\n range[0] = f(new_hi)\n range[1] = f(new_lo)\n\n }\n\n return range\n }\n\n rezoom_range(delta, diff1, diff2) {\n\n if (!this.$p.y_transform || this.$p.y_transform.auto) return\n\n this.zoom = 1.0\n // TODO: further work (improve scaling ratio)\n if (delta < 0) delta /= 3.75 // Btw, idk why 3.75, but it works\n delta *= 0.25\n this.y_range = [\n this.layout.$_hi,\n this.layout.$_lo\n ]\n this.drug = {\n y: 0,\n z: this.zoom,\n mid: math.log_mid(this.y_range, this.layout.height),\n A: this.layout.A,\n B: this.layout.B\n }\n this.zoom = this.calc_zoom({\n center: {\n y: delta * this.layout.height\n }\n })\n\n this.comp.$emit('sidebar-transform', {\n grid_id: this.id,\n zoom: this.zoom,\n auto: false,\n range: this.calc_range(diff1, diff2),\n drugging: true\n })\n this.drug = null\n this.comp.$emit('sidebar-transform', {\n grid_id: this.id,\n drugging: false\n })\n }\n\n destroy() {\n if (this.mc) this.mc.destroy()\n }\n\n mousemove() { }\n mouseout() { }\n mouseup() { }\n mousedown() { }\n\n}\n","<script>\n// The side bar (yep, that thing with a bunch of $$$)\n\nimport Sidebar from './js/sidebar.js'\nimport Canvas from '../mixins/canvas.js'\n\nexport default {\n name: 'Sidebar',\n props: [\n 'sub', 'layout', 'range', 'interval', 'cursor', 'colors', 'font',\n 'width', 'height', 'grid_id', 'rerender', 'y_transform', 'tv_id',\n 'config', 'shaders'\n ],\n mixins: [Canvas],\n mounted() {\n const el = this.$refs['canvas']\n this.renderer = new Sidebar(el, this)\n this.setup()\n this.redraw()\n },\n render(h) {\n const id = this.$props.grid_id\n const layout = this.$props.layout.grids[id]\n return this.create_canvas(h, `sidebar-${id}`, {\n position: {\n x: layout.width,\n y: layout.offset || 0\n },\n attrs: {\n rerender: this.$props.rerender,\n width: this.$props.width,\n height: layout.height,\n },\n style: {\n backgroundColor: this.$props.colors.back\n },\n })\n },\n watch: {\n range: {\n handler: function() { this.redraw() },\n deep: true\n },\n cursor: {\n handler: function() { this.redraw() },\n deep: true\n },\n rerender() {\n this.$nextTick(() => this.redraw())\n }\n },\n beforeDestroy () {\n if(this.renderer) this.renderer.destroy()\n }\n}\n\n</script>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Sidebar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Sidebar.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./Sidebar.vue?vue&type=script&lang=js&\"\nexport * from \"./Sidebar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('7d622f5c')) {\n api.createRecord('7d622f5c', component.options)\n } else {\n api.reload('7d622f5c', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"src/components/Sidebar.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"trading-vue-legend\", style: _vm.calc_style },\n [\n _vm.grid_id === 0\n ? _c(\n \"div\",\n {\n staticClass: \"trading-vue-ohlcv\",\n style: { \"max-width\": _vm.common.width + \"px\" }\n },\n [\n _c(\n \"span\",\n {\n staticClass: \"t-vue-title\",\n style: { color: _vm.common.colors.title }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.common.title_txt) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _vm.show_values\n ? _c(\"span\", [\n _vm._v(\"\\n O\"),\n _c(\"span\", { staticClass: \"t-vue-lspan\" }, [\n _vm._v(_vm._s(_vm.ohlcv[0]))\n ]),\n _vm._v(\"\\n H\"),\n _c(\"span\", { staticClass: \"t-vue-lspan\" }, [\n _vm._v(_vm._s(_vm.ohlcv[1]))\n ]),\n _vm._v(\"\\n L\"),\n _c(\"span\", { staticClass: \"t-vue-lspan\" }, [\n _vm._v(_vm._s(_vm.ohlcv[2]))\n ]),\n _vm._v(\"\\n C\"),\n _c(\"span\", { staticClass: \"t-vue-lspan\" }, [\n _vm._v(_vm._s(_vm.ohlcv[3]))\n ]),\n _vm._v(\"\\n V\"),\n _c(\"span\", { staticClass: \"t-vue-lspan\" }, [\n _vm._v(_vm._s(_vm.ohlcv[4]))\n ])\n ])\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.show_values\n ? _c(\n \"span\",\n {\n staticClass: \"t-vue-lspan\",\n style: { color: _vm.common.colors.text }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s((_vm.common.meta.last || [])[4]) +\n \"\\n \"\n )\n ]\n )\n : _vm._e()\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(this.indicators, function(ind) {\n return _c(\n \"div\",\n { staticClass: \"t-vue-ind\" },\n [\n _c(\"span\", { staticClass: \"t-vue-iname\" }, [\n _vm._v(_vm._s(ind.name))\n ]),\n _vm._v(\" \"),\n _c(\"button-group\", {\n attrs: {\n buttons: _vm.common.buttons,\n config: _vm.common.config,\n ov_id: ind.id,\n grid_id: _vm.grid_id,\n index: ind.index,\n tv_id: _vm.common.tv_id,\n display: ind.v\n },\n on: { \"legend-button-click\": _vm.button_click }\n }),\n _vm._v(\" \"),\n ind.v\n ? _c(\n \"span\",\n { staticClass: \"t-vue-ivalues\" },\n _vm._l(ind.values, function(v) {\n return _vm.show_values\n ? _c(\n \"span\",\n {\n staticClass: \"t-vue-lspan t-vue-ivalue\",\n style: { color: v.color }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(v.value) +\n \"\\n \"\n )\n ]\n )\n : _vm._e()\n }),\n 0\n )\n : _vm._e(),\n _vm._v(\" \"),\n ind.unk\n ? _c(\"span\", { staticClass: \"t-vue-unknown\" }, [\n _vm._v(\"\\n (Unknown type)\\n \")\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"transition\",\n { attrs: { name: \"tvjs-appear\" } },\n [\n ind.loading\n ? _c(\"spinner\", { attrs: { colors: _vm.common.colors } })\n : _vm._e()\n ],\n 1\n )\n ],\n 1\n )\n })\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"span\",\n { staticClass: \"t-vue-lbtn-grp\" },\n _vm._l(_vm.buttons, function(b, i) {\n return _c(\"legend-button\", {\n key: i,\n attrs: {\n id: b.name || b,\n tv_id: _vm.tv_id,\n ov_id: _vm.ov_id,\n grid_id: _vm.grid_id,\n index: _vm.index,\n display: _vm.display,\n icon: b.icon,\n config: _vm.config\n },\n on: { \"legend-button-click\": _vm.button_click }\n })\n }),\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"img\", {\n staticClass: \"t-vue-lbtn\",\n style: {\n width: _vm.config.L_BTN_SIZE + \"px\",\n height: _vm.config.L_BTN_SIZE + \"px\",\n margin: _vm.config.L_BTN_MARGIN\n },\n attrs: { src: _vm.base64, id: _vm.uuid },\n on: { click: _vm.onclick }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<template>\n <img class=\"t-vue-lbtn\" :src=\"base64\"\n :id=\"uuid\" :style=\"{\n width: config.L_BTN_SIZE + 'px',\n height: config.L_BTN_SIZE + 'px',\n margin: config.L_BTN_MARGIN\n }\"\n @click=\"onclick\">\n</template>\n<script>\n\nimport Icons from '../stuff/icons.json'\n\nexport default {\n name: 'LegendButton',\n props: ['id', 'tv_id', 'grid_id', 'ov_id', 'index', 'display',\n 'icon', 'config'],\n mounted() {\n },\n computed: {\n base64() {\n return this.icon || Icons[this.file_name]\n },\n file_name() {\n let id = this.$props.id\n if (this.$props.id === 'display') {\n id = this.$props.display ? 'display_on' : 'display_off'\n }\n return id + '.png'\n },\n uuid() {\n let tv = this.$props.tv_id\n let gr = this.$props.grid_id\n let ov = this.$props.ov_id\n return `${tv}-btn-g${gr}-${ov}`\n },\n data_type() {\n return this.$props.grid_id === 0 ?\n \"onchart\" : \"offchart\"\n },\n data_index() {\n return this.$props.index\n }\n },\n methods: {\n onclick() {\n this.$emit('legend-button-click', {\n button: this.$props.id,\n type: this.data_type,\n dataIndex: this.data_index,\n grid: this.$props.grid_id,\n overlay: this.$props.ov_id,\n })\n }\n }\n}\n</script>\n<style>\n.t-vue-lbtn {\n z-index: 100;\n pointer-events: all;\n cursor: pointer;\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LegendButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LegendButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LegendButton.vue?vue&type=template&id=1ad87362&\"\nimport script from \"./LegendButton.vue?vue&type=script&lang=js&\"\nexport * from \"./LegendButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LegendButton.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('1ad87362')) {\n api.createRecord('1ad87362', component.options)\n } else {\n api.reload('1ad87362', component.options)\n }\n module.hot.accept(\"./LegendButton.vue?vue&type=template&id=1ad87362&\", function () {\n api.rerender('1ad87362', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/LegendButton.vue\"\nexport default component.exports","<template>\n<span class=\"t-vue-lbtn-grp\">\n <legend-button\n v-for=\"(b, i) in buttons\" :key=\"i\"\n :id=\"b.name || b\"\n :tv_id=\"tv_id\"\n :ov_id=\"ov_id\"\n :grid_id=\"grid_id\"\n :index=\"index\"\n :display=\"display\"\n :icon=\"b.icon\"\n :config=\"config\"\n v-on:legend-button-click=\"button_click\"\n >\n </legend-button>\n</span>\n</template>\n<script>\n\nimport LegendButton from './LegendButton.vue'\n\nexport default {\n name: 'ButtonGroup',\n props: [\n 'buttons', 'tv_id', 'ov_id', 'grid_id', 'index',\n 'display', 'config'\n ],\n components: {\n LegendButton\n },\n methods: {\n button_click(event) {\n this.$emit('legend-button-click', event)\n }\n }\n}\n</script>\n<style>\n.t-vue-lbtn-grp {\n margin-left: 0.5em;\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ButtonGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ButtonGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ButtonGroup.vue?vue&type=template&id=6f826426&\"\nimport script from \"./ButtonGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./ButtonGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ButtonGroup.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('6f826426')) {\n api.createRecord('6f826426', component.options)\n } else {\n api.reload('6f826426', component.options)\n }\n module.hot.accept(\"./ButtonGroup.vue?vue&type=template&id=6f826426&\", function () {\n api.rerender('6f826426', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/ButtonGroup.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"tvjs-spinner\" },\n _vm._l(4, function(i) {\n return _c(\"div\", { key: i, style: { background: _vm.colors.text } })\n }),\n 0\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<template>\n<div class=\"tvjs-spinner\">\n <div v-for=\"i in 4\" :key=\"i\" :style=\"{background: colors.text}\">\n </div>\n</div>\n</template>\n<script>\nexport default {\n name: 'Spinner',\n props: ['colors']\n}\n</script>\n<style>\n.tvjs-spinner {\n display: inline-block;\n position: relative;\n width: 20px;\n height: 16px;\n margin: -4px 0px -1px 0px;\n opacity: 0.7;\n}\n\n.tvjs-spinner div {\n position: absolute;\n top: 8px;\n width: 4px;\n height: 4px;\n border-radius: 50%;\n animation-timing-function: cubic-bezier(1, 1, 1, 1);\n}\n\n.tvjs-spinner div:nth-child(1) {\n left: 2px;\n animation: tvjs-spinner1 0.6s infinite;\n opacity: 0.9;\n}\n\n.tvjs-spinner div:nth-child(2) {\n left: 2px;\n animation: tvjs-spinner2 0.6s infinite;\n}\n\n.tvjs-spinner div:nth-child(3) {\n left: 9px;\n animation: tvjs-spinner2 0.6s infinite;\n}\n\n.tvjs-spinner div:nth-child(4) {\n left: 16px;\n animation: tvjs-spinner3 0.6s infinite;\n opacity: 0.9;\n}\n\n@keyframes tvjs-spinner1 {\n 0% {\n transform: scale(0);\n }\n\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes tvjs-spinner3 {\n 0% {\n transform: scale(1);\n }\n\n 100% {\n transform: scale(0);\n }\n}\n\n@keyframes tvjs-spinner2 {\n 0% {\n transform: translate(0, 0);\n }\n\n 100% {\n transform: translate(7px, 0);\n }\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Spinner.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Spinner.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Spinner.vue?vue&type=template&id=39432f99&\"\nimport script from \"./Spinner.vue?vue&type=script&lang=js&\"\nexport * from \"./Spinner.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Spinner.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('39432f99')) {\n api.createRecord('39432f99', component.options)\n } else {\n api.reload('39432f99', component.options)\n }\n module.hot.accept(\"./Spinner.vue?vue&type=template&id=39432f99&\", function () {\n api.rerender('39432f99', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/Spinner.vue\"\nexport default component.exports","<template>\n<div class=\"trading-vue-legend\"\n v-bind:style=\"calc_style\">\n <div v-if=\"grid_id === 0\"\n class=\"trading-vue-ohlcv\"\n :style = \"{ 'max-width': common.width + 'px' }\">\n <span class=\"t-vue-title\"\n :style=\"{ color: common.colors.title }\">\n {{common.title_txt}}\n </span>\n <span v-if=\"show_values\">\n O<span class=\"t-vue-lspan\" >{{ohlcv[0]}}</span>\n H<span class=\"t-vue-lspan\" >{{ohlcv[1]}}</span>\n L<span class=\"t-vue-lspan\" >{{ohlcv[2]}}</span>\n C<span class=\"t-vue-lspan\" >{{ohlcv[3]}}</span>\n V<span class=\"t-vue-lspan\" >{{ohlcv[4]}}</span>\n </span>\n <span v-if=\"!show_values\" class=\"t-vue-lspan\"\n :style=\"{color: common.colors.text}\">\n {{(common.meta.last || [])[4]}}\n </span>\n </div>\n <div class=\"t-vue-ind\" v-for=\"ind in this.indicators\">\n <span class=\"t-vue-iname\">{{ind.name}}</span>\n <button-group\n v-bind:buttons=\"common.buttons\"\n v-bind:config=\"common.config\"\n v-bind:ov_id=\"ind.id\"\n v-bind:grid_id=\"grid_id\"\n v-bind:index=\"ind.index\"\n v-bind:tv_id=\"common.tv_id\"\n v-bind:display=\"ind.v\"\n v-on:legend-button-click=\"button_click\">\n </button-group>\n <span class=\"t-vue-ivalues\" v-if=\"ind.v\">\n <span class=\"t-vue-lspan t-vue-ivalue\"\n v-if=\"show_values\"\n v-for=\"v in ind.values\" :style=\"{ color: v.color }\">\n {{v.value}}\n </span>\n </span>\n <span v-if=\"ind.unk\" class=\"t-vue-unknown\">\n (Unknown type)\n </span>\n <transition name=\"tvjs-appear\">\n <spinner :colors=\"common.colors\" v-if=\"ind.loading\">\n </spinner>\n </transition>\n </div>\n</div>\n</template>\n<script>\n\nimport ButtonGroup from './ButtonGroup.vue'\nimport Spinner from './Spinner.vue'\n\nexport default {\n name: 'ChartLegend',\n props: [\n 'common', 'values', 'grid_id', 'meta_props'\n ],\n components: { ButtonGroup, Spinner },\n computed: {\n ohlcv() {\n if (!this.$props.values || !this.$props.values.ohlcv) {\n return Array(6).fill('n/a')\n }\n const prec = this.layout.prec\n\n // TODO: main the main legend more customizable\n let id = this.main_type + '_0'\n let meta = this.$props.meta_props[id] || {}\n if (meta.legend) {\n return (meta.legend() || []).map(x => x.value)\n }\n\n return [\n this.$props.values.ohlcv[1].toFixed(prec),\n this.$props.values.ohlcv[2].toFixed(prec),\n this.$props.values.ohlcv[3].toFixed(prec),\n this.$props.values.ohlcv[4].toFixed(prec),\n this.$props.values.ohlcv[5] ?\n this.$props.values.ohlcv[5].toFixed(2):\n 'n/a'\n ]\n },\n // TODO: add support for { grid: { id : N }}\n indicators() {\n const values = this.$props.values\n const f = this.format\n var types = {}\n\n return this.json_data.filter(\n x => x.settings.legend !== false && !x.main\n ).map(x => {\n if (!(x.type in types)) types[x.type] = 0\n const id = x.type + `_${types[x.type]++}`\n return {\n v: 'display' in x.settings ? x.settings.display : true,\n name: x.name || id,\n index: (this.off_data || this.json_data).indexOf(x),\n id: id,\n values: values ? f(id, values) : this.n_a(1),\n unk: !(id in (this.$props.meta_props || {})),\n loading: x.loading\n }\n })\n },\n calc_style() {\n let top = this.layout.height > 150 ? 10 : 5\n let grids = this.$props.common.layout.grids\n let w = grids[0] ? grids[0].width : undefined\n return {\n top: `${this.layout.offset + top}px`,\n width: `${w-20}px`\n }\n },\n layout() {\n const id = this.$props.grid_id\n return this.$props.common.layout.grids[id]\n },\n json_data() {\n return this.$props.common.data\n },\n off_data() {\n return this.$props.common.offchart\n },\n main_type() {\n let f = this.common.data.find(x => x.main)\n return f ? f.type : undefined\n },\n show_values() {\n return this.common.cursor.mode !== 'explore'\n }\n },\n methods: {\n format(id, values) {\n let meta = this.$props.meta_props[id] || {}\n // Matches Overlay.data_colors with the data values\n // (see Spline.vue)\n if (!values[id]) return this.n_a(1)\n\n // Custom formatter\n if (meta.legend) return meta.legend(values[id])\n\n return values[id].slice(1).map((x, i) => {\n const cs = meta.data_colors ? meta.data_colors() : []\n if (typeof x == 'number') {\n // Show 8 digits for small values\n x = x.toFixed(Math.abs(x) > 0.001 ? 4 : 8)\n }\n return {\n value: x,\n color: cs ? cs[i % cs.length] : undefined\n }\n })\n },\n n_a(len) {\n return Array(len).fill({ value: 'n/a' })\n },\n button_click(event) {\n this.$emit('legend-button-click', event)\n }\n }\n}\n</script>\n<style>\n.trading-vue-legend {\n position: relative;\n z-index: 100;\n font-size: 1.25em;\n margin-left: 10px;\n pointer-events: none;\n text-align: left;\n user-select: none;\n font-weight: 300;\n}\n@media (min-resolution: 2x) {\n .trading-vue-legend {\n font-weight: 400;\n }\n}\n.trading-vue-ohlcv {\n pointer-events: none;\n margin-bottom: 0.5em;\n}\n.t-vue-lspan {\n font-variant-numeric: tabular-nums;\n font-size: 0.95em;\n color: #999999; /* TODO: move => params */\n margin-left: 0.1em;\n margin-right: 0.2em;\n}\n.t-vue-title {\n margin-right: 0.25em;\n font-size: 1.45em;\n}\n.t-vue-ind {\n margin-left: 0.2em;\n margin-bottom: 0.5em;\n font-size: 1.0em;\n margin-top: 0.3em;\n}\n.t-vue-ivalue {\n margin-left: 0.5em;\n}\n.t-vue-unknown {\n color: #999999; /* TODO: move => params */\n}\n\n.tvjs-appear-enter-active,\n.tvjs-appear-leave-active\n{\n transition: all .25s ease;\n}\n\n.tvjs-appear-enter, .tvjs-appear-leave-to\n{\n opacity: 0;\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Legend.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Legend.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Legend.vue?vue&type=template&id=34724886&\"\nimport script from \"./Legend.vue?vue&type=script&lang=js&\"\nexport * from \"./Legend.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Legend.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('34724886')) {\n api.createRecord('34724886', component.options)\n } else {\n api.reload('34724886', component.options)\n }\n module.hot.accept(\"./Legend.vue?vue&type=template&id=34724886&\", function () {\n api.rerender('34724886', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/Legend.vue\"\nexport default component.exports","\n// Parser for shader events\n\nexport default {\n methods: {\n // Init shaders from extensions\n init_shaders(skin, prev) {\n if (skin !== prev) {\n if (prev) this.shaders = this.shaders.filter(\n x => x.owner !== prev.id\n )\n for (var Shader of skin.shaders) {\n let shader = new Shader()\n shader.owner = skin.id\n this.shaders.push(shader)\n }\n // TODO: Sort by zIndex\n }\n },\n on_shader_event(d, target) {\n if (d.event === 'new-shader') {\n if (d.args[0].target === target) {\n d.args[0].id = `${d.args[1]}-${d.args[2]}`\n this.shaders.push(d.args[0])\n this.rerender++\n }\n }\n if (d.event === 'remove-shaders') {\n let id = d.args.join('-')\n this.shaders = this.shaders\n .filter(x => x.id !== id)\n }\n }\n },\n watch: {\n skin(n, p) {\n this.init_shaders(n, p)\n }\n },\n data() { return { shaders: [] } }\n}\n","<template>\n <!-- Horizontal section: (grid + sidebar) -->\n <div class=\"trading-vue-section\">\n <chart-legend ref=\"legend\"\n v-bind:values=\"section_values\"\n v-bind:grid_id=\"grid_id\"\n v-bind:common=\"legend_props\"\n v-bind:meta_props=\"get_meta_props\"\n v-on:legend-button-click=\"button_click\">\n </chart-legend>\n <grid v-bind=\"grid_props\" ref=\"grid\"\n v-bind:grid_id=\"grid_id\"\n v-on:register-kb-listener=\"register_kb\"\n v-on:remove-kb-listener=\"remove_kb\"\n v-on:range-changed=\"range_changed\"\n v-on:cursor-changed=\"cursor_changed\"\n v-on:cursor-locked=\"cursor_locked\"\n v-on:layer-meta-props=\"emit_meta_props\"\n v-on:custom-event=\"emit_custom_event\"\n v-on:sidebar-transform=\"sidebar_transform\"\n v-on:rezoom-range=\"rezoom_range\">\n </grid>\n <sidebar\n :ref=\"'sb-' + grid_id\"\n v-bind=\"sidebar_props\"\n v-bind:grid_id=\"grid_id\"\n v-bind:rerender=\"rerender\"\n v-on:sidebar-transform=\"sidebar_transform\">\n </sidebar>\n </div>\n</template>\n\n<script>\n\nimport Grid from './Grid.vue'\nimport Sidebar from './Sidebar.vue'\nimport ChartLegend from './Legend.vue'\nimport Shaders from '../mixins/shaders.js'\n\nexport default {\n name: 'GridSection',\n props: ['common', 'grid_id'],\n mixins: [Shaders],\n components: {\n Grid,\n Sidebar,\n ChartLegend\n },\n mounted() {\n this.init_shaders(this.$props.common.skin)\n },\n methods: {\n range_changed(r) {\n this.$emit('range-changed', r)\n },\n cursor_changed(c) {\n c.grid_id = this.$props.grid_id\n this.$emit('cursor-changed', c)\n },\n cursor_locked(state) {\n this.$emit('cursor-locked', state)\n },\n sidebar_transform(s) {\n this.$emit('sidebar-transform', s)\n },\n emit_meta_props(d) {\n this.$set(this.meta_props, d.layer_id, d)\n this.$emit('layer-meta-props', d)\n },\n emit_custom_event(d) {\n this.on_shader_event(d, 'sidebar')\n this.$emit('custom-event', d)\n },\n button_click(event) {\n this.$emit('legend-button-click', event)\n },\n register_kb(event) {\n this.$emit('register-kb-listener', event)\n },\n remove_kb(event) {\n this.$emit('remove-kb-listener', event)\n },\n rezoom_range(event) {\n let id = 'sb-' + event.grid_id\n if (this.$refs[id]) {\n this.$refs[id].renderer.rezoom_range(\n event.z, event.diff1, event.diff2\n )\n }\n },\n ghash(val) {\n // Measures grid heights configuration\n let hs = val.layout.grids.map(x => x.height)\n return hs.reduce((a, b) => a + b, '')\n }\n },\n computed: {\n // Component-specific props subsets:\n grid_props() {\n const id = this.$props.grid_id\n let p = Object.assign({}, this.$props.common)\n\n // Split offchart data between offchart grids\n if (id > 0) {\n let all = p.data\n p.data = [p.data[id - 1]]\n // Merge offchart overlays with custom ids with\n // the existing onse (by comparing the grid ids)\n p.data.push(...all.filter(\n x => x.grid && x.grid.id === id))\n }\n\n p.width = p.layout.grids[id].width\n p.height = p.layout.grids[id].height\n p.y_transform = p.y_ts[id]\n p.shaders = this.grid_shaders\n return p\n },\n sidebar_props() {\n const id = this.$props.grid_id\n let p = Object.assign({}, this.$props.common)\n p.width = p.layout.grids[id].sb\n p.height = p.layout.grids[id].height\n p.y_transform = p.y_ts[id]\n p.shaders = this.sb_shaders\n return p\n },\n section_values() {\n const id = this.$props.grid_id\n let p = Object.assign({}, this.$props.common)\n p.width = p.layout.grids[id].width\n return p.cursor.values[id]\n },\n legend_props() {\n const id = this.$props.grid_id\n let p = Object.assign({}, this.$props.common)\n\n // Split offchart data between offchart grids\n if (id > 0) {\n let all = p.data\n p.offchart = all\n p.data = [p.data[id - 1]]\n p.data.push(...all.filter(\n x => x.grid && x.grid.id === id))\n }\n return p\n },\n get_meta_props() {\n return this.meta_props\n },\n grid_shaders() {\n return this.shaders.filter(x => x.target === 'grid')\n },\n sb_shaders() {\n return this.shaders.filter(x => x.target === 'sidebar')\n }\n },\n watch: {\n common: {\n handler: function (val, old_val) {\n let newhash = this.ghash(val)\n if (newhash !== this.last_ghash) {\n this.rerender++\n }\n\n if(val.data.length !== old_val.data.length) {\n // Look at this nasty trick!\n this.rerender++\n }\n this.last_ghash = newhash\n },\n deep: true\n }\n },\n data() {\n return {\n meta_props: {},\n rerender: 0,\n last_ghash: ''\n }\n }\n}\n</script>\n<style>\n.trading-vue-section {\n height: 0;\n position: absolute;\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Section.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Section.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Section.vue?vue&type=template&id=8fbe9336&\"\nimport script from \"./Section.vue?vue&type=script&lang=js&\"\nexport * from \"./Section.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Section.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('8fbe9336')) {\n api.createRecord('8fbe9336', component.options)\n } else {\n api.reload('8fbe9336', component.options)\n }\n module.hot.accept(\"./Section.vue?vue&type=template&id=8fbe9336&\", function () {\n api.rerender('8fbe9336', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/Section.vue\"\nexport default component.exports","\nimport Const from '../../stuff/constants.js'\nimport Utils from '../../stuff/utils.js'\n\nconst { MINUTE15, MINUTE, HOUR, DAY, WEEK, MONTH, YEAR, MONTHMAP } = Const\n\nexport default class Botbar {\n\n constructor(canvas, comp) {\n\n this.canvas = canvas\n this.ctx = canvas.getContext('2d')\n this.comp = comp\n this.$p = comp.$props\n this.data = this.$p.sub\n this.range = this.$p.range\n this.layout = this.$p.layout\n\n }\n\n update() {\n\n this.grid_0 = this.layout.grids[0]\n\n const width = this.layout.botbar.width\n const height = this.layout.botbar.height\n\n const sb = this.layout.grids[0].sb\n\n //this.ctx.fillStyle = this.$p.colors.back\n this.ctx.font = this.$p.font\n //this.ctx.fillRect(0, 0, width, height)\n this.ctx.clearRect(0, 0, width, height)\n\n this.ctx.strokeStyle = this.$p.colors.scale\n\n this.ctx.beginPath()\n this.ctx.moveTo(0, 0.5)\n this.ctx.lineTo(Math.floor(width + 1), 0.5)\n this.ctx.stroke()\n\n this.ctx.fillStyle = this.$p.colors.text\n this.ctx.beginPath()\n\n for (var p of this.layout.botbar.xs) {\n\n let lbl = this.format_date(p)\n\n if (p[0] > width - sb) continue\n\n this.ctx.moveTo(p[0] - 0.5, 0)\n this.ctx.lineTo(p[0] - 0.5, 4.5)\n\n if (!this.lbl_highlight(p[1][0])) {\n this.ctx.globalAlpha = 0.85\n }\n this.ctx.textAlign = 'center'\n this.ctx.fillText(lbl, p[0], 18)\n this.ctx.globalAlpha = 1\n\n }\n\n this.ctx.stroke()\n this.apply_shaders()\n if (this.$p.cursor.x && this.$p.cursor.t !== undefined)\n this.panel()\n\n }\n\n apply_shaders() {\n let layout = this.layout.grids[0]\n let props = {\n layout: layout,\n cursor: this.$p.cursor\n }\n for (var s of this.comp.bot_shaders) {\n this.ctx.save()\n s.draw(this.ctx, props)\n this.ctx.restore()\n }\n }\n\n panel() {\n\n let lbl = this.format_cursor_x()\n this.ctx.fillStyle = this.$p.colors.panel\n\n let measure = this.ctx.measureText(lbl + ' ')\n let panwidth = Math.floor(measure.width)\n let cursor = this.$p.cursor.x\n let x = Math.floor(cursor - panwidth * 0.5)\n let y = - 0.5\n let panheight = this.comp.config.PANHEIGHT\n this.ctx.fillRect(x, y, panwidth, panheight + 0.5)\n\n this.ctx.fillStyle = this.$p.colors.textHL\n this.ctx.textAlign = 'center'\n this.ctx.fillText(lbl, cursor, y + 16)\n\n }\n\n format_date(p) {\n let t = p[1][0]\n t = this.grid_0.ti_map.i2t(t)\n let ti = this.$p.layout.grids[0].ti_map.tf\n // Enable timezones only for tf < 1D\n let k = ti < DAY ? 1 : 0\n let tZ = t + k * this.$p.timezone * HOUR\n\n //t += new Date(t).getTimezoneOffset() * MINUTE\n let d = new Date(tZ)\n\n if (p[2] === YEAR || Utils.year_start(t) === t) {\n return d.getUTCFullYear()\n }\n if (p[2] === MONTH || Utils.month_start(t) === t) {\n return MONTHMAP[d.getUTCMonth()]\n }\n // TODO(*) see grid_maker.js\n if (Utils.day_start(tZ) === tZ) return d.getUTCDate()\n\n let h = Utils.add_zero(d.getUTCHours())\n let m = Utils.add_zero(d.getUTCMinutes())\n return h + \":\" + m\n\n }\n\n format_cursor_x() {\n\n let t = this.$p.cursor.t\n t = this.grid_0.ti_map.i2t(t)\n //let ti = this.$p.interval\n let ti = this.$p.layout.grids[0].ti_map.tf\n // Enable timezones only for tf < 1D\n let k = ti < DAY ? 1 : 0\n\n //t += new Date(t).getTimezoneOffset() * MINUTE\n let d = new Date(t + k * this.$p.timezone * HOUR)\n\n if (ti === YEAR) {\n return d.getUTCFullYear()\n }\n\n if (ti < YEAR) {\n var yr = '`' + `${d.getUTCFullYear()}`.slice(-2)\n var mo = MONTHMAP[d.getUTCMonth()]\n var dd = '01'\n }\n if (ti <= WEEK) dd = d.getUTCDate()\n let date = `${dd} ${mo} ${yr}`\n let time = ''\n\n if (ti < DAY) {\n let h = Utils.add_zero(d.getUTCHours())\n let m = Utils.add_zero(d.getUTCMinutes())\n time = h + \":\" + m\n }\n\n return `${date} ${time}`\n\n }\n\n // Highlights the begining of a time interval\n // TODO: improve. Problem: let's say we have a new month,\n // but if there is no grid line in place, there\n // will be no month name on t-axis. Sad.\n // Solution: manipulate the grid, skew it, you know\n lbl_highlight(t) {\n\n let ti = this.$p.interval\n\n if (t === 0) return true\n if (Utils.month_start(t) === t) return true\n if (Utils.day_start(t) === t) return true\n if (ti <= MINUTE15 && t % HOUR === 0) return true\n\n return false\n\n }\n\n mousemove() { }\n mouseout() { }\n mouseup() { }\n mousedown() { }\n\n}\n","<script>\n// The bottom bar (yep, that thing with a bunch of dates)\n\nimport Botbar from './js/botbar.js'\nimport Canvas from '../mixins/canvas.js'\n\nexport default {\n name: 'Botbar',\n props: [\n 'sub', 'layout', 'range', 'interval', 'cursor', 'colors', 'font',\n 'width', 'height', 'rerender', 'tv_id', 'config', 'shaders',\n 'timezone'\n ],\n mixins: [Canvas],\n mounted() {\n const el = this.$refs['canvas']\n this.renderer = new Botbar(el, this)\n this.setup()\n this.redraw()\n },\n render(h) {\n const sett = this.$props.layout.botbar\n return this.create_canvas(h, 'botbar', {\n position: {\n x: 0,\n y: sett.offset || 0\n },\n attrs: {\n rerender: this.$props.rerender,\n width: sett.width,\n height: sett.height,\n },\n style: {\n backgroundColor: this.$props.colors.back\n },\n })\n },\n computed: {\n bot_shaders() {\n return this.$props.shaders\n .filter(x => x.target === 'botbar')\n }\n },\n watch: {\n range: {\n handler: function() { this.redraw() },\n deep: true\n },\n cursor: {\n handler: function() { this.redraw() },\n deep: true\n },\n rerender() {\n this.$nextTick(() => this.redraw())\n }\n }\n}\n\n</script>\n<style>\n.trading-vue-botbar {\n position: relative !important;\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Botbar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Botbar.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./Botbar.vue?vue&type=script&lang=js&\"\nexport * from \"./Botbar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Botbar.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('9030b5c8')) {\n api.createRecord('9030b5c8', component.options)\n } else {\n api.reload('9030b5c8', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"src/components/Botbar.vue\"\nexport default component.exports","\n<!-- Listens to native keyboard events,\n propagates to all KeyboardListeners -->\n\n<script>\n\nexport default {\n name: 'Keyboard',\n created: function () {\n window.addEventListener('keydown', this.keydown)\n window.addEventListener('keyup', this.keyup)\n window.addEventListener('keypress', this.keypress)\n this._listeners = {}\n },\n beforeDestroy: function () {\n window.removeEventListener('keydown', this.keydown)\n window.removeEventListener('keyup', this.keyup)\n window.removeEventListener('keypress', this.keypress)\n },\n render(h) { return h() },\n methods: {\n keydown (event) {\n for (var id in this._listeners) {\n let l = this._listeners[id]\n if (l && l.keydown) {\n l.keydown(event)\n } else {\n console.warn(`No 'keydown' listener for ${id}`)\n }\n }\n },\n keyup (event) {\n for (var id in this._listeners) {\n let l = this._listeners[id]\n if (l && l.keyup) {\n l.keyup(event)\n } else {\n console.warn(`No 'keyup' listener for ${id}`)\n }\n }\n },\n keypress (event) {\n for (var id in this._listeners) {\n let l = this._listeners[id]\n if (l && l.keypress) {\n l.keypress(event)\n } else {\n console.warn(`No 'keypress' listener for ${id}`)\n }\n }\n },\n register(listener) {\n this._listeners[listener.id] = listener\n },\n remove(listener) {\n delete this._listeners[listener.id]\n },\n }\n}\n\n</script>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Keyboard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Keyboard.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./Keyboard.vue?vue&type=script&lang=js&\"\nexport * from \"./Keyboard.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('34444897')) {\n api.createRecord('34444897', component.options)\n } else {\n api.reload('34444897', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"src/components/Keyboard.vue\"\nexport default component.exports","// Data tracker/watcher\n\nimport Utils from '../stuff/utils.js'\n\nexport default {\n methods: {\n data_changed() {\n let n = this.ohlcv\n let changed = false\n if (this._data_n0 !== n[0] && this._data_len !== n.length) {\n changed = true\n }\n this.check_all_data(changed)\n if (this.ti_map.ib) {\n this.reindex_delta(n[0], this._data_n0)\n }\n this._data_n0 = n[0]\n this._data_len = n.length\n this.save_data_t()\n return changed\n },\n check_all_data(changed) {\n // If length of data in the Structure changed by > 1 point\n // emit a special event for DC to recalc the scripts\n // TODO: check overlays data too\n let len = this._data_len || 0\n if (Math.abs(this.ohlcv.length - len) > 1 ||\n this._data_n0 !== this.ohlcv[0]) {\n this.$emit('custom-event', {\n event: 'data-len-changed',\n args: []\n })\n }\n\n },\n reindex_delta(n, p) {\n n = n || [[0]]\n p = p || [[0]]\n let dt = n[0] - p[0]\n if (dt !== 0 && this._data_t) {\n // Convert t back to index\n try {\n // More precise method first\n let nt = this._data_t + 0.01 // fix for the filter lib\n let res = Utils.fast_nearest(this.ohlcv, nt)\n let cndl = this.ohlcv[res[0]]\n var off = (nt - cndl[0]) / this.interval_ms\n this.goto(res[0] + off)\n } catch(e) {\n this.goto(this.ti_map.t2i(this._data_t))\n }\n }\n },\n save_data_t() {\n this._data_t = this.ti_map.i2t(this.range[1]) // save as t\n }\n },\n data() {\n return {\n _data_n0: null,\n _data_len: 0,\n _data_t: 0\n }\n }\n}\n","// Time-index mapping (for non-linear t-axis)\n\nimport Utils from '../../stuff/utils.js'\n\nconst MAX_ARR = Math.pow(2, 32)\n\n// 3 MODES of index calculation for overlays/subcharts:\n// ::: indexSrc :::\n// * \"map\" -> use TI mapping functions to detect index\n// (slowest, for stocks only. DEFAULT)\n//\n// * \"calc\" -> calculate shift between sub & data\n// (faster, but overlay data should be perfectly\n// align with the main chart,\n// 1-1 candle/data point. Supports Renko)\n//\n// * \"data\" -> overlay data should come with candle index\n// (fastest, supports Renko)\n\nexport default class TI {\n\n constructor() {\n\n this.ib = false\n }\n\n init(params, res) {\n let {\n sub, interval, meta, $props:$p, interval_ms, sub_start, ib\n } = params\n\n this.ti_map = []\n this.it_map = []\n this.sub_i = []\n this.ib = ib\n this.sub = res\n this.ss = sub_start\n this.tf = interval_ms\n let start = meta.sub_start\n\n // Skip mapping for the regular mode\n if (this.ib) {\n this.map_sub(res)\n }\n }\n\n // Make maps for the main subset\n map_sub(res) {\n\n for (var i = 0; i < res.length; i++) {\n let t = res[i][0]\n let _i = (this.ss + i)\n this.ti_map[t] = _i\n this.it_map[_i] = t\n\n // Overwrite t with i\n let copy = [...res[i]]\n copy[0] = _i\n this.sub_i.push(copy)\n\n }\n\n }\n\n // Map overlay data\n // TODO: parse() called 3 times instead of 2 for 'spx_sample.json'\n parse(data, mode) {\n\n if (!this.ib || !this.sub[0] || mode === 'data') return data\n\n let res = []\n let k = 0 // Candlestick index\n\n if (mode === 'calc') {\n let shift = Utils.index_shift(this.sub, data)\n for (var i = 0; i < data.length; i++) {\n let _i = (this.ss + i)\n let copy = [...data[i]]\n copy[0] = _i + shift\n res.push(copy)\n }\n return res\n }\n\n // If indicator data starts after ohlcv, calc the first index\n if (data.length) {\n try {\n let k1 = Utils.fast_nearest(this.sub, data[0][0])[0]\n if (k1 !== null && k1 >= 0) k = k1\n } catch(e) { }\n }\n\n let t0 = this.sub[0][0]\n let tN = this.sub[this.sub.length - 1][0]\n\n for (var i = 0; i < data.length; i++) {\n let copy = [...data[i]]\n let tk = this.sub[k][0]\n let t = data[i][0]\n let index = this.ti_map[t]\n\n if (index === undefined) {\n\n // Linear extrapolation\n if (t < t0 || t > tN) {\n index = this.ss + k - (tk - t) / this.tf\n t = data[i+1] ? data[i+1][0] : undefined\n }\n\n // Linear interpolation\n else {\n let tk2 = this.sub[k + 1][0]\n index = tk === tk2 ? this.ss + k :\n this.ss + k + (t - tk) / (tk2 - tk)\n t = data[i+1] ? data[i+1][0] : undefined\n }\n\n }\n // Race of data points & sub points (ohlcv)\n // (like turn based increments)\n while (k+1 < this.sub.length - 1 && t > this.sub[k+1][0]) {\n k++\n tk = this.sub[k][0]\n }\n copy[0] = index\n res.push(copy)\n }\n return res\n }\n\n // index => time\n i2t(i) {\n\n if (!this.ib || !this.sub.length) return i // Regular mode\n\n // Discrete mapping\n let res = this.it_map[i]\n if (res !== undefined) return res\n // Linear extrapolation\n else if (i >= this.ss + this.sub_i.length) {\n let di = i - (this.ss + this.sub_i.length) + 1\n let last = this.sub[this.sub.length - 1]\n return last[0] + di * this.tf\n }\n else if (i < this.ss) {\n let di = i - this.ss\n return this.sub[0][0] + di * this.tf\n }\n\n // Linear Interpolation\n let i1 = Math.floor(i) - this.ss\n let i2 = i1 + 1\n let len = this.sub.length\n\n if (i2 >= len) i2 = len - 1\n\n let sub1 = this.sub[i1]\n let sub2 = this.sub[i2]\n\n if (sub1 && sub2) {\n let t1 = sub1[0]\n let t2 = sub2[0]\n return t1 + (t2 - t1) * (i - i1 - this.ss)\n }\n return undefined\n\n }\n\n // Map or bypass depending on the mode\n i2t_mode(i, mode) {\n return mode === 'data' ? i : this.i2t(i)\n }\n\n // time => index\n // TODO: when switch from IB mode to regular tools\n // disappear (bc there is no more mapping)\n t2i(t) {\n\n if (!this.sub.length) return undefined\n\n // Discrete mapping\n let res = this.ti_map[t]\n if (res !== undefined) return res\n\n let t0 = this.sub[0][0]\n let tN = this.sub[this.sub.length - 1][0]\n\n // Linear extrapolation\n if (t < t0) {\n return this.ss - (t0 - t) / this.tf\n }\n\n else if (t > tN) {\n let k = this.sub.length - 1\n return this.ss + k - (tN - t) / this.tf\n }\n\n try {\n // Linear Interpolation\n let i = Utils.fast_nearest(this.sub, t)\n let tk = this.sub[i[0]][0]\n let tk2 = this.sub[i[1]][0]\n let k = (t - tk) / (tk2 - tk)\n return this.ss + i[0] + k * (i[1] - i[0])\n } catch(e) { }\n\n return undefined\n }\n\n // Auto detect: is it time or index?\n // Assuming that index-based mode is ON\n smth2i(smth) {\n if (smth > MAX_ARR) {\n return this.t2i(smth) // it was time\n } else {\n return smth // it was an index\n }\n }\n\n smth2t(smth) {\n if (smth < MAX_ARR) {\n return this.i2t(smth) // it was an index\n } else {\n return smth // it was time\n }\n }\n\n // Global Time => Index (uses all data, approx. method)\n // Used by tv.goto()\n gt2i(smth, ohlcv) {\n if (smth > MAX_ARR) {\n let E = 0.1 // Fixes the arrayslicer bug\n let [i1, i2] = Utils.fast_nearest(ohlcv, smth+E)\n if (typeof i1 === 'number') {\n return i1\n } else {\n return this.t2i(smth) // fallback\n }\n } else {\n return smth // it was an index\n }\n }\n\n}\n","<template>\n <!-- Chart components combined together -->\n <div class=\"trading-vue-chart\" :style=\"styles\">\n <keyboard ref=\"keyboard\"></keyboard>\n <grid-section v-for=\"(grid, i) in this._layout.grids\"\n :key=\"grid.id\" ref=\"sec\"\n v-bind:common=\"section_props(i)\"\n v-bind:grid_id=\"i\"\n v-on:register-kb-listener=\"register_kb\"\n v-on:remove-kb-listener=\"remove_kb\"\n v-on:range-changed=\"range_changed\"\n v-on:cursor-changed=\"cursor_changed\"\n v-on:cursor-locked=\"cursor_locked\"\n v-on:sidebar-transform=\"set_ytransform\"\n v-on:layer-meta-props=\"layer_meta_props\"\n v-on:custom-event=\"emit_custom_event\"\n v-on:legend-button-click=\"legend_button_click\"\n >\n </grid-section>\n <botbar v-bind=\"botbar_props\"\n :shaders=\"shaders\" :timezone=\"timezone\">\n </botbar>\n </div>\n</template>\n\n<script>\n\nimport Context from '../stuff/context.js'\nimport Layout from './js/layout.js'\nimport Utils from '../stuff/utils.js'\nimport CursorUpdater from './js/updater.js'\nimport GridSection from './Section.vue'\nimport Botbar from './Botbar.vue'\nimport Keyboard from './Keyboard.vue'\nimport Shaders from '../mixins/shaders.js'\nimport DataTrack from '../mixins/datatrack.js'\nimport TI from './js/ti_mapping.js'\nimport Const from '../stuff/constants.js'\n\n\nexport default {\n name: 'Chart',\n props: [\n 'title_txt', 'data', 'width', 'height', 'font', 'colors',\n 'overlays', 'tv_id', 'config', 'buttons', 'toolbar', 'ib',\n 'skin', 'timezone'\n ],\n mixins: [Shaders, DataTrack],\n components: {\n GridSection,\n Botbar,\n Keyboard\n },\n created() {\n\n // Context for text measurements\n this.ctx = new Context(this.$props)\n\n // Initial layout (All measurments for the chart)\n this.init_range()\n this.sub = this.subset()\n Utils.overwrite(this.range, this.range) // Fix for IB mode\n this._layout = new Layout(this)\n\n // Updates current cursor values\n this.updater = new CursorUpdater(this)\n\n this.update_last_values()\n this.init_shaders(this.skin)\n },\n methods: {\n range_changed(r) {\n // Overwite & keep the original references\n // Quick fix for IB mode (switch 2 next lines)\n // TODO: wtf?\n var sub = this.subset(r)\n Utils.overwrite(this.range, r)\n Utils.overwrite(this.sub, sub)\n this.update_layout()\n this.$emit('range-changed', r)\n if (this.$props.ib) this.save_data_t()\n },\n goto(t) {\n const dt = this.range[1] - this.range[0]\n this.range_changed([t - dt, t])\n },\n setRange(t1, t2) {\n this.range_changed([t1, t2])\n },\n cursor_changed(e) {\n if (e.mode) this.cursor.mode = e.mode\n if (this.cursor.mode !== 'explore') {\n this.updater.sync(e)\n }\n if (this._hook_xchanged) this.ce('?x-changed', e)\n },\n cursor_locked(state) {\n if (this.cursor.scroll_lock && state) return\n this.cursor.locked = state\n if (this._hook_xlocked) this.ce('?x-locked', state)\n },\n calc_interval() {\n let tf = Utils.parse_tf(this.forced_tf)\n if (this.ohlcv.length < 2 && !tf) return\n this.interval_ms = tf || Utils.detect_interval(this.ohlcv)\n this.interval = this.$props.ib ? 1 : this.interval_ms\n Utils.warn(\n () => this.$props.ib && !this.chart.tf,\n Const.IB_TF_WARN, Const.SECOND\n )\n },\n set_ytransform(s) {\n let obj = this.y_transforms[s.grid_id] || {}\n Object.assign(obj, s)\n this.$set(this.y_transforms, s.grid_id, obj)\n this.update_layout()\n Utils.overwrite(this.range, this.range)\n },\n default_range() {\n const dl = this.$props.config.DEFAULT_LEN\n const ml = this.$props.config.MINIMUM_LEN + 0.5\n const l = this.ohlcv.length - 1\n\n if (this.ohlcv.length < 2) return\n if (this.ohlcv.length <= dl) {\n var s = 0, d = ml\n } else {\n s = l - dl, d = 0.5\n }\n if (!this.$props.ib) {\n Utils.overwrite(this.range, [\n this.ohlcv[s][0] - this.interval * d,\n this.ohlcv[l][0] + this.interval * ml\n ])\n } else {\n Utils.overwrite(this.range, [\n s - this.interval * d,\n l + this.interval * ml\n ])\n }\n },\n subset(range = this.range) {\n var [res, index] = this.filter(\n this.ohlcv,\n range[0] - this.interval,\n range[1]\n )\n this.ti_map = new TI()\n if (res) {\n this.sub_start = index\n this.ti_map.init(this, res)\n if (!this.$props.ib) return res || []\n return this.ti_map.sub_i\n }\n return []\n },\n common_props() {\n return {\n title_txt: this.chart.name || this.$props.title_txt,\n layout: this._layout,\n sub: this.sub,\n range: this.range,\n interval: this.interval,\n cursor: this.cursor,\n colors: this.$props.colors,\n font: this.$props.font,\n y_ts: this.y_transforms,\n tv_id: this.$props.tv_id,\n config: this.$props.config,\n buttons: this.$props.buttons,\n meta: this.meta,\n skin: this.$props.skin\n }\n },\n overlay_subset(source, side) {\n return source.map((d, i) => {\n let res = Utils.fast_filter(\n d.data, this.ti_map.i2t_mode(\n this.range[0] - this.interval,\n d.indexSrc\n ),\n this.ti_map.i2t_mode(this.range[1], d.indexSrc)\n )\n return {\n type: d.type,\n name: Utils.format_name(d),\n data: this.ti_map.parse(res[0] || [], d.indexSrc || 'map'),\n settings: d.settings || this.settings_ov,\n grid: d.grid || {},\n tf: Utils.parse_tf(d.tf),\n i0: res[1],\n loading: d.loading,\n last: (this.last_values[side] || [])[i]\n }\n\n })\n },\n section_props(i) {\n return i === 0 ?\n this.main_section : this.sub_section\n },\n init_range() {\n this.calc_interval()\n this.default_range()\n },\n layer_meta_props(d) {\n // TODO: check reactivity when layout is changed\n if (!(d.grid_id in this.layers_meta)) {\n this.$set(this.layers_meta, d.grid_id, {})\n }\n this.$set(this.layers_meta[d.grid_id],\n d.layer_id, d)\n\n // Rerender\n this.update_layout()\n },\n remove_meta_props(grid_id, layer_id) {\n if (grid_id in this.layers_meta) {\n this.$delete(this.layers_meta[grid_id],layer_id)\n }\n },\n emit_custom_event(d) {\n this.on_shader_event(d, 'botbar')\n this.$emit('custom-event', d)\n if (d.event === 'remove-layer-meta') {\n this.remove_meta_props(...d.args)\n }\n },\n update_layout(clac_tf) {\n if (clac_tf) this.calc_interval()\n const lay = new Layout(this)\n Utils.copy_layout(this._layout, lay)\n if (this._hook_update) this.ce('?chart-update', lay)\n },\n legend_button_click(event) {\n this.$emit('legend-button-click', event)\n },\n register_kb(event) {\n if (!this.$refs.keyboard) return\n this.$refs.keyboard.register(event)\n },\n remove_kb(event) {\n if (!this.$refs.keyboard) return\n this.$refs.keyboard.remove(event)\n },\n update_last_values() {\n this.last_candle = this.ohlcv ?\n this.ohlcv[this.ohlcv.length - 1] : undefined\n this.last_values = { onchart: [], offchart: [] }\n this.onchart.forEach((x, i) => {\n let d = x.data || []\n this.last_values.onchart[i] = d[d.length - 1]\n })\n this.offchart.forEach((x, i) => {\n let d = x.data || []\n this.last_values.offchart[i] = d[d.length - 1]\n })\n },\n // Hook events for extensions\n ce(event, ...args) {\n this.emit_custom_event({ event, args })\n },\n // Set hooks list (called from an extension)\n hooks(...list) {\n list.forEach(x => this[`_hook_${x}`] = true)\n }\n },\n computed: {\n // Component-specific props subsets:\n main_section() {\n let p = Object.assign({}, this.common_props())\n p.data = this.overlay_subset(this.onchart, 'onchart')\n p.data.push({\n type: this.chart.type || 'Candles',\n main: true,\n data: this.sub,\n i0: this.sub_start,\n settings: this.chart.settings || this.settings_ohlcv,\n grid: this.chart.grid || {},\n last: this.last_candle\n })\n p.overlays = this.$props.overlays\n return p\n },\n sub_section() {\n let p = Object.assign({}, this.common_props())\n p.data = this.overlay_subset(this.offchart, 'offchart')\n p.overlays = this.$props.overlays\n return p\n },\n botbar_props() {\n let p = Object.assign({}, this.common_props())\n p.width = p.layout.botbar.width\n p.height = p.layout.botbar.height\n p.rerender = this.rerender\n return p\n },\n offsub() {\n return this.overlay_subset(this.offchart, 'offchart')\n },\n // Datasets: candles, onchart, offchart indicators\n ohlcv() {\n return this.$props.data.ohlcv || this.chart.data || []\n },\n chart() {\n return this.$props.data.chart || { grid: {} }\n },\n onchart() {\n return this.$props.data.onchart || []\n },\n offchart() {\n return this.$props.data.offchart || []\n },\n filter() {\n return this.$props.ib ?\n Utils.fast_filter_i : Utils.fast_filter\n },\n styles() {\n let w = this.$props.toolbar ? this.$props.config.TOOLBAR : 0\n return { 'margin-left': `${w}px` }\n },\n meta() {\n return {\n last: this.last_candle,\n sub_start: this.sub_start,\n activated: this.activated\n }\n },\n forced_tf() {\n return this.chart.tf\n }\n },\n data() {\n return {\n // Current data slice\n sub: [],\n\n // Time range\n range: [],\n\n // Candlestick interval\n interval: 0,\n\n // Crosshair states\n cursor: {\n x: null, y: null, t: null, y$: null,\n grid_id: null, locked: false, values: {},\n scroll_lock: false, mode: Utils.xmode()\n },\n\n // A trick to re-render botbar\n rerender: 0,\n\n // Layers meta-props (changing behaviour)\n layers_meta: {},\n\n // Y-transforms (for y-zoom and -shift)\n y_transforms: {},\n\n // Default OHLCV settings (when using DataStructure v1.0)\n settings_ohlcv: {},\n\n // Default overlay settings\n settings_ov: {},\n\n // Meta data\n last_candle: [],\n last_values: {},\n sub_start: undefined,\n activated: false\n\n }\n },\n watch: {\n width() {\n this.update_layout()\n if (this._hook_resize) this.ce('?chart-resize')\n },\n height() {\n this.update_layout()\n if (this._hook_resize) this.ce('?chart-resize')\n },\n ib(nw) {\n if (!nw) {\n // Change range index => time\n let t1 = this.ti_map.i2t(this.range[0])\n let t2 = this.ti_map.i2t(this.range[1])\n Utils.overwrite(this.range, [t1, t2])\n this.interval = this.interval_ms\n } else {\n this.init_range() // TODO: calc index range instead\n Utils.overwrite(this.range, this.range)\n this.interval = 1\n }\n let sub = this.subset()\n Utils.overwrite(this.sub, sub)\n this.update_layout()\n },\n timezone() {\n this.update_layout()\n },\n colors() {\n Utils.overwrite(this.range, this.range)\n },\n forced_tf(n, p) {\n this.update_layout(true)\n this.ce('exec-all-scripts')\n },\n data: {\n handler: function(n, p) {\n if (!this.sub.length) this.init_range()\n const sub = this.subset()\n // Fixes Infinite loop warn, when the subset is empty\n // TODO: Consider removing 'sub' from data entirely\n if (this.sub.length || sub.length) {\n Utils.overwrite(this.sub, sub)\n }\n let nw = this.data_changed()\n this.update_layout(nw)\n Utils.overwrite(this.range, this.range)\n this.cursor.scroll_lock = !!n.scrollLock\n if (n.scrollLock && this.cursor.locked) {\n this.cursor.locked = false\n }\n if (this._hook_data) this.ce('?chart-data', nw)\n this.update_last_values()\n // TODO: update legend values for overalys\n this.rerender++\n },\n deep: true\n }\n }\n}\n\n</script>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Chart.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Chart.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Chart.vue?vue&type=template&id=4d06a4de&\"\nimport script from \"./Chart.vue?vue&type=script&lang=js&\"\nexport * from \"./Chart.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('4d06a4de')) {\n api.createRecord('4d06a4de', component.options)\n } else {\n api.reload('4d06a4de', component.options)\n }\n module.hot.accept(\"./Chart.vue?vue&type=template&id=4d06a4de&\", function () {\n api.rerender('4d06a4de', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/Chart.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n key: _vm.tool_count,\n staticClass: \"trading-vue-toolbar\",\n style: _vm.styles\n },\n _vm._l(_vm.groups, function(tool, i) {\n return tool.icon && !tool.hidden\n ? _c(\"toolbar-item\", {\n key: i,\n attrs: {\n data: tool,\n subs: _vm.sub_map,\n dc: _vm.data,\n config: _vm.config,\n colors: _vm.colors,\n selected: _vm.is_selected(tool)\n },\n on: { \"item-selected\": _vm.selected }\n })\n : _vm._e()\n }),\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n class: [\"trading-vue-tbitem\", _vm.selected ? \"selected-item\" : \"\"],\n style: _vm.item_style,\n on: {\n click: function($event) {\n return _vm.emit_selected(\"click\")\n },\n mousedown: _vm.mousedown,\n touchstart: _vm.mousedown,\n touchend: function($event) {\n return _vm.emit_selected(\"touch\")\n }\n }\n },\n [\n _c(\"div\", {\n staticClass: \"trading-vue-tbicon tvjs-pixelated\",\n style: _vm.icon_style\n }),\n _vm._v(\" \"),\n _vm.data.group\n ? _c(\n \"div\",\n {\n staticClass: \"trading-vue-tbitem-exp\",\n style: _vm.exp_style,\n on: {\n click: _vm.exp_click,\n mousedown: _vm.expmousedown,\n mouseover: _vm.expmouseover,\n mouseleave: _vm.expmouseleave\n }\n },\n [_vm._v(\"\\n ᐳ\\n \")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.show_exp_list\n ? _c(\"item-list\", {\n attrs: {\n config: _vm.config,\n items: _vm.data.items,\n colors: _vm.colors,\n dc: _vm.dc\n },\n on: {\n \"close-list\": _vm.close_list,\n \"item-selected\": _vm.emit_selected_sub\n }\n })\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"tvjs-item-list\",\n style: _vm.list_style(),\n on: { mousedown: _vm.thismousedown }\n },\n _vm._l(_vm.items, function(item) {\n return !item.hidden\n ? _c(\n \"div\",\n {\n class: _vm.item_class(item),\n style: _vm.item_style(item),\n on: {\n click: function(e) {\n return _vm.item_click(e, item)\n }\n }\n },\n [\n _c(\"div\", {\n staticClass: \"trading-vue-tbicon tvjs-pixelated\",\n style: _vm.icon_style(item)\n }),\n _vm._v(\" \"),\n _c(\"div\", [_vm._v(_vm._s(item.type))])\n ]\n )\n : _vm._e()\n }),\n 0\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n<template>\n <div class=\"tvjs-item-list\" :style=\"list_style()\"\n @mousedown=\"thismousedown\">\n <div v-for=\"item of items\" :class=\"item_class(item)\"\n v-if=\"!item.hidden\" @click=\"e => item_click(e, item)\"\n :style=\"item_style(item)\">\n <div class=\"trading-vue-tbicon tvjs-pixelated\"\n :style=\"icon_style(item)\">\n </div>\n <div>{{item.type}}</div>\n </div>\n </div>\n</template>\n\n<script>\n\nexport default {\n name: 'ItemList',\n props: ['config', 'items', 'colors', 'dc'],\n mounted() {\n window.addEventListener(\n 'mousedown', this.onmousedown\n )\n },\n beforeDestroy() {\n window.removeEventListener(\n 'mousedown', this.onmousedown\n )\n },\n methods: {\n list_style() {\n let conf = this.$props.config\n let w = conf.TOOLBAR\n let brd = this.colors.tbListBorder || this.colors.grid\n let bstl = `1px solid ${brd}`\n return {\n left: `${w}px`,\n background: this.colors.back,\n borderTop: bstl,\n borderRight: bstl,\n borderBottom: bstl,\n }\n },\n item_class(item) {\n if (this.dc.tool === item.type) {\n return \"tvjs-item-list-item selected-item\"\n }\n return \"tvjs-item-list-item\"\n },\n item_style(item) {\n let conf = this.$props.config\n let h = conf.TB_ICON + conf.TB_ITEM_M * 2 + 8\n let sel = this.dc.tool === item.type\n return {\n height: `${h}px`,\n color: sel ? undefined : `#888888`\n }\n },\n icon_style(data) {\n let conf = this.$props.config\n let br = conf.TB_ICON_BRI\n let im = conf.TB_ITEM_M\n return {\n 'background-image': `url(${data.icon})`,\n 'width': '25px',\n 'height': '25px',\n 'margin': `${im}px`,\n 'filter': `brightness(${br})`\n }\n },\n item_click(e, item) {\n e.cancelBubble = true\n this.$emit('item-selected', item)\n this.$emit('close-list')\n },\n onmousedown() {\n this.$emit('close-list')\n },\n thismousedown(e) {\n e.stopPropagation()\n }\n },\n computed: {\n },\n data() {\n return {\n\n }\n }\n}\n\n</script>\n\n<style>\n.tvjs-item-list {\n position: absolute;\n user-select: none;\n margin-top: -5px;\n}\n.tvjs-item-list-item {\n display: flex;\n align-items: center;\n padding-right: 20px;\n font-size: 1.15em;\n letter-spacing: 0.05em;\n}\n.tvjs-item-list-item:hover {\n background-color: #76878319;\n}\n.tvjs-item-list-item * {\n position: relative !important;\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ItemList.vue?vue&type=template&id=c50b23fe&\"\nimport script from \"./ItemList.vue?vue&type=script&lang=js&\"\nexport * from \"./ItemList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ItemList.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('c50b23fe')) {\n api.createRecord('c50b23fe', component.options)\n } else {\n api.reload('c50b23fe', component.options)\n }\n module.hot.accept(\"./ItemList.vue?vue&type=template&id=c50b23fe&\", function () {\n api.rerender('c50b23fe', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/ItemList.vue\"\nexport default component.exports","\n<template>\n <div :class=\"['trading-vue-tbitem', selected ? 'selected-item' : '']\"\n @click=\"emit_selected('click')\"\n @mousedown=\"mousedown\"\n @touchstart=\"mousedown\"\n @touchend=\"emit_selected('touch')\"\n :style=\"item_style\">\n <div class=\"trading-vue-tbicon tvjs-pixelated\"\n :style=\"icon_style\">\n </div>\n <div class=\"trading-vue-tbitem-exp\" v-if=\"data.group\"\n :style=\"exp_style\"\n @click=\"exp_click\"\n @mousedown=\"expmousedown\"\n @mouseover=\"expmouseover\"\n @mouseleave=\"expmouseleave\">\n ᐳ\n </div>\n <item-list :config=\"config\" :items=\"data.items\"\n v-if=\"show_exp_list\" :colors=\"colors\" :dc=\"dc\"\n @close-list=\"close_list\"\n @item-selected=\"emit_selected_sub\"/>\n </div>\n</template>\n\n<script>\n\nimport ItemList from './ItemList.vue'\nimport Utils from '../stuff/utils.js'\n\nexport default {\n name: 'ToolbarItem',\n props: [\n 'data', 'selected', 'colors', 'tv_id', 'config', 'dc', 'subs'\n ],\n components: { ItemList },\n mounted() {\n if (this.data.group) {\n let type = this.subs[this.data.group]\n let item = this.data.items.find(x => x.type === type)\n if (item) this.sub_item = item\n }\n },\n methods: {\n mousedown(e) {\n this.click_start = Utils.now()\n this.click_id = setTimeout(() => {\n this.show_exp_list = true\n }, this.config.TB_ICON_HOLD)\n },\n expmouseover() {\n this.exp_hover = true\n },\n expmouseleave() {\n this.exp_hover = false\n },\n expmousedown(e) {\n if (this.show_exp_list) e.stopPropagation()\n },\n emit_selected(src) {\n if (Utils.now() - this.click_start >\n this.config.TB_ICON_HOLD) return\n clearTimeout(this.click_id)\n //if (Utils.is_mobile && src === 'click') return\n // TODO: double firing\n if (!this.data.group) {\n this.$emit('item-selected', this.data)\n } else {\n let item = this.sub_item || this.data.items[0]\n this.$emit('item-selected', item)\n }\n },\n emit_selected_sub(item) {\n this.$emit('item-selected', item)\n this.sub_item = item\n },\n exp_click(e) {\n if (!this.data.group) return\n e.cancelBubble = true\n this.show_exp_list = !this.show_exp_list\n },\n close_list() {\n this.show_exp_list = false\n }\n },\n computed: {\n item_style() {\n if (this.$props.data.type === 'System:Splitter') {\n return this.splitter\n }\n let conf = this.$props.config\n let im = conf.TB_ITEM_M\n let m = (conf.TOOLBAR - conf.TB_ICON) * 0.5 - im\n let s = conf.TB_ICON + im * 2\n let b = this.exp_hover ? 0 : 3\n return {\n 'width': `${s}px`,\n 'height': `${s}px`,\n 'margin': `8px ${m}px 0px ${m}px`,\n 'border-radius': `3px ${b}px ${b}px 3px`\n }\n },\n icon_style() {\n if (this.$props.data.type === 'System:Splitter') {\n return {}\n }\n let conf = this.$props.config\n let br = conf.TB_ICON_BRI\n let sz = conf.TB_ICON\n let im = conf.TB_ITEM_M\n let ic = this.sub_item ?\n this.sub_item.icon : this.$props.data.icon\n return {\n 'background-image': `url(${ic})`,\n 'width': `${sz}px`,\n 'height': `${sz}px`,\n 'margin': `${im}px`,\n 'filter': `brightness(${br})`\n }\n },\n exp_style() {\n let conf = this.$props.config\n let im = conf.TB_ITEM_M\n let s = conf.TB_ICON * 0.5 + im\n let p = (conf.TOOLBAR - s * 2) / 4\n return {\n padding: `${s}px ${p}px`,\n transform: this.show_exp_list ?\n `scale(-0.6, 1)` :\n `scaleX(0.6)`\n }\n },\n splitter() {\n let conf = this.$props.config\n let colors = this.$props.colors\n let c = colors.grid\n let im = conf.TB_ITEM_M\n let m = (conf.TOOLBAR - conf.TB_ICON) * 0.5 - im\n let s = conf.TB_ICON + im * 2\n return {\n 'width': `${s}px`,\n 'height': '1px',\n 'margin': `8px ${m}px 8px ${m}px`,\n 'background-color': c\n }\n }\n },\n data() {\n return {\n exp_hover: false,\n show_exp_list: false,\n sub_item: null\n }\n }\n}\n\n</script>\n\n<style>\n\n.trading-vue-tbitem {\n}\n\n.trading-vue-tbitem:hover {\n background-color: #76878319;\n}\n\n.trading-vue-tbitem-exp {\n position: absolute;\n right: -3px;\n padding: 18.5px 5px;\n font-stretch: extra-condensed;\n transform: scaleX(0.6);\n font-size: 0.6em;\n opacity: 0.0;\n user-select: none;\n line-height: 0;\n}\n\n.trading-vue-tbitem:hover\n.trading-vue-tbitem-exp {\n opacity: 0.5;\n}\n\n.trading-vue-tbitem-exp:hover {\n background-color: #76878330;\n opacity: 0.9 !important;\n}\n\n.trading-vue-tbicon {\n position: absolute;\n}\n.trading-vue-tbitem.selected-item > .trading-vue-tbicon,\n.tvjs-item-list-item.selected-item > .trading-vue-tbicon {\n filter: brightness(1.45) sepia(1) hue-rotate(90deg) saturate(4.5) !important;\n}\n.tvjs-pixelated {\n -ms-interpolation-mode: nearest-neighbor;\n image-rendering: -webkit-optimize-contrast;\n image-rendering: -webkit-crisp-edges;\n image-rendering: -moz-crisp-edges;\n image-rendering: -o-crisp-edges;\n image-rendering: pixelated;\n}\n\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ToolbarItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ToolbarItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ToolbarItem.vue?vue&type=template&id=227b3c2e&\"\nimport script from \"./ToolbarItem.vue?vue&type=script&lang=js&\"\nexport * from \"./ToolbarItem.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ToolbarItem.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('227b3c2e')) {\n api.createRecord('227b3c2e', component.options)\n } else {\n api.reload('227b3c2e', component.options)\n }\n module.hot.accept(\"./ToolbarItem.vue?vue&type=template&id=227b3c2e&\", function () {\n api.rerender('227b3c2e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/ToolbarItem.vue\"\nexport default component.exports","\n<template>\n <div class=\"trading-vue-toolbar\" :style=\"styles\"\n :key=\"tool_count\">\n <toolbar-item v-for=\"(tool, i) in groups\"\n v-if=\"tool.icon && !tool.hidden\"\n @item-selected=\"selected\"\n :key=\"i\"\n :data=\"tool\"\n :subs=\"sub_map\"\n :dc=\"data\"\n :config=\"config\"\n :colors=\"colors\"\n :selected=\"is_selected(tool)\">\n </toolbar-item>\n </div>\n</template>\n\n<script>\n\nimport ToolbarItem from './ToolbarItem.vue'\n\nexport default {\n name: 'Toolbar',\n props: [\n 'data', 'height', 'colors', 'tv_id', 'config'\n ],\n components: { ToolbarItem },\n mounted() {\n },\n methods: {\n selected(tool) {\n this.$emit('custom-event', {\n event:'tool-selected', args: [tool.type]\n })\n if (tool.group) {\n // TODO: emit the sub map to DC (save)\n this.sub_map[tool.group] = tool.type\n }\n },\n is_selected(tool) {\n if (tool.group) {\n return !!tool.items.find(\n x => x.type === this.data.tool)\n }\n return tool.type === this.data.tool\n }\n },\n computed: {\n styles() {\n let colors = this.$props.colors\n let b = this.$props.config.TB_BORDER\n let w = this.$props.config.TOOLBAR - b\n let c = colors.grid\n let cb = colors.tbBack || colors.back\n let brd = colors.tbBorder || colors.scale\n let st = this.$props.config.TB_B_STYLE\n return {\n 'width': `${w}px`,\n 'height': `${this.$props.height-3}px`,\n 'background-color': cb,\n 'border-right': `${b}px ${st} ${brd}`\n }\n },\n groups() {\n let arr = []\n for (var tool of this.data.tools || []) {\n if (!tool.group) {\n arr.push(tool)\n continue\n }\n let g = arr.find(x => x.group === tool.group)\n if (!g) {\n arr.push({\n group: tool.group,\n icon: tool.icon,\n items: [tool]\n })\n } else {\n g.items.push(tool)\n }\n }\n return arr\n }\n },\n watch: {\n data: {\n handler(n) {\n // For some reason Vue.js doesn't want to\n // update 'tools' automatically when new item\n // is pushed/removed. Yo, Vue, I herd you\n // you want more dirty tricks?\n if (n.tools) this.tool_count = n.tools.length\n },\n deep: true\n }\n },\n data() { return { tool_count: 0, sub_map: {} } }\n}\n\n</script>\n\n<style>\n.trading-vue-toolbar {\n position: absolute;\n border-right: 1px solid black;\n z-index: 101;\n padding-top: 3px;\n user-select: none;\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Toolbar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Toolbar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Toolbar.vue?vue&type=template&id=021887fb&\"\nimport script from \"./Toolbar.vue?vue&type=script&lang=js&\"\nexport * from \"./Toolbar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Toolbar.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('021887fb')) {\n api.createRecord('021887fb', component.options)\n } else {\n api.reload('021887fb', component.options)\n }\n module.hot.accept(\"./Toolbar.vue?vue&type=template&id=021887fb&\", function () {\n api.rerender('021887fb', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/Toolbar.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"tvjs-widgets\",\n style: { width: _vm.width + \"px\", height: _vm.height + \"px\" }\n },\n _vm._l(Object.keys(_vm.map), function(id) {\n return _c(_vm.initw(id), {\n key: id,\n tag: \"component\",\n attrs: {\n id: id,\n main: _vm.map[id].ctrl,\n data: _vm.map[id].data,\n tv: _vm.tv,\n dc: _vm.dc\n }\n })\n }),\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<template>\n <!-- WidgetS Layer -->\n <div class=\"tvjs-widgets\"\n :style=\"{width: width+'px', height: height+'px'}\">\n <component v-for=\"id in Object.keys(map)\"\n :key=\"id\"\n :id=\"id\"\n :main=\"map[id].ctrl\"\n :data=\"map[id].data\"\n :tv=\"tv\"\n :dc=\"dc\"\n v-bind:is=\"initw(id)\">\n </component>\n </div>\n</template>\n<script>\nexport default {\n name: 'Widgets',\n props: ['width', 'height', 'map', 'tv', 'dc'],\n methods: {\n initw(id) {\n return this.$props.map[id].cls\n }\n }\n}\n</script>\n<style>\n.tvjs-widgets {\n position: absolute;\n z-index: 1000;\n pointer-events: none;\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Widgets.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Widgets.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Widgets.vue?vue&type=template&id=5fe4312f&\"\nimport script from \"./Widgets.vue?vue&type=script&lang=js&\"\nexport * from \"./Widgets.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Widgets.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('5fe4312f')) {\n api.createRecord('5fe4312f', component.options)\n } else {\n api.reload('5fe4312f', component.options)\n }\n module.hot.accept(\"./Widgets.vue?vue&type=template&id=5fe4312f&\", function () {\n api.rerender('5fe4312f', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/Widgets.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", {\n staticClass: \"tvjs-the-tip\",\n style: _vm.style,\n domProps: { innerHTML: _vm._s(_vm.data.text) },\n on: {\n mousedown: function($event) {\n return _vm.$emit(\"remove-me\")\n }\n }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<template>\n <div class=\"tvjs-the-tip\"\n v-html=\"data.text\" @mousedown=\"$emit('remove-me')\"\n :style=\"style\">\n </div>\n</template>\n<script>\nexport default {\n name: 'TheTip',\n props: ['data'],\n mounted() {\n setTimeout(() => this.$emit('remove-me'), 3000)\n },\n computed: {\n style() {\n return {\n background: this.data.color\n }\n }\n },\n}\n</script>\n<style>\n.tvjs-drift-enter-active {\n transition: all .3s ease;\n}\n.tvjs-drift-leave-active {\n transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);\n}\n.tvjs-drift-enter, .tvjs-drift-leave-to\n{\n transform: translateX(10px);\n opacity: 0;\n}\n.tvjs-the-tip {\n position: absolute;\n width: 200px;\n text-align: center;\n z-index: 10001;\n color: #ffffff;\n font-size: 1.5em;\n line-height: 1.15em;\n padding: 10px;\n border-radius: 3px;\n right: 70px;\n top: 10px;\n text-shadow: 1px 1px black;\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheTip.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheTip.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TheTip.vue?vue&type=template&id=2c1770cc&\"\nimport script from \"./TheTip.vue?vue&type=script&lang=js&\"\nexport * from \"./TheTip.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TheTip.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('2c1770cc')) {\n api.createRecord('2c1770cc', component.options)\n } else {\n api.reload('2c1770cc', component.options)\n }\n module.hot.accept(\"./TheTip.vue?vue&type=template&id=2c1770cc&\", function () {\n api.rerender('2c1770cc', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/TheTip.vue\"\nexport default component.exports","// extensions control\n\nexport default {\n mounted() {\n this.ctrllist()\n this.skin_styles()\n },\n methods: {\n // Build / rebuild component list\n ctrllist() {\n this.ctrl_destroy()\n this.controllers = []\n\n for (var x of this.$props.extensions) {\n let name = x.Main.__name__\n if (!this.xSettings[name]) {\n this.$set(this.xSettings, name, {})\n }\n let nc = new x.Main(\n this, // tv inst\n this.data, // dc\n this.xSettings[name] // settings\n )\n nc.name = name\n this.controllers.push(nc)\n }\n return this.controllers\n },\n // TODO: preventDefault\n pre_dc(e) {\n for (var ctrl of this.controllers) {\n if (ctrl.update) {\n ctrl.update(e)\n }\n }\n },\n post_dc(e) {\n for (var ctrl of this.controllers) {\n if (ctrl.post_update) {\n ctrl.post_update(e)\n }\n }\n },\n ctrl_destroy() {\n for (var ctrl of this.controllers) {\n if (ctrl.destroy) ctrl.destroy()\n }\n },\n skin_styles() {\n let id = 'tvjs-skin-styles'\n let stbr = document.getElementById(id)\n if (stbr) {\n let parent = stbr.parentNode\n parent.removeChild(stbr)\n }\n if (this.skin_proto && this.skin_proto.styles) {\n let sheet = document.createElement('style')\n sheet.setAttribute(\"id\", id)\n sheet.innerHTML = this.skin_proto.styles\n this.$el.appendChild(sheet)\n }\n }\n },\n computed: {\n ws() {\n let ws = {}\n for (var ctrl of this.controllers) {\n if (ctrl.widgets) {\n for (var id in ctrl.widgets) {\n ws[id] = ctrl.widgets[id]\n ws[id].ctrl = ctrl\n }\n }\n }\n return ws\n },\n skins() {\n let sks = {}\n for (var x of this.$props.extensions) {\n for (var id in x.skins || {}) {\n sks[id] = x.skins[id]\n }\n }\n return sks\n },\n skin_proto() {\n return this.skins[this.$props.skin]\n },\n colorpack() {\n let sel = this.skins[this.$props.skin]\n return sel ? sel.colors : undefined\n }\n },\n watch: {\n // TODO: This is fast & dirty fix, need\n // to fix the actual reactivity problem\n skin(n, p) {\n if (n !== p) this.resetChart()\n this.skin_styles()\n },\n extensions() {\n this.ctrllist()\n },\n xSettings: {\n handler(n, p) {\n for (var ctrl of this.controllers) {\n if (ctrl.onsettings) {\n ctrl.onsettings(n, p)\n }\n }\n },\n deep: true\n }\n },\n data() {\n return {\n controllers: []\n }\n }\n}\n","\n<template>\n <!-- Main component -->\n <div class=\"trading-vue\" v-bind:id=\"id\"\n @mousedown=\"mousedown\" @mouseleave=\"mouseleave\"\n :style=\"{\n color: this.chart_props.colors.text,\n font: this.font_comp,\n width: this.width+'px',\n height: this.height+'px'}\">\n <toolbar v-if=\"toolbar\"\n ref=\"toolbar\"\n v-on:custom-event=\"custom_event\"\n v-bind=\"chart_props\"\n v-bind:config=\"chart_config\">\n </toolbar>\n <widgets v-if=\"controllers.length\"\n ref=\"widgets\"\n :map=\"ws\" :width=\"width\" :height=\"height\"\n :tv=\"this\" :dc=\"data\">\n </widgets>\n <chart :key=\"reset\"\n ref=\"chart\"\n v-bind=\"chart_props\"\n v-bind:tv_id=\"id\"\n v-bind:config=\"chart_config\"\n v-on:custom-event=\"custom_event\"\n v-on:range-changed=\"range_changed\"\n v-on:legend-button-click=\"legend_button\">\n </chart>\n <transition name=\"tvjs-drift\">\n <the-tip :data=\"tip\" v-if=\"tip\"\n @remove-me=\"tip = null\"/>\n </transition>\n </div>\n</template>\n\n<script>\n\nimport Const from './stuff/constants.js'\nimport Chart from './components/Chart.vue'\nimport Toolbar from './components/Toolbar.vue'\nimport Widgets from './components/Widgets.vue'\nimport TheTip from './components/TheTip.vue'\nimport XControl from './mixins/xcontrol.js'\n\nexport default {\n name: 'TradingVue',\n components: {\n Chart, Toolbar, Widgets, TheTip\n },\n mixins: [ XControl ],\n props: {\n titleTxt: {\n type: String,\n default: 'TradingVue.js'\n },\n id: {\n type: String,\n default: 'trading-vue-js'\n },\n width: {\n type: Number,\n default: 800\n },\n height: {\n type: Number,\n default: 421\n },\n colorTitle: {\n type: String,\n default: '#42b883'\n },\n colorBack: {\n type: String,\n default: '#121826'\n },\n colorGrid: {\n type: String,\n default: '#2f3240'\n },\n colorText: {\n type: String,\n default: '#dedddd'\n },\n colorTextHL: {\n type: String,\n default: '#fff'\n },\n colorScale: {\n type: String,\n default: '#838383'\n },\n colorCross: {\n type: String,\n default: '#8091a0'\n },\n colorCandleUp: {\n type: String,\n default: '#23a776'\n },\n colorCandleDw: {\n type: String,\n default: '#e54150'\n },\n colorWickUp: {\n type: String,\n default: '#23a77688'\n },\n colorWickDw: {\n type: String,\n default: '#e5415088'\n },\n colorWickSm: {\n type: String,\n default: 'transparent' // deprecated\n },\n colorVolUp: {\n type: String,\n default: '#79999e42'\n },\n colorVolDw: {\n type: String,\n default: '#ef535042'\n },\n colorPanel: {\n type: String,\n default: '#565c68'\n },\n colorTbBack: {\n type: String\n },\n colorTbBorder: {\n type: String,\n default: '#8282827d'\n },\n colors: {\n type: Object\n },\n font: {\n type: String,\n default: Const.ChartConfig.FONT\n },\n toolbar: {\n type: Boolean,\n default: false\n },\n data: {\n type: Object,\n required: true\n },\n // Your overlay classes here\n overlays: {\n type: Array,\n default: function () { return [] }\n },\n // Overwrites ChartConfig values,\n // see constants.js\n chartConfig: {\n type: Object,\n default: function () { return {} }\n },\n legendButtons: {\n type: Array,\n default: function () { return [] }\n },\n indexBased: {\n type: Boolean,\n default: false\n },\n extensions: {\n type: Array,\n default: function () { return [] }\n },\n xSettings: {\n type: Object,\n default: function () { return {} }\n },\n skin: {\n type: String // Skin Name\n },\n timezone: {\n type: Number,\n default: 0\n }\n },\n computed: {\n // Copy a subset of TradingVue props\n chart_props() {\n let offset = this.$props.toolbar ?\n this.chart_config.TOOLBAR : 0\n let chart_props = {\n title_txt: this.$props.titleTxt,\n overlays: this.$props.overlays.concat(this.mod_ovs),\n data: this.decubed,\n width: this.$props.width - offset,\n height: this.$props.height,\n font: this.font_comp,\n buttons: this.$props.legendButtons,\n toolbar: this.$props.toolbar,\n ib: this.$props.indexBased || this.index_based || false,\n colors: Object.assign({}, this.$props.colors ||\n this.colorpack),\n skin: this.skin_proto,\n timezone: this.$props.timezone\n }\n\n this.parse_colors(chart_props.colors)\n return chart_props\n },\n chart_config() {\n return Object.assign({},\n Const.ChartConfig,\n this.$props.chartConfig,\n )\n },\n decubed() {\n let data = this.$props.data\n if (data.data !== undefined) {\n // DataCube detected\n data.init_tvjs(this)\n return data.data\n } else {\n return data\n }\n },\n index_based() {\n const base = this.$props.data\n if (base.chart) {\n return base.chart.indexBased\n }\n else if (base.data) {\n return base.data.chart.indexBased\n }\n return false\n },\n mod_ovs() {\n let arr = []\n for (var x of this.$props.extensions) {\n arr.push(...Object.values(x.overlays))\n }\n return arr\n },\n font_comp() {\n return this.skin_proto && this.skin_proto.font ?\n this.skin_proto.font : this.font\n }\n },\n data() {\n return { reset: 0, tip: null }\n },\n beforeDestroy() {\n this.custom_event({ event: 'before-destroy' })\n this.ctrl_destroy()\n },\n methods: {\n // TODO: reset extensions?\n resetChart(resetRange = true) {\n this.reset++\n let range = this.getRange()\n if (!resetRange && range[0] && range[1]) {\n this.$nextTick(() => this.setRange(...range))\n }\n this.$nextTick(() => this.custom_event({\n event: 'chart-reset', args: []\n }))\n },\n goto(t) {\n // TODO: limit goto & setRange (out of data error)\n if (this.chart_props.ib) {\n const ti_map = this.$refs.chart.ti_map\n t = ti_map.gt2i(t, this.$refs.chart.ohlcv)\n }\n this.$refs.chart.goto(t)\n },\n setRange(t1, t2) {\n if (this.chart_props.ib) {\n const ti_map = this.$refs.chart.ti_map\n const ohlcv = this.$refs.chart.ohlcv\n t1 = ti_map.gt2i(t1, ohlcv)\n t2 = ti_map.gt2i(t2, ohlcv)\n }\n this.$refs.chart.setRange(t1, t2)\n },\n getRange() {\n if (this.chart_props.ib) {\n const ti_map = this.$refs.chart.ti_map\n // Time range => index range\n return this.$refs.chart.range\n .map(x => ti_map.i2t(x))\n }\n return this.$refs.chart.range\n },\n getCursor() {\n\n let cursor = this.$refs.chart.cursor\n if (this.chart_props.ib) {\n const ti_map = this.$refs.chart.ti_map\n let copy = Object.assign({}, cursor)\n copy.i = copy.t\n copy.t = ti_map.i2t(copy.t)\n return copy\n }\n return cursor\n },\n showTheTip(text, color = \"orange\") {\n this.tip = { text, color }\n },\n legend_button(event) {\n this.custom_event({\n event: 'legend-button-click', args: [event]\n })\n },\n custom_event(d) {\n if ('args' in d) {\n this.$emit(d.event, ...d.args)\n } else {\n this.$emit(d.event)\n }\n let data = this.$props.data\n let ctrl = this.controllers.length !== 0\n if (ctrl) this.pre_dc(d)\n if (data.tv) {\n // If the data object is DataCube\n data.on_custom_event(d.event, d.args)\n }\n if (ctrl) this.post_dc(d)\n },\n range_changed(r) {\n if (this.chart_props.ib) {\n const ti_map = this.$refs.chart.ti_map\n r = r.map(x => ti_map.i2t(x))\n }\n this.$emit('range-changed', r)\n this.custom_event(\n {event: 'range-changed', args: [r]}\n )\n if (this.onrange) this.onrange(r)\n },\n set_loader(dc) {\n this.onrange = r => {\n let pf = this.chart_props.ib ? '_ms' : ''\n let tf = this.$refs.chart['interval' + pf]\n dc.range_changed(r, tf)\n }\n },\n parse_colors(colors) {\n for (var k in this.$props) {\n if (k.indexOf('color') === 0 && k !== 'colors') {\n let k2 = k.replace('color', '')\n k2 = k2[0].toLowerCase() + k2.slice(1)\n if (colors[k2]) continue\n colors[k2] = this.$props[k]\n }\n }\n },\n mousedown() {\n this.$refs.chart.activated = true\n },\n mouseleave() {\n this.$refs.chart.activated = false\n }\n }\n}\n</script>\n<style>\n/* Anit-boostrap tactix */\n.trading-vue *, ::after, ::before {\n box-sizing: content-box;\n}\n.trading-vue img {\n vertical-align: initial;\n}\n</style>\n","import mod from \"-!../node_modules/babel-loader/lib/index.js!../node_modules/vue-loader/lib/index.js??vue-loader-options!./TradingVue.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/babel-loader/lib/index.js!../node_modules/vue-loader/lib/index.js??vue-loader-options!./TradingVue.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TradingVue.vue?vue&type=template&id=235c0ade&\"\nimport script from \"./TradingVue.vue?vue&type=script&lang=js&\"\nexport * from \"./TradingVue.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TradingVue.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/wolf/Documents/Apps/Trading/trading-vue-bundle/trading-vue/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('235c0ade')) {\n api.createRecord('235c0ade', component.options)\n } else {\n api.reload('235c0ade', component.options)\n }\n module.hot.accept(\"./TradingVue.vue?vue&type=template&id=235c0ade&\", function () {\n api.rerender('235c0ade', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/TradingVue.vue\"\nexport default component.exports","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","\n// Webworker interface\n\n// Compiled webworker (see webpack/ww_plugin.js)\nimport worker_data from './tmp/ww$$$.json'\nimport Utils from '../stuff/utils.js'\nimport lz from 'lz-string'\nimport {} from './script_ww.js' // For webworker-loader to find the ww\n\nclass WebWork {\n\n constructor(dc) {\n this.dc = dc\n this.tasks = {}\n this.onevent = () => {}\n this.start()\n }\n\n start() {\n if (this.worker) this.worker.terminate()\n // URL.createObjectURL\n window.URL = window.URL || window.webkitURL\n let data = lz.decompressFromBase64(worker_data[0])\n var blob\n try {\n blob = new Blob([data], {type: 'application/javascript'})\n } catch (e) {\n // Backwards-compatibility\n window.BlobBuilder = window.BlobBuilder ||\n window.WebKitBlobBuilder ||\n window.MozBlobBuilder\n blob = new BlobBuilder()\n blob.append(data)\n blob = blob.getBlob()\n }\n this.worker = new Worker(URL.createObjectURL(blob))\n this.worker.onmessage = e => this.onmessage(e)\n }\n\n start_socket() {\n if (!this.dc.sett.node_url) return\n this.socket = new WebSocket(this.dc.sett.node_url)\n this.socket.addEventListener('message', e => {\n this.onmessage({data: JSON.parse(e.data)})\n })\n this.msg_queue = []\n }\n\n send(msg, tx_keys) {\n if (this.dc.sett.node_url) {\n return this.send_node(msg, tx_keys)\n }\n if (tx_keys) {\n let tx_objs = tx_keys.map(k => msg.data[k])\n this.worker.postMessage(msg, tx_objs)\n } else {\n this.worker.postMessage(msg)\n }\n }\n\n // Send to node.js via websocket\n send_node(msg, tx_keys) {\n if (!this.socket) this.start_socket()\n if (this.socket && this.socket.readyState) {\n // Send the old messages first\n while(this.msg_queue.length) {\n let m = this.msg_queue.shift()\n this.socket.send(JSON.stringify(m))\n }\n this.socket.send(JSON.stringify(msg))\n } else {\n this.msg_queue.push(msg)\n }\n }\n\n onmessage(e) {\n if (e.data.id in this.tasks) {\n this.tasks[e.data.id](e.data.data)\n delete this.tasks[e.data.id]\n } else {\n this.onevent(e)\n }\n }\n\n // Execute a task\n async exec(type, data, tx_keys) {\n return new Promise((rs, rj) => {\n let id = Utils.uuid()\n this.send({ type, id, data }, tx_keys)\n this.tasks[id] = res => {\n rs(res)\n }\n })\n }\n\n // Execute a task, but just fucking do it,\n // do not wait for the result\n just(type, data, tx_keys) {\n let id = Utils.uuid()\n this.send({ type, id, data }, tx_keys)\n }\n\n // Relay an event from iframe postMessage\n // (for the future)\n async relay(event, just = false) {\n return new Promise((rs, rj) => {\n this.send(event, event.tx_keys)\n if (!just) {\n this.tasks[event.id] = res => {\n rs(res)\n }\n }\n })\n }\n\n destroy() {\n if (this.worker) this.worker.terminate()\n }\n}\n\nexport default WebWork\n","\nimport Const from '../stuff/constants.js'\n\nconst FDEFS = /(function |)([$A-Z_][0-9A-Z_$\\.]*)[\\s]*?\\((.*?)\\)/gmi\nconst SBRACKETS = /([$A-Z_][0-9A-Z_$\\.]*)[\\s]*?\\[([^\"^\\[^\\]]+?)\\]/gmi\nconst TFSTR = /(\\d+)(\\w*)/gm\n\nconst BUF_INC = 5\nvar tf_cache = {}\n\nexport function f_args(src) {\n FDEFS.lastIndex = 0\n\n var m = FDEFS.exec(src)\n if (m) {\n let fkeyword = m[1].trim()\n let fname = m[2].trim()\n let fargs = m[3].trim()\n\n return fargs.split(',').map(x => x.trim())\n }\n return []\n}\nexport function f_body(src) {\n return src.slice(\n src.indexOf(\"{\") + 1,\n src.lastIndexOf(\"}\")\n )\n}\n\nexport function wrap_idxs(src, pre = '') {\n\n SBRACKETS.lastIndex = 0\n let changed = false\n\n do {\n var m = SBRACKETS.exec(src)\n\n if (m) {\n\n let vname = m[1].trim()\n let vindex = m[2].trim()\n if (vindex === '0' || parseInt(vindex) < BUF_INC) {\n continue\n }\n switch(vname) {\n case 'let':\n case 'var':\n case 'return':\n continue\n }\n\n //let wrap = `${pre}_v(${vname}, ${vindex})[${vindex}]`\n let wrap = `${vname}[${pre}_i(${vindex}, ${vname})]`\n src = src.replace(m[0], wrap)\n changed = true\n }\n } while (m)\n\n return changed ? src : src\n}\n\n// Get all module helper classes\nexport function make_module_lib(mod) {\n let lib = {}\n for (var k in mod) {\n if (k === 'main' || k === 'id') continue\n let a = f_args(mod[k])\n lib[k] = new Function(a, f_body(mod[k]))\n }\n return lib\n}\n\nexport function get_raw_src(f) {\n if (typeof f === 'string') return f\n let src = f.toString()\n return src.slice(\n src.indexOf(\"{\") + 1,\n src.lastIndexOf(\"}\")\n )\n}\n\n// Get tf in ms from pairs such (`15`, `m`)\nexport function tf_from_pair(num, pf) {\n var mult = 1\n switch (pf) {\n case 's': mult = Const.SECOND; break\n case 'm': mult = Const.MINUTE; break\n case 'H': mult = Const.HOUR; break\n case 'D': mult = Const.DAY; break\n case 'W': mult = Const.WEEK; break\n case 'M': mult = Const.MONTH; break\n case 'Y': mult = Const.YEAR; break\n }\n return parseInt(num) * mult\n}\n\nexport function tf_from_str(str) {\n\n if (typeof str === 'number') return str\n if (tf_cache[str]) return tf_cache[str]\n\n TFSTR.lastIndex = 0\n let m = TFSTR.exec(str)\n if (m) {\n tf_cache[str] = tf_from_pair(m[1], m[2])\n return tf_cache[str]\n }\n return undefined\n}\n\nexport function get_fn_id(pre, id) {\n return pre + '-' + id.split('<-').pop()\n}\n\n// Apply filter for all new overlays\nexport function ovf(obj, f) {\n var nw = {}\n for (var id in obj) {\n nw[id] = {}\n for (var k in obj[id]) {\n if (k === 'data') continue\n nw[id][k] = obj[id][k]\n }\n nw[id].data = f(obj[id].data)\n }\n return nw\n}\n\n// Return index of the next element in\n// dataset (since t). Impl: simple binary search\n// TODO: optimize (remember the penultimate\n// iteration and start from there)\nexport function nextt(data, t, ti = 0) {\n\n let i0 = 0\n let iN = data.length - 1\n\n while (i0 <= iN) {\n var mid = Math.floor((i0 + iN) / 2)\n if (data[mid][ti] === t) {\n return mid\n } else if (data[mid][ti] < t) {\n i0 = mid + 1\n } else {\n iN = mid - 1\n }\n }\n\n return t < data[mid][ti] ? mid : mid + 1\n\n}\n\n// Estimated size of datasets\nexport function size_of_dss(data) {\n let bytes = 0\n for (var id in data) {\n if (data[id].data && data[id].data[0]) {\n let s0 = size_of(data[id].data[0])\n bytes += s0 * data[id].data.length\n }\n }\n return bytes\n}\n\n\n// Used to measure the size of dataset\nexport function size_of(object) {\n var list = [], stack = [object], bytes = 0\n while (stack.length) {\n var value = stack.pop()\n var type = typeof value\n if (type === 'boolean') {\n bytes += 4\n } else if (type === 'string') {\n bytes += value.length * 2\n } else if (type === 'number') {\n bytes += 8\n } else if (type === 'object' &&\n list.indexOf(value) === -1) {\n list.push(value)\n for(var i in value) {\n stack.push(value[i])\n }\n }\n }\n return bytes\n}\n\n// Update onchart/offchart\nexport function update(data, val) {\n const i = data.length - 1\n const last = data[i]\n if (!last || val[0] > last[0]) {\n data.push(val)\n } else {\n data[i] = val\n }\n}\n\nexport function now() {\n return (new Date()).getTime()\n}\n","\n// Dataset proxy between vuejs & WebWorker\n\nimport { now } from './script_utils.js'\n\nexport default class Dataset {\n\n constructor(dc, desc) {\n\n // TODO: dataset url arrow fn tells WW\n // to load the ds directly from web\n\n this.type = desc.type\n this.id = desc.id\n this.dc = dc\n\n // Send the data to WW\n if (desc.data) {\n this.dc.ww.just('upload-data', {\n [this.id]: desc\n })\n // Remove the data from the descriptor\n delete desc.data\n }\n\n let proto = Object.getPrototypeOf(this)\n Object.setPrototypeOf(desc, proto)\n Object.defineProperty(desc, 'dc', {\n get() { return dc }\n })\n\n }\n\n // Watch for the changes of descriptors\n static watcher(n, p) {\n let nids = n.map(x => x.id)\n let pids = p.map(x => x.id)\n\n for (var id of nids) {\n if (!pids.includes(id)) {\n let ds = n.filter(x => x.id === id)[0]\n this.dss[id] = new Dataset(this, ds)\n }\n }\n\n for (var id of pids) {\n if (!nids.includes(id) && this.dss[id]) {\n this.dss[id].remove()\n }\n }\n }\n\n // Make an object for data transfer\n static make_tx(dc, types) {\n\n let main = dc.data.chart.data\n let base = {}\n if (types.find(x => x.type === 'OHLCV')) {\n base = { ohlcv: main }\n }\n\n // TODO: add more sophisticated search\n // (using 'script.datasets' paramerter)\n /*for (var req of types) {\n let ds = Object.values(dc.dss || {})\n .find(x => x.type === req.type)\n if (ds && ds.data) {\n base[ds.id] = {\n id: ds.id,\n type: ds.type,\n data: ds.data\n }\n }\n }*/\n // TODO: Data request callback ?\n\n return base\n }\n\n // Set data (overwrite the whole dataset)\n set(data, exec = true) {\n this.dc.ww.just('dataset-op', {\n id: this.id,\n type: 'set',\n data: data,\n exec: exec\n })\n }\n\n // Update with new data (array of data points)\n update(arr) {\n this.dc.ww.just('update-data', {\n [this.id]: arr\n })\n }\n\n // Send WW a chunk to merge. The merge algo\n // here is simpler than in DC. It just adds\n // data at the beginning or/and the end of ds\n merge(data, exec = true) {\n this.dc.ww.just('dataset-op', {\n id: this.id,\n type: 'mrg',\n data: data,\n exec: exec\n })\n }\n\n // Remove the ds from WW\n remove(exec = true) {\n this.dc.del(`datasets.${this.id}`)\n this.dc.ww.just('dataset-op', {\n id: this.id,\n type: 'del',\n exec: exec\n })\n delete this.dc.dss[this.id]\n }\n\n // Fetch data from WW\n async data() {\n let ds = await this.dc.ww.exec(\n 'get-dataset',\n this.id\n )\n if (!ds) return\n return ds.data\n }\n\n}\n\n// Dataset reciever (created on WW)\n\nexport class DatasetWW {\n\n constructor(id, data) {\n this.last_upd = now()\n this.id = id\n if (Array.isArray(data)) {\n // Regular array\n this.data = data\n if (id === 'ohlcv') this.type = 'OHLCV'\n } else {\n // Dataset descriptor\n this.data = data.data\n this.type = data.type\n }\n }\n\n // Update from 'update-data' event\n // TODO: ds size limit (in MB / data points)\n static update_all(se, data) {\n for (var k in data) {\n if (k === 'ohlcv') continue\n let id = k.split('.')[1] || k\n if (!se.data[id]) continue\n let arr = se.data[id].data\n let iN = arr.length - 1\n let last = arr[iN]\n\n for (var dp of data[k]) {\n if (!last || dp[0] > last[0]) {\n arr.push(dp)\n }\n }\n se.data[id].last_upd = now()\n }\n }\n\n merge(data) {\n let len = this.data.length\n if (!len) {\n this.data = data\n return\n }\n let t0 = this.data[0][0]\n let tN = this.data[len - 1][0]\n let l = data.filter(x => x[0] < t0)\n let r = data.filter(x => x[0] > tN)\n this.data = l.concat(this.data, r)\n }\n\n // On dataset operation\n op(se, op) {\n this.last_upd = now()\n switch(op.type) {\n case 'set':\n this.data = op.data\n se.recalc_size()\n break\n case 'del':\n delete se.data[this.id]\n se.recalc_size()\n break\n case 'mrg':\n this.merge(op.data)\n se.recalc_size()\n break\n }\n }\n}\n","\n// DataCube event handlers\n\nimport Utils from '../stuff/utils.js'\nimport Icons from '../stuff/icons.json'\nimport WebWork from './script_ww_api.js'\nimport Dataset from './dataset.js'\n\n\nexport default class DCEvents {\n\n constructor() {\n\n this.ww = new WebWork(this)\n\n // Listen to the web-worker events\n this.ww.onevent = e => {\n for (var ctrl of this.tv.controllers) {\n if (ctrl.ww) ctrl.ww(e.data)\n }\n switch(e.data.type) {\n case 'request-data':\n // TODO: DataTunnel class for smarter data transfer\n if (this.ww._data_uploading) break\n let data = Dataset.make_tx(this, e.data.data)\n this.send_meta_2_ww()\n this.ww.just('upload-data', data)\n this.ww._data_uploading = true\n break\n case 'overlay-data':\n this.on_overlay_data(e.data.data)\n break\n case 'overlay-update':\n this.on_overlay_update(e.data.data)\n break\n case 'data-uploaded':\n this.ww._data_uploading = false\n break\n case 'engine-state':\n this.se_state = Object.assign(\n this.se_state || {}, e.data.data)\n break\n case 'modify-overlay':\n this.modify_overlay(e.data.data)\n break\n case 'script-signal':\n this.tv.$emit('signal', e.data.data)\n break\n }\n for (var ctrl of this.tv.controllers) {\n if (ctrl.post_ww) ctrl.post_ww(e.data)\n }\n }\n }\n\n // Called when overalay/tv emits 'custom-event'\n on_custom_event(event, args) {\n switch(event) {\n case 'register-tools': this.register_tools(args)\n break\n case 'exec-script': this.exec_script(args)\n break\n case 'exec-all-scripts': this.exec_all_scripts()\n break\n case 'data-len-changed': this.data_changed(args)\n break\n case 'tool-selected':\n if (!args[0]) break // TODO: Quick fix, investigate\n if (args[0].split(':')[0] === 'System') {\n this.system_tool(args[0].split(':')[1])\n break\n }\n this.tv.$set(this.data, 'tool', args[0])\n if (args[0] === 'Cursor') {\n this.drawing_mode_off()\n }\n break\n case 'grid-mousedown': this.grid_mousedown(args)\n break\n case 'drawing-mode-off': this.drawing_mode_off()\n break\n case 'change-settings': this.change_settings(args)\n break\n case 'range-changed': this.scripts_onrange(...args)\n break\n case 'scroll-lock': this.on_scroll_lock(args[0])\n break\n case 'object-selected': this.object_selected(args)\n break\n case 'remove-tool': this.system_tool('Remove')\n break\n case 'before-destroy': this.before_destroy()\n break\n\n }\n\n }\n\n // Triggered when one or multiple settings are changed\n // We select only the changed ones & re-exec them on the\n // web worker\n on_settings(values, prev) {\n\n if (!this.sett.scripts) return\n\n let delta = {}\n let changed = false\n\n for (var i = 0; i < values.length; i++) {\n let n = values[i]\n let arr = prev.filter(x => x.v === n.v)\n if (!arr.length && n.p.settings.$props) {\n let id = n.p.settings.$uuid\n if (Utils.is_scr_props_upd(n, prev) &&\n Utils.delayed_exec(n.p)) {\n delta[id] = n.v\n changed = true\n this.tv.$set(n.p, 'loading', true)\n }\n }\n }\n\n if (changed && Object.keys(delta).length) {\n let tf = this.tv.$refs.chart.interval_ms ||\n this.data.chart.tf\n let range = this.tv.getRange()\n this.ww.just('update-ov-settings', {\n delta, tf, range\n })\n }\n\n }\n\n // When the set of $uuids is changed\n on_ids_changed(values, prev) {\n\n let rem = prev.filter(\n x => x !== undefined && !values.includes(x))\n\n if (rem.length) {\n this.ww.just('remove-scripts', rem)\n }\n }\n\n // Combine all tools and their mods\n register_tools(tools) {\n let preset = {}\n for (var tool of this.data.tools || []) {\n preset[tool.type] = tool\n delete tool.type\n }\n this.tv.$set(this.data, 'tools', [])\n let list = [{\n type: 'Cursor', icon: Icons['cursor.png']\n }]\n for (var tool of tools) {\n var proto = Object.assign({}, tool.info)\n let type = tool.info.type || 'Default'\n proto.type = `${tool.use_for}:${type}`\n this.merge_presets(proto, preset[tool.use_for])\n this.merge_presets(proto, preset[proto.type])\n delete proto.mods\n list.push(proto)\n for (var mod in tool.info.mods) {\n var mp = Object.assign({}, proto)\n mp = Object.assign(mp, tool.info.mods[mod])\n mp.type = `${tool.use_for}:${mod}`\n this.merge_presets(mp, preset[tool.use_for])\n this.merge_presets(mp, preset[mp.type])\n list.push(mp)\n }\n }\n this.tv.$set(this.data, 'tools', list)\n this.tv.$set(this.data, 'tool', 'Cursor')\n }\n\n exec_script(args) {\n if (args.length && this.sett.scripts) {\n let obj = this.get_overlay(args[0])\n if (!obj || obj.scripts === false) return\n if (obj.script && obj.script.src) {\n args[0].src = obj.script.src // opt, override the src\n }\n // Parse script props & get the values from the ov\n // TODO: remove unnecessary script initializations\n let s = obj.settings\n let props = args[0].src.props || {}\n if (!s.$uuid) s.$uuid = `${obj.type}-${Utils.uuid2()}`\n args[0].uuid = s.$uuid\n args[0].sett = s\n for (var k in props || {}) {\n let proto = props[k]\n if (s[k] !== undefined) {\n proto.val = s[k] // use the existing val\n continue\n }\n if (proto.def === undefined) {\n // TODO: add support of info / errors to the legend\n console.error(\n `Overlay ${obj.id}: script prop '${k}' ` +\n `doesn't have a default value`)\n return\n }\n s[k] = proto.val = proto.def // set the default\n }\n // Remove old props (dropped by the current exec)\n if (s.$props) {\n for (var k in s) {\n if (s.$props.includes(k) && !(k in props)) {\n delete s[k]\n }\n }\n }\n s.$props = Object.keys(args[0].src.props || {})\n this.tv.$set(obj, 'loading', true)\n let tf = this.tv.$refs.chart.interval_ms ||\n this.data.chart.tf\n let range = this.tv.getRange()\n if (obj.script && obj.script.output != null) {\n args[0].output = obj.script.output\n }\n this.ww.just('exec-script', {\n s: args[0], tf, range\n })\n }\n }\n\n exec_all_scripts() {\n if (!this.sett.scripts) return\n this.set_loading(true)\n let tf = this.tv.$refs.chart.interval_ms ||\n this.data.chart.tf\n let range = this.tv.getRange()\n this.ww.just('exec-all-scripts', { tf, range })\n }\n\n scripts_onrange(r) {\n if (!this.sett.scripts) return\n let delta = {}\n\n this.get('.').forEach(v => {\n if (v.script && v.script.execOnRange &&\n v.settings.$uuid) {\n // TODO: execInterrupt flag?\n if (Utils.delayed_exec(v)) {\n delta[v.settings.$uuid] = v.settings\n }\n }\n })\n\n if (Object.keys(delta).length) {\n let tf = this.tv.$refs.chart.interval_ms ||\n this.data.chart.tf\n let range = this.tv.getRange()\n this.ww.just('update-ov-settings', {\n delta, tf, range\n })\n }\n }\n\n // Overlay modification from WW\n modify_overlay(upd) {\n let obj = this.get_overlay(upd)\n if (obj) {\n for (var k in upd.fields || {}) {\n if (typeof obj[k] === 'object') {\n this.merge(`${upd.uuid}.${k}`, upd.fields[k])\n } else {\n this.tv.$set(obj, k, upd.fields[k])\n }\n }\n }\n }\n\n data_changed(args) {\n if (!this.sett.scripts) return\n if (this.sett.data_change_exec === false) return\n let main = this.data.chart.data\n if (this.ww._data_uploading) return\n if (!this.se_state.scripts) return\n this.send_meta_2_ww()\n this.ww.just('upload-data', { ohlcv: main })\n this.ww._data_uploading = true\n this.set_loading(true)\n }\n\n set_loading(flag) {\n let skrr = this.get('.').filter(x => x.settings.$props)\n for (var s of skrr) {\n this.merge(`${s.id}`, { loading: flag })\n }\n }\n\n send_meta_2_ww() {\n let tf = this.tv.$refs.chart.interval_ms ||\n this.data.chart.tf\n let range = this.tv.getRange()\n this.ww.just('send-meta-info', { tf, range })\n }\n\n merge_presets(proto, preset) {\n if (!preset) return\n for (var k in preset) {\n if (k === 'settings') {\n Object.assign(proto[k], preset[k])\n } else {\n proto[k] = preset[k]\n }\n }\n }\n\n grid_mousedown(args) {\n // TODO: tool state finished?\n this.object_selected([])\n // Remove the previous RangeTool\n let rem = () => this.get('RangeTool')\n .filter(x => x.settings.shiftMode)\n .forEach(x => this.del(x.id))\n if (this.data.tool && this.data.tool !== 'Cursor' &&\n !this.data.drawingMode) {\n // Prevent from \"null\" tools (tool created with HODL)\n if (args[1].type !== 'tap') {\n this.tv.$set(this.data, 'drawingMode', true)\n this.build_tool(args[0])\n } else {\n this.tv.showTheTip(\n `<b>Hodl</b>+<b>Drug</b> to create, ` +\n `<b>Tap</b> to finish a tool`\n )\n }\n } else if (this.sett.shift_measure && args[1].shiftKey) {\n rem()\n this.tv.$nextTick(() =>\n this.build_tool(args[0], 'RangeTool:ShiftMode'))\n } else {\n rem()\n }\n }\n\n drawing_mode_off() {\n this.tv.$set(this.data, 'drawingMode', false)\n this.tv.$set(this.data, 'tool', 'Cursor')\n }\n\n // Place a new tool\n build_tool(grid_id, type) {\n\n let list = this.data.tools\n type = type || this.data.tool\n let proto = list.find(x => x.type === type)\n if (!proto) return\n let sett = Object.assign({}, proto.settings || {})\n let data = (proto.data || []).slice()\n\n if(!('legend' in sett)) sett.legend = false\n if(!('z-index' in sett)) sett['z-index'] = 100\n sett.$selected = true\n sett.$state = 'wip'\n\n let side = grid_id ? 'offchart' : 'onchart'\n let id = this.add(side, {\n name: proto.name,\n type: type.split(':')[0],\n settings: sett,\n data: data,\n grid: { id: grid_id }\n })\n\n sett.$uuid = `${id}-${Utils.now()}`\n\n this.tv.$set(this.data, 'selected', sett.$uuid)\n this.add_trash_icon()\n }\n\n // Remove selected / Remove all, etc\n system_tool(type) {\n switch (type) {\n case 'Remove':\n if (this.data.selected) {\n this.del(this.data.selected)\n this.remove_trash_icon()\n this.drawing_mode_off()\n this.on_scroll_lock(false)\n }\n break\n }\n }\n\n // Apply new overlay settings\n change_settings(args) {\n let settings = args[0]\n delete settings.id\n let grid_id = args[1]\n this.merge(`${args[3]}.settings`, settings)\n }\n\n // Lock the scrolling mechanism\n on_scroll_lock(flag) {\n this.tv.$set(this.data, 'scrollLock', flag)\n }\n\n // When new object is selected / unselected\n object_selected(args) {\n var q = this.data.selected\n if (q) {\n // Check if current drawing is finished\n //let res = this.get_one(`${q}.settings`)\n //if (res && res.$state !== 'finished') return\n this.merge(`${q}.settings`, {\n $selected: false\n })\n this.remove_trash_icon()\n }\n this.tv.$set(this.data, 'selected', null)\n\n if (!args.length) return\n\n this.tv.$set(this.data, 'selected', args[2])\n this.merge(`${args[2]}.settings`, {\n $selected: true\n })\n\n this.add_trash_icon()\n }\n\n add_trash_icon() {\n const type = 'System:Remove'\n if (this.data.tools.find(x => x.type === type)) {\n return\n }\n this.data.tools.push({\n type, icon: Icons['trash.png']\n })\n }\n\n remove_trash_icon() {\n // TODO: Does not call Toolbar render (distr version)\n const type = 'System:Remove'\n Utils.overwrite(this.data.tools,\n this.data.tools.filter(x => x.type !== type)\n )\n }\n\n // Set overlay data from the web-worker\n on_overlay_data(data) {\n this.get('.').forEach(x => {\n if (x.settings.$synth) this.del(`${x.id}`)\n })\n for (var ov of data) {\n let obj = this.get_one(`${ov.id}`)\n if (obj) {\n this.tv.$set(obj, 'loading', false)\n if (!ov.data) continue\n obj.data = ov.data\n }\n if (!ov.new_ovs) continue\n for (var id in ov.new_ovs.onchart) {\n if (!this.get_one(`onchart.${id}`)) {\n this.add('onchart', ov.new_ovs.onchart[id])\n }\n }\n for (var id in ov.new_ovs.offchart) {\n if (!this.get_one(`offchart.${id}`)) {\n this.add('offchart', ov.new_ovs.offchart[id])\n }\n }\n }\n }\n\n // Push overlay updates from the web-worker\n on_overlay_update(data) {\n for (var ov of data) {\n if (!ov.data) continue\n let obj = this.get_one(`${ov.id}`)\n if (obj) {\n this.fast_merge(obj.data, ov.data, false)\n }\n }\n }\n\n // Clean-up unfinished business (tools)\n before_destroy() {\n let f = x => !x.settings.$state ||\n x.settings.$state === 'finished'\n this.data.onchart = this.data.onchart\n .filter(f)\n this.data.offchart = this.data.offchart\n .filter(f)\n this.drawing_mode_off()\n this.on_scroll_lock(false)\n this.object_selected([])\n this.ww.destroy()\n }\n\n // Get overlay by grid-layer id\n get_overlay(obj) {\n let id = obj.id || `g${obj.grid_id}_${obj.layer_id}`\n let dcid = obj.uuid || this.gldc[id]\n return this.get_one(`${dcid}`)\n }\n\n\n}\n","\n// DataCube \"private\" methods\n\nimport Utils from '../stuff/utils.js'\nimport DCEvents from './dc_events.js'\nimport Dataset from './dataset.js'\n\nexport default class DCCore extends DCEvents {\n\n // Set TV instance (once). Called by TradingVue itself\n init_tvjs($root) {\n if (!this.tv) {\n this.tv = $root\n this.init_data()\n this.update_ids()\n\n // Listen to all setting changes\n // TODO: works only with merge()\n this.tv.$watch(() => this.get_by_query('.settings'),\n (n, p) => this.on_settings(n, p))\n\n // Listen to all indices changes\n this.tv.$watch(() => this.get('.')\n .map(x => x.settings.$uuid),\n (n, p) => this.on_ids_changed(n, p))\n\n // Watch for all 'datasets' changes\n this.tv.$watch(() => this.get('datasets'),\n Dataset.watcher.bind(this))\n }\n }\n\n // Init Data Structure v1.1\n init_data($root) {\n\n if (!('chart' in this.data)) {\n this.tv.$set(this.data, 'chart', {\n type: 'Candles',\n data: this.data.ohlcv || []\n })\n }\n\n if (!('onchart' in this.data)) {\n this.tv.$set(this.data, 'onchart', [])\n }\n\n if (!('offchart' in this.data)) {\n this.tv.$set(this.data, 'offchart', [])\n }\n\n if (!this.data.chart.settings) {\n this.tv.$set(this.data.chart,'settings', {})\n }\n\n // Remove ohlcv cuz we have Data v1.1^\n delete this.data.ohlcv\n\n if (!('datasets' in this.data)) {\n this.tv.$set(this.data, 'datasets', [])\n }\n\n // Init dataset proxies\n for (var ds of this.data.datasets) {\n if (!this.dss) this.dss = {}\n this.dss[ds.id] = new Dataset(this, ds)\n }\n\n }\n\n // Range change callback (called by TradingVue)\n // TODO: improve (reliablity + chunk with limited size)\n async range_changed(range, tf, check=false) {\n\n if (!this.loader) return\n if (!this.loading) {\n let first = this.data.chart.data[0][0]\n if (range[0] < first) {\n this.loading = true\n await Utils.pause(250) // Load bigger chunks\n range = range.slice() // copy\n range[0] = Math.floor(range[0])\n range[1] = Math.floor(first)\n let prom = this.loader(range, tf, d => {\n // Callback way\n this.chunk_loaded(d)\n })\n if (prom && prom.then) {\n // Promise way\n this.chunk_loaded(await prom)\n }\n }\n }\n if (!check) this.last_chunk = [range, tf]\n }\n\n // A new chunk of data is loaded\n // TODO: bulletproof fetch\n chunk_loaded(data) {\n\n // Updates only candlestick data, or\n if (Array.isArray(data)) {\n this.merge('chart.data', data)\n } else {\n // Bunch of overlays, including chart.data\n for (var k in data) {\n this.merge(k, data[k])\n }\n }\n\n this.loading = false\n if (this.last_chunk) {\n this.range_changed(...this.last_chunk, true)\n this.last_chunk = null\n }\n\n }\n\n // Update ids for all overlays\n update_ids() {\n this.data.chart.id = `chart.${this.data.chart.type}`\n var count = {}\n // grid_id,layer_id => DC id mapping\n this.gldc = {}, this.dcgl = {}\n for (var ov of this.data.onchart) {\n if (count[ov.type] === undefined) {\n count[ov.type] = 0\n }\n let i = count[ov.type]++\n ov.id = `onchart.${ov.type}${i}`\n if (!ov.name) ov.name = ov.type + ` ${i}`\n if (!ov.settings) this.tv.$set(ov, 'settings', {})\n\n // grid_id,layer_id => DC id mapping\n this.gldc[`g0_${ov.type}_${i}`] = ov.id\n this.dcgl[ov.id] = `g0_${ov.type}_${i}`\n }\n count = {}\n let grids = [{}]\n let gid = 0\n for (var ov of this.data.offchart) {\n if (count[ov.type] === undefined) {\n count[ov.type] = 0\n }\n let i = count[ov.type]++\n ov.id = `offchart.${ov.type}${i}`\n if (!ov.name) ov.name = ov.type + ` ${i}`\n if (!ov.settings) this.tv.$set(ov, 'settings', {})\n\n // grid_id,layer_id => DC id mapping\n gid++\n let rgid = (ov.grid || {}).id || gid // real grid_id\n // When we merge grid, skip ++\n if ((ov.grid || {}).id) gid--\n if (!grids[rgid]) grids[rgid] = {}\n if (grids[rgid][ov.type] === undefined) {\n grids[rgid][ov.type] = 0\n }\n let ri = grids[rgid][ov.type]++\n this.gldc[`g${rgid}_${ov.type}_${ri}`] = ov.id\n this.dcgl[ov.id] = `g${rgid}_${ov.type}_${ri}`\n }\n }\n\n // TODO: chart refine (from the exchange chart)\n update_candle(data) {\n let ohlcv = this.data.chart.data\n let last = ohlcv[ohlcv.length - 1]\n let candle = data['candle']\n let tf = this.tv.$refs.chart.interval_ms\n let t_next = last[0] + tf\n let now = data.t || Utils.now()\n let t = now >= t_next ? (now - now % tf) : last[0]\n\n // Update the entire candle\n if (candle.length >= 6) {\n t = candle[0]\n } else {\n candle = [t, ...candle]\n }\n\n this.agg.push('ohlcv', candle)\n this.update_overlays(data, t, tf)\n return t >= t_next\n\n }\n\n update_tick(data) {\n let ohlcv = this.data.chart.data\n let last = ohlcv[ohlcv.length - 1]\n let tick = data['price']\n let volume = data['volume'] || 0\n let tf = this.tv.$refs.chart.interval_ms\n if (!tf) {\n return console.warn('Define the main timeframe')\n }\n let now = data.t || Utils.now()\n if (!last) last = [now - now % tf]\n let t_next = last[0] + tf\n\n let t = now >= t_next ? (now - now % tf) : last[0]\n\n if ((t >= t_next || !ohlcv.length) && tick !== undefined) {\n // And new zero-height candle\n let nc = [t, tick, tick, tick, tick, volume]\n this.agg.push('ohlcv', nc, tf)\n ohlcv.push(nc)\n this.scroll_to(t)\n\n } else if (tick !== undefined) {\n // Update an existing one\n // TODO: make a separate class Sampler\n last[2] = Math.max(tick, last[2])\n last[3] = Math.min(tick, last[3])\n last[4] = tick\n last[5] += volume\n this.agg.push('ohlcv', last, tf)\n }\n this.update_overlays(data, t, tf)\n return t >= t_next\n }\n\n // Updates all overlays with given values.\n update_overlays(data, t, tf) {\n for (var k in data) {\n if (k === 'price' || k === 'volume' ||\n k === 'candle' || k === 't') {\n continue\n }\n if (k.includes('datasets.')) {\n this.agg.push(k, data[k], tf)\n continue\n }\n if (!Array.isArray(data[k])) {\n var val = [data[k]]\n } else {\n val = data[k]\n }\n if (!k.includes('.data')) k += '.data'\n this.agg.push(k, [t, ...val], tf)\n }\n }\n\n // Returns array of objects matching query.\n // Object contains { parent, index, value }\n // TODO: query caching\n get_by_query(query, chuck) {\n\n let tuple = query.split('.')\n\n switch (tuple[0]) {\n case 'chart':\n var result = this.chart_as_piv(tuple)\n break\n case 'onchart':\n case 'offchart':\n result = this.query_search(query, tuple)\n break\n case 'datasets':\n result = this.query_search(query, tuple)\n for (var r of result) {\n if (r.i === 'data') {\n r.v = this.dss[r.p.id].data()\n }\n }\n break\n default:\n /* Should get('.') return also the chart? */\n /*let ch = this.chart_as_query([\n 'chart',\n tuple[1]\n ])*/\n let on = this.query_search(query, [\n 'onchart',\n tuple[0],\n tuple[1]\n ])\n let off = this.query_search(query, [\n 'offchart',\n tuple[0],\n tuple[1]\n ])\n result = [/*ch[0],*/ ...on, ...off]\n break\n }\n return result.filter(\n x => !(x.v || {}).locked || chuck)\n }\n\n chart_as_piv(tuple) {\n let field = tuple[1]\n if (field) return [{\n p: this.data.chart,\n i: field,\n v: this.data.chart[field]\n }]\n else return [{\n p: this.data,\n i: 'chart',\n v: this.data.chart\n }]\n }\n\n query_search(query, tuple) {\n\n let side = tuple[0]\n let path = tuple[1] || ''\n let field = tuple[2]\n\n let arr = this.data[side].filter(x => (\n x.id === query ||\n (x.id && x.id.includes(path)) ||\n x.name === query ||\n (x.name && x.name.includes(path)) ||\n query.includes((x.settings || {}).$uuid)\n ))\n\n if (field) {\n return arr.map(x => ({\n p: x,\n i: field,\n v: x[field]\n }))\n }\n\n return arr.map((x, i) => ({\n p: this.data[side],\n i: this.data[side].indexOf(x),\n v: x\n }))\n }\n\n merge_objects(obj, data, new_obj = {}) {\n\n // The only way to get Vue to update all stuff\n // reactively is to create a brand new object.\n // TODO: Is there a simpler approach?\n Object.assign(new_obj, obj.v)\n Object.assign(new_obj, data)\n this.tv.$set(obj.p, obj.i, new_obj)\n\n }\n\n // Merge overlapping time series\n merge_ts(obj, data) {\n\n // Assume that both arrays are pre-sorted\n\n if (!data.length) return obj.v\n\n let r1 = [obj.v[0][0], obj.v[obj.v.length - 1][0]]\n let r2 = [data[0][0], data[data.length - 1][0]]\n\n // Overlap\n let o = [Math.max(r1[0],r2[0]), Math.min(r1[1],r2[1])]\n\n if (o[1] >= o[0]) {\n\n let { od, d1, d2 } = this.ts_overlap(obj.v, data, o)\n\n obj.v.splice(...d1)\n data.splice(...d2)\n\n // Dst === Overlap === Src\n if (!obj.v.length && !data.length) {\n this.tv.$set(obj.p, obj.i, od)\n return obj.v\n }\n\n // If src is totally contained in dst\n if (!data.length) { data = obj.v.splice(d1[0]) }\n\n // If dst is totally contained in src\n if (!obj.v.length) { obj.v = data.splice(d2[0]) }\n\n this.tv.$set(\n obj.p, obj.i, this.combine(obj.v, od, data)\n )\n\n } else {\n\n this.tv.$set(\n obj.p, obj.i, this.combine(obj.v, [], data)\n )\n\n }\n\n return obj.v\n\n }\n\n // TODO: review performance, move to worker\n ts_overlap(arr1, arr2, range) {\n\n const t1 = range[0]\n const t2 = range[1]\n\n let ts = {} // timestamp map\n\n let a1 = arr1.filter(x => x[0] >= t1 && x[0] <= t2)\n let a2 = arr2.filter(x => x[0] >= t1 && x[0] <= t2)\n\n // Indices of segments\n let id11 = arr1.indexOf(a1[0])\n let id12 = arr1.indexOf(a1[a1.length - 1])\n let id21 = arr2.indexOf(a2[0])\n let id22 = arr2.indexOf(a2[a2.length - 1])\n\n for (var i = 0; i < a1.length; i++) {\n ts[a1[i][0]] = a1[i]\n }\n\n for (var i = 0; i < a2.length; i++) {\n ts[a2[i][0]] = a2[i]\n }\n\n let ts_sorted = Object.keys(ts).sort()\n\n return {\n od: ts_sorted.map(x => ts[x]),\n d1: [id11, id12 - id11 + 1],\n d2: [id21, id22 - id21 + 1]\n }\n\n }\n\n // Combine parts together:\n // (destination, overlap, source)\n combine(dst, o, src) {\n\n function last(arr) { return arr[arr.length - 1][0] }\n\n if (!dst.length) { dst = o; o = [] }\n if (!src.length) { src = o; o = [] }\n\n // The overlap right in the middle\n if (src[0][0] >= dst[0][0] && last(src) <= last(dst)) {\n\n return Object.assign(dst, o)\n\n // The overlap is on the right\n } else if (last(src) > last(dst)) {\n\n // Psh(...) is faster but can overflow the stack\n if (o.length < 100000 && src.length < 100000) {\n dst.push(...o, ...src)\n return dst\n } else {\n return dst.concat(o, src)\n }\n\n // The overlap is on the left\n } else if (src[0][0] < dst[0][0]) {\n\n // Push(...) is faster but can overflow the stack\n if (o.length < 100000 && src.length < 100000) {\n src.push(...o, ...dst)\n return src\n } else {\n return src.concat(o, dst)\n }\n\n } else { return [] }\n\n }\n\n // Simple data-point merge (faster)\n fast_merge(data, point, main = true) {\n\n if (!data) return\n\n let last_t = (data[data.length - 1] || [])[0]\n let upd_t = point[0]\n\n if (!data.length || upd_t > last_t) {\n data.push(point)\n if (main && this.sett.auto_scroll) {\n this.scroll_to(upd_t)\n }\n } else if (upd_t === last_t) {\n if (main) {\n this.tv.$set(data, data.length - 1, point)\n } else {\n data[data.length - 1] = point\n }\n }\n\n }\n\n scroll_to(t) {\n if (this.tv.$refs.chart.cursor.locked) return\n let last = this.tv.$refs.chart.last_candle\n if (!last) return\n let tl = last[0]\n let d = this.tv.getRange()[1] - tl\n if (d > 0) this.tv.goto(t + d)\n }\n\n}\n","\n// Sends all dc.sett changes to the web-worker\n\nexport default function(sett, ww) {\n\n const h = {\n get: function(sett, k) {\n return sett[k]\n },\n set: function(sett, k, v) {\n sett[k] = v\n ww.just('update-dc-settings', sett)\n return true\n }\n }\n\n ww.just('update-dc-settings', sett)\n\n return new Proxy(sett, h)\n}\n","// Tick aggregation\n\nimport Utils from '../stuff/utils.js'\n\nexport default class AggTool {\n\n constructor(dc, int = 100) {\n\n this.symbols = {}\n this.int = int // Itarval in ms\n this.dc = dc\n this.st_id = null\n this.data_changed = false\n\n }\n\n push(sym, upd, tf) {\n\n // Start auto updates\n if (!this.st_id) {\n this.st_id = setTimeout(() => this.update())\n }\n\n tf = parseInt(tf)\n let old = this.symbols[sym]\n let t = Utils.now()\n let isds = sym.includes('datasets.')\n this.data_changed = true\n\n if (!old) {\n\n this.symbols[sym] = { upd, t, data: [] }\n\n } else if (upd[0] >= old.upd[0] + tf && !isds) {\n\n // Refine the previous data point\n this.refine(sym, old.upd.slice())\n\n this.symbols[sym] = { upd, t, data: [] }\n\n } else {\n\n // Tick updates the current\n this.symbols[sym].upd = upd\n this.symbols[sym].t = t\n\n }\n\n if (isds) {\n this.symbols[sym].data.push(upd)\n }\n\n }\n\n update() {\n let out = {}\n for (var sym in this.symbols) {\n let upd = this.symbols[sym].upd\n switch (sym) {\n case 'ohlcv':\n var data = this.dc.data.chart.data\n this.dc.fast_merge(data, upd)\n out.ohlcv = data.slice(-2)\n break\n default:\n if (sym.includes('datasets.')) {\n this.update_ds(sym, out)\n continue\n }\n var data = this.dc.get_one(`${sym}`)\n if (!data) continue\n this.dc.fast_merge(data, upd, false)\n break\n }\n }\n // TODO: fill gaps\n if (this.data_changed) {\n this.dc.ww.just('update-data', out)\n this.data_changed = false\n }\n setTimeout(() => this.update(), this.int)\n }\n\n refine(sym, upd) {\n if (sym === 'ohlcv') {\n var data = this.dc.data.chart.data\n this.dc.fast_merge(data, upd)\n } else {\n var data = this.dc.get_one(`${sym}`)\n if (!data) return\n this.dc.fast_merge(data, upd, false)\n }\n }\n\n update_ds(sym, out) {\n let data = this.symbols[sym].data\n if (data.length) {\n out[sym] = data\n this.symbols[sym].data = []\n }\n }\n\n clear() {\n this.symbols = {}\n }\n\n}\n","\n// Main DataHelper class. A container for data,\n// which works as a proxy and CRUD interface\n\nimport Utils from '../stuff/utils.js'\nimport DCCore from './dc_core.js'\nimport SettProxy from './sett_proxy.js'\nimport AggTool from './agg_tool.js'\n\n\n// Interface methods. Private methods in dc_core.js\nexport default class DataCube extends DCCore {\n\n constructor(data = {}, sett = {}) {\n\n let def_sett = {\n aggregation: 100, // Update aggregation interval\n script_depth: 0, // 0 === Exec on all data\n auto_scroll: true, // Auto scroll to a new candle\n scripts: true, // Enable overlays scripts,\n ww_ram_limit: 0, // WebWorker RAM limit (MB)\n node_url: null, // Use node.js instead of WW\n shift_measure: true // Draw measurment shift+click\n }\n sett = Object.assign(def_sett, sett)\n\n super()\n this.sett = sett\n this.data = data\n this.sett = SettProxy(sett, this.ww)\n this.agg = new AggTool(this, sett.aggregation)\n this.se_state = {}\n\n //this.agg.update = this.agg_update.bind(this)\n }\n\n // Add new overlay\n add(side, overlay) {\n\n if (side !== 'onchart' && side !== 'offchart' &&\n side !== 'datasets') {\n return\n }\n\n this.data[side].push(overlay)\n this.update_ids()\n\n return overlay.id\n }\n\n // Get all objects matching the query\n get(query) {\n return this.get_by_query(query).map(x => x.v)\n }\n\n // Get first object matching the query\n get_one(query) {\n return this.get_by_query(query).map(x => x.v)[0]\n }\n\n // Set data (reactively)\n set(query, data) {\n\n let objects = this.get_by_query(query)\n\n for (var obj of objects) {\n\n let i = obj.i !== undefined ?\n obj.i :\n obj.p.indexOf(obj.v)\n\n if (i !== -1) {\n this.tv.$set(obj.p, i, data)\n }\n }\n\n this.update_ids()\n\n }\n\n // Merge object or array (reactively)\n merge(query, data) {\n\n let objects = this.get_by_query(query)\n\n for (var obj of objects) {\n if (Array.isArray(obj.v)) {\n if (!Array.isArray(data)) continue\n // If array is a timeseries, merge it by timestamp\n // else merge by item index\n if (obj.v[0] && obj.v[0].length >= 2) {\n this.merge_ts(obj, data)\n } else {\n this.merge_objects(obj, data, [])\n }\n } else if (typeof obj.v === 'object') {\n this.merge_objects(obj, data)\n }\n }\n\n this.update_ids()\n\n }\n\n // Remove an overlay by query (id/type/name/...)\n del(query) {\n\n let objects = this.get_by_query(query)\n\n for (var obj of objects) {\n\n // Find current index of the field (if not defined)\n let i = typeof obj.i !== 'number' ?\n obj.i : obj.p.indexOf(obj.v)\n\n if (i !== -1) {\n this.tv.$delete(obj.p, i)\n }\n\n }\n\n this.update_ids()\n }\n\n // Update/append data point, depending on timestamp\n update(data) {\n if(data['candle']) {\n return this.update_candle(data)\n } else {\n return this.update_tick(data)\n }\n }\n\n // Lock overlays from being pulled by query_search\n // TODO: subject to review\n lock(query) {\n let objects = this.get_by_query(query)\n objects.forEach(x => {\n if (x.v && x.v.id && x.v.type) {\n x.v.locked = true\n }\n })\n }\n\n // Unlock overlays from being pulled by query_search\n //\n unlock(query) {\n let objects = this.get_by_query(query, true)\n objects.forEach(x => {\n if (x.v && x.v.id && x.v.type) {\n x.v.locked = false\n }\n })\n }\n\n // Show indicator\n show(query) {\n if (query === 'offchart' || query === 'onchart') {\n query += '.'\n } else if (query === '.') {\n query = ''\n }\n this.merge(query + '.settings', { display: true })\n }\n\n // Hide indicator\n hide(query) {\n if (query === 'offchart' || query === 'onchart') {\n query += '.'\n } else if (query === '.') {\n query = ''\n }\n this.merge(query + '.settings', { display: false })\n }\n\n // Set data loader callback\n onrange(callback) {\n this.loader = callback\n setTimeout(() =>\n this.tv.set_loader(callback ? this : null), 0\n )\n }\n\n}\n","\n// Html interface, shown on top of the grid.\n// Can be static (a tooltip) or interactive,\n// e.g. a control panel.\n\nexport default {\n props: ['ux', 'updater', 'colors', 'wrapper'],\n mounted() {\n this._$emit = this.$emit\n this.$emit = this.custom_event\n if (this.init) this.init()\n },\n methods: {\n close() {\n this.$emit('custom-event', {\n event: 'close-interface',\n args: [this.$props.ux.uuid]\n })\n },\n // TODO: emit all the way to the uxlist\n // add apply the changes there\n modify(obj) {\n this.$emit('custom-event', {\n event: 'modify-interface',\n args: [this.$props.ux.uuid, obj]\n })\n },\n custom_event(event, ...args) {\n if (event.split(':')[0] === 'hook') return\n this._$emit('custom-event', {event, args})\n }\n },\n computed: {\n overlay() {\n return this.$props.ux.overlay\n },\n layout() {\n return this.overlay.layout\n },\n uxr() {\n return this.$props.ux\n }\n },\n data() {\n return {\n\n }\n }\n}\n","import TradingVue from './TradingVue.vue'\nimport DataCube from './helpers/datacube.js'\nimport Overlay from './mixins/overlay.js'\nimport Tool from './mixins/tool.js'\nimport Interface from './mixins/interface.js'\nimport Utils from './stuff/utils.js'\nimport Constants from './stuff/constants.js'\nimport Candle from './components/primitives/candle.js'\nimport Volbar from './components/primitives/volbar.js'\nimport Line from './components/primitives/line.js'\nimport Pin from './components/primitives/pin.js'\nimport Price from './components/primitives/price.js'\nimport Ray from './components/primitives/ray.js'\nimport Seg from './components/primitives/seg.js'\n\nimport { layout_cnv, layout_vol } from\n './components/js/layout_cnv.js'\n\nconst primitives = {\n Candle, Volbar, Line, Pin, Price, Ray, Seg\n}\n\nTradingVue.install = function (Vue) {\n Vue.component(TradingVue.name, TradingVue)\n}\n\nif (typeof window !== 'undefined' && window.Vue) {\n window.Vue.use(TradingVue)\n window.TradingVueLib = {\n TradingVue, Overlay, Utils, Constants,\n Candle, Volbar, layout_cnv, layout_vol,\n DataCube, Tool, Interface, primitives\n }\n}\n\nexport default TradingVue\n\nexport {\n TradingVue, Overlay, Utils, Constants,\n Candle, Volbar, layout_cnv, layout_vol,\n DataCube, Tool, Interface, primitives\n}\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n/* Anit-boostrap tactix */\\n.trading-vue *, ::after, ::before {\\n box-sizing: content-box;\\n}\\n.trading-vue img {\\n vertical-align: initial;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n.trading-vue-botbar {\\n position: relative !important;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n.t-vue-lbtn-grp {\\n margin-left: 0.5em;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n.tvjs-item-list {\\n position: absolute;\\n user-select: none;\\n margin-top: -5px;\\n}\\n.tvjs-item-list-item {\\n display: flex;\\n align-items: center;\\n padding-right: 20px;\\n font-size: 1.15em;\\n letter-spacing: 0.05em;\\n}\\n.tvjs-item-list-item:hover {\\n background-color: #76878319;\\n}\\n.tvjs-item-list-item * {\\n position: relative !important;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n.trading-vue-legend {\\n position: relative;\\n z-index: 100;\\n font-size: 1.25em;\\n margin-left: 10px;\\n pointer-events: none;\\n text-align: left;\\n user-select: none;\\n font-weight: 300;\\n}\\n@media (min-resolution: 2x) {\\n.trading-vue-legend {\\n font-weight: 400;\\n}\\n}\\n.trading-vue-ohlcv {\\n pointer-events: none;\\n margin-bottom: 0.5em;\\n}\\n.t-vue-lspan {\\n font-variant-numeric: tabular-nums;\\n font-size: 0.95em;\\n color: #999999; /* TODO: move => params */\\n margin-left: 0.1em;\\n margin-right: 0.2em;\\n}\\n.t-vue-title {\\n margin-right: 0.25em;\\n font-size: 1.45em;\\n}\\n.t-vue-ind {\\n margin-left: 0.2em;\\n margin-bottom: 0.5em;\\n font-size: 1.0em;\\n margin-top: 0.3em;\\n}\\n.t-vue-ivalue {\\n margin-left: 0.5em;\\n}\\n.t-vue-unknown {\\n color: #999999; /* TODO: move => params */\\n}\\n.tvjs-appear-enter-active,\\n.tvjs-appear-leave-active\\n{\\n transition: all .25s ease;\\n}\\n.tvjs-appear-enter, .tvjs-appear-leave-to\\n{\\n opacity: 0;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n.t-vue-lbtn {\\n z-index: 100;\\n pointer-events: all;\\n cursor: pointer;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n.trading-vue-section {\\n height: 0;\\n position: absolute;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n.tvjs-spinner {\\n display: inline-block;\\n position: relative;\\n width: 20px;\\n height: 16px;\\n margin: -4px 0px -1px 0px;\\n opacity: 0.7;\\n}\\n.tvjs-spinner div {\\n position: absolute;\\n top: 8px;\\n width: 4px;\\n height: 4px;\\n border-radius: 50%;\\n animation-timing-function: cubic-bezier(1, 1, 1, 1);\\n}\\n.tvjs-spinner div:nth-child(1) {\\n left: 2px;\\n animation: tvjs-spinner1 0.6s infinite;\\n opacity: 0.9;\\n}\\n.tvjs-spinner div:nth-child(2) {\\n left: 2px;\\n animation: tvjs-spinner2 0.6s infinite;\\n}\\n.tvjs-spinner div:nth-child(3) {\\n left: 9px;\\n animation: tvjs-spinner2 0.6s infinite;\\n}\\n.tvjs-spinner div:nth-child(4) {\\n left: 16px;\\n animation: tvjs-spinner3 0.6s infinite;\\n opacity: 0.9;\\n}\\n@keyframes tvjs-spinner1 {\\n0% {\\n transform: scale(0);\\n}\\n100% {\\n transform: scale(1);\\n}\\n}\\n@keyframes tvjs-spinner3 {\\n0% {\\n transform: scale(1);\\n}\\n100% {\\n transform: scale(0);\\n}\\n}\\n@keyframes tvjs-spinner2 {\\n0% {\\n transform: translate(0, 0);\\n}\\n100% {\\n transform: translate(7px, 0);\\n}\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n.tvjs-drift-enter-active {\\n transition: all .3s ease;\\n}\\n.tvjs-drift-leave-active {\\n transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);\\n}\\n.tvjs-drift-enter, .tvjs-drift-leave-to\\n{\\n transform: translateX(10px);\\n opacity: 0;\\n}\\n.tvjs-the-tip {\\n position: absolute;\\n width: 200px;\\n text-align: center;\\n z-index: 10001;\\n color: #ffffff;\\n font-size: 1.5em;\\n line-height: 1.15em;\\n padding: 10px;\\n border-radius: 3px;\\n right: 70px;\\n top: 10px;\\n text-shadow: 1px 1px black;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n.trading-vue-toolbar {\\n position: absolute;\\n border-right: 1px solid black;\\n z-index: 101;\\n padding-top: 3px;\\n user-select: none;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n.trading-vue-tbitem {\\n}\\n.trading-vue-tbitem:hover {\\n background-color: #76878319;\\n}\\n.trading-vue-tbitem-exp {\\n position: absolute;\\n right: -3px;\\n padding: 18.5px 5px;\\n font-stretch: extra-condensed;\\n transform: scaleX(0.6);\\n font-size: 0.6em;\\n opacity: 0.0;\\n user-select: none;\\n line-height: 0;\\n}\\n.trading-vue-tbitem:hover\\n.trading-vue-tbitem-exp {\\n opacity: 0.5;\\n}\\n.trading-vue-tbitem-exp:hover {\\n background-color: #76878330;\\n opacity: 0.9 !important;\\n}\\n.trading-vue-tbicon {\\n position: absolute;\\n}\\n.trading-vue-tbitem.selected-item > .trading-vue-tbicon,\\n.tvjs-item-list-item.selected-item > .trading-vue-tbicon {\\n filter: brightness(1.45) sepia(1) hue-rotate(90deg) saturate(4.5) !important;\\n}\\n.tvjs-pixelated {\\n -ms-interpolation-mode: nearest-neighbor;\\n image-rendering: -webkit-optimize-contrast;\\n image-rendering: -webkit-crisp-edges;\\n image-rendering: -moz-crisp-edges;\\n image-rendering: -o-crisp-edges;\\n image-rendering: pixelated;\\n}\\n\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n.trading-vue-ux-wrapper {\\n position: absolute;\\n display: flex;\\n}\\n.tvjs-ux-wrapper-pin {\\n position: absolute;\\n width: 9px;\\n height: 9px;\\n z-index: 100;\\n background-color: #23a776;\\n border-radius: 10px;\\n margin-left: -6px;\\n margin-top: -6px;\\n pointer-events: none;\\n}\\n.tvjs-ux-wrapper-head {\\n position: absolute;\\n height: 23px;\\n width: 100%;\\n}\\n.tvjs-ux-wrapper-close {\\n position: absolute;\\n width: 11px;\\n height: 11px;\\n font-size: 1.5em;\\n line-height: 0.5em;\\n padding: 1px 1px 1px 1px;\\n border-radius: 10px;\\n right: 5px;\\n top: 5px;\\n user-select: none;\\n text-align: center;\\n z-index: 100;\\n}\\n.tvjs-ux-wrapper-close-hb {\\n}\\n.tvjs-ux-wrapper-close:hover {\\n background-color: #FF605C !important;\\n color: #692324 !important;\\n}\\n.tvjs-ux-wrapper-full {\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n.tvjs-widgets {\\n position: absolute;\\n z-index: 1000;\\n pointer-events: none;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n return \"/*# \".concat(data, \" */\");\n}","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","/*\n * Hamster.js v1.1.2\n * (c) 2013 Monospaced http://monospaced.com\n * License: MIT\n */\n\n(function(window, document){\n'use strict';\n\n/**\n * Hamster\n * use this to create instances\n * @returns {Hamster.Instance}\n * @constructor\n */\nvar Hamster = function(element) {\n return new Hamster.Instance(element);\n};\n\n// default event name\nHamster.SUPPORT = 'wheel';\n\n// default DOM methods\nHamster.ADD_EVENT = 'addEventListener';\nHamster.REMOVE_EVENT = 'removeEventListener';\nHamster.PREFIX = '';\n\n// until browser inconsistencies have been fixed...\nHamster.READY = false;\n\nHamster.Instance = function(element){\n if (!Hamster.READY) {\n // fix browser inconsistencies\n Hamster.normalise.browser();\n\n // Hamster is ready...!\n Hamster.READY = true;\n }\n\n this.element = element;\n\n // store attached event handlers\n this.handlers = [];\n\n // return instance\n return this;\n};\n\n/**\n * create new hamster instance\n * all methods should return the instance itself, so it is chainable.\n * @param {HTMLElement} element\n * @returns {Hamster.Instance}\n * @constructor\n */\nHamster.Instance.prototype = {\n /**\n * bind events to the instance\n * @param {Function} handler\n * @param {Boolean} useCapture\n * @returns {Hamster.Instance}\n */\n wheel: function onEvent(handler, useCapture){\n Hamster.event.add(this, Hamster.SUPPORT, handler, useCapture);\n\n // handle MozMousePixelScroll in older Firefox\n if (Hamster.SUPPORT === 'DOMMouseScroll') {\n Hamster.event.add(this, 'MozMousePixelScroll', handler, useCapture);\n }\n\n return this;\n },\n\n /**\n * unbind events to the instance\n * @param {Function} handler\n * @param {Boolean} useCapture\n * @returns {Hamster.Instance}\n */\n unwheel: function offEvent(handler, useCapture){\n // if no handler argument,\n // unbind the last bound handler (if exists)\n if (handler === undefined && (handler = this.handlers.slice(-1)[0])) {\n handler = handler.original;\n }\n\n Hamster.event.remove(this, Hamster.SUPPORT, handler, useCapture);\n\n // handle MozMousePixelScroll in older Firefox\n if (Hamster.SUPPORT === 'DOMMouseScroll') {\n Hamster.event.remove(this, 'MozMousePixelScroll', handler, useCapture);\n }\n\n return this;\n }\n};\n\nHamster.event = {\n /**\n * cross-browser 'addWheelListener'\n * @param {Instance} hamster\n * @param {String} eventName\n * @param {Function} handler\n * @param {Boolean} useCapture\n */\n add: function add(hamster, eventName, handler, useCapture){\n // store the original handler\n var originalHandler = handler;\n\n // redefine the handler\n handler = function(originalEvent){\n\n if (!originalEvent) {\n originalEvent = window.event;\n }\n\n // create a normalised event object,\n // and normalise \"deltas\" of the mouse wheel\n var event = Hamster.normalise.event(originalEvent),\n delta = Hamster.normalise.delta(originalEvent);\n\n // fire the original handler with normalised arguments\n return originalHandler(event, delta[0], delta[1], delta[2]);\n\n };\n\n // cross-browser addEventListener\n hamster.element[Hamster.ADD_EVENT](Hamster.PREFIX + eventName, handler, useCapture || false);\n\n // store original and normalised handlers on the instance\n hamster.handlers.push({\n original: originalHandler,\n normalised: handler\n });\n },\n\n /**\n * removeWheelListener\n * @param {Instance} hamster\n * @param {String} eventName\n * @param {Function} handler\n * @param {Boolean} useCapture\n */\n remove: function remove(hamster, eventName, handler, useCapture){\n // find the normalised handler on the instance\n var originalHandler = handler,\n lookup = {},\n handlers;\n for (var i = 0, len = hamster.handlers.length; i < len; ++i) {\n lookup[hamster.handlers[i].original] = hamster.handlers[i];\n }\n handlers = lookup[originalHandler];\n handler = handlers.normalised;\n\n // cross-browser removeEventListener\n hamster.element[Hamster.REMOVE_EVENT](Hamster.PREFIX + eventName, handler, useCapture || false);\n\n // remove original and normalised handlers from the instance\n for (var h in hamster.handlers) {\n if (hamster.handlers[h] == handlers) {\n hamster.handlers.splice(h, 1);\n break;\n }\n }\n }\n};\n\n/**\n * these hold the lowest deltas,\n * used to normalise the delta values\n * @type {Number}\n */\nvar lowestDelta,\n lowestDeltaXY;\n\nHamster.normalise = {\n /**\n * fix browser inconsistencies\n */\n browser: function normaliseBrowser(){\n // detect deprecated wheel events\n if (!('onwheel' in document || document.documentMode >= 9)) {\n Hamster.SUPPORT = document.onmousewheel !== undefined ?\n 'mousewheel' : // webkit and IE < 9 support at least \"mousewheel\"\n 'DOMMouseScroll'; // assume remaining browsers are older Firefox\n }\n\n // detect deprecated event model\n if (!window.addEventListener) {\n // assume IE < 9\n Hamster.ADD_EVENT = 'attachEvent';\n Hamster.REMOVE_EVENT = 'detachEvent';\n Hamster.PREFIX = 'on';\n }\n\n },\n\n /**\n * create a normalised event object\n * @param {Function} originalEvent\n * @returns {Object} event\n */\n event: function normaliseEvent(originalEvent){\n var event = {\n // keep a reference to the original event object\n originalEvent: originalEvent,\n target: originalEvent.target || originalEvent.srcElement,\n type: 'wheel',\n deltaMode: originalEvent.type === 'MozMousePixelScroll' ? 0 : 1,\n deltaX: 0,\n deltaZ: 0,\n preventDefault: function(){\n if (originalEvent.preventDefault) {\n originalEvent.preventDefault();\n } else {\n originalEvent.returnValue = false;\n }\n },\n stopPropagation: function(){\n if (originalEvent.stopPropagation) {\n originalEvent.stopPropagation();\n } else {\n originalEvent.cancelBubble = false;\n }\n }\n };\n\n // calculate deltaY (and deltaX) according to the event\n\n // 'mousewheel'\n if (originalEvent.wheelDelta) {\n event.deltaY = - 1/40 * originalEvent.wheelDelta;\n }\n // webkit\n if (originalEvent.wheelDeltaX) {\n event.deltaX = - 1/40 * originalEvent.wheelDeltaX;\n }\n\n // 'DomMouseScroll'\n if (originalEvent.detail) {\n event.deltaY = originalEvent.detail;\n }\n\n return event;\n },\n\n /**\n * normalise 'deltas' of the mouse wheel\n * @param {Function} originalEvent\n * @returns {Array} deltas\n */\n delta: function normaliseDelta(originalEvent){\n var delta = 0,\n deltaX = 0,\n deltaY = 0,\n absDelta = 0,\n absDeltaXY = 0,\n fn;\n\n // normalise deltas according to the event\n\n // 'wheel' event\n if (originalEvent.deltaY) {\n deltaY = originalEvent.deltaY * -1;\n delta = deltaY;\n }\n if (originalEvent.deltaX) {\n deltaX = originalEvent.deltaX;\n delta = deltaX * -1;\n }\n\n // 'mousewheel' event\n if (originalEvent.wheelDelta) {\n delta = originalEvent.wheelDelta;\n }\n // webkit\n if (originalEvent.wheelDeltaY) {\n deltaY = originalEvent.wheelDeltaY;\n }\n if (originalEvent.wheelDeltaX) {\n deltaX = originalEvent.wheelDeltaX * -1;\n }\n\n // 'DomMouseScroll' event\n if (originalEvent.detail) {\n delta = originalEvent.detail * -1;\n }\n\n // Don't return NaN\n if (delta === 0) {\n return [0, 0, 0];\n }\n\n // look for lowest delta to normalize the delta values\n absDelta = Math.abs(delta);\n if (!lowestDelta || absDelta < lowestDelta) {\n lowestDelta = absDelta;\n }\n absDeltaXY = Math.max(Math.abs(deltaY), Math.abs(deltaX));\n if (!lowestDeltaXY || absDeltaXY < lowestDeltaXY) {\n lowestDeltaXY = absDeltaXY;\n }\n\n // convert deltas to whole numbers\n fn = delta > 0 ? 'floor' : 'ceil';\n delta = Math[fn](delta / lowestDelta);\n deltaX = Math[fn](deltaX / lowestDeltaXY);\n deltaY = Math[fn](deltaY / lowestDeltaXY);\n\n return [delta, deltaX, deltaY];\n }\n};\n\nif (typeof window.define === 'function' && window.define.amd) {\n // AMD\n window.define('hamster', [], function(){\n return Hamster;\n });\n} else if (typeof exports === 'object') {\n // CommonJS\n module.exports = Hamster;\n} else {\n // Browser global\n window.Hamster = Hamster;\n}\n\n})(window, window.document);\n","// Copyright (c) 2013 Pieroxy <[email protected]>\n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.4\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i<alphabet.length ; i++) {\n baseReverseDic[alphabet][alphabet.charAt(i)] = i;\n }\n }\n return baseReverseDic[alphabet][character];\n}\n\nvar LZString = {\n compressToBase64 : function (input) {\n if (input == null) return \"\";\n var res = LZString._compress(input, 6, function(a){return keyStrBase64.charAt(a);});\n switch (res.length % 4) { // To produce valid Base64\n default: // When could this happen ?\n case 0 : return res;\n case 1 : return res+\"===\";\n case 2 : return res+\"==\";\n case 3 : return res+\"=\";\n }\n },\n\n decompressFromBase64 : function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrBase64, input.charAt(index)); });\n },\n\n compressToUTF16 : function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 15, function(a){return f(a+32);}) + \" \";\n },\n\n decompressFromUTF16: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 16384, function(index) { return compressed.charCodeAt(index) - 32; });\n },\n\n //compress into uint8array (UCS-2 big endian format)\n compressToUint8Array: function (uncompressed) {\n var compressed = LZString.compress(uncompressed);\n var buf=new Uint8Array(compressed.length*2); // 2 bytes per character\n\n for (var i=0, TotalLen=compressed.length; i<TotalLen; i++) {\n var current_value = compressed.charCodeAt(i);\n buf[i*2] = current_value >>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i<TotalLen; i++) {\n buf[i]=compressed[i*2]*256+compressed[i*2+1];\n }\n\n var result = [];\n buf.forEach(function (c) {\n result.push(f(c));\n });\n return LZString.decompress(result.join(''));\n\n }\n\n },\n\n\n //compress into a string that is already URI encoded\n compressToEncodedURIComponent: function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 6, function(a){return keyStrUriSafe.charAt(a);});\n },\n\n //decompress from an output of compressToEncodedURIComponent\n decompressFromEncodedURIComponent:function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n input = input.replace(/ /g, \"+\");\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrUriSafe, input.charAt(index)); });\n },\n\n compress: function (uncompressed) {\n return LZString._compress(uncompressed, 16, function(a){return f(a);});\n },\n _compress: function (uncompressed, bitsPerChar, getCharFromInt) {\n if (uncompressed == null) return \"\";\n var i, value,\n context_dictionary= {},\n context_dictionaryToCreate= {},\n context_c=\"\",\n context_wc=\"\",\n context_w=\"\",\n context_enlargeIn= 2, // Compensate for the first entry which should not count\n context_dictSize= 3,\n context_numBits= 2,\n context_data=[],\n context_data_val=0,\n context_data_position=0,\n ii;\n\n for (ii = 0; ii < uncompressed.length; ii += 1) {\n context_c = uncompressed.charAt(ii);\n if (!Object.prototype.hasOwnProperty.call(context_dictionary,context_c)) {\n context_dictionary[context_c] = context_dictSize++;\n context_dictionaryToCreate[context_c] = true;\n }\n\n context_wc = context_w + context_c;\n if (Object.prototype.hasOwnProperty.call(context_dictionary,context_wc)) {\n context_w = context_wc;\n } else {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position ==bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/vue-loader/lib/index.js??vue-loader-options!./TradingVue.vue?vue&type=style&index=0&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"550b47ab\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/vue-loader/lib/index.js??vue-loader-options!./TradingVue.vue?vue&type=style&index=0&lang=css&\", function() {\n var newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/vue-loader/lib/index.js??vue-loader-options!./TradingVue.vue?vue&type=style&index=0&lang=css&\");\n if(newContent.__esModule) newContent = newContent.default;\n if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Botbar.vue?vue&type=style&index=0&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"1b34bfeb\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Botbar.vue?vue&type=style&index=0&lang=css&\", function() {\n var newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Botbar.vue?vue&type=style&index=0&lang=css&\");\n if(newContent.__esModule) newContent = newContent.default;\n if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ButtonGroup.vue?vue&type=style&index=0&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"9895d3a6\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ButtonGroup.vue?vue&type=style&index=0&lang=css&\", function() {\n var newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ButtonGroup.vue?vue&type=style&index=0&lang=css&\");\n if(newContent.__esModule) newContent = newContent.default;\n if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemList.vue?vue&type=style&index=0&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"8139036a\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemList.vue?vue&type=style&index=0&lang=css&\", function() {\n var newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemList.vue?vue&type=style&index=0&lang=css&\");\n if(newContent.__esModule) newContent = newContent.default;\n if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Legend.vue?vue&type=style&index=0&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"1db01c0b\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Legend.vue?vue&type=style&index=0&lang=css&\", function() {\n var newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Legend.vue?vue&type=style&index=0&lang=css&\");\n if(newContent.__esModule) newContent = newContent.default;\n if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LegendButton.vue?vue&type=style&index=0&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"68f243ea\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LegendButton.vue?vue&type=style&index=0&lang=css&\", function() {\n var newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LegendButton.vue?vue&type=style&index=0&lang=css&\");\n if(newContent.__esModule) newContent = newContent.default;\n if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Section.vue?vue&type=style&index=0&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"12d2309d\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Section.vue?vue&type=style&index=0&lang=css&\", function() {\n var newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Section.vue?vue&type=style&index=0&lang=css&\");\n if(newContent.__esModule) newContent = newContent.default;\n if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Spinner.vue?vue&type=style&index=0&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"5b620605\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Spinner.vue?vue&type=style&index=0&lang=css&\", function() {\n var newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Spinner.vue?vue&type=style&index=0&lang=css&\");\n if(newContent.__esModule) newContent = newContent.default;\n if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheTip.vue?vue&type=style&index=0&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"143dffab\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheTip.vue?vue&type=style&index=0&lang=css&\", function() {\n var newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheTip.vue?vue&type=style&index=0&lang=css&\");\n if(newContent.__esModule) newContent = newContent.default;\n if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Toolbar.vue?vue&type=style&index=0&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"f32fd36e\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Toolbar.vue?vue&type=style&index=0&lang=css&\", function() {\n var newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Toolbar.vue?vue&type=style&index=0&lang=css&\");\n if(newContent.__esModule) newContent = newContent.default;\n if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ToolbarItem.vue?vue&type=style&index=0&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"604bf5ef\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ToolbarItem.vue?vue&type=style&index=0&lang=css&\", function() {\n var newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ToolbarItem.vue?vue&type=style&index=0&lang=css&\");\n if(newContent.__esModule) newContent = newContent.default;\n if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UxWrapper.vue?vue&type=style&index=0&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"21fde573\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UxWrapper.vue?vue&type=style&index=0&lang=css&\", function() {\n var newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UxWrapper.vue?vue&type=style&index=0&lang=css&\");\n if(newContent.__esModule) newContent = newContent.default;\n if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Widgets.vue?vue&type=style&index=0&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"fd83689e\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Widgets.vue?vue&type=style&index=0&lang=css&\", function() {\n var newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Widgets.vue?vue&type=style&index=0&lang=css&\");\n if(newContent.__esModule) newContent = newContent.default;\n if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nexport default function listToStyles (parentId, list) {\n var styles = []\n var newStyles = {}\n for (var i = 0; i < list.length; i++) {\n var item = list[i]\n var id = item[0]\n var css = item[1]\n var media = item[2]\n var sourceMap = item[3]\n var part = {\n id: parentId + ':' + i,\n css: css,\n media: media,\n sourceMap: sourceMap\n }\n if (!newStyles[id]) {\n styles.push(newStyles[id] = { id: id, parts: [part] })\n } else {\n newStyles[id].parts.push(part)\n }\n }\n return styles\n}\n","/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n Modified by Evan You @yyx990803\n*/\n\nimport listToStyles from './listToStyles'\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n if (!hasDocument) {\n throw new Error(\n 'vue-style-loader cannot be used in a non-browser environment. ' +\n \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n ) }\n}\n\n/*\ntype StyleObject = {\n id: number;\n parts: Array<StyleObjectPart>\n}\n\ntype StyleObjectPart = {\n css: string;\n media: string;\n sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n [id: number]: {\n id: number,\n refs: number,\n parts: Array<(obj?: StyleObjectPart) => void>\n }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\nvar options = null\nvar ssrIdKey = 'data-vue-ssr-id'\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n// tags it will allow on a page\nvar isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase())\n\nexport default function addStylesClient (parentId, list, _isProduction, _options) {\n isProduction = _isProduction\n\n options = _options || {}\n\n var styles = listToStyles(parentId, list)\n addStylesToDom(styles)\n\n return function update (newList) {\n var mayRemove = []\n for (var i = 0; i < styles.length; i++) {\n var item = styles[i]\n var domStyle = stylesInDom[item.id]\n domStyle.refs--\n mayRemove.push(domStyle)\n }\n if (newList) {\n styles = listToStyles(parentId, newList)\n addStylesToDom(styles)\n } else {\n styles = []\n }\n for (var i = 0; i < mayRemove.length; i++) {\n var domStyle = mayRemove[i]\n if (domStyle.refs === 0) {\n for (var j = 0; j < domStyle.parts.length; j++) {\n domStyle.parts[j]()\n }\n delete stylesInDom[domStyle.id]\n }\n }\n }\n}\n\nfunction addStylesToDom (styles /* Array<StyleObject> */) {\n for (var i = 0; i < styles.length; i++) {\n var item = styles[i]\n var domStyle = stylesInDom[item.id]\n if (domStyle) {\n domStyle.refs++\n for (var j = 0; j < domStyle.parts.length; j++) {\n domStyle.parts[j](item.parts[j])\n }\n for (; j < item.parts.length; j++) {\n domStyle.parts.push(addStyle(item.parts[j]))\n }\n if (domStyle.parts.length > item.parts.length) {\n domStyle.parts.length = item.parts.length\n }\n } else {\n var parts = []\n for (var j = 0; j < item.parts.length; j++) {\n parts.push(addStyle(item.parts[j]))\n }\n stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }\n }\n }\n}\n\nfunction createStyleElement () {\n var styleElement = document.createElement('style')\n styleElement.type = 'text/css'\n head.appendChild(styleElement)\n return styleElement\n}\n\nfunction addStyle (obj /* StyleObjectPart */) {\n var update, remove\n var styleElement = document.querySelector('style[' + ssrIdKey + '~=\"' + obj.id + '\"]')\n\n if (styleElement) {\n if (isProduction) {\n // has SSR styles and in production mode.\n // simply do nothing.\n return noop\n } else {\n // has SSR styles but in dev mode.\n // for some reason Chrome can't handle source map in server-rendered\n // style tags - source maps in <style> only works if the style tag is\n // created and inserted dynamically. So we remove the server rendered\n // styles and inject new ones.\n styleElement.parentNode.removeChild(styleElement)\n }\n }\n\n if (isOldIE) {\n // use singleton mode for IE9.\n var styleIndex = singletonCounter++\n styleElement = singletonElement || (singletonElement = createStyleElement())\n update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)\n remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)\n } else {\n // use multi-style-tag mode in all other cases\n styleElement = createStyleElement()\n update = applyToTag.bind(null, styleElement)\n remove = function () {\n styleElement.parentNode.removeChild(styleElement)\n }\n }\n\n update(obj)\n\n return function updateStyle (newObj /* StyleObjectPart */) {\n if (newObj) {\n if (newObj.css === obj.css &&\n newObj.media === obj.media &&\n newObj.sourceMap === obj.sourceMap) {\n return\n }\n update(obj = newObj)\n } else {\n remove()\n }\n }\n}\n\nvar replaceText = (function () {\n var textStore = []\n\n return function (index, replacement) {\n textStore[index] = replacement\n return textStore.filter(Boolean).join('\\n')\n }\n})()\n\nfunction applyToSingletonTag (styleElement, index, remove, obj) {\n var css = remove ? '' : obj.css\n\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = replaceText(index, css)\n } else {\n var cssNode = document.createTextNode(css)\n var childNodes = styleElement.childNodes\n if (childNodes[index]) styleElement.removeChild(childNodes[index])\n if (childNodes.length) {\n styleElement.insertBefore(cssNode, childNodes[index])\n } else {\n styleElement.appendChild(cssNode)\n }\n }\n}\n\nfunction applyToTag (styleElement, obj) {\n var css = obj.css\n var media = obj.media\n var sourceMap = obj.sourceMap\n\n if (media) {\n styleElement.setAttribute('media', media)\n }\n if (options.ssrId) {\n styleElement.setAttribute(ssrIdKey, obj.id)\n }\n\n if (sourceMap) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n css += '\\n/*# sourceURL=' + sourceMap.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n css += '\\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'\n }\n\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild)\n }\n styleElement.appendChild(document.createTextNode(css))\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module doesn't tell about it's top-level declarations so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(851);\n"],"sourceRoot":""}