{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 07bba3cf77c18f4aaa6e","webpack:///../index.js","webpack:///./rfexplore/rfexplore.js","webpack:///./rfexplore/automaton.js","webpack:///./rfexplore/viewport.js","webpack:///./rfexplore/value_equals.js","webpack:///./rfexplore/menubar.js","webpack:///./rfexplore/texteditor.js","webpack:///./rfexplore/ttable.js","webpack:///./rfexplore/presets.js"],"names":["UIController","viewport","autoUpdate","cluster","_viewmode","_palette","_automaton","_oldopts","_opts","mode","base","folds","rule","input","foldToRight","_listeners","maxrules","Array","setOnInputClicked","i","incrementInput","on","event","func","push","update","render","change","generate","automaton","tt2","console","log","computeFeature","viewmode","palette","JSON","parse","stringify","nextRule","findNextNN","previousRule","step","col","width","inputSize","delta","length","j","value","row","unshift","editJSON","editor","create","text","onDone","json","_emit","maxRules","data","listeners","c","m","b","App","container_id","container","document","getElementById","body","createElement","className","appendChild","init","controller","toolbox","setupToolbox","menubar","setupMenubar","a_ctrls","addGroup","floatLeft","addLink","step_ctrls","floatCenter","rule_label","addButton","action","r","r_ctrls","floatRight","screenfull","toggle","dat","GUI","load","preset","remember","f_a","addFolder","add","name","rule_ctrl","max","updateDisplay","listen","Left","Right","open","f_v","Brick","Diamond","Circle","Stack","Folded","f_cl","None","TTable2","f_c","addColor","onFinishChange","f_r","Rows","Ordered","Automaton","maxSteps","opts","_rows","slice","reverse","_curRow","_curPos","_folds","ttable","makeTTable","nodeCount","rowLength","rulesize","Math","pow","tt","decimal","floor","ttIndex","A","mult","index","first","_transpose","isLast","n","last","next","_next","previous","_previous","pos","error","nextPos","foldValue","len","fill","parents","done","_mirrored","_row","unfoldedRowLength","lastInputRow","ceil","diamondWidth","sqrt","Viewport","elem","viewportWidth","offsetWidth","viewportHeight","offsetHeight","_backgroundColor","_scene","_aspect","_cameraPersp","_cameraOrtho","_controls","_sceneHeight","_renderer","_lights","_raycaster","THREE","Raycaster","_mouse","Vector2","_model","geometry","attr_normal","buf_normal","attr_color","buf_color","attr_position","buf_position","offset","template_size","node_count","mesh","input_pickers","picked","right","_animation","alwaysClearGeometry","spin","animateDraw","drawType","drawDone","node","_inputClickCallback","animate","req","_updateCellsAnimated","rotateY","requestAnimationFrame","Scene","background","Color","backgroundColor","PerspectiveCamera","OrthographicCamera","WebGLRenderer","antialias","setSize","domElement","position","z","OrbitControls","addEventListener","lights","AmbientLight","set","target","Vector3","DirectionalLight","window","_onWindowResize","e","_onDocumentMousemove","_onClick","updateCamera","sceneHeight","aspect","tan","fov","PI","updateProjectionMatrix","left","top","bottom","clearGeometry","scene","children","remove","populate","_updateGeometry","_updateCells","x","clientX","innerWidth","y","clientY","innerHeight","setFromCamera","intersects","intersectObjects","material","opacity","object","userData","_setColor","color","M","g","updateRange","count","old_offset","_nodeColor","_calcNodeOffset","rowoffs","only_clean","rows","needsUpdate","dispose","template","MeshBasicMaterial","side","DoubleSide","vertexColors","VertexColors","PlaneBufferGeometry","toNonIndexed","rotateZ","scale","CircleBufferGeometry","BufferGeometry","positions","Float32Array","cos","sin","addAttribute","BufferAttribute","getAttribute","array","MeshStandardMaterial","metalness","roughness","SphereBufferGeometry","array_size","Uint8Array","Int16Array","addInstance","translate","normals","foldedPosition","inputLength","flat","coneRow","coneCol","fold","coneRowWidth","calcPosition","p","phi","fold_offset","radius","heightstep","ps","t","tri","clone","picker_material","transparent","picker_mesh","Mesh","normalized","computeBoundingSphere","controls","reset","enableRotate","str","equals","a","enforce_properties_order","cyclic","_equals","s","l","toString","call","valueOf","source","global","ignoreCase","multiline","lastIndex","reference_equals","properties","hasOwnProperty","object_references","_reference_equals","TEXT_TYPE","BUTTON_TYPE","NO_ACTION","FUNC_ACTION","URL_ACTION","DROPDOWN_ACTION","Menuitem","iconclass","type","_text","_iconclass","_type","_action","_callback","_liNode","_aNode","_textNode","_iconNode","_appendElem","obj","setAttribute","createTextNode","_clicked","nodeValue","Menubar","subgroup","parent","panel","parentContainer","_subgroup","_parent","_rootPanel","_ulNode","_items","_groups","group","addPanel","item","Texteditor","_accepted","_backdropElem","_containerElem","_textareaElem","_doneFunc","_cancelFunc","modal","wrapper","bttnCancel","_onCancel","bttnDone","_onDone","removeChild","varbase_incr","varbase_incrall","varbase_add","B","C","varbase_sub","abs","level1","size","entry","output","invert","join","select","combine","shift","mask","other","_isJoin","_isInvert","_isSelect","_isCombine","_isShift","_isMask","distance","v1","v2","diff","backwards","maxDist","_comp","_isCombineRecursive","_isAdd","_isSubstract","match","N","DatGUIPresets"],"mappings":"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","file":"rfexplore.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[\"rfexplore\"] = factory();\n\telse\n\t\troot[\"rfexplore\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 07bba3cf77c18f4aaa6e","import rfexplore from './src/rfexplore/rfexplore.js';\n\nexport default rfexplore;\n\n\n\n// WEBPACK FOOTER //\n// ../index.js","import Automaton from \"./automaton.js\";\nimport Viewport from \"./viewport.js\";\nimport Menubar from \"./menubar.js\";\nimport equals from \"./value_equals.js\";\nimport Texteditor from \"./texteditor.js\";\nimport TTable2 from \"./ttable.js\";\nimport DatGUIPresets from \"./presets.js\";\n\nclass UIController {\n constructor( viewport ) {\n this.viewport =viewport;\n this.autoUpdate =true;\n this.cluster = /*'ttable2' */'none';\n this._viewmode ='circle';\n this._palette = [ '#ff8e10', '#33ffcc', '#3c9872', '#386ebb' ]; \n //this._palette = [ '#ff5511', '#33ffcc', '#ffaa33', '#5E69FF' ]; \n this._automaton =null;\n this._oldopts = null;\n this._opts = { // Options to Automaton constructor\n mode: 2,\n base: 2,\n folds: 20,\n rule: 6,\n input: [ 1, 1, 0, 0, 0, 0, 0, 0 ],\n foldToRight: false\n }; \n this._listeners = {\n maxrules: new Array(),\n rule: new Array(),\n folds: new Array()\n };\n\n viewport.setOnInputClicked( (i)=>{this.incrementInput(i);} );\n }\n\n on( event, func ) {\n if( typeof func === 'function' \n && typeof this._listeners[event] !== 'undefined' ) {\n this._listeners[event].push( func );\n }\n }\n\n update() {\n if( this.autoUpdate )\n this.render();\n }\n render() {\n\n let change =false;\n\n if( !equals( this._oldopts, this._opts ) || this._automaton === null ) {\n this._automaton = new Automaton( this._opts );\n this._automaton.generate();\n this.viewport.automaton = this._automaton;\n change =true;\n\n // Testing\n let tt2 = new TTable2( this._opts.base, this._opts.mode, this._opts.rule );\n console.log( tt2.computeFeature() );\n }\n else console.log( 'not changed' );\n\n if( this._viewmode != this.viewport.viewmode ) {\n this.viewport.viewmode = this._viewmode;\n change =true;\n }\n \n if( !equals( this._palette, this.viewport.palette ) ) {\n this.viewport.palette =this._palette;\n change =true;\n }\n\n if( change ) {\n this.viewport.update();\n }\n\n // Caching\n this._oldopts =JSON.parse( JSON.stringify( this._opts ) );\n }\n\n nextRule() {\n if( this.cluster === 'ttable2' ) {\n let tt2 =new TTable2( this._opts.base, this._opts.mode, this._opts.rule );\n this.rule =tt2.findNextNN( false, 1 );\n } else\n this.rule++;\n }\n\n previousRule() {\n if( this.cluster === 'ttable2' ) {\n let tt2 =new TTable2( this._opts.base, this._opts.mode, this._opts.rule );\n this.rule =tt2.findNextNN( true, 1 );\n } else\n this.rule--;\n }\n\n step() {\n if( this._automaton === null )\n render();\n\n this._automaton.step();\n this.viewport.update();\n }\n\n incrementInput( col ) {\n let automaton = this._automaton;\n if( col >= automaton.width )\n return;\n // If the automaton is left-folding, the input is on the right hand side\n let i = this._opts.foldToRight ? col : col - (automaton.width - automaton.inputSize)\n let input = this._opts.input;\n\n // We may need to expand the input array using values from the automaton\n let delta =0;\n if( i >= input.length ) {\n for( let j = input.length; j <= i; j++ ) {\n input[j] = automaton.value( { col: j, row: 0 } );\n delta++;\n }\n } else if( i < 0 ) {\n for( let j = automaton.width - automaton.inputSize - 1; j >= col; j-- ) {\n input.unshift( automaton.value( { col: j, row: 0 } ) );\n delta++;\n }\n i =0;\n }\n this._opts.folds -= this._opts.folds === 0 ? 0 : delta;\n input[i] = (input[i] === (this._opts.base - 1)) ? 0 : input[i]+1;\n// console.log( 'picked input ' + i + \" new array\" + input );\n this.render();\n }\n\n // Properties\n get color0() { return this._palette[0]; }\n set color0(c) { this._palette[0] =c; this.update(); }\n get color1() { return this._palette[1]; }\n set color1(c) { this._palette[1] =c; this.update(); }\n get color2() { return this._palette[2]; }\n set color2(c) { this._palette[2] =c; this.update(); }\n get color3() { return this._palette[3]; }\n set color3(c) { this._palette[3] =c; this.update(); }\n\n get viewmode() { return this._viewmode; }\n set viewmode(m) { this._viewmode =m; this.update(); }\n get mode() { return this._opts.mode; }\n set mode(i) { \n this._opts.mode =i; \n this._emit( 'maxrules', Automaton.maxRules( this._opts.base, i ) ); \n this.update(); \n }\n get base() { return this._opts.base; }\n set base(i) { \n if( this._opts.base > i )\n this.rule =0;\n this._opts.base =i;\n this._emit( 'maxrules', Automaton.maxRules( i, this._opts.mode ) ); \n this.update(); \n }\n get folds() { return this._opts.folds; }\n set folds(i) { this._opts.folds =i; this._emit( 'folds', i ); this.update(); }\n get foldToRight() { return this._opts.foldToRight; }\n set foldToRight(b) { this._opts.foldToRight =(b == 'true' || b == true); this.update(); }\n get rule() { return this._opts.rule; }\n set rule(i) { \n if( i >= 0 && i < this._automaton.maxRules ) { \n this._opts.rule =i; \n this._emit( 'rule', i );\n this.update(); \n } \n }\n\n get inputSize() { return this._opts.input.length; }\n set inputSize(i) { }\n\n editJSON() {\n let editor = new Texteditor();\n editor.create();\n editor.text = JSON.stringify( this._opts );\n editor.onDone = (json)=>{ \n this._opts = JSON.parse( json ); \n this._emit( 'rule', this._opts.rule );\n this._emit( 'folds', this._opts.folds );\n this.update(); \n this._emit( 'maxrules', Automaton.maxRules( this._opts.base, this._opts.mode ) );\n };\n }\n\n _emit( event, data ) {\n let listeners = this._listeners[event];\n if( typeof listeners === 'undefined' )\n return;\n for( const func of listeners )\n func( data );\n }\n}\n\nclass App {\n constructor( { container_id = '' } ) {\n console.log( 'hallo ik ben een poes, dag vrienden' );\n\n // Create a viewport container inside the given element id\n this.container =document.getElementById( container_id );\n if( typeof this.container == 'undefined' )\n this.container =document.body;\n\n let viewport = document.createElement( 'div' )\n viewport.className = 'viewport';\n this.container.appendChild( viewport );\n\n // Let's set-up the viewport\n this.viewport = new Viewport( viewport );\n this.viewport.init();\n\n // Create the controller for the user controls\n this.controller = new UIController( this.viewport );\n\n // Set-up UI\n this.toolbox =null;\n this.setupToolbox();\n this.menubar =null;\n this.setupMenubar();\n\n // Render initial settings\n this.controller.render();\n\n /*let a = this.controller._automaton;\n let n = a.first();\n do {\n console.log( `Node: ${n.row},${n.col}` );\n n = a.next(n);\n } while( a.isLast(n) );*/\n }\n setupMenubar() {\n // Make a menubar \n this.menubar = new Menubar( this.container );\n \n let a_ctrls = this.menubar.addGroup().floatLeft(); \n a_ctrls.addLink( 'RFExplore' );\n\n let step_ctrls = this.menubar.addGroup().floatCenter();\n let rule_label =null;\n step_ctrls.addButton( '', 'fa fa-backward' ).action( ()=> { this.controller.previousRule(); } );\n rule_label = step_ctrls.addLink( 'Rule #' + this.controller.rule );\n this.controller.on( 'rule', (r)=> { rule_label.text = 'Rule #' + r; } );\n step_ctrls.addButton( '', 'fa fa-forward' ).action( ()=> { this.controller.nextRule(); } );\n\n let r_ctrls = this.menubar.addGroup().floatRight();\n r_ctrls.addButton( '', 'fa fa-arrows-alt' ).action( ()=>{ screenfull.toggle(); } );\n r_ctrls.addButton( '', 'fa fa-step-forward' ).action( ()=>{ this.controller.step(); } );\n r_ctrls.addButton( 'Render', 'fa fa-camera-retro' ).action( ()=>{ this.controller.render(); } );\n r_ctrls.addLink( '', 'fa fa-circle-o' );\n\n }\n setupToolbox() {\n this.toolbox = new dat.GUI( { load: DatGUIPresets, preset: \"Default\" } );\n this.toolbox.remember( this.controller );\n this.toolbox.remember( this.viewport );\n\n // Automaton toolbox\n let f_a = this.toolbox.addFolder( 'Automaton' );\n f_a.add( this.controller, 'mode', 2, 2 ).step(1).name( 'Mode' );\n f_a.add( this.controller, 'base', 2, 4 ).step(1).name( 'Base' );\n let rule_ctrl = f_a.add( this.controller, 'rule', 0, 15 ).name( 'Rule' ).step(1);\n this.controller.on( 'maxrules', (i)=>{ rule_ctrl.max(i); rule_ctrl.updateDisplay() } );\n this.controller.on( 'rule' , (i)=>{ rule_ctrl.updateDisplay(); } );\n f_a.add( this.controller, 'folds', 0, 500 ).name( '#Folds' ).step(1).listen();\n f_a.add( this.controller, 'foldToRight', { Left: false, Right: true } ).name( 'Fold' );\n f_a.add( this.controller, 'inputSize').name( 'Input size' ).step(1).listen();\n f_a.add( this.controller, 'editJSON').name( 'Edit/Import/Export' );\n f_a.open();\n\n // Visualisation toolbox\n let f_v = this.toolbox.addFolder( 'Visualisation' );\n f_v.add( this.controller, 'viewmode', { Brick : 'brick', Diamond: 'diamond', Circle: 'circle', Stack: 'stack', Folded: 'folded' } ).name( 'Cell shape' );\n f_v.open();\n \n let f_cl = this.toolbox.addFolder( 'Clustering' );\n f_cl.add( this.controller, 'cluster', { None : 'none', TTable2: 'ttable2' } ).name( 'Mode' );\n\n // Colors toolbox\n let f_c = this.toolbox.addFolder( 'Colors' );\n f_c.addColor( this.controller, 'color0' ).name( '0' ).onFinishChange( () => { this.controller.update(); } ) ;\n f_c.addColor( this.controller, 'color1' ).name( '1' );\n f_c.addColor( this.controller, 'color2' ).name( '2' );\n f_c.addColor( this.controller, 'color3' ).name( '3' );\n f_c.addColor( this.viewport, 'backgroundColor' ).name( 'Background' );\n //f_c.open();\n\n // Render toolbox\n let f_r = this.toolbox.addFolder( 'Render' );\n f_r.add( this.controller, 'autoUpdate' ).name( 'Auto-update' );\n f_r.add( this.viewport, 'animateSpin' ).name( 'Spin' );\n f_r.add( this.viewport, 'animateDraw' ).name( 'Animate draw' );\n f_r.add( this.viewport, 'alwaysClearGeometry' ).name( 'Clear cells' );\n f_r.add( this.viewport, 'animateDrawType', { Rows: 'rows', Ordered: 'ordered' } ).name( 'Draw type' );\n f_r.add( this.controller, 'render' ).name( 'Render' );\n\n }\n}\n\nexport default {\n App : App\n};\n\n\n\n\n\n// WEBPACK FOOTER //\n// ./rfexplore/rfexplore.js","\"use strict\";\n\nexport default class Automaton {\n\n/* \n * Constructs a new Automaton given 'opts' and generates a transition table \n */\n constructor( \n {\n base = 2,\n mode = 2,\n rule = 0,\n input = [ 0, 0],\n maxSteps = 0,\n folds = 0,\n foldToRight = false\n } = {}\n ) {\n this.opts = {\n base: base,\n mode: mode,\n rule: rule,\n input: input,\n maxSteps: maxSteps,\n folds: folds,\n foldToRight: foldToRight\n };\n/* this._= {\n curRow : 1, // row 0 is the top (input) row\n curPos : ( foldToRight ? this._rows[0].length-2 : 0 ),\n folds: 0\n };*/\n // Internal state\n this._rows = new Array();\n this._rows.push( foldToRight? input.slice() : input.slice().reverse() );\n this._curRow = 0; // row 0 is the top (input) row\n this._curPos = this._rows[0].length -1;\n this._folds = 0;\n \n this.maxRules =Automaton.maxRules( base, mode );\n this.ttable = Automaton.makeTTable( base, mode, rule );\n this.nodeCount = this.width;\n this.inputSize = input.length;\n\n }\n\n /* \n * General functions that define the dimensions \n */\n get width() {\n return this._rows[0].length;\n }\n\n get rows() {\n return this._rows.length;\n }\n\n rowLength( i ) {\n return this._rows[i].length;\n }\n\n static maxRules( base, mode ) {\n let rulesize = Math.pow( base, mode );\n return Math.pow( base, rulesize );\n }\n\n /*\n * Generate a transition table given a base, mode and rule number\n * Returns an array\n */\n static makeTTable( base, mode, rule ) {\n var tt = new Array();\n let rulesize = Math.pow( base, mode );\n\n if( rulesize > this.maxRules ) {\n return null;\n }\n\n for( let i = 0; i < rulesize; i++ )\n tt[i] = 0;\n\n let decimal = rule; // Rule in base 10\n // Editted to be conguent with Wolfram Code\n let i = 0;\n while( i < rulesize && decimal > 0 ) {\n tt[i] = decimal % base;\n decimal = Math.floor( decimal / base );\n i++;\n }\n /*let i = rulesize -1;\n while( i >= 0 && decimal > 0 ) {\n tt[i] = decimal % base;\n decimal = Math.floor( decimal / base );\n i--;\n }*/\n return tt;\n }\n\n /*\n * Given a base, mode and set of input nodes A (A.length == mode),\n * returns the index of the transition table that contains the reduction rule\n * for A[0] .. A[mode-1] -> b\n */\n static ttIndex( base, mode, A ) {\n let mult =1;\n let index =0;\n for( let i = mode-1; i >= 0; i-- ) {\n index += A[i] * mult;\n mult *= base;\n }\n return index;\n }\n\n first() {\n return this._transpose( { col: 0, row: 0 } );\n }\n\n isLast( {col, row} ) {\n let n = this._transpose( { col: col, row: row } );\n return (n.col === this._curPos && n.row === this._curRow);\n }\n\n /*\n * Return the position { col, row } of the most recently calculated node\n */\n last() {\n return this._transpose( { col: this._curPos, row: this._curRow } );\n }\n\n /*\n * Given a column and row, return the position of the next node that need to be calculated\n * Returns object in the form of { col, row }\n */\n next( { col, row } ) {\n return this._transpose( this._next( this._transpose( { col: col, row: row } ) ) );\n }\n\n /*\n * Given a column and row, return the position of the previously calculated node\n * Returns object in the form of { col, row }\n */\n previous( { col, row } ) {\n return this._transpose( this._previous( this._transpose( { col: col, row: row } ) ) ); \n }\n\n /* Given a column and row, return the value of the node in that position\n * Note that a bounds check is omitted for performance\n */\n value( { col, row } ) {\n let pos = this._transpose( { col: col, row: row } );\n return this._rows[pos.row][pos.col];\n }\n\n /*\n * Advance the automaton by one step\n * This step may either be a reduction step or a fold\n */\n step() { \n if( this._curRow === 0 && this._rows.length === 0 ) {\n console.error( \"Automaton: undefined top row, there is no input.\" );\n return;\n }\n // Step 0. compute the position of the next cell\n let nextPos = this._next( { col: this._curPos, row: this._curRow } );\n this._curRow = nextPos.row;\n this._curPos = nextPos.col;\n\n // Step 1. check whether a special action is required\n if( this._curRow === 0 ) {\n // Top row, which means the next step can only be a fold\n // Step 1b. extend all rows by one\n for( let i =0; i < this._rows.length; i++ ) {\n // push\n this._rows[i][this._rows[i].length] = -1;\n }\n // Step 1c. copy ('fold') the apex/singleton row over to the top row\n let foldValue = this._rows[this._rows.length-1][0];\n this._rows[0][this._curPos] = foldValue;\n // Step 1d. extend the automata\n this._rows.push( [-1] );\n this._folds++;\n this.nodeCount += this._rows.length;\n return;\n }\n else if( typeof this._rows[this._curRow] === 'undefined' ) {\n // Step 1e. We need to start a new row\n let len = this._rows[this._curRow-1].length - 1;\n this._rows.push( new Array(len) );\n this._rows[this._curRow].fill( -1 );\n this.nodeCount += len;\n }\n // Now we calculate the next iteration by reduction\n // Step 1. get values from parent nodes (one row up)\n let parents = this._rows[this._curRow-1].slice( this._curPos, this._curPos + this.opts.mode );\n\n // Step 2. Use the transition table to obtain the value for the current node\n var value =this.ttable[Automaton.ttIndex( this.opts.base, this.opts.mode, parents )];\n this._rows[this._curRow][this._curPos] = value;\n\n }\n\n generate( done ) {\n \n while( this._rows[this._curRow].length !== 1\n || this._folds !== this.opts.folds ) {\n this.step();\n }\n\n\n if( typeof done === 'function' )\n done( this );\n }\n\n /*\n * If the automaton is set to expand (fold) to the left, \n * we mirror the entire datastructure for optimization.\n */\n _mirrored() {\n return !this.opts.foldToRight;\n }\n\n /*\n * Return the transposed (mirrored) coordinates for {col,row}\n * This translates internal coordinates to logical (abstracted) coordinates\n */\n _transpose( { col, row } ) {\n\n if( this.opts.foldToRight )\n return { col: col, row: row };\n else\n return { col: (this._rows[row].length-1) - col, row: row };\n }\n\n /*\n * Calculate the next position using internal coordinates\n */\n _next( { col, row } ) {\n let _row = this._rows[row];\n let unfoldedRowLength = this.inputSize - row * (this.opts.mode-1);\n let lastInputRow = Math.ceil( this.inputSize / (this.opts.mode-1) )-1;\n\n if( col < unfoldedRowLength && row <= lastInputRow ) {\n if( col === unfoldedRowLength - 1 ) {\n if( row === lastInputRow ) \n // First fold\n return { col: this.inputSize, row: 0 };\n else\n // Next row\n return { col: 0, row: row + 1 };\n }\n else\n // Next col\n return { col: col + 1, row: row };\n }\n else if( col === 0 ) {\n // Fold\n return { col: this.inputSize + (row - lastInputRow), row: 0 };\n } \n\n // Next row within fold\n return { col: col - 1, row: row + 1 };\n\n\n /* // Case 1: we're the apex, return to the top row\n if( _row.length === 1 ) {\n return { col: this._rows[0].length, row: 0 };\n }\n // Case 2: end of the row, advance one row\n else if( col+1 >= _row.length ) {\n if( row+1 < this.rows ) {\n let _row = this._rows[row+1];\n // Case 2a: We're folding, only one value missing\n if( typeof _row !== 'undefined' && _row[0] !== -1 )\n return { col: _row.length-1, row: row + 1 };\n }\n // Case 2b: Not folding, start at the beginning\n return { col: 0, row: row + 1 };\n }\n // Case 3: next column is already calculated, advance one row\n //else if( _row[col+1] !== -1 ) {\n // return { col: 0, row: row + 1 };\n //}\n // Case 4: just advance the column\n return { col: col + 1, row: row };*/\n }\n\n /*\n * Calculate the previous position using internal coordinates\n */\n _previous( { col, row } ) {\n let pos = { col: col, row: row };\n let _row = this._rows[row];\n }\n\n} // class Automaton\n\n\n\n// WEBPACK FOOTER //\n// ./rfexplore/automaton.js","\n\"use strict\";\nimport equals from \"./value_equals.js\";\n\nconst diamondWidth = 1 * Math.sqrt( 2 );\n\nexport default class Viewport {\n constructor( elem ) {\n\n this.container =elem;\n \n this.automaton = null;\n // fixme: remove\n this.palette = [ '#ff5511', '#33eeff', '#ff33dd', '#386ebb' ];\n\n this.viewportWidth = this.container.offsetWidth;\n this.viewportHeight = this.container.offsetHeight;\n\n this._viewmode = 'folded'; // one of 'brick', 'diamond', 'circle', 'folded'\n this._backgroundColor = '#666666'\n this._scene = null;\n this._aspect =1.0;\n this._cameraPersp = null;\n this._cameraOrtho = null;\n this._controls = null;\n this._sceneHeight = 10;\n this._renderer = null;\n this._lights = new Array();\n this._raycaster = new THREE.Raycaster();\n this._mouse = new THREE.Vector2();\n this._model = { \n geometry: null, // BufferGeometry reference\n attr_normal: null, // BufferAttribute for normal\n buf_normal: null, // Int16Array with normals\n attr_color: null, // BufferAttribute for color\n buf_color: null, // Uint8Array with color data\n attr_position: null,// BufferAttribute for position\n buf_position: null, // Float32Array with position data\n offset: 0, // Pointer after the last element\n template_size: 0, // Elements in the template geometry\n node_count: 0, // Total number of nodes in the geometry\n mesh: null, // Mesh reference to the final object\n viewmode: null, // Viewmode used to construct geometry\n mode: 0, // Mode used to contruct geometry\n input_pickers: null,// Array of Meshes \n picked: null, // Reference to the picked Mesh\n right: false // Pivot is at right hand side\n };\n this._animation = {\n alwaysClearGeometry: false,\n spin: true,\n animateDraw: true,\n drawType: 'rows', // one of 'rows', 'ordered'\n drawDone: false,\n node: { col:0, row: 0 },\n row: 0\n };\n this._inputClickCallback = null;\n }\n\n render() {\n if( this._viewmode === 'folded' ) {\n this._renderer.render( this._scene, this._cameraPersp );\n } else {\n this._renderer.render( this._scene, this._cameraOrtho );\n }\n\n }\n\n animate() { \n let req =false; // request new frame\n\n if( !this._animation.drawDone ) {\n this._updateCellsAnimated();\n req =true;\n }\n if( this._animation.spin && this._viewmode === 'folded' ) {\n this._model.mesh.rotateY( 0.002 );\n req =true;\n }\n\n this._controls.update();\n this.render();\n \n if( req ) \n requestAnimationFrame( ()=>{this.animate()} );\n }\n\n init() {\n console.log( 'Initializing WebGL' );\n \n this._scene = new THREE.Scene();\n this._scene.background = new THREE.Color( this.backgroundColor );\n this._aspect = this.viewportWidth / this.viewportHeight;\n this._cameraPersp = new THREE.PerspectiveCamera( 35, this._aspect, 0.1, 3000 );\n this._cameraOrtho = new THREE.OrthographicCamera( \n this._aspect * this._sceneHeight / -2, \n this._aspect * this._sceneHeight / 2, \n -this._sceneHeight / 2, this._sceneHeight / 2 );\n \n this._renderer = new THREE.WebGLRenderer( {antialias:true} );\n this._renderer.setSize( this.viewportWidth, this.viewportHeight );\n this.container.appendChild( this._renderer.domElement );\n\n this._cameraOrtho.position.z = 10;\n this._cameraPersp.position.z = 10;\n\n // Setup orbit controls\n this._controls = new THREE.OrbitControls( this._cameraPersp, this._renderer.domElement );\n this._controls.addEventListener( 'change', () => { this.render(); } );\n\n // Setup lights for the 3d view\n let lights = this._lights;\n lights[0] = new THREE.AmbientLight( 0x151515, 3 );\n lights[0].position.set( 0, 0, 0 );\n lights[0].target = new THREE.Vector3( 0, 0, 0 );\n this._scene.add( lights[0] );\n \n lights[1] = new THREE.DirectionalLight( 0xEDE2A7 );\n lights[1].position.set( 10, 10, 10 );\n this._scene.add( lights[1] );\n \n lights[2] = new THREE.DirectionalLight( 0xC7E8AD );\n lights[2].position.set( 0, -10, -10 );\n this._scene.add( lights[2] );\n \n lights[3] = new THREE.DirectionalLight( 0xC8D9A8 );\n lights[3].position.set( -10, 10, 0 );\n this._scene.add( lights[3] );\n \n this.render();\n\n window.addEventListener( 'resize', () => { this._onWindowResize(); } );\n document.addEventListener( 'mousemove', (e) => { this._onDocumentMousemove(e); } );\n this.container.addEventListener( 'click', () => { this._onClick(); } );\n\n }\n\n updateCamera() {\n let sceneHeight = this._sceneHeight;\n let aspect = this._aspect;\n this._cameraPersp.aspect = aspect;\n this._cameraPersp.position.z = 1.2\n * (sceneHeight / 2 ) \n / Math.tan( this._cameraPersp.fov / 360 * Math.PI );\n this._cameraPersp.updateProjectionMatrix();\n this._cameraOrtho.left = aspect * sceneHeight / -2;\n this._cameraOrtho.right = aspect * sceneHeight / 2;\n this._cameraOrtho.top = sceneHeight / 2;\n this._cameraOrtho.bottom = sceneHeight / -2;\n this._cameraOrtho.updateProjectionMatrix();\n\n }\n\n set viewmode( m ) {\n let viewmode = this._viewmode;\n let controls = this._controls;\n\n if( viewmode === 'folded' && m !== 'folded' ) {\n controls.reset();\n controls.object = this._cameraOrtho;\n controls.enableRotate =false;\n } else if ( viewmode !== 'folded' && m === 'folded' ) {\n controls.reset();\n controls.object = this._cameraPersp;\n controls.enableRotate = true;\n }\n this._viewmode =m;\n //this.updateGeometry();\n\n }\n\n set animateDrawType( t ) { this._animation.drawType = t; }\n get animateDrawType() { return this._animation.drawType; }\n\n set animateSpin( b ) { this._animation.spin = b; if( b ) this.animate(); }\n get animateSpin() { return this._animation.spin; }\n\n set animateDraw( b ) { this._animation.animateDraw =b; }\n get animateDraw() { return this._animation.animateDraw; }\n\n set alwaysClearGeometry( b ) { this._animation.alwaysClearGeometry =b; }\n get alwaysClearGeometry() { return this._animation.alwaysClearGeometry; }\n \n set backgroundColor( str ) {\n this._backgroundColor = str;\n this._scene.background = new THREE.Color( this.backgroundColor );\n this.render();\n }\n get backgroundColor() { return this._backgroundColor; }\n\n setOnInputClicked( func ) {\n this._inputClickCallback = func;\n }\n\n clearGeometry() {\n let scene =this._scene;\n for(let i = 0; i < scene.children.length; i++){\n if( scene.children[i].name !== 'helper' &&\n !(scene.children[i] instanceof THREE.AmbientLight) &&\n !(scene.children[i] instanceof THREE.DirectionalLight) ) {\n scene.remove(scene.children[i]);\n i--;\n }\n }\n }\n\n update() {\n if( this.automaton === null )\n return;\n // See if we need to update the geometry at all, criteria are:\n // - Different viewmode\n // - More cells \n // - Different mode\n // - Pivot position\n if( this._viewmode !== this._model.viewmode \n || this.automaton.opts.mode !== this._model.mode\n || this.automaton.nodeCount !== this._model.node_count \n || (!this.automaton.opts.foldToRight) !== this._model.right ) {\n console.log( 'Viewport: rebuilding geometry' );\n let populate = !this._animation.animateDraw;\n this._updateGeometry( populate );\n }\n else {\n if( !this._animation.animateDraw )\n this._updateCells();\n }\n if( this._animation.animateDraw ) {\n if( this._animation.alwaysClearGeometry )\n this._updateCells( true );\n this._animation.node = this.automaton.first(); this._animation.row =0;\n this._animation.drawDone = false;\n }\n this.animate();\n }\n \n //\n // Private event listeners\n //\n \n _onWindowResize() {\n let container = this.container;\n\n this.viewportWidth = container.offsetWidth;\n this.viewportHeight = container.offsetHeight;\n this._aspect = this.viewportWidth / this.viewportHeight;\n this.updateCamera();\n this._renderer.setSize( this.viewportWidth, this.viewportHeight );\n this.render();\n }\n\n _onDocumentMousemove( event ) {\n this._mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;\n this._mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;\n\n if( this.viewmode !== 'folded' ) {\n let render =false;\n\n this._raycaster.setFromCamera( this._mouse, this._cameraOrtho );\n let intersects = this._raycaster.intersectObjects( this._model.input_pickers );\n\n if( this._model.picked !== null ) {\n this._model.picked.material.opacity = 0.0;\n this._model.picked = null;\n render =true;\n }\n if( intersects.length !== 0 ) {\n intersects[0].object.material.opacity = 0.5;\n this._model.picked = intersects[0].object;\n render =true;\n }\n if( render )\n this.render();\n }\n }\n\n _onClick() {\n let picked = this._model.picked;\n if( picked !== null ) {\n if( typeof this._inputClickCallback === 'function' ) {\n this._inputClickCallback( picked.userData.col );\n }\n }\n }\n\n //\n // Private functions\n //\n \n \n /*\n * Set the geometry's color at position of node to color\n */\n _setColor( node, color ) {\n let M = this._model;\n let n = M.template_size; // elements per template geometry\n let offset = node * n;\n for( let i =0; i < n; i+=3 ) {\n M.buf_color[offset+i] = color.r * 255;\n M.buf_color[offset+i+1] = color.g * 255;\n M.buf_color[offset+i+2] = color.b * 255;\n }\n if( M.attr_color.updateRange.count === -1 ) {\n M.attr_color.updateRange.offset = offset;\n M.attr_color.updateRange.count = n;\n } else {\n let old_offset = M.attr_color.updateRange.offset;\n if( old_offset < offset ) {\n M.attr_color.updateRange.count = (offset - old_offset) + n;\n }\n else {\n M.attr_color.updateRange.offset = offset;\n M.attr_color.updateRange.count = (old_offset - offset) + n;\n }\n }\n }\n\n /* \n * Given a col and row, return the color that represents the value\n * of this node in the automaton\n */\n _nodeColor( node ) {\n let color = this.backgroundColor;\n let value = this.automaton.value( node );\n if( value >= 0 ) \n color = this.palette[ value ];\n return new THREE.Color( color );\n }\n\n /*\n * Given a col and row, calculate the offset within the geometry\n */\n _calcNodeOffset( { col, row } ) {\n // FIXME: add support for modes\n let width = this.automaton.width;\n let rowoffs =0;\n for( let i =0; i < row; i++ )\n rowoffs += (width--);\n return rowoffs + col;\n }\n\n /*\n * Change the colors of the geometry such that it represents the current automaton \n */\n _updateCells( only_clean = false ) {\n const automaton =this.automaton;\n if( automaton === null )\n return;\n\n let node =0;\n if( !only_clean ) {\n for( let i =0; i < automaton.rows; i++ ) {\n for( let j =0; j < automaton.rowLength(i); j++ ) {\n let color = this._nodeColor( { row: i, col: j } );\n this._setColor( this._calcNodeOffset( { col: j, row: i } ), new THREE.Color( color ) );\n\n node++;\n }\n }\n }\n // Make the rest of the cells blank\n for( let n =node; n < this._model.node_count; n++ ) {\n this._setColor( n, new THREE.Color( this.backgroundColor ) );\n }\n // Update the buffer\n this._model.attr_color.needsUpdate =true;\n }\n\n /*\n * Change the colors of the geometry such that it represents the current automaton,\n * when animated, this function performs the next step in the animation.\n */\n _updateCellsAnimated() {\n const automaton =this.automaton;\n if( automaton === null )\n return;\n\n if( this._animation.drawType === 'ordered' ) {\n let node = this._animation.node;\n let color = this._nodeColor( node );\n let offset = this._calcNodeOffset( node );\n\n this._setColor( offset, color );\n if( equals( node, automaton.last() ) )\n this._animation.drawDone =true;\n else\n this._animation.node = automaton.next( node );\n } else if( this._animation.drawType === 'rows' ) {\n let row = this._animation.row;\n for( let j =0; j < automaton.rowLength(row); j++ ) {\n let node = { col: j, row: row };\n let color = this._nodeColor( node );\n let offset = this._calcNodeOffset( node );\n this._setColor( offset, color );\n }\n if( row+1 === automaton.rows )\n this._animation.drawDone =true;\n else\n this._animation.row++;\n }\n\n // Update the buffer\n this._model.attr_color.needsUpdate =true;\n }\n\n /*\n * Create a new geometry (mesh) based on the size of the automaton \n * and the viewmode. Discards all previous geometry.\n */\n _updateGeometry( populate = true ) { \n const automaton =this.automaton;\n if( automaton === null )\n return;\n const viewmode =this._viewmode;\n\n // Cleanup from previous calls\n //\n \n let M = this._model;\n if( M.geometry !== null ) {\n this._scene.remove( M.mesh );\n /* M.attr_position.setArray(null);\n M.attr_normal.setArray(null);\n M.attr_color.setArray(null);*/\n M.geometry.dispose();\n for( let i =0; i < M.input_pickers.length; i++ ) {\n this._scene.remove( M.input_pickers[i] );\n }\n \n }\n M.input_pickers = new Array();\n \n // For some viewmode we use a template geometry\n // Here we prepare this geometry and the material\n\n let template =null;\n let material =null;\n \n M.template_size =0;\n if( viewmode !== 'folded' ) {\n material = new THREE.MeshBasicMaterial( {side: THREE.DoubleSide, vertexColors: THREE.VertexColors} );\n if( viewmode === 'brick' ) {\n template = new THREE.PlaneBufferGeometry( 1, 1 );\n template = template.toNonIndexed();\n } \n else if ( viewmode === 'diamond' ) {\n template = new THREE.PlaneBufferGeometry( 1, 1 );\n template.rotateZ( Math.PI * 0.25 );\n template.scale( 1 / diamondWidth, 1 , 1 );\n template = template.toNonIndexed();\n } \n else if( viewmode === 'circle' ) {\n template = new THREE.CircleBufferGeometry( 0.5, 32 );\n template = template.toNonIndexed();\n } else if( viewmode === 'stack' ) {\n template = new THREE.BufferGeometry();\n let positions = new Float32Array( [\n Math.cos( 2/3 * Math.PI ), 0.0, Math.sin( 2/3 * Math.PI ),\n Math.cos( 4/3 * Math.PI ), 0.0, Math.sin( 4/3 * Math.PI ),\n Math.cos( 0 ), 0.0, Math.sin( 0 ) ] );\n /* let normals = new Float32Array( [\n 0.0, 0.0, 1.0,\n 0.0, 0.0, 1.0,\n 0.0, 0.0, 1.0 ] );*/\n template.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );\n }\n\n M.template_size = template.getAttribute( 'position' ).array.length; \n }\n else {\n material = new THREE.MeshStandardMaterial( {side: THREE.DoubleSide, vertexColors: THREE.VertexColors, metalness: 0, roughness: 1 } );\n template = new THREE.SphereBufferGeometry( 1.1, 8, 8 );\n template = template.toNonIndexed();\n M.template_size = template.getAttribute( 'position' ).array.length; \n }\n\n\n // Prepare buffers for the geometry\n\n M.geometry = new THREE.BufferGeometry();\n let array_size = automaton.nodeCount * M.template_size; \n M.buf_position = new Float32Array( array_size );\n M.buf_color = new Uint8Array( array_size );\n M.buf_normal = new Int16Array( array_size );\n M.offset =0;\n M.node_count = automaton.nodeCount;\n M.right = !automaton.opts.foldToRight; // Position of the pivot\n\n let addInstance = function( color, translate ) {\n let positions = template.getAttribute( 'position' ).array;\n let normals = null;\n if( viewmode === 'folded' )\n normals = template.getAttribute( 'normal' ).array;\n for( let i =0; i < M.template_size; i+=3 ) {\n M.buf_position[M.offset+i] = positions[i] + translate.x;\n M.buf_position[M.offset+i+1] = positions[i+1] + translate.y;\n M.buf_position[M.offset+i+2] = positions[i+2] + translate.z;\n\n M.buf_color[M.offset+i] = color.r * 255;\n M.buf_color[M.offset+i+1] = color.g * 255;\n M.buf_color[M.offset+i+2] = color.b * 255;\n \n if( viewmode === 'folded' ) {\n M.buf_normal[M.offset+i] = normals[i] * 32767;\n M.buf_normal[M.offset+i+1] = normals[i+1] * 32767;\n M.buf_normal[M.offset+i+2] = normals[i+2] * 32767;\n }\n }\n M.offset += positions.length;\n };\n\n let foldedPosition = function( row, col, width, inputLength, right, mode, flat =false ) {\n // The pivot position determines where the rows start\n //let coneCol = right ? (width-1) - col : col;\n // Map the `triangle row' onto the `diagonal row'\n //let coneRow = row + coneCol;\n let coneRow = right ? row + (width-1) - col : row + col;\n let coneCol = right ? row : coneRow - col;\n let fold =!(coneRow < inputLength);\n let coneRowWidth = coneRow + (fold ? 0 : 1); // FIXME: support for mode > 2\n\n // Calculate the position of the node on the `cone'\n let calcPosition = function( offset ) {\n let p = new THREE.Vector3( 0, 0, 0 );\n let phi = (coneCol+offset) * (2 * Math.PI / (coneRowWidth));\n let fold_offset = (coneCol+offset) / coneRowWidth;\n let radius = (coneRowWidth + fold_offset) / Math.PI;\n\n p.x = Math.cos( phi ) * radius;\n p.z = Math.sin( phi ) * radius;\n\n p.y = -coneRow*2 - ((fold && !flat) ? 2 * fold_offset : 0);\n return p;\n }\n return new Array( calcPosition( 0 ), calcPosition( 1 ) );\n }\n\n let heightstep = 1.0;\n if( automaton.opts.mode % 2 === 0 ) {\n if( viewmode === 'diamond' )\n heightstep = 1 / diamondWidth;\n else if( viewmode === 'circle' ) \n heightstep = 0.5 + Math.sqrt(0.125);\n }\n\n let position = new THREE.Vector3 ( \n 0, \n (automaton.rows - 1) * heightstep / 2,\n 0 );\n for( let i =0; i < automaton.rows; i++ ) {\n for( let j =0; j < automaton.rowLength(i); j++ ) {\n position.x = -automaton.width / 2 + 0.5 * i + j; \n \n let color =populate ? this._nodeColor( {row: i, col: j} ) : new THREE.Color( this.backgroundColor );\n \n if( viewmode === 'folded' ) {\n let p = foldedPosition( i, j, automaton.rowLength(i), automaton.opts.input.length, M.right, automaton.opts.mode, false )[0];\n p.y += automaton.width;\n addInstance( color, p );\n }\n else if( viewmode === 'stack' ) {\n let ps = foldedPosition( i, j, automaton.rowLength(i), automaton.opts.input.length, M.right, automaton.opts.mode, true );\n // swap y and z\n let t = ps[0].y;\n ps[0].y = ps[0].z;\n ps[0].z = t;\n t = ps[1].y;\n ps[1].y = ps[1].z;\n ps[1].z = t;\n // Use these positions to place the triangle\n let tri = template.getAttribute( 'position' ).array;\n tri[0] = 0.0; tri[1] = 0.0; tri[2] = ps[0].z; // x y z\n tri[3] = ps[0].x; tri[4] = ps[0].y; tri[5] = ps[0].z; // x y z\n tri[6] = ps[1].x; tri[7] = ps[1].y; tri[8] = ps[1].z; // x y z\n addInstance( color, new THREE.Vector3( 0,0,0 ) );\n }\n else {\n // Add an instance to the main geometry\n addInstance( color, position );\n\n // If the node is an input node, also add a picking-mesh for user input\n if( i === 0 ) {\n let g = template.clone();\n g.translate( position.x, position.y, 1 );\n let picker_material = \n new THREE.MeshBasicMaterial( {side: THREE.DoubleSide, color: '#ffffff', transparent: true, opacity: 0.0 } );\n let picker_mesh = new THREE.Mesh( g, picker_material );\n \n picker_mesh.userData.col = j;\n this._scene.add( picker_mesh ); \n M.input_pickers.push( picker_mesh );\n }\n }\n }\n position.y -= heightstep;\n }\n M.attr_position =new THREE.BufferAttribute(M.buf_position, 3 );\n M.attr_color =new THREE.BufferAttribute(M.buf_color, 3 );\n M.attr_color.normalized = true;\n M.geometry.addAttribute('position', M.attr_position );\n M.geometry.addAttribute('color', M.attr_color ) ;\n if( viewmode === 'folded' ) {\n M.attr_normal =new THREE.BufferAttribute(M.buf_normal, 3 );\n M.attr_normal.normalized = true;\n M.geometry.addAttribute('normal', M.attr_normal );\n }\n M.geometry.computeBoundingSphere();\n\n M.mesh = new THREE.Mesh( M.geometry, material );\n this._scene.add( M.mesh );\n\n M.viewmode = viewmode;\n M.mode = automaton.opts.mode;\n\n if( viewmode === 'folded' )\n this._sceneHeight = automaton.width * 2;\n else if( viewmode === 'stack' )\n this._sceneHeight = automaton.width * 0.8;\n else\n this._sceneHeight = automaton.width * 1.1;\n \n this.updateCamera();\n\n }\n\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./rfexplore/viewport.js","/* value_equals.js\n \n The MIT License (MIT)\n \n Copyright (c) 2013-2017, Reactive Sets\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n*/\n/* Slightly modified version of https://github.com/ReactiveSets/toubkal/blob/master/lib/util/value_equals.js */\n\n/* -----------------------------------------------------------------------------------------\n equals( a, b [, enforce_properties_order, cyclic] )\n \n Returns true if a and b are deeply equal, false otherwise.\n \n Parameters:\n - a (Any type): value to compare to b\n - b (Any type): value compared to a\n \n Optional Parameters:\n - enforce_properties_order (Boolean): true to check if Object properties are provided\n in the same order between a and b\n \n - cyclic (Boolean): true to check for cycles in cyclic objects\n \n Implementation:\n 'a' is considered equal to 'b' if all scalar values in a and b are strictly equal as\n compared with operator '===' except for these two special cases:\n - 0 === -0 but are not equal.\n - NaN is not === to itself but is equal.\n \n RegExp objects are considered equal if they have the same lastIndex, i.e. both regular\n expressions have matched the same number of times.\n \n Functions must be identical, so that they have the same closure context.\n \n \"undefined\" is a valid value, including in Objects\n \n 106 automated tests.\n \n Provide options for slower, less-common use cases:\n \n - Unless enforce_properties_order is true, if 'a' and 'b' are non-Array Objects, the\n order of occurence of their attributes is considered irrelevant:\n { a: 1, b: 2 } is considered equal to { b: 2, a: 1 }\n \n - Unless cyclic is true, Cyclic objects will throw:\n RangeError: Maximum call stack size exceeded\n*/\nexport default function equals( a, b, enforce_properties_order, cyclic ) {\nreturn a === b // strick equality should be enough unless zero\n && a !== 0 // because 0 === -0, requires test by _equals()\n || _equals( a, b ) // handles not strictly equal or zero values\n;\n\nfunction _equals( a, b ) {\n // a and b have already failed test for strict equality or are zero\n \n var s, l, p, x, y;\n \n // They should have the same toString() signature\n if ( ( s = toString.call( a ) ) !== toString.call( b ) ) return false;\n \n switch( s ) {\n default: // Boolean, Date, String\n return a.valueOf() === b.valueOf();\n \n case '[object Number]':\n // Converts Number instances into primitive values\n // This is required also for NaN test bellow\n a = +a;\n b = +b;\n \n return a ? // a is Non-zero and Non-NaN\n a === b\n : // a is 0, -0 or NaN\n a === a ? // a is 0 or -O\n 1/a === 1/b // 1/0 !== 1/-0 because Infinity !== -Infinity\n : b !== b // NaN, the only Number not equal to itself!\n ;\n // [object Number]\n \n case '[object RegExp]':\n return a.source == b.source\n && a.global == b.global\n && a.ignoreCase == b.ignoreCase\n && a.multiline == b.multiline\n && a.lastIndex == b.lastIndex\n ;\n // [object RegExp]\n \n case '[object Function]':\n return false; // functions should be strictly equal because of closure context\n // [object Function]\n \n case '[object Array]':\n if ( cyclic && ( x = reference_equals( a, b ) ) !== null ) return x; // intentionally duplicated bellow for [object Object]\n \n if ( ( l = a.length ) != b.length ) return false;\n // Both have as many elements\n \n while ( l-- ) {\n if ( ( x = a[ l ] ) === ( y = b[ l ] ) && x !== 0 || _equals( x, y ) ) continue;\n \n return false;\n }\n \n return true;\n // [object Array]\n \n case '[object Object]':\n if ( cyclic && ( x = reference_equals( a, b ) ) !== null ) return x; // intentionally duplicated from above for [object Array]\n \n l = 0; // counter of own properties\n \n if ( enforce_properties_order ) {\n var properties = [];\n \n for ( p in a ) {\n if ( a.hasOwnProperty( p ) ) {\n properties.push( p );\n \n if ( ( x = a[ p ] ) === ( y = b[ p ] ) && x !== 0 || _equals( x, y ) ) continue;\n \n return false;\n }\n }\n \n // Check if 'b' has as the same properties as 'a' in the same order\n for ( p in b )\n if ( b.hasOwnProperty( p ) && properties[ l++ ] != p )\n return false;\n } else {\n for ( p in a ) {\n if ( a.hasOwnProperty( p ) ) {\n ++l;\n \n if ( ( x = a[ p ] ) === ( y = b[ p ] ) && x !== 0 || _equals( x, y ) ) continue;\n \n return false;\n }\n }\n \n // Check if 'b' has as not more own properties than 'a'\n for ( p in b )\n if ( b.hasOwnProperty( p ) && --l < 0 )\n return false;\n }\n \n return true;\n // [object Object]\n } // switch toString.call( a )\n} // _equals()\n\n/* -----------------------------------------------------------------------------------------\n reference_equals( a, b )\n \n Helper function to compare object references on cyclic objects or arrays.\n \n Returns:\n - null if a or b is not part of a cycle, adding them to object_references array\n - true: same cycle found for a and b\n - false: different cycle found for a and b\n \n On the first call of a specific invocation of equal(), replaces self with inner function\n holding object_references array object in closure context.\n \n This allows to create a context only if and when an invocation of equal() compares\n objects or arrays.\n*/\nfunction reference_equals( a, b ) {\n var object_references = [];\n \n return ( reference_equals = _reference_equals )( a, b );\n \n function _reference_equals( a, b ) {\n var l = object_references.length;\n \n while ( l-- )\n if ( object_references[ l-- ] === b )\n return object_references[ l ] === a;\n \n object_references.push( a, b );\n \n return null;\n } // _reference_equals()\n} // reference_equals()\n} // equals()\n\n\n\n\n// WEBPACK FOOTER //\n// ./rfexplore/value_equals.js","const TEXT_TYPE = 'text';\nconst BUTTON_TYPE = 'button';\n\nconst NO_ACTION = 'none';\nconst FUNC_ACTION = 'func';\nconst URL_ACTION = 'url';\nconst DROPDOWN_ACTION = 'dropdown';\n\nclass Menuitem {\n\n constructor( { container, text = '', iconclass = '', type = 'text', action = 'none' } ) {\n this.container = container;\n this._text = text;\n this._iconclass = iconclass;\n this._type = type;\n this._action = action;\n this._callback = null;\n\n this._liNode = null;\n this._aNode = null;\n this._textNode = null;\n this._iconNode = null;\n\n this._appendElem();\n }\n\n action( obj ) {\n if( typeof obj === 'function' ) {\n this._action = FUNC_ACTION;\n this._callback = obj;\n this._aNode.setAttribute( 'href', '#' );\n } else if( typeof obj === 'string' ) {\n this._action = URL_ACTION;\n this._callback = null;\n this._aNode.setAttribute( 'href', obj );\n }\n return this;\n }\n\n set text( t ) {\n this._text = t;\n this._textNode.nodeValue = t;\n }\n\n get text() { return this._text; }\n\n set iconclass( c ) {\n this._iconclass = c;\n if( this._text != '' )\n this._iconNode.className = `text-left ${c}`;\n else\n this._iconNode.className = `${c}`;\n }\n\n get iconclass() { return this._iconclass; }\n\n _appendElem() {\n this._liNode =document.createElement( 'li' );\n this.container.appendChild( this._liNode );\n\n switch( this._type ) {\n case TEXT_TYPE:\n this._aNode = document.createElement( 'a' );\n this._liNode.appendChild( this._aNode );\n break;\n case BUTTON_TYPE:\n this._aNode = document.createElement( 'a' );\n this._aNode.className = 'button';\n this._liNode.appendChild( this._aNode );\n break;\n }\n this._textNode = document.createTextNode( this._text );\n this._aNode.appendChild( this._textNode );\n this._iconNode = document.createElement( 'i' );\n this._aNode.appendChild( this._iconNode );\n this.iconclass = this._iconclass;\n\n this._aNode.addEventListener( 'click', ()=>{this._clicked();} );\n }\n _clicked() {\n switch( this._action ) {\n case NO_ACTION:\n break;\n case FUNC_ACTION:\n if( typeof this._callback === 'function' )\n this._callback();\n break;\n case URL_ACTION:\n break;\n case DROPDOWN_ACTION:\n // TODO\n break;\n }\n }\n}\n\nexport default class Menubar {\n constructor( container, { subgroup = false, parent = null, panel =false } = {} ) {\n let parentContainer =container || document.body;\n this._subgroup =subgroup;\n this._parent = parent;\n\n if( subgroup ) {\n this.container = parentContainer;\n } else {\n this.container =document.createElement( 'div' );\n this.container.className = \"menubar\";\n parentContainer.appendChild( this.container );\n }\n\n if( !subgroup || subgroup && panel ) {\n this._rootPanel =document.createElement( 'div' );\n this._rootPanel.className = \"panel\";\n this.container.appendChild( this._rootPanel );\n } else {\n this._rootPanel = parent._rootPanel;\n }\n \n this._ulNode = document.createElement( 'ul' );\n this._rootPanel.appendChild( this._ulNode );\n\n this._items = new Array();\n this._groups = new Array();\n }\n\n addGroup() {\n let group = new Menubar( this.container, { subgroup: true, parent: this } );\n this._groups.push( group );\n return group;\n }\n\n addPanel() {\n let group = new Menubar( this.container, { subgroup: true, parent: this, panel: true } );\n this._groups.push( group );\n return group;\n }\n\n addButton( text = '', iconclass = '' ) {\n let item = new Menuitem( { container: this._ulNode, text: text, iconclass: iconclass, type: BUTTON_TYPE } );\n this._items.push( item );\n return item;\n }\n\n addLink( text = '', iconclass = '' ) {\n let item = new Menuitem( { container: this._ulNode, text: text, iconclass: iconclass, type: TEXT_TYPE } );\n this._items.push( item );\n return item;\n }\n\n floatLeft() {\n this._ulNode.className = 'float-left';\n return this;\n }\n \n floatRight() {\n this._ulNode.className = 'float-right';\n return this;\n }\n \n floatCenter() {\n this._ulNode.className = 'float-center';\n return this;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./rfexplore/menubar.js","export default class Texteditor {\n constructor() {\n this._accepted =false;\n this._backdropElem =null;\n this._containerElem =null;\n this._textareaElem =null;\n this._doneFunc =null;\n this._cancelFunc =null;\n }\n\n create( modal =true ) {\n // Create a backdrop if we should block all other elements\n if( modal ) {\n this._backdropElem = document.createElement( 'div' );\n this._backdropElem.className = 'texteditor-backdrop';\n document.body.appendChild( this._backdropElem );\n }\n\n // Set-up the editor\n this._containerElem = document.createElement( 'div' );\n this._containerElem.className = 'texteditor-container';\n document.body.appendChild( this._containerElem );\n\n let wrapper = document.createElement( 'div' );\n wrapper.className = 'wrapper';\n this._containerElem.appendChild( wrapper );\n\n this._textareaElem = document.createElement( 'textarea' );\n wrapper.appendChild( this._textareaElem );\n\n let bttnCancel = document.createElement( 'button' );\n bttnCancel.className = 'cancel';\n bttnCancel.appendChild( document.createTextNode( 'Cancel' ) );\n this._containerElem.appendChild( bttnCancel );\n bttnCancel.addEventListener( 'click', ()=> { this._onCancel(); } );\n\n let bttnDone = document.createElement( 'button' );\n bttnDone.className = 'done';\n bttnDone.appendChild( document.createTextNode( 'Done' ) );\n this._containerElem.appendChild( bttnDone );\n bttnDone.addEventListener( 'click', ()=> { this._onDone(); } );\n\n }\n\n set text( str ) {\n this._textareaElem.value =str;\n }\n\n get text() {\n return this._textareaElem.value;\n }\n\n set onDone( func ) { this._doneFunc = func; }\n get onDone() { return this._doneFunc; }\n\n set onCancel( func ) { this._cancelFunc = func; }\n get onCancel() { return this._cancelFunc; }\n\n get accepted() { return this._accepted; }\n\n remove() {\n if( this._backdropElem )\n document.body.removeChild( this._backdropElem );\n\n document.body.removeChild( this._containerElem );\n }\n\n _onDone() {\n this.remove();\n if( typeof this._doneFunc === 'function' )\n this._doneFunc( this.text );\n }\n\n _onCancel() {\n this.remove();\n if( typeof this._cancelFunc === 'function' ) \n this._cancelFunc();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./rfexplore/texteditor.js","import Automaton from \"./automaton.js\";\n\n/* Given an array containing the digits of a number with a given base,\n * increment this number by one\n */\nvar varbase_incr = function( A, base ) {\n for( let i =A.length-1; i >= 0; i-- ) {\n if( (++A[i]) < base )\n break;\n else\n A[i] =0;\n }\n}\n\nvar varbase_incrall = function( A, base ) {\n for( let i =A.length-1; i >= 0; i-- ) {\n if( (++A[i]) >= base )\n A[i] =0;\n }\n\n}\n\nvar varbase_add = function( A, B, base ) {\n let C = new Array( A.length );\n for( let i =A.length-1; i >= 0; i-- ) {\n C[i] = (A[i] + B[i]) % base;\n }\n return C;\n}\n\nvar varbase_sub = function( A, B, base ) {\n let C = new Array( A.length );\n for( let i =A.length-1; i >= 0; i-- ) {\n C[i] = Math.abs((A[i] - B[i]));\n }\n return C;\n}\n\n/*\n * Provides a second level transition table with support for feature extraction\n */\nexport default class TTable2 {\n constructor( base, mode, rule ) {\n // Generate the level1 ttable\n this.level1 = Automaton.makeTTable( base, mode, rule );\n\n // Size of the level2 ttable is |tt|^2\n this.size = this.level1.length * this.level1.length;\n\n // Buffer to hold the input pattern as we increment it\n let A = new Array( mode*mode );\n A.fill( 0 );\n\n this.entry = new Array( this.size );\n for( let i =0; i < this.size; i++ ) {\n let input =A.slice( 0, A.length );\n let output =new Array( mode );\n for( let j =0; j < mode; j++ ) {\n let n = Automaton.ttIndex( base, mode, A.slice( j*mode, j*mode + mode ) );\n output[j] = this.level1[n];\n }\n this.entry[i] = { input: input, output: output };\n\n varbase_incr( A, base );\n }\n\n this.mode =mode;\n this.base =base;\n this.rule =rule;\n }\n /*\n * Compute the feature vector of this transition table\n */\n computeFeature() {\n // We categorize the level2 transitions based on these semantics\n let invert =0;\n let join =0;\n let select =0;\n let combine =0;\n //let add =0;\n //let substract =0;\n let shift =0;\n let mask =0;\n let other =0;\n\n for( let i =0; i < this.size; i++ ) {\n let input = this.entry[i].input;\n let output = this.entry[i].output;\n //console.log( input + \" -> \" + output );\n/* if( i === 0 || i === this.size-1 ) {\n if( input[0] == output[0] )\n join++;\n else\n invert++;\n }*/\n if( this._isJoin( input, output ) ) {\n join++;\n } \n else if( this._isInvert( input, output ) ) {\n invert++;\n }\n else if( this._isSelect( input, output ) ) {\n select++;\n }\n else if( this._isCombine( input, output ) ) {\n combine++;\n }\n /* else if( this._isAdd( input, output ) ) {\n add++;\n }\n else if( this._isSubstract( input, output ) ) {\n substract++;\n }*/\n else if( this._isShift( input, output ) ) {\n shift++;\n }\n else if( this._isMask( input, output ) ) {\n mask++;\n }\n else {\n // console.log( \"Unclassified: \" + input + \" -> \" + output );\n other++;\n }\n }\n return [ invert, join, select, combine, shift, mask, other ];\n }\n\n /*\n * Compute the Euclidian distance between two feature vectors\n */\n static distance( v1, v2 ) {\n let diff =0;\n for( let i =0; i < v1.length; i++ ) {\n diff += Math.pow( Math.abs( v1[i] - v2[i] ), 2 );\n }\n return Math.sqrt( diff );\n }\n\n /*\n * Find the next nearest neighbor within the same cluster\n * Starts in forward direction (if backwards=false)\n * Resulting next rule has a distance <= maxDist\n */\n findNextNN( backwards =false, maxDist =0 ) {\n let v1 = this.computeFeature();\n let rule = this.rule;\n let maxRules = Automaton.maxRules( this.base, this.mode );\n \n do {\n if( backwards )\n rule--;\n else rule++;\n\n let tt2 = new TTable2( this.base, this.mode, rule );\n let v2 = tt2.computeFeature();\n if( TTable2.distance( v1, v2 ) <= maxDist )\n return rule;\n } while( rule >= 0 && rule < maxRules )\n\n return rule;\n }\n \n /*\n * Test if mn = nmnm = output\n */\n _isInvert( input, output ) {\n // Step 1, compare input parts to themselves\n for( let i =1; i < this.mode; i++ ) {\n if( !this._comp( input, i * this.mode, input, 0, this.mode ) )\n return false;\n }\n // Step 2, compare inverted portion of input to output\n let A = input.slice( 0, this.mode );\n for( let i =1; i < this.base; i++ ) {\n varbase_incrall( A, this.base );\n if( this._comp( A, 0, output, 0, this.mode ) )\n return true;\n }\n\n return false;\n }\n\n /*\n * Test if mn = mnmn = output\n */\n _isJoin( input, output ) {\n for( let i =0; i < this.mode; i++ ) {\n if( !this._comp( input, i * this.mode, output, 0, this.mode ) )\n return false;\n }\n return true;\n }\n\n /*\n * Test if mn = xxmn = output or mn = mnxx = output\n */\n _isSelect( input, output ) {\n for( let i =0; i < this.mode; i++ ) {\n if( this._comp( input, i * this.mode, output, 0, this.mode ) )\n return true;\n }\n return false;\n }\n\n /*\n * Test if mn = mxxn = output or mn = xmnx = output\n */\n _isCombine( input, output ) {\n // This works for mode == 2, a factatorial rescursive version is needed otherwise\n if( this.mode === 2 ) {\n return (( input[0] == output[0] && input[3] == output[1] )\n || ( input[1] == output[1] && input[2] == output[0] ));\n }\n return false;\n }\n\n _isCombineRecursive( input, output, A, n ) {\n // TODO\n }\n\n _isAdd( input, output ) {\n let A = input.slice( 0, this.mode );\n for( let i =1; i < this.mode; i++ ) {\n A = varbase_add( A, input.slice( i*this.mode, i*this.mode+this.mode ), this.base );\n }\n if( this._comp( A, 0, output, 0, this.mode ) )\n return true;\n return false; \n }\n \n _isSubstract( input, output ) {\n let A = input.slice( 0, this.mode );\n for( let i =1; i < this.mode; i++ ) {\n A = varbase_sub( A, input.slice( i*this.mode, i*this.mode+this.mode ), this.base );\n }\n if( this._comp( A, 0, output, 0, this.mode ) )\n return true;\n return false; \n }\n\n /*\n * Test is mn = xmnx = output\n */\n _isShift( input, output ) {\n if( this.mode == 2 ) {\n return ( input[1] == output[0] && input[2] == output[1] );\n }\n return false;\n }\n \n /*\n * Test if mn = mxnx = output or mn = xmxn = output\n */\n _isMask( input, output ) {\n for( let i =0; i < this.mode; i++ ) {\n let match =true;\n for( let j =0; j < this.mode; j++ ) {\n match = match && (input[j*this.mode + i] == output[j]);\n }\n if( match ) return true;\n }\n return false;\n }\n\n /*\n * Compare A[i]..A[i+N-1] to B[j]..B[j+N-1]\n */\n _comp( A, i, B, j, N ) {\n for( let n =0; n < N; n++ ) {\n if( A[i+n] != B[j+n] )\n return false;\n }\n return true;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./rfexplore/ttable.js","var DatGUIPresets = \n{\n \"preset\": \"Default\",\n \"remembered\": {\n \"Default\": {\n \"0\": {\n \"mode\": 2,\n \"base\": 2,\n \"rule\": 6,\n \"folds\": 20,\n \"foldToRight\": false,\n \"inputSize\": 8,\n \"viewmode\": \"circle\",\n \"cluster\": \"none\",\n \"color0\": \"#ff8e10\",\n \"color1\": \"#33ffcc\",\n \"color2\": \"#3c9872\",\n \"color3\": \"#386ebb\",\n \"autoUpdate\": true\n },\n \"1\": {\n \"backgroundColor\": \"#666666\",\n \"animateSpin\": true,\n \"animateDraw\": true,\n \"alwaysClearGeometry\": false,\n \"animateDrawType\": \"rows\"\n }\n },\n \"2.3.11823 Cluster\": {\n \"0\": {\n \"mode\": 2,\n \"base\": 3,\n \"rule\": 11823,\n \"folds\": 79,\n \"foldToRight\": false,\n \"inputSize\": 8,\n \"viewmode\": \"circle\",\n \"cluster\": \"ttable2\",\n \"color0\": \"#ff8e10\",\n \"color1\": \"#33ffcc\",\n \"color2\": \"#3c9872\",\n \"color3\": \"#386ebb\",\n \"autoUpdate\": true\n },\n \"1\": {\n \"backgroundColor\": \"#666666\",\n \"animateSpin\": true,\n \"animateDraw\": true,\n \"alwaysClearGeometry\": false,\n \"animateDrawType\": \"rows\"\n }\n },\n \"2.4.1854570315\": {\n \"0\": {\n \"mode\": 2,\n \"base\": 4,\n \"rule\": 1854570315,\n \"folds\": 200,\n \"foldToRight\": false,\n \"inputSize\": 10,\n \"viewmode\": \"stack\",\n \"cluster\": \"none\",\n \"color0\": \"#ff8e10\",\n \"color1\": \"#33ffcc\",\n \"color2\": \"#3c9872\",\n \"color3\": \"#386ebb\",\n \"autoUpdate\": true\n },\n \"1\": {\n \"backgroundColor\": \"#666666\",\n \"animateSpin\": true,\n \"animateDraw\": false,\n \"alwaysClearGeometry\": false,\n \"animateDrawType\": \"rows\"\n }\n },\n \"2.4.60780582\": {\n \"0\": {\n \"mode\": 2,\n \"base\": 4,\n \"rule\": 60780582,\n \"folds\": 300,\n \"foldToRight\": false,\n \"inputSize\": 10,\n \"viewmode\": \"circle\",\n \"cluster\": \"none\",\n \"color0\": \"#ff8e10\",\n \"color1\": \"#33ffcc\",\n \"color2\": \"#3c9872\",\n \"color3\": \"#386ebb\",\n \"autoUpdate\": true\n },\n \"1\": {\n \"backgroundColor\": \"#666666\",\n \"animateSpin\": true,\n \"animateDraw\": false,\n \"alwaysClearGeometry\": false,\n \"animateDrawType\": \"rows\"\n }\n },\n \"2.3.6785\": {\n \"0\": {\n \"mode\": 2,\n \"base\": 3,\n \"rule\": 6785,\n \"folds\": 157,\n \"foldToRight\": false,\n \"inputSize\": 8,\n \"viewmode\": \"folded\",\n \"cluster\": \"none\",\n \"color0\": \"#ff8e10\",\n \"color1\": \"#33ffcc\",\n \"color2\": \"#3c9872\",\n \"color3\": \"#386ebb\",\n \"autoUpdate\": true\n },\n \"1\": {\n \"backgroundColor\": \"#666666\",\n \"animateSpin\": true,\n \"animateDraw\": false,\n \"alwaysClearGeometry\": false,\n \"animateDrawType\": \"rows\"\n }\n },\n \"2.3.7440\": {\n \"0\": {\n \"mode\": 2,\n \"base\": 3,\n \"rule\": 7440,\n \"folds\": 135,\n \"foldToRight\": false,\n \"inputSize\": 16,\n \"viewmode\": \"folded\",\n \"cluster\": \"none\",\n \"color0\": \"#ff8e10\",\n \"color1\": \"#33ffcc\",\n \"color2\": \"#3c9872\",\n \"color3\": \"#386ebb\",\n \"autoUpdate\": true\n },\n \"1\": {\n \"backgroundColor\": \"#666666\",\n \"animateSpin\": true,\n \"animateDraw\": false,\n \"alwaysClearGeometry\": false,\n \"animateDrawType\": \"rows\"\n }\n }\n },\n \"closed\": false,\n \"folders\": {\n \"Automaton\": {\n \"preset\": \"Default\",\n \"closed\": false,\n \"folders\": {}\n },\n \"Visualisation\": {\n \"preset\": \"Default\",\n \"closed\": false,\n \"folders\": {}\n },\n \"Clustering\": {\n \"preset\": \"Default\",\n \"closed\": false,\n \"folders\": {}\n },\n \"Colors\": {\n \"preset\": \"Default\",\n \"closed\": true,\n \"folders\": {}\n },\n \"Render\": {\n \"preset\": \"Default\",\n \"closed\": false,\n \"folders\": {}\n }\n }\n}\n;\nexport default DatGUIPresets;\n\n\n\n// WEBPACK FOOTER //\n// ./rfexplore/presets.js"],"sourceRoot":""}