{"version":3,"names":["window","templates","_$_","sf","dom","$","__tmplt","_sf_internal","body_map","_replace","path","html","h","this","remove","reinitViews","append","document","body","apply","arguments","prepend","imports","task","Blackprint","loadScope","url","Context","getContext","objLength","Sketch","registerInterface","IFace","Button","File","constructor","node","super","that","dropFile","file","Object","setPrototypeOf","prototype","setFile","space","component","template","Model","scope","iface","data","step","event","i","val","target","value","Number","isNaN","syncOut","min","max","SliderBoxIFace","dragMove","ev","item","onMove","movementX","focusIndex","indexOf","doc","view","on","once","capture","ev2","off","timeStamp","getElements","focus","mouseWheel","Math","sign","deltaY","Input","waitRepaint","on$value","now","afterRepaint","then","el","$el","offsetWidth","offsetHeight","length","attr","notifyEditorDataChanged"],"sources":["nodes/Input/_init.sf","nodes/Input/UI/Button.sf","nodes/Input/UI/File.sf","nodes/Input/UI/SliderBox.panel.sf","nodes/Input/UI/SliderBox.sf","nodes/Input/UI/TextBox.sf"],"sourcesContent":["## js-global\n// This script will run first, and then the other files\n// depends on blackprint.config.js configuration\n\n// Wait until all dependencies ready before running all .sf files\nawait imports.task();\n\n\n// Because .js and .sf is separated\n// we also need to call loadScope just like _init.js\nlet Blackprint = window.Blackprint.loadScope({\n\t// You can find the URL on Blackprint menu -> Modules\n\t// This will also be exported to JSON if this module's nodes is being used\n\turl: import.meta.url,\n});\n\n// Global shared context (wait it to avoid race condition)\nlet Context = await Blackprint.getContext('Input');\nlet {objLength} = Context;","## html\n<div class=\"node event\" style=\"transform: translate({{ x }}px, {{ y }}px)\">\n  <sf-template path=\"Blackprint/nodes/template/header.sf\"></sf-template>\n\n  <div class=\"content\">\n    <div class=\"button\" @click=\"clicked(event)\">\n      <a>Trigger</a>\n    </div>\n\n    <div class=\"right-port\">\n      <sf-template path=\"Blackprint/nodes/template/output-port.sf\"></sf-template>\n    </div>\n  </div>\n\n  <sf-template path=\"Blackprint/nodes/template/other.sf\"></sf-template>\n</div>\n\n## scss-global\nbpic-input-ui-button{\n  .button {\n    display: inline-flex;\n    background: #ffffff1c;\n    height: 30px;\n    box-shadow: 0 0 8px white;\n    width: 100px;\n    border: 2px solid #BFC0C0;\n    margin: 5px 5px 10px 10px;\n    color: #BFC0C0;\n    text-transform: uppercase;\n    text-decoration: none;\n    font-size: 14px;\n    letter-spacing: 1.5px;\n    align-items: center;\n    justify-content: center;\n    overflow: hidden;\n    position: relative;\n    cursor: pointer;\n    a {\n      position: relative;\n    }\n    &:hover {\n      background: #ffffff3c;\n    }\n  }\n}\n\n## js-global\nBlackprint.Sketch.registerInterface('BPIC/Input/UI/Button', Context.IFace.Button);","## html\n<div class=\"node input\" style=\"transform: translate({{ x }}px, {{ y }}px)\">\n  <sf-template path=\"Blackprint/nodes/template/routes.sf\"></sf-template>\n  <sf-template path=\"Blackprint/nodes/template/header.sf\"></sf-template>\n\n  <div class=\"content\">\n  \t<div class=\"file-place\" @click=\"browseFile(event)\" @filedrop=\"dropFile\">\n  \t\t{{ name || 'Drop file here'}}\n  \t</div>\n\n    <div class=\"right-port\">\n      <sf-template path=\"Blackprint/nodes/template/output-port.sf\"></sf-template>\n    </div>\n  </div>\n\n  <sf-template path=\"Blackprint/nodes/template/other.sf\"></sf-template>\n</div>\n\n## scss-global\nbpic-input-ui-file {\n  .file-place{\n    margin: 5px;\n    border: 1px dashed white;\n    width: 120px;\n    max-height: 20px;\n    overflow: hidden;\n    word-break: break-all;\n    display: flex;\n    float: left;\n    margin-right: -20px;\n  }\n  input{\n    opacity: 0;\n    width: 1px;\n    height: 1px;\n  }\n}\n\n## js-global\nBlackprint.Sketch.registerInterface('BPIC/Input/UI/File',\nclass FileIFace extends Context.IFace.File {\n  constructor(node){\n    super(node);\n\n    let that = this;\n    this.dropFile = function(file){\n      file = file[0];\n\n      // Fix for multiple window\n      if(file.constructor !== File)\n        Object.setPrototypeOf(file, File.prototype);\n\n      that.setFile(file);\n    }\n  }\n});","## html\n<bppc-input-ui-sliderbox>\n\t<div sf-each=\"i, val in data\">\n\t\t<div class=\"field\">\n\t\t\t<span class=\"name\">Step ({{ i }}):</span>\n\t\t\t<input @change=\"step(event, i)\" value=\"{{ val.step }}\" placeholder=\"Step value\" type=\"number\">\n\t\t</div>\n\t\t<div class=\"field\">\n\t\t\t<span class=\"name\">Min ({{ i }}):</span>\n\t\t\t<input @change=\"min(event, i)\" value=\"{{ val.min }}\" placeholder=\"Minimum value\" type=\"number\">\n\t\t</div>\n\t\t<div class=\"field\">\n\t\t\t<span class=\"name\">Max ({{ i }}):</span>\n\t\t\t<input @change=\"max(event, i)\" value=\"{{ val.max }}\" placeholder=\"Maximum value\" type=\"number\">\n\t\t</div>\n\t</div>\n</bppc-input-ui-sliderbox>\n\n## scss-global\nbppc-input-ui-sliderbox { }\n\n## js-global\nBlackprint.space.component('bppc-input-ui-sliderbox', {template: #this.path},\nclass extends sf.Model {\n\tconstructor(scope, iface){\n\t\tsuper(scope, iface);\n\n\t\tthis.iface = iface;\n\t\tthis.data = iface.data;\n\t}\n\n\tstep(event, i){\n\t\tlet val = +event.target.value;\n\t\tif(Number.isNaN(val)) return;\n\n\t\tthis.data[i].step = val;\n\t\tthis.iface.node.syncOut('step', {i, value: val});\n\t}\n\n\tmin(event, i){\n\t\tlet val = +event.target.value;\n\t\tif(Number.isNaN(val)) return;\n\n\t\tthis.data[i].min = val;\n\t\tthis.iface.node.syncOut('min', {i, value: val});\n\t}\n\n\tmax(event, i){\n\t\tlet val = +event.target.value;\n\t\tif(Number.isNaN(val)) return;\n\n\t\tthis.data[i].max = val;\n\t\tthis.iface.node.syncOut('max', {i, value: val});\n\t}\n});","## html\n<div class=\"node input\" style=\"transform: translate({{ x }}px, {{ y }}px)\">\n  <sf-template path=\"Blackprint/nodes/template/routes.sf\"></sf-template>\n  <sf-template path=\"Blackprint/nodes/template/header-small.sf\"></sf-template>\n\n  <div class=\"content header-small\">\n    <div class=\"scrollable-number-input\">\n      <div sf-each=\"key, val in data\">\n        <input type=\"number\" class=\"input-no-native\"\n          sf-bind=\"val.value\"\n          step=\"{{val.step}}\" max=\"{{val.max}}\" min=\"{{val.min}}\"\n          @pointerdown.prevent.stop=\"dragMove(event, val)\"\n          @mousewheel.prevent.stop=\"mouseWheel(event, val)\">\n      </div>\n    </div>\n    <div class=\"right-port\" style=\"margin-top:3px\">\n      <sf-template path=\"Blackprint/nodes/template/output-port.sf\"></sf-template>\n    </div>\n  </div>\n\n  <sf-template path=\"Blackprint/nodes/template/other.sf\"></sf-template>\n</div>\n\n## scss-global\n.input-no-native{\n  /* Firefox */\n  -moz-appearance: textfield;\n\n  /* Chrome, Safari, Edge, Opera */\n  &::-webkit-outer-spin-button,\n  &::-webkit-inner-spin-button {\n    -webkit-appearance: none;\n    margin: 0;\n  }\n\n  &:focus{\n      outline: none;\n  }\n}\n\n.scrollable-number-input{\n  display: inline-block;\n  margin: 2px -10px 5px 5px;\n  input{\n    cursor: w-resize;\n    background: #313131;\n    color: white;\n    border: none;\n    text-align: center;\n    border-radius: 10px;\n  }\n}\n\n## js-global\nBlackprint.Sketch.registerInterface('BPIC/Input/UI/SliderBox',\nclass SliderBoxIFace extends Context.IFace.SliderBoxIFace {\n  dragMove(ev, item){\n    this.focusIndex = this.data.indexOf(item);\n\n    function onMove(ev){\n      item.value += item.step * ev.movementX;\n    }\n\n    var that = this;\n    var doc = $(ev.view.document);\n\n    doc.on('pointermove', onMove).once('pointerup', {capture:true}, function(ev2){\n      doc.off('pointermove', onMove);\n\n      if(ev2.timeStamp - ev.timeStamp < 100)\n        $('input', that.data.getElements(item)).focus();\n    });\n  }\n\n  mouseWheel(ev, item){\n    this.focusIndex = this.data.indexOf(item);\n    item.value -= item.step * Math.sign(ev.deltaY);\n  }\n});","## html\n<div class=\"node input\" style=\"transform: translate({{ x }}px, {{ y }}px)\">\n  <sf-template path=\"Blackprint/nodes/template/routes.sf\"></sf-template>\n  <sf-template path=\"Blackprint/nodes/template/header.sf\"></sf-template>\n\n  <div class=\"content\">\n    <textarea sf-bind=\"data.value\"></textarea>\n\n    <div class=\"right-port\">\n      <sf-template path=\"Blackprint/nodes/template/output-port.sf\"></sf-template>\n    </div>\n  </div>\n\n  <sf-template path=\"Blackprint/nodes/template/other.sf\"></sf-template>\n</div>\n\n## scss-global\nbpic-input-ui-textbox{\n\ttextarea{\n\t\twidth: 100px;\n\t}\n}\n\n## js-global\nBlackprint.Sketch.registerInterface('BPIC/Input/UI/TextBox',\nclass InputIFace extends Context.IFace.Input {\n\tconstructor(node){\n\t\tsuper(node);\n\n\t\tlet iface = this;\n\t\tlet waitRepaint = false;\n\n\t\t// Auto scale the width/height of the textarea\n\t\tiface.data.on$value = function(now){\n\t\t\tif(waitRepaint) return;\n\n\t\t\twaitRepaint = true;\n\t\t\t$.afterRepaint().then(function(){\n\t\t\t\twaitRepaint = false;\n\n\t\t\t\t// Scale the input box depend on character length\n\t\t\t\tvar el = iface.$el('textarea');\n\n\t\t\t\t// Skip if textarea was larger than our auto control\n\t\t\t\t// I mean, if user have change the size manually\n\t\t\t\tif(el[0].offsetWidth > 150 || el[0].offsetHeight > 60)\n\t\t\t\t\treturn;\n\n\t\t\t\tif(now.length < 8)\n\t\t\t\t\tel.attr('style', '');\n\t\t\t\telse if(now.length >= 8 && now.length < 14)\n\t\t\t\t\tel.attr('style', 'width:'+(10*now.length)+'px');\n\t\t\t\telse if(now.length >= 14)\n\t\t\t\t\tel.attr('style', 'width:140px;height:50px');\n\n\t\t\t\t// Let editor know if this iface changed and unsaved\n\t\t\t\tnode.notifyEditorDataChanged();\n\t\t\t});\n\t\t}\n\t}\n});"],"mappings":"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","ignoreList":[]}