diff --git a/bundle.js b/bundle.js index 1a0dbc8..064700e 100644 --- a/bundle.js +++ b/bundle.js @@ -1,119503 +1,2 @@ -/******/ (() => { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/dat.gui/src/dat/gui/style.scss": -/*!**********************************************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/dat.gui/src/dat/gui/style.scss ***! - \**********************************************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/cssWithMappingToString.js */ "./node_modules/css-loader/dist/runtime/cssWithMappingToString.js"); -/* harmony import */ var _css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, ".dg {\n /** Clear list styles */\n /* Auto-place container */\n /* Auto-placed GUI's */\n /* Line items that don't contain folders. */\n /** Folder names */\n /** Hides closed items */\n /** Controller row */\n /** Name-half (left) */\n /** Controller-half (right) */\n /** Controller placement */\n /** Shorter number boxes when slider is present. */\n /** Ensure the entire boolean and function row shows a hand */\n /** allow overflow for color selector */\n}\n.dg ul {\n list-style: none;\n margin: 0;\n padding: 0;\n width: 100%;\n clear: both;\n}\n.dg.ac {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 0;\n z-index: 0;\n}\n.dg:not(.ac) .main {\n /** Exclude mains in ac so that we don't hide close button */\n overflow: hidden;\n}\n.dg.main {\n -webkit-transition: opacity 0.1s linear;\n -o-transition: opacity 0.1s linear;\n -moz-transition: opacity 0.1s linear;\n transition: opacity 0.1s linear;\n}\n.dg.main.taller-than-window {\n overflow-y: auto;\n}\n.dg.main.taller-than-window .close-button {\n opacity: 1;\n /* TODO, these are style notes */\n margin-top: -1px;\n border-top: 1px solid #2c2c2c;\n}\n.dg.main ul.closed .close-button {\n opacity: 1 !important;\n}\n.dg.main:hover .close-button,\n.dg.main .close-button.drag {\n opacity: 1;\n}\n.dg.main .close-button {\n /*opacity: 0;*/\n -webkit-transition: opacity 0.1s linear;\n -o-transition: opacity 0.1s linear;\n -moz-transition: opacity 0.1s linear;\n transition: opacity 0.1s linear;\n border: 0;\n line-height: 19px;\n height: 20px;\n /* TODO, these are style notes */\n cursor: pointer;\n text-align: center;\n background-color: #000;\n}\n.dg.main .close-button.close-top {\n position: relative;\n}\n.dg.main .close-button.close-bottom {\n position: absolute;\n}\n.dg.main .close-button:hover {\n background-color: #111;\n}\n.dg.a {\n float: right;\n margin-right: 15px;\n overflow-y: visible;\n}\n.dg.a.has-save > ul.close-top {\n margin-top: 0;\n}\n.dg.a.has-save > ul.close-bottom {\n margin-top: 27px;\n}\n.dg.a.has-save > ul.closed {\n margin-top: 0;\n}\n.dg.a .save-row {\n top: 0;\n z-index: 1002;\n}\n.dg.a .save-row.close-top {\n position: relative;\n}\n.dg.a .save-row.close-bottom {\n position: fixed;\n}\n.dg li {\n -webkit-transition: height 0.1s ease-out;\n -o-transition: height 0.1s ease-out;\n -moz-transition: height 0.1s ease-out;\n transition: height 0.1s ease-out;\n -webkit-transition: overflow 0.1s linear;\n -o-transition: overflow 0.1s linear;\n -moz-transition: overflow 0.1s linear;\n transition: overflow 0.1s linear;\n}\n.dg li:not(.folder) {\n cursor: auto;\n height: 27px;\n line-height: 27px;\n padding: 0 4px 0 5px;\n}\n.dg li.folder {\n padding: 0;\n border-left: 4px solid rgba(0, 0, 0, 0);\n}\n.dg li.title {\n cursor: pointer;\n margin-left: -4px;\n}\n.dg .closed li:not(.title),\n.dg .closed ul li,\n.dg .closed ul li > * {\n height: 0;\n overflow: hidden;\n border: 0;\n}\n.dg .cr {\n clear: both;\n padding-left: 3px;\n height: 27px;\n overflow: hidden;\n}\n.dg .property-name {\n cursor: default;\n float: left;\n clear: left;\n width: 40%;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.dg .c {\n float: left;\n width: 60%;\n position: relative;\n}\n.dg .c input[type=text] {\n border: 0;\n margin-top: 4px;\n padding: 3px;\n width: 100%;\n float: right;\n}\n.dg .has-slider input[type=text] {\n width: 30%;\n /*display: none;*/\n margin-left: 0;\n}\n.dg .slider {\n float: left;\n width: 66%;\n margin-left: -5px;\n margin-right: 0;\n height: 19px;\n margin-top: 4px;\n}\n.dg .slider-fg {\n height: 100%;\n}\n.dg .c input[type=checkbox] {\n margin-top: 7px;\n}\n.dg .c select {\n margin-top: 5px;\n}\n.dg .cr.function,\n.dg .cr.function .property-name,\n.dg .cr.function *,\n.dg .cr.boolean,\n.dg .cr.boolean * {\n cursor: pointer;\n}\n.dg .cr.color {\n overflow: visible;\n}\n.dg .selector {\n display: none;\n position: absolute;\n margin-left: -9px;\n margin-top: 23px;\n z-index: 10;\n}\n.dg .c:hover .selector,\n.dg .selector.drag {\n display: block;\n}\n.dg li.save-row {\n padding: 0;\n}\n.dg li.save-row .button {\n display: inline-block;\n padding: 0px 6px;\n}\n.dg.dialogue {\n background-color: #222;\n width: 460px;\n padding: 15px;\n font-size: 13px;\n line-height: 15px;\n}\n\n/* TODO Separate style and structure */\n#dg-new-constructor {\n padding: 10px;\n color: #222;\n font-family: Monaco, monospace;\n font-size: 10px;\n border: 0;\n resize: none;\n box-shadow: inset 1px 1px 1px #888;\n word-wrap: break-word;\n margin: 12px 0;\n display: block;\n width: 440px;\n overflow-y: scroll;\n height: 100px;\n position: relative;\n}\n\n#dg-local-explain {\n display: none;\n font-size: 11px;\n line-height: 17px;\n border-radius: 3px;\n background-color: #333;\n padding: 8px;\n margin-top: 10px;\n}\n#dg-local-explain code {\n font-size: 10px;\n}\n\n#dat-gui-save-locally {\n display: none;\n}\n\n/** Main type */\n.dg {\n color: #eee;\n font: 11px \"Lucida Grande\", sans-serif;\n text-shadow: 0 -1px 0 #111;\n /** Auto place */\n /* Controller row,
  • */\n /** Controllers */\n}\n.dg.main {\n /** Scrollbar */\n}\n.dg.main::-webkit-scrollbar {\n width: 5px;\n background: #1a1a1a;\n}\n.dg.main::-webkit-scrollbar-corner {\n height: 0;\n display: none;\n}\n.dg.main::-webkit-scrollbar-thumb {\n border-radius: 5px;\n background: #676767;\n}\n.dg li:not(.folder) {\n background: #1a1a1a;\n border-bottom: 1px solid #2c2c2c;\n}\n.dg li.save-row {\n line-height: 25px;\n background: #dad5cb;\n border: 0;\n}\n.dg li.save-row select {\n margin-left: 5px;\n width: 108px;\n}\n.dg li.save-row .button {\n margin-left: 5px;\n margin-top: 1px;\n border-radius: 2px;\n font-size: 9px;\n line-height: 7px;\n padding: 4px 4px 5px 4px;\n background: #c5bdad;\n color: #fff;\n text-shadow: 0 1px 0 #b0a58f;\n box-shadow: 0 -1px 0 #b0a58f;\n cursor: pointer;\n}\n.dg li.save-row .button.gears {\n background: #c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;\n height: 7px;\n width: 8px;\n}\n.dg li.save-row .button:hover {\n background-color: #bab19e;\n box-shadow: 0 -1px 0 #b0a58f;\n}\n.dg li.folder {\n border-bottom: 0;\n}\n.dg li.title {\n padding-left: 16px;\n background: #000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;\n cursor: pointer;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n}\n.dg .closed li.title {\n background-image: url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==);\n}\n.dg .cr.boolean {\n border-left: 3px solid #806787;\n}\n.dg .cr.color {\n border-left: 3px solid;\n}\n.dg .cr.function {\n border-left: 3px solid #e61d5f;\n}\n.dg .cr.number {\n border-left: 3px solid #2FA1D6;\n}\n.dg .cr.number input[type=text] {\n color: #2FA1D6;\n}\n.dg .cr.string {\n border-left: 3px solid #1ed36f;\n}\n.dg .cr.string input[type=text] {\n color: #1ed36f;\n}\n.dg .cr.function:hover, .dg .cr.boolean:hover {\n background: #111;\n}\n.dg .c input[type=text] {\n background: #303030;\n outline: none;\n}\n.dg .c input[type=text]:hover {\n background: #3c3c3c;\n}\n.dg .c input[type=text]:focus {\n background: #494949;\n color: #fff;\n}\n.dg .c .slider {\n background: #303030;\n cursor: ew-resize;\n}\n.dg .c .slider-fg {\n background: #2FA1D6;\n max-width: 100%;\n}\n.dg .c .slider:hover {\n background: #3c3c3c;\n}\n.dg .c .slider:hover .slider-fg {\n background: #44abda;\n}", "",{"version":3,"sources":["webpack://./node_modules/dat.gui/src/dat/gui/_structure.scss","webpack://./node_modules/dat.gui/src/dat/gui/style.scss"],"names":[],"mappings":"AAKA;EAEE,uBAAA;EASA,yBAAA;EAsEA,sBAAA;EAyCA,2CAAA;EAcA,kBAAA;EAMA,wBAAA;EASA,oBAAA;EAQA,sBAAA;EAUA,6BAAA;EAOA,0BAAA;EASA,kDAAA;EA4BA,6DAAA;EASA,uCAAA;ACrNF;ADNE;EACE,gBAAA;EACA,SAAA;EACA,UAAA;EACA,WAAA;EACA,WAAA;ACQJ;ADJE;EACE,eAAA;EACA,MAAA;EACA,OAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;ACMJ;ADHE;EACE,4DAAA;EACA,gBAAA;ACKJ;ADFE;ECfA,uCAAA;EACA,kCAAA;EACA,oCAAA;EACA,+BAAA;AAoBF;ADJI;EAEE,gBAAA;ACKN;ADHM;EAEE,UAAA;EAEA,gCAAA;EACA,gBAAA;EACA,6BAAA;ACGR;ADGI;EACE,qBAAA;ACDN;ADII;;EAEE,UAAA;ACFN;ADKI;EACE,cAAA;EC7CJ,uCAAA;EACA,kCAAA;EACA,oCAAA;EACA,+BAAA;ED4CI,SAAA;EAEA,iBAAA;EACA,YA/DU;EAiEV,gCAAA;EACA,eAAA;EACA,kBAAA;EACA,sBAAA;ACFN;ADGM;EACE,kBAAA;ACDR;ADGM;EACE,kBAAA;ACDR;ADGM;EACE,sBAAA;ACDR;ADSE;EAEE,YAAA;EACA,kBAAA;EACA,mBAAA;ACRJ;ADYM;EACE,aAAA;ACVR;ADYM;EACE,gBAlGK;ACwFb;ADaM;EACE,aAAA;ACXR;ADeI;EACE,MAAA;EACA,aAAA;ACbN;ADeM;EACE,kBAAA;ACbR;ADeM;EACE,eAAA;ACbR;ADoBE;EC1GA,wCAAA;EACA,mCAAA;EACA,qCAAA;EACA,gCAAA;EAHA,wCAAA;EACA,mCAAA;EACA,qCAAA;EACA,gCAAA;AA6FF;ADgBE;EACE,YAAA;EACA,YAjIS;EAkIT,iBAlIS;EAmIT,oBAAA;ACdJ;ADiBE;EACE,UAAA;EACA,uCAAA;ACfJ;ADoBE;EACE,eAAA;EACA,iBAAA;AClBJ;ADsBE;;;EAGE,SAAA;EACA,gBAAA;EACA,SAAA;ACpBJ;ADwBE;EACE,WAAA;EACA,iBAAA;EACA,YA/JS;EAgKT,gBAAA;ACtBJ;AD0BE;EACE,eAAA;EACA,WAAA;EACA,WAAA;EACA,UAAA;EACA,gBAAA;EACA,uBAAA;ACxBJ;AD4BE;EACE,WAAA;EACA,UAAA;EACA,kBAAA;AC1BJ;AD8BE;EACE,SAAA;EACA,eAAA;EACA,YAAA;EACA,WAAA;EACA,YAAA;AC5BJ;ADgCE;EACE,UAAA;EACA,iBAAA;EACA,cAAA;AC9BJ;ADiCE;EACE,WAAA;EACA,UAAA;EACA,iBAAA;EACA,eAAA;EACA,YAAA;EACA,eAAA;AC/BJ;ADkCE;EACE,YAAA;AChCJ;ADmCE;EACE,eAAA;ACjCJ;ADoCE;EACE,eAAA;AClCJ;ADsCE;;;;;EAKE,eAAA;ACpCJ;ADwCE;EACE,iBAAA;ACtCJ;ADyCE;EACE,aAAA;EACA,kBAAA;EACA,iBAAA;EACA,gBAAA;EACA,WAAA;ACvCJ;AD0CE;;EAEE,cAAA;ACxCJ;AD2CE;EAEE,UAAA;AC1CJ;AD4CI;EACE,qBAAA;EACA,gBAAA;AC1CN;AD+CE;EACE,sBAAA;EACA,YAAA;EACA,aAAA;EACA,eAAA;EACA,iBAAA;AC7CJ;;ADkDA,sCAAA;AACA;EACE,aAAA;EACA,WAAA;EACA,8BAAA;EACA,eAAA;EACA,SAAA;EACA,YAAA;EACA,kCAAA;EACA,qBAAA;EACA,cAAA;EACA,cAAA;EACA,YAAA;EACA,kBAAA;EACA,aAAA;EACA,kBAAA;AC/CF;;ADkDA;EACE,aAAA;EACA,eAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,YAAA;EACA,gBAAA;AC/CF;ADgDE;EACE,eAAA;AC9CJ;;ADkDA;EACE,aAAA;AC/CF;;AAzMA,eAAA;AACA;EAEE,WAAA;EACA,sCAAA;EACA,0BAAA;EAEA,gBAAA;EAwEA,yBAAA;EAoCA,iBAAA;AAgGF;AA3ME;EAEE,eAAA;AA4MJ;AA3MI;EACE,UAAA;EACA,mBA/Da;AA4QnB;AA3MI;EACE,SAAA;EACA,aAAA;AA6MN;AA3MI;EACE,kBAAA;EACA,mBAAA;AA6MN;AAtMI;EACE,mBA/Ea;EAgFb,gCAAA;AAwMN;AArMI;EAEE,iBAAA;EACA,mBA5EW;EA6EX,SAAA;AAsMN;AApMM;EACE,gBAAA;EACA,YAAA;AAsMR;AAlMM;EAlEJ,gBAAA;EACA,eAAA;EACA,kBAAA;EACA,cAAA;EACA,gBAAA;EACA,wBAAA;EACA,mBAxBa;EAyBb,WAAA;EACA,4BAAA;EACA,4BAAA;EACA,eAAA;AAuQF;AA7MQ;EAtDN,yhBAAA;EACA,WAAA;EACA,UAAA;AAsQF;AA5MQ;EACE,yBAAA;EACA,4BAAA;AA8MV;AAvMI;EACE,gBAAA;AAyMN;AAtMI;EACE,kBAAA;EACA,2IAAA;EACA,eAAA;EACA,iDAAA;AAwMN;AAnME;EACE,yHAAA;AAqMJ;AA/LI;EACE,8BAAA;AAiMN;AA9LI;EACE,sBAAA;AAgMN;AA7LI;EACE,8BAAA;AA+LN;AA5LI;EACE,8BAAA;AA8LN;AA7LM;EACE,cA7IO;AA4Uf;AA3LI;EACE,8BAAA;AA6LN;AA5LM;EACE,cAlJO;AAgVf;AA1LI;EAEE,gBAAA;AA2LN;AAnLI;EAEE,mBA7JQ;EA8JR,aAAA;AAoLN;AAnLM;EACE,mBAAA;AAqLR;AAnLM;EACE,mBAAA;EACA,WAAA;AAqLR;AAhLI;EACE,mBA1KQ;EA2KR,iBAAA;AAkLN;AA/KI;EACE,mBAtLS;EAuLT,eAAA;AAiLN;AA9KI;EACE,mBAAA;AAgLN;AA/KM;EACE,mBAAA;AAiLR","sourcesContent":["$nest-margin: 4px;\n$row-height: 27px;\n\n$button-height: 20px;\n\n.dg {\n\n /** Clear list styles */\n ul {\n list-style: none;\n margin: 0;\n padding: 0;\n width: 100%;\n clear: both;\n }\n\n /* Auto-place container */\n &.ac {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 0;\n z-index: 0;\n }\n\n &:not(.ac) .main {\n /** Exclude mains in ac so that we don't hide close button */\n overflow: hidden;\n }\n\n &.main {\n\n @include transition(opacity, 0.1s, linear);\n\n &.taller-than-window {\n\n overflow-y: auto;\n\n .close-button {\n\n opacity: 1;\n\n /* TODO, these are style notes */\n margin-top: -1px;\n border-top: 1px solid $border-color;\n\n }\n\n }\n\n ul.closed .close-button {\n opacity: 1 !important;\n }\n\n &:hover .close-button,\n .close-button.drag {\n opacity: 1;\n }\n\n .close-button {\n /*opacity: 0;*/\n @include transition(opacity, 0.1s, linear);\n border: 0;\n\n line-height: $button-height - 1;\n height: $button-height;\n\n /* TODO, these are style notes */\n cursor: pointer;\n text-align: center;\n background-color: #000;\n &.close-top {\n position: relative;\n }\n &.close-bottom {\n position: absolute;\n }\n &:hover {\n background-color: #111;\n }\n\n }\n\n }\n\n /* Auto-placed GUI's */\n &.a {\n\n float: right;\n margin-right: 15px;\n overflow-y:visible;\n\n &.has-save > ul {\n\n &.close-top {\n margin-top: 0;\n }\n &.close-bottom {\n margin-top: $row-height;\n }\n\n &.closed {\n margin-top: 0;\n }\n }\n\n .save-row {\n top: 0;\n z-index: 1002;\n\n &.close-top {\n position: relative;\n }\n &.close-bottom {\n position: fixed;\n }\n\n }\n\n }\n\n li {\n @include transition(height, 0.1s, ease-out);\n @include transition(overflow, 0.1s, linear);\n }\n\n /* Line items that don't contain folders. */\n li:not(.folder) {\n cursor: auto;\n height: $row-height;\n line-height: $row-height;\n padding: 0 4px 0 5px;\n }\n\n li.folder {\n padding: 0;\n border-left: $nest-margin solid rgba(0, 0, 0, 0);\n\n }\n\n /** Folder names */\n li.title {\n cursor: pointer;\n margin-left: -$nest-margin;\n }\n\n /** Hides closed items */\n .closed li:not(.title),\n .closed ul li,\n .closed ul li > * {\n height: 0;\n overflow: hidden;\n border: 0;\n }\n\n /** Controller row */\n .cr {\n clear: both;\n padding-left: 3px;\n height: $row-height;\n overflow: hidden;\n }\n\n /** Name-half (left) */\n .property-name {\n cursor: default;\n float: left;\n clear: left;\n width: 40%;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n /** Controller-half (right) */\n .c {\n float: left;\n width: 60%;\n position: relative;\n }\n\n /** Controller placement */\n .c input[type=text] {\n border: 0;\n margin-top: 4px;\n padding: 3px;\n width: 100%;\n float: right;\n }\n\n /** Shorter number boxes when slider is present. */\n .has-slider input[type=text] {\n width: 30%;\n /*display: none;*/\n margin-left: 0;\n }\n\n .slider {\n float: left;\n width: 66%;\n margin-left: -5px;\n margin-right: 0;\n height: 19px;\n margin-top: 4px;\n }\n\n .slider-fg {\n height: 100%;\n }\n\n .c input[type=checkbox] {\n margin-top: 7px;\n }\n\n .c select {\n margin-top: 5px;\n }\n\n /** Ensure the entire boolean and function row shows a hand */\n .cr.function,\n .cr.function .property-name, /* Don't know why I need to be this explicit */\n .cr.function *,\n .cr.boolean,\n .cr.boolean * {\n cursor: pointer;\n }\n\n /** allow overflow for color selector */\n .cr.color {\n overflow: visible;\n }\n\n .selector {\n display: none;\n position: absolute;\n margin-left: -9px;\n margin-top: 23px;\n z-index: 10;\n }\n\n .c:hover .selector,\n .selector.drag {\n display: block;\n }\n\n li.save-row {\n\n padding: 0;\n\n .button {\n display: inline-block;\n padding: 0px 6px;\n }\n\n }\n\n &.dialogue {\n background-color: #222;\n width: 460px;\n padding: 15px;\n font-size: 13px;\n line-height: 15px;\n }\n\n}\n\n/* TODO Separate style and structure */\n#dg-new-constructor {\n padding: 10px;\n color: #222;\n font-family: Monaco, monospace;\n font-size: 10px;\n border: 0;\n resize: none;\n box-shadow: inset 1px 1px 1px #888;\n word-wrap: break-word;\n margin: 12px 0;\n display: block;\n width: 440px;\n overflow-y: scroll;\n height: 100px;\n position: relative;\n}\n\n#dg-local-explain {\n display: none;\n font-size: 11px;\n line-height: 17px;\n border-radius: 3px;\n background-color: #333;\n padding: 8px;\n margin-top: 10px;\n code {\n font-size: 10px;\n }\n}\n\n#dat-gui-save-locally {\n display: none;\n}\n","$background-color: #1a1a1a;\n\n$hover-lighten: 5%;\n$border-lighten: 7%;\n$active-lighten: 10%;\n\n$number-color: #2FA1D6;\n$boolean-color: #806787;\n$string-color: #1ed36f;\n$function-color: #e61d5f;\n$save-row-color: #dad5cb;\n$button-color: darken($save-row-color, 10%);\n$border-color: lighten($background-color, $border-lighten);\n$input-color: lighten($background-color, 8.5%);\n\n@mixin transition($prop, $time, $curve) {\n -webkit-transition: $prop $time $curve;\n -o-transition: $prop $time $curve;\n -moz-transition: $prop $time $curve;\n transition: $prop $time $curve;\n}\n\n@mixin gradient($a, $b) {\n background: -webkit-gradient(linear, 0% 0%, 0% 100%, from($a), to($b));\n background: -o-gradient(linear, 0% 0%, 0% 100%, from($a), to($b));\n background: -moz-gradient(linear, 0% 0%, 0% 100%, from($a), to($b));\n}\n\n@mixin button() {\n margin-left: 5px;\n margin-top: 1px;\n border-radius: 2px;\n font-size: 9px;\n line-height: 7px;\n padding: 4px 4px 5px 4px;\n background: $button-color;\n color: #fff;\n text-shadow: 0 1px 0 darken($button-color, 10%);\n box-shadow: 0 -1px 0 darken($button-color, 10%);\n cursor: pointer;\n}\n\n@mixin gears() {\n background: $button-color url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;\n height: 7px;\n width: 8px;\n}\n\n@import \"structure\";\n\n/** Main type */\n.dg {\n\n color: #eee;\n font: 11px 'Lucida Grande', sans-serif;\n text-shadow: 0 -1px 0 #111;\n\n /** Auto place */\n &.main {\n\n /** Scrollbar */\n &::-webkit-scrollbar {\n width: 5px;\n background: $background-color;\n }\n &::-webkit-scrollbar-corner {\n height: 0;\n display: none;\n }\n &::-webkit-scrollbar-thumb {\n border-radius: 5px;\n background: lighten($background-color, 30%);\n }\n\n }\n\n li {\n\n &:not(.folder) {\n background: $background-color;\n border-bottom: 1px solid $border-color;\n }\n\n &.save-row {\n\n line-height: 25px;\n background: $save-row-color;\n border: 0;\n\n select {\n margin-left: 5px;\n width: 108px;\n\n }\n\n .button {\n\n &.gears {\n @include gears;\n }\n\n @include button;\n\n &:hover {\n background-color: darken($button-color, 5%);\n box-shadow: 0 -1px 0 darken($button-color, 10%);\n }\n\n }\n\n }\n\n &.folder {\n border-bottom: 0;\n }\n\n &.title {\n padding-left: 16px;\n background: #000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;\n cursor: pointer;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n }\n\n }\n\n .closed li.title {\n background-image: url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==);\n }\n\n /* Controller row,
  • */\n .cr {\n\n &.boolean {\n border-left: 3px solid $boolean-color;\n }\n\n &.color {\n border-left: 3px solid;\n }\n\n &.function {\n border-left: 3px solid $function-color;\n }\n\n &.number {\n border-left: 3px solid $number-color;\n input[type=text] {\n color: $number-color;\n }\n }\n\n &.string {\n border-left: 3px solid $string-color;\n input[type=text] {\n color: $string-color;\n }\n }\n\n &.function:hover,\n &.boolean:hover {\n background: #111;\n }\n\n }\n\n /** Controllers */\n .c {\n\n input[type=text] {\n\n background: $input-color;\n outline: none;\n &:hover {\n background: lighten($input-color, $hover-lighten);\n }\n &:focus {\n background: lighten($input-color, $active-lighten);\n color: #fff;\n }\n\n }\n\n .slider {\n background: $input-color;\n cursor: ew-resize;\n }\n\n .slider-fg {\n background: $number-color;\n max-width: 100%;\n }\n\n .slider:hover {\n background: lighten($input-color, $hover-lighten);\n .slider-fg {\n background: lighten($number-color, $hover-lighten);\n }\n }\n\n }\n\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/runtime/api.js": -/*!*****************************************************!*\ - !*** ./node_modules/css-loader/dist/runtime/api.js ***! - \*****************************************************/ -/***/ ((module) => { - - - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ -// css base code, injected by the css-loader -// eslint-disable-next-line func-names -module.exports = function (cssWithMappingToString) { - var list = []; // return the list of modules as css string - - list.toString = function toString() { - return this.map(function (item) { - var content = cssWithMappingToString(item); - - if (item[2]) { - return "@media ".concat(item[2], " {").concat(content, "}"); - } - - return content; - }).join(""); - }; // import a list of modules into the list - // eslint-disable-next-line func-names - - - list.i = function (modules, mediaQuery, dedupe) { - if (typeof modules === "string") { - // eslint-disable-next-line no-param-reassign - modules = [[null, modules, ""]]; - } - - var alreadyImportedModules = {}; - - if (dedupe) { - for (var i = 0; i < this.length; i++) { - // eslint-disable-next-line prefer-destructuring - var id = this[i][0]; - - if (id != null) { - alreadyImportedModules[id] = true; - } - } - } - - for (var _i = 0; _i < modules.length; _i++) { - var item = [].concat(modules[_i]); - - if (dedupe && alreadyImportedModules[item[0]]) { - // eslint-disable-next-line no-continue - continue; - } - - if (mediaQuery) { - if (!item[2]) { - item[2] = mediaQuery; - } else { - item[2] = "".concat(mediaQuery, " and ").concat(item[2]); - } - } - - list.push(item); - } - }; - - return list; -}; - -/***/ }), - -/***/ "./node_modules/css-loader/dist/runtime/cssWithMappingToString.js": -/*!************************************************************************!*\ - !*** ./node_modules/css-loader/dist/runtime/cssWithMappingToString.js ***! - \************************************************************************/ -/***/ ((module) => { - - - -function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } - -function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - -function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - -function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - -module.exports = function cssWithMappingToString(item) { - var _item = _slicedToArray(item, 4), - content = _item[1], - cssMapping = _item[3]; - - if (typeof btoa === "function") { - // eslint-disable-next-line no-undef - var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))); - var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); - var sourceMapping = "/*# ".concat(data, " */"); - var sourceURLs = cssMapping.sources.map(function (source) { - return "/*# sourceURL=".concat(cssMapping.sourceRoot || "").concat(source, " */"); - }); - return [content].concat(sourceURLs).concat([sourceMapping]).join("\n"); - } - - return [content].join("\n"); -}; - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/color/Color.js": -/*!*****************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/color/Color.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _interpret__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interpret */ "./node_modules/dat.gui/src/dat/color/interpret.js"); -/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math */ "./node_modules/dat.gui/src/dat/color/math.js"); -/* harmony import */ var _toString__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./toString */ "./node_modules/dat.gui/src/dat/color/toString.js"); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - - - -class Color { - constructor() { - this.__state = _interpret__WEBPACK_IMPORTED_MODULE_0__.default.apply(this, arguments); - - if (this.__state === false) { - throw new Error('Failed to interpret color arguments'); - } - - this.__state.a = this.__state.a || 1; - } - - toString() { - return (0,_toString__WEBPACK_IMPORTED_MODULE_2__.default)(this); - } - - toHexString() { - return (0,_toString__WEBPACK_IMPORTED_MODULE_2__.default)(this, true); - } - - toOriginal() { - return this.__state.conversion.write(this); - } -} - -function defineRGBComponent(target, component, componentHexIndex) { - Object.defineProperty(target, component, { - get: function() { - if (this.__state.space === 'RGB') { - return this.__state[component]; - } - - Color.recalculateRGB(this, component, componentHexIndex); - - return this.__state[component]; - }, - - set: function(v) { - if (this.__state.space !== 'RGB') { - Color.recalculateRGB(this, component, componentHexIndex); - this.__state.space = 'RGB'; - } - - this.__state[component] = v; - } - }); -} - -function defineHSVComponent(target, component) { - Object.defineProperty(target, component, { - get: function() { - if (this.__state.space === 'HSV') { - return this.__state[component]; - } - - Color.recalculateHSV(this); - - return this.__state[component]; - }, - - set: function(v) { - if (this.__state.space !== 'HSV') { - Color.recalculateHSV(this); - this.__state.space = 'HSV'; - } - - this.__state[component] = v; - } - }); -} - - -Color.recalculateRGB = function(color, component, componentHexIndex) { - if (color.__state.space === 'HEX') { - color.__state[component] = _math__WEBPACK_IMPORTED_MODULE_1__.default.component_from_hex(color.__state.hex, componentHexIndex); - } else if (color.__state.space === 'HSV') { - _utils_common__WEBPACK_IMPORTED_MODULE_3__.default.extend(color.__state, _math__WEBPACK_IMPORTED_MODULE_1__.default.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v)); - } else { - throw new Error('Corrupted color state'); - } -}; - -Color.recalculateHSV = function(color) { - const result = _math__WEBPACK_IMPORTED_MODULE_1__.default.rgb_to_hsv(color.r, color.g, color.b); - - _utils_common__WEBPACK_IMPORTED_MODULE_3__.default.extend(color.__state, - { - s: result.s, - v: result.v - } - ); - - if (!_utils_common__WEBPACK_IMPORTED_MODULE_3__.default.isNaN(result.h)) { - color.__state.h = result.h; - } else if (_utils_common__WEBPACK_IMPORTED_MODULE_3__.default.isUndefined(color.__state.h)) { - color.__state.h = 0; - } -}; - -Color.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a']; - -defineRGBComponent(Color.prototype, 'r', 2); -defineRGBComponent(Color.prototype, 'g', 1); -defineRGBComponent(Color.prototype, 'b', 0); - -defineHSVComponent(Color.prototype, 'h'); -defineHSVComponent(Color.prototype, 's'); -defineHSVComponent(Color.prototype, 'v'); - -Object.defineProperty(Color.prototype, 'a', { - get: function() { - return this.__state.a; - }, - - set: function(v) { - this.__state.a = v; - } -}); - -Object.defineProperty(Color.prototype, 'hex', { - get: function() { - if (this.__state.space !== 'HEX') { - this.__state.hex = _math__WEBPACK_IMPORTED_MODULE_1__.default.rgb_to_hex(this.r, this.g, this.b); - this.__state.space = 'HEX'; - } - - return this.__state.hex; - }, - - set: function(v) { - this.__state.space = 'HEX'; - this.__state.hex = v; - } -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Color); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/color/interpret.js": -/*!*********************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/color/interpret.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _toString__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toString */ "./node_modules/dat.gui/src/dat/color/toString.js"); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - -const INTERPRETATIONS = [ - // Strings - { - litmus: _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isString, - conversions: { - THREE_CHAR_HEX: { - read: function(original) { - const test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i); - if (test === null) { - return false; - } - - return { - space: 'HEX', - hex: parseInt( - '0x' + - test[1].toString() + test[1].toString() + - test[2].toString() + test[2].toString() + - test[3].toString() + test[3].toString(), 0) - }; - }, - - write: _toString__WEBPACK_IMPORTED_MODULE_0__.default - }, - - SIX_CHAR_HEX: { - read: function(original) { - const test = original.match(/^#([A-F0-9]{6})$/i); - if (test === null) { - return false; - } - - return { - space: 'HEX', - hex: parseInt('0x' + test[1].toString(), 0) - }; - }, - - write: _toString__WEBPACK_IMPORTED_MODULE_0__.default - }, - - CSS_RGB: { - read: function(original) { - const test = original.match(/^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); - if (test === null) { - return false; - } - - return { - space: 'RGB', - r: parseFloat(test[1]), - g: parseFloat(test[2]), - b: parseFloat(test[3]) - }; - }, - - write: _toString__WEBPACK_IMPORTED_MODULE_0__.default - }, - - CSS_RGBA: { - read: function(original) { - const test = original.match(/^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); - if (test === null) { - return false; - } - - return { - space: 'RGB', - r: parseFloat(test[1]), - g: parseFloat(test[2]), - b: parseFloat(test[3]), - a: parseFloat(test[4]) - }; - }, - - write: _toString__WEBPACK_IMPORTED_MODULE_0__.default - } - } - }, - - // Numbers - { - litmus: _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber, - - conversions: { - - HEX: { - read: function(original) { - return { - space: 'HEX', - hex: original, - conversionName: 'HEX' - }; - }, - - write: function(color) { - return color.hex; - } - } - - } - - }, - - // Arrays - { - litmus: _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isArray, - conversions: { - RGB_ARRAY: { - read: function(original) { - if (original.length !== 3) { - return false; - } - - return { - space: 'RGB', - r: original[0], - g: original[1], - b: original[2] - }; - }, - - write: function(color) { - return [color.r, color.g, color.b]; - } - }, - - RGBA_ARRAY: { - read: function(original) { - if (original.length !== 4) return false; - return { - space: 'RGB', - r: original[0], - g: original[1], - b: original[2], - a: original[3] - }; - }, - - write: function(color) { - return [color.r, color.g, color.b, color.a]; - } - } - } - }, - - // Objects - { - litmus: _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isObject, - conversions: { - - RGBA_OBJ: { - read: function(original) { - if (_utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.r) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.g) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.b) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.a)) { - return { - space: 'RGB', - r: original.r, - g: original.g, - b: original.b, - a: original.a - }; - } - return false; - }, - - write: function(color) { - return { - r: color.r, - g: color.g, - b: color.b, - a: color.a - }; - } - }, - - RGB_OBJ: { - read: function(original) { - if (_utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.r) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.g) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.b)) { - return { - space: 'RGB', - r: original.r, - g: original.g, - b: original.b - }; - } - return false; - }, - - write: function(color) { - return { - r: color.r, - g: color.g, - b: color.b - }; - } - }, - - HSVA_OBJ: { - read: function(original) { - if (_utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.h) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.s) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.v) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.a)) { - return { - space: 'HSV', - h: original.h, - s: original.s, - v: original.v, - a: original.a - }; - } - return false; - }, - - write: function(color) { - return { - h: color.h, - s: color.s, - v: color.v, - a: color.a - }; - } - }, - - HSV_OBJ: { - read: function(original) { - if (_utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.h) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.s) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.v)) { - return { - space: 'HSV', - h: original.h, - s: original.s, - v: original.v - }; - } - return false; - }, - - write: function(color) { - return { - h: color.h, - s: color.s, - v: color.v - }; - } - } - } - } -]; - -let result; -let toReturn; - -const interpret = function() { - toReturn = false; - - const original = arguments.length > 1 ? _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.toArray(arguments) : arguments[0]; - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.each(INTERPRETATIONS, function(family) { - if (family.litmus(original)) { - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.each(family.conversions, function(conversion, conversionName) { - result = conversion.read(original); - - if (toReturn === false && result !== false) { - toReturn = result; - result.conversionName = conversionName; - result.conversion = conversion; - return _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.BREAK; - } - }); - - return _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.BREAK; - } - }); - - return toReturn; -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (interpret); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/color/math.js": -/*!****************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/color/math.js ***! - \****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - -let tmpComponent; - -const ColorMath = { - hsv_to_rgb: function(h, s, v) { - const hi = Math.floor(h / 60) % 6; - - const f = h / 60 - Math.floor(h / 60); - const p = v * (1.0 - s); - const q = v * (1.0 - (f * s)); - const t = v * (1.0 - ((1.0 - f) * s)); - - const c = [ - [v, t, p], - [q, v, p], - [p, v, t], - [p, q, v], - [t, p, v], - [v, p, q] - ][hi]; - - return { - r: c[0] * 255, - g: c[1] * 255, - b: c[2] * 255 - }; - }, - - rgb_to_hsv: function(r, g, b) { - const min = Math.min(r, g, b); - const max = Math.max(r, g, b); - const delta = max - min; - let h; - let s; - - if (max !== 0) { - s = delta / max; - } else { - return { - h: NaN, - s: 0, - v: 0 - }; - } - - if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else { - h = 4 + (r - g) / delta; - } - h /= 6; - if (h < 0) { - h += 1; - } - - return { - h: h * 360, - s: s, - v: max / 255 - }; - }, - - rgb_to_hex: function(r, g, b) { - let hex = this.hex_with_component(0, 2, r); - hex = this.hex_with_component(hex, 1, g); - hex = this.hex_with_component(hex, 0, b); - return hex; - }, - - component_from_hex: function(hex, componentIndex) { - return (hex >> (componentIndex * 8)) & 0xFF; - }, - - hex_with_component: function(hex, componentIndex, value) { - return value << (tmpComponent = componentIndex * 8) | (hex & ~(0xFF << tmpComponent)); - } -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ColorMath); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/color/toString.js": -/*!********************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/color/toString.js ***! - \********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(color, forceCSSHex) { - const colorFormat = color.__state.conversionName.toString(); - - const r = Math.round(color.r); - const g = Math.round(color.g); - const b = Math.round(color.b); - const a = color.a; - const h = Math.round(color.h); - const s = color.s.toFixed(1); - const v = color.v.toFixed(1); - - if (forceCSSHex || (colorFormat === 'THREE_CHAR_HEX') || (colorFormat === 'SIX_CHAR_HEX')) { - let str = color.hex.toString(16); - while (str.length < 6) { - str = '0' + str; - } - return '#' + str; - } else if (colorFormat === 'CSS_RGB') { - return 'rgb(' + r + ',' + g + ',' + b + ')'; - } else if (colorFormat === 'CSS_RGBA') { - return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; - } else if (colorFormat === 'HEX') { - return '0x' + color.hex.toString(16); - } else if (colorFormat === 'RGB_ARRAY') { - return '[' + r + ',' + g + ',' + b + ']'; - } else if (colorFormat === 'RGBA_ARRAY') { - return '[' + r + ',' + g + ',' + b + ',' + a + ']'; - } else if (colorFormat === 'RGB_OBJ') { - return '{r:' + r + ',g:' + g + ',b:' + b + '}'; - } else if (colorFormat === 'RGBA_OBJ') { - return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}'; - } else if (colorFormat === 'HSV_OBJ') { - return '{h:' + h + ',s:' + s + ',v:' + v + '}'; - } else if (colorFormat === 'HSVA_OBJ') { - return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}'; - } - - return 'unknown format'; -} - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/BooleanController.js": -/*!***********************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/BooleanController.js ***! - \***********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _Controller__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Controller */ "./node_modules/dat.gui/src/dat/controllers/Controller.js"); -/* harmony import */ var _dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom/dom */ "./node_modules/dat.gui/src/dat/dom/dom.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - -/** - * @class Provides a checkbox input to alter the boolean property of an object. - * - * @extends dat.controllers.Controller - * - * @param {Object} object The object to be manipulated - * @param {string} property The name of the property to be manipulated - */ -class BooleanController extends _Controller__WEBPACK_IMPORTED_MODULE_0__.default { - constructor(object, property) { - super(object, property); - - const _this = this; - this.__prev = this.getValue(); - - this.__checkbox = document.createElement('input'); - this.__checkbox.setAttribute('type', 'checkbox'); - - function onChange() { - _this.setValue(!_this.__prev); - } - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__checkbox, 'change', onChange, false); - - this.domElement.appendChild(this.__checkbox); - - // Match original value - this.updateDisplay(); - } - - setValue(v) { - const toReturn = super.setValue(v); - if (this.__onFinishChange) { - this.__onFinishChange.call(this, this.getValue()); - } - this.__prev = this.getValue(); - return toReturn; - } - - updateDisplay() { - if (this.getValue() === true) { - this.__checkbox.setAttribute('checked', 'checked'); - this.__checkbox.checked = true; - this.__prev = true; - } else { - this.__checkbox.checked = false; - this.__prev = false; - } - - return super.updateDisplay(); - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BooleanController); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/ColorController.js": -/*!*********************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/ColorController.js ***! - \*********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _Controller__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Controller */ "./node_modules/dat.gui/src/dat/controllers/Controller.js"); -/* harmony import */ var _dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom/dom */ "./node_modules/dat.gui/src/dat/dom/dom.js"); -/* harmony import */ var _color_Color__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../color/Color */ "./node_modules/dat.gui/src/dat/color/Color.js"); -/* harmony import */ var _color_interpret__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../color/interpret */ "./node_modules/dat.gui/src/dat/color/interpret.js"); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - - - - -/** - * @class Represents a given property of an object that is a color. - * @param {Object} object - * @param {string} property - */ -class ColorController extends _Controller__WEBPACK_IMPORTED_MODULE_0__.default { - constructor(object, property) { - super(object, property); - - this.__color = new _color_Color__WEBPACK_IMPORTED_MODULE_2__.default(this.getValue()); - this.__temp = new _color_Color__WEBPACK_IMPORTED_MODULE_2__.default(0); - - const _this = this; - - this.domElement = document.createElement('div'); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.makeSelectable(this.domElement, false); - - this.__selector = document.createElement('div'); - this.__selector.className = 'selector'; - - this.__saturation_field = document.createElement('div'); - this.__saturation_field.className = 'saturation-field'; - - this.__field_knob = document.createElement('div'); - this.__field_knob.className = 'field-knob'; - this.__field_knob_border = '2px solid '; - - this.__hue_knob = document.createElement('div'); - this.__hue_knob.className = 'hue-knob'; - - this.__hue_field = document.createElement('div'); - this.__hue_field.className = 'hue-field'; - - this.__input = document.createElement('input'); - this.__input.type = 'text'; - this.__input_textShadow = '0 1px 1px '; - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'keydown', function(e) { - if (e.keyCode === 13) { // on enter - onBlur.call(this); - } - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'blur', onBlur); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__selector, 'mousedown', function(/* e */) { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.addClass(this, 'drag') - .bind(window, 'mouseup', function(/* e */) { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.removeClass(_this.__selector, 'drag'); - }); - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__selector, 'touchstart', function(/* e */) { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.addClass(this, 'drag') - .bind(window, 'touchend', function(/* e */) { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.removeClass(_this.__selector, 'drag'); - }); - }); - - const valueField = document.createElement('div'); - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__selector.style, { - width: '122px', - height: '102px', - padding: '3px', - backgroundColor: '#222', - boxShadow: '0px 1px 3px rgba(0,0,0,0.3)' - }); - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__field_knob.style, { - position: 'absolute', - width: '12px', - height: '12px', - border: this.__field_knob_border + (this.__color.v < 0.5 ? '#fff' : '#000'), - boxShadow: '0px 1px 3px rgba(0,0,0,0.5)', - borderRadius: '12px', - zIndex: 1 - }); - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__hue_knob.style, { - position: 'absolute', - width: '15px', - height: '2px', - borderRight: '4px solid #fff', - zIndex: 1 - }); - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__saturation_field.style, { - width: '100px', - height: '100px', - border: '1px solid #555', - marginRight: '3px', - display: 'inline-block', - cursor: 'pointer' - }); - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(valueField.style, { - width: '100%', - height: '100%', - background: 'none' - }); - - linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000'); - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__hue_field.style, { - width: '15px', - height: '100px', - border: '1px solid #555', - cursor: 'ns-resize', - position: 'absolute', - top: '3px', - right: '3px' - }); - - hueGradient(this.__hue_field); - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__input.style, { - outline: 'none', -// width: '120px', - textAlign: 'center', -// padding: '4px', -// marginBottom: '6px', - color: '#fff', - border: 0, - fontWeight: 'bold', - textShadow: this.__input_textShadow + 'rgba(0,0,0,0.7)' - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__saturation_field, 'mousedown', fieldDown); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__saturation_field, 'touchstart', fieldDown); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__field_knob, 'mousedown', fieldDown); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__field_knob, 'touchstart', fieldDown); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__hue_field, 'mousedown', fieldDownH); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__hue_field, 'touchstart', fieldDownH); - - function fieldDown(e) { - setSV(e); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'mousemove', setSV); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'touchmove', setSV); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'mouseup', fieldUpSV); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'touchend', fieldUpSV); - } - - function fieldDownH(e) { - setH(e); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'mousemove', setH); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'touchmove', setH); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'mouseup', fieldUpH); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'touchend', fieldUpH); - } - - function fieldUpSV() { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'mousemove', setSV); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'touchmove', setSV); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'mouseup', fieldUpSV); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'touchend', fieldUpSV); - onFinish(); - } - - function fieldUpH() { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'mousemove', setH); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'touchmove', setH); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'mouseup', fieldUpH); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'touchend', fieldUpH); - onFinish(); - } - - function onBlur() { - const i = (0,_color_interpret__WEBPACK_IMPORTED_MODULE_3__.default)(this.value); - if (i !== false) { - _this.__color.__state = i; - _this.setValue(_this.__color.toOriginal()); - } else { - this.value = _this.__color.toString(); - } - } - - function onFinish() { - if (_this.__onFinishChange) { - _this.__onFinishChange.call(_this, _this.__color.toOriginal()); - } - } - - this.__saturation_field.appendChild(valueField); - this.__selector.appendChild(this.__field_knob); - this.__selector.appendChild(this.__saturation_field); - this.__selector.appendChild(this.__hue_field); - this.__hue_field.appendChild(this.__hue_knob); - - this.domElement.appendChild(this.__input); - this.domElement.appendChild(this.__selector); - - this.updateDisplay(); - - function setSV(e) { - if (e.type.indexOf('touch') === -1) { e.preventDefault(); } - - const fieldRect = _this.__saturation_field.getBoundingClientRect(); - const { clientX, clientY } = (e.touches && e.touches[0]) || e; - let s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left); - let v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top); - - if (v > 1) { - v = 1; - } else if (v < 0) { - v = 0; - } - - if (s > 1) { - s = 1; - } else if (s < 0) { - s = 0; - } - - _this.__color.v = v; - _this.__color.s = s; - - _this.setValue(_this.__color.toOriginal()); - - - return false; - } - - function setH(e) { - if (e.type.indexOf('touch') === -1) { e.preventDefault(); } - - const fieldRect = _this.__hue_field.getBoundingClientRect(); - const { clientY } = (e.touches && e.touches[0]) || e; - let h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top); - - if (h > 1) { - h = 1; - } else if (h < 0) { - h = 0; - } - - _this.__color.h = h * 360; - - _this.setValue(_this.__color.toOriginal()); - - return false; - } - } - - updateDisplay() { - const i = (0,_color_interpret__WEBPACK_IMPORTED_MODULE_3__.default)(this.getValue()); - - if (i !== false) { - let mismatch = false; - - // Check for mismatch on the interpreted value. - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.each(_color_Color__WEBPACK_IMPORTED_MODULE_2__.default.COMPONENTS, function(component) { - if (!_utils_common__WEBPACK_IMPORTED_MODULE_4__.default.isUndefined(i[component]) && !_utils_common__WEBPACK_IMPORTED_MODULE_4__.default.isUndefined(this.__color.__state[component]) && - i[component] !== this.__color.__state[component]) { - mismatch = true; - return {}; // break - } - }, this); - - // If nothing diverges, we keep our previous values - // for statefulness, otherwise we recalculate fresh - if (mismatch) { - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__color.__state, i); - } - } - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__temp.__state, this.__color.__state); - - this.__temp.a = 1; - - const flip = (this.__color.v < 0.5 || this.__color.s > 0.5) ? 255 : 0; - const _flip = 255 - flip; - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__field_knob.style, { - marginLeft: 100 * this.__color.s - 7 + 'px', - marginTop: 100 * (1 - this.__color.v) - 7 + 'px', - backgroundColor: this.__temp.toHexString(), - border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')' - }); - - this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px'; - - this.__temp.s = 1; - this.__temp.v = 1; - - linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString()); - - this.__input.value = this.__color.toString(); - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__input.style, { - backgroundColor: this.__color.toHexString(), - color: 'rgb(' + flip + ',' + flip + ',' + flip + ')', - textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)' - }); - } -} - -const vendors = ['-moz-', '-o-', '-webkit-', '-ms-', '']; - -function linearGradient(elem, x, a, b) { - elem.style.background = ''; - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.each(vendors, function(vendor) { - elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); '; - }); -} - -function hueGradient(elem) { - elem.style.background = ''; - elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);'; - elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; - elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; - elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; - elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ColorController); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/Controller.js": -/*!****************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/Controller.js ***! - \****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - -/** - * @class An "abstract" class that represents a given property of an object. - * - * @param {Object} object The object to be manipulated - * @param {string} property The name of the property to be manipulated - */ -class Controller { - constructor(object, property) { - this.initialValue = object[property]; - - /** - * Those who extend this class will put their DOM elements in here. - * @type {DOMElement} - */ - this.domElement = document.createElement('div'); - - /** - * The object to manipulate - * @type {Object} - */ - this.object = object; - - /** - * The name of the property to manipulate - * @type {String} - */ - this.property = property; - - /** - * The function to be called on change. - * @type {Function} - * @ignore - */ - this.__onChange = undefined; - - /** - * The function to be called on finishing change. - * @type {Function} - * @ignore - */ - this.__onFinishChange = undefined; - } - - /** - * Specify that a function fire every time someone changes the value with - * this Controller. - * - * @param {Function} fnc This function will be called whenever the value - * is modified via this Controller. - * @returns {Controller} this - */ - onChange(fnc) { - this.__onChange = fnc; - return this; - } - - /** - * Specify that a function fire every time someone "finishes" changing - * the value wih this Controller. Useful for values that change - * incrementally like numbers or strings. - * - * @param {Function} fnc This function will be called whenever - * someone "finishes" changing the value via this Controller. - * @returns {Controller} this - */ - onFinishChange(fnc) { - this.__onFinishChange = fnc; - return this; - } - - /** - * Change the value of object[property] - * - * @param {Object} newValue The new value of object[property] - */ - setValue(newValue) { - this.object[this.property] = newValue; - if (this.__onChange) { - this.__onChange.call(this, newValue); - } - - this.updateDisplay(); - return this; - } - - /** - * Gets the value of object[property] - * - * @returns {Object} The current value of object[property] - */ - getValue() { - return this.object[this.property]; - } - - /** - * Refreshes the visual display of a Controller in order to keep sync - * with the object's current value. - * @returns {Controller} this - */ - updateDisplay() { - return this; - } - - /** - * @returns {Boolean} true if the value has deviated from initialValue - */ - isModified() { - return this.initialValue !== this.getValue(); - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Controller); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/ControllerFactory.js": -/*!***********************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/ControllerFactory.js ***! - \***********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _OptionController__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./OptionController */ "./node_modules/dat.gui/src/dat/controllers/OptionController.js"); -/* harmony import */ var _NumberControllerBox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./NumberControllerBox */ "./node_modules/dat.gui/src/dat/controllers/NumberControllerBox.js"); -/* harmony import */ var _NumberControllerSlider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./NumberControllerSlider */ "./node_modules/dat.gui/src/dat/controllers/NumberControllerSlider.js"); -/* harmony import */ var _StringController__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./StringController */ "./node_modules/dat.gui/src/dat/controllers/StringController.js"); -/* harmony import */ var _FunctionController__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./FunctionController */ "./node_modules/dat.gui/src/dat/controllers/FunctionController.js"); -/* harmony import */ var _BooleanController__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./BooleanController */ "./node_modules/dat.gui/src/dat/controllers/BooleanController.js"); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - - - - - - -const ControllerFactory = function(object, property) { - const initialValue = object[property]; - - // Providing options? - if (_utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isArray(arguments[2]) || _utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isObject(arguments[2])) { - return new _OptionController__WEBPACK_IMPORTED_MODULE_0__.default(object, property, arguments[2]); - } - - // Providing a map? - if (_utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isNumber(initialValue)) { - // Has min and max? (slider) - if (_utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isNumber(arguments[2]) && _utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isNumber(arguments[3])) { - // has step? - if (_utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isNumber(arguments[4])) { - return new _NumberControllerSlider__WEBPACK_IMPORTED_MODULE_2__.default(object, property, - arguments[2], arguments[3], arguments[4]); - } - - return new _NumberControllerSlider__WEBPACK_IMPORTED_MODULE_2__.default(object, property, arguments[2], arguments[3]); - } - - // number box - if (_utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isNumber(arguments[4])) { // has step - return new _NumberControllerBox__WEBPACK_IMPORTED_MODULE_1__.default(object, property, - { min: arguments[2], max: arguments[3], step: arguments[4] }); - } - return new _NumberControllerBox__WEBPACK_IMPORTED_MODULE_1__.default(object, property, { min: arguments[2], max: arguments[3] }); - } - - if (_utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isString(initialValue)) { - return new _StringController__WEBPACK_IMPORTED_MODULE_3__.default(object, property); - } - - if (_utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isFunction(initialValue)) { - return new _FunctionController__WEBPACK_IMPORTED_MODULE_4__.default(object, property, ''); - } - - if (_utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isBoolean(initialValue)) { - return new _BooleanController__WEBPACK_IMPORTED_MODULE_5__.default(object, property); - } - - return null; -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ControllerFactory); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/FunctionController.js": -/*!************************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/FunctionController.js ***! - \************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _Controller__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Controller */ "./node_modules/dat.gui/src/dat/controllers/Controller.js"); -/* harmony import */ var _dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom/dom */ "./node_modules/dat.gui/src/dat/dom/dom.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - -/** - * @class Provides a GUI interface to fire a specified method, a property of an object. - * - * @extends dat.controllers.Controller - * - * @param {Object} object The object to be manipulated - * @param {string} property The name of the property to be manipulated - */ -class FunctionController extends _Controller__WEBPACK_IMPORTED_MODULE_0__.default { - constructor(object, property, text) { - super(object, property); - - const _this = this; - - this.__button = document.createElement('div'); - this.__button.innerHTML = text === undefined ? 'Fire' : text; - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__button, 'click', function(e) { - e.preventDefault(); - _this.fire(); - return false; - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.addClass(this.__button, 'button'); - - this.domElement.appendChild(this.__button); - } - - fire() { - if (this.__onChange) { - this.__onChange.call(this); - } - this.getValue().call(this.object); - if (this.__onFinishChange) { - this.__onFinishChange.call(this, this.getValue()); - } - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FunctionController); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/NumberController.js": -/*!**********************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/NumberController.js ***! - \**********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _Controller__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Controller */ "./node_modules/dat.gui/src/dat/controllers/Controller.js"); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - -function numDecimals(x) { - const _x = x.toString(); - if (_x.indexOf('.') > -1) { - return _x.length - _x.indexOf('.') - 1; - } - - return 0; -} - -/** - * @class Represents a given property of an object that is a number. - * - * @extends dat.controllers.Controller - * - * @param {Object} object The object to be manipulated - * @param {string} property The name of the property to be manipulated - * @param {Object} [params] Optional parameters - * @param {Number} [params.min] Minimum allowed value - * @param {Number} [params.max] Maximum allowed value - * @param {Number} [params.step] Increment by which to change value - */ -class NumberController extends _Controller__WEBPACK_IMPORTED_MODULE_0__.default { - constructor(object, property, params) { - super(object, property); - - const _params = params || {}; - - this.__min = _params.min; - this.__max = _params.max; - this.__step = _params.step; - - if (_utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isUndefined(this.__step)) { - if (this.initialValue === 0) { - this.__impliedStep = 1; // What are we, psychics? - } else { - // Hey Doug, check this out. - this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(this.initialValue)) / Math.LN10)) / 10; - } - } else { - this.__impliedStep = this.__step; - } - - this.__precision = numDecimals(this.__impliedStep); - } - - setValue(v) { - let _v = v; - - if (this.__min !== undefined && _v < this.__min) { - _v = this.__min; - } else if (this.__max !== undefined && _v > this.__max) { - _v = this.__max; - } - - if (this.__step !== undefined && _v % this.__step !== 0) { - _v = Math.round(_v / this.__step) * this.__step; - } - - return super.setValue(_v); - } - - /** - * Specify a minimum value for object[property]. - * - * @param {Number} minValue The minimum value for - * object[property] - * @returns {dat.controllers.NumberController} this - */ - min(minValue) { - this.__min = minValue; - return this; - } - - /** - * Specify a maximum value for object[property]. - * - * @param {Number} maxValue The maximum value for - * object[property] - * @returns {dat.controllers.NumberController} this - */ - max(maxValue) { - this.__max = maxValue; - return this; - } - - /** - * Specify a step value that dat.controllers.NumberController - * increments by. - * - * @param {Number} stepValue The step value for - * dat.controllers.NumberController - * @default if minimum and maximum specified increment is 1% of the - * difference otherwise stepValue is 1 - * @returns {dat.controllers.NumberController} this - */ - step(stepValue) { - this.__step = stepValue; - this.__impliedStep = stepValue; - this.__precision = numDecimals(stepValue); - return this; - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NumberController); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/NumberControllerBox.js": -/*!*************************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/NumberControllerBox.js ***! - \*************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _NumberController__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./NumberController */ "./node_modules/dat.gui/src/dat/controllers/NumberController.js"); -/* harmony import */ var _dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom/dom */ "./node_modules/dat.gui/src/dat/dom/dom.js"); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - - -function roundToDecimal(value, decimals) { - const tenTo = Math.pow(10, decimals); - return Math.round(value * tenTo) / tenTo; -} - -/** - * @class Represents a given property of an object that is a number and - * provides an input element with which to manipulate it. - * - * @extends dat.controllers.Controller - * @extends dat.controllers.NumberController - * - * @param {Object} object The object to be manipulated - * @param {string} property The name of the property to be manipulated - * @param {Object} [params] Optional parameters - * @param {Number} [params.min] Minimum allowed value - * @param {Number} [params.max] Maximum allowed value - * @param {Number} [params.step] Increment by which to change value - */ -class NumberControllerBox extends _NumberController__WEBPACK_IMPORTED_MODULE_0__.default { - constructor(object, property, params) { - super(object, property, params); - - this.__truncationSuspended = false; - - const _this = this; - - /** - * {Number} Previous mouse y position - * @ignore - */ - let prevY; - - function onChange() { - const attempted = parseFloat(_this.__input.value); - if (!_utils_common__WEBPACK_IMPORTED_MODULE_2__.default.isNaN(attempted)) { - _this.setValue(attempted); - } - } - - function onFinish() { - if (_this.__onFinishChange) { - _this.__onFinishChange.call(_this, _this.getValue()); - } - } - - function onBlur() { - onFinish(); - } - - function onMouseDrag(e) { - const diff = prevY - e.clientY; - _this.setValue(_this.getValue() + diff * _this.__impliedStep); - - prevY = e.clientY; - } - - function onMouseUp() { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'mousemove', onMouseDrag); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'mouseup', onMouseUp); - onFinish(); - } - - function onMouseDown(e) { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'mousemove', onMouseDrag); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'mouseup', onMouseUp); - prevY = e.clientY; - } - - this.__input = document.createElement('input'); - this.__input.setAttribute('type', 'text'); - - // Makes it so manually specified values are not truncated. - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'change', onChange); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'blur', onBlur); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'mousedown', onMouseDown); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'keydown', function(e) { - // When pressing enter, you can be as precise as you want. - if (e.keyCode === 13) { - _this.__truncationSuspended = true; - this.blur(); - _this.__truncationSuspended = false; - onFinish(); - } - }); - - this.updateDisplay(); - - this.domElement.appendChild(this.__input); - } - - updateDisplay() { - this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision); - return super.updateDisplay(); - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NumberControllerBox); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/NumberControllerSlider.js": -/*!****************************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/NumberControllerSlider.js ***! - \****************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _NumberController__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./NumberController */ "./node_modules/dat.gui/src/dat/controllers/NumberController.js"); -/* harmony import */ var _dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom/dom */ "./node_modules/dat.gui/src/dat/dom/dom.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - -function map(v, i1, i2, o1, o2) { - return o1 + (o2 - o1) * ((v - i1) / (i2 - i1)); -} - -/** - * @class Represents a given property of an object that is a number, contains - * a minimum and maximum, and provides a slider element with which to - * manipulate it. It should be noted that the slider element is made up of - * <div> tags, not the html5 - * <slider> element. - * - * @extends dat.controllers.Controller - * @extends dat.controllers.NumberController - * - * @param {Object} object The object to be manipulated - * @param {string} property The name of the property to be manipulated - * @param {Number} minValue Minimum allowed value - * @param {Number} maxValue Maximum allowed value - * @param {Number} stepValue Increment by which to change value - */ -class NumberControllerSlider extends _NumberController__WEBPACK_IMPORTED_MODULE_0__.default { - constructor(object, property, min, max, step) { - super(object, property, { min: min, max: max, step: step }); - - const _this = this; - - this.__background = document.createElement('div'); - this.__foreground = document.createElement('div'); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__background, 'mousedown', onMouseDown); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__background, 'touchstart', onTouchStart); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.addClass(this.__background, 'slider'); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.addClass(this.__foreground, 'slider-fg'); - - function onMouseDown(e) { - document.activeElement.blur(); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'mousemove', onMouseDrag); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'mouseup', onMouseUp); - - onMouseDrag(e); - } - - function onMouseDrag(e) { - e.preventDefault(); - - const bgRect = _this.__background.getBoundingClientRect(); - - _this.setValue( - map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max) - ); - - return false; - } - - function onMouseUp() { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'mousemove', onMouseDrag); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'mouseup', onMouseUp); - if (_this.__onFinishChange) { - _this.__onFinishChange.call(_this, _this.getValue()); - } - } - - function onTouchStart(e) { - if (e.touches.length !== 1) { return; } - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'touchmove', onTouchMove); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'touchend', onTouchEnd); - onTouchMove(e); - } - - function onTouchMove(e) { - const clientX = e.touches[0].clientX; - const bgRect = _this.__background.getBoundingClientRect(); - - _this.setValue( - map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max) - ); - } - - function onTouchEnd() { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'touchmove', onTouchMove); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'touchend', onTouchEnd); - if (_this.__onFinishChange) { - _this.__onFinishChange.call(_this, _this.getValue()); - } - } - - this.updateDisplay(); - - this.__background.appendChild(this.__foreground); - this.domElement.appendChild(this.__background); - } - - updateDisplay() { - const pct = (this.getValue() - this.__min) / (this.__max - this.__min); - this.__foreground.style.width = pct * 100 + '%'; - return super.updateDisplay(); - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NumberControllerSlider); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/OptionController.js": -/*!**********************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/OptionController.js ***! - \**********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _Controller__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Controller */ "./node_modules/dat.gui/src/dat/controllers/Controller.js"); -/* harmony import */ var _dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom/dom */ "./node_modules/dat.gui/src/dat/dom/dom.js"); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - - -/** - * @class Provides a select input to alter the property of an object, using a - * list of accepted values. - * - * @extends dat.controllers.Controller - * - * @param {Object} object The object to be manipulated - * @param {string} property The name of the property to be manipulated - * @param {Object|string[]} options A map of labels to acceptable values, or - * a list of acceptable string values. - */ -class OptionController extends _Controller__WEBPACK_IMPORTED_MODULE_0__.default { - constructor(object, property, opts) { - super(object, property); - - let options = opts; - - const _this = this; - - /** - * The drop down menu - * @ignore - */ - this.__select = document.createElement('select'); - - if (_utils_common__WEBPACK_IMPORTED_MODULE_2__.default.isArray(options)) { - const map = {}; - _utils_common__WEBPACK_IMPORTED_MODULE_2__.default.each(options, function(element) { - map[element] = element; - }); - options = map; - } - - _utils_common__WEBPACK_IMPORTED_MODULE_2__.default.each(options, function(value, key) { - const opt = document.createElement('option'); - opt.innerHTML = key; - opt.setAttribute('value', value); - _this.__select.appendChild(opt); - }); - - // Acknowledge original value - this.updateDisplay(); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__select, 'change', function() { - const desiredValue = this.options[this.selectedIndex].value; - _this.setValue(desiredValue); - }); - - this.domElement.appendChild(this.__select); - } - - setValue(v) { - const toReturn = super.setValue(v); - - if (this.__onFinishChange) { - this.__onFinishChange.call(this, this.getValue()); - } - return toReturn; - } - - updateDisplay() { - if (_dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.isActive(this.__select)) return this; // prevent number from updating if user is trying to manually update - this.__select.value = this.getValue(); - return super.updateDisplay(); - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (OptionController); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/StringController.js": -/*!**********************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/StringController.js ***! - \**********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _Controller__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Controller */ "./node_modules/dat.gui/src/dat/controllers/Controller.js"); -/* harmony import */ var _dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom/dom */ "./node_modules/dat.gui/src/dat/dom/dom.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - -/** - * @class Provides a text input to alter the string property of an object. - * - * @extends dat.controllers.Controller - * - * @param {Object} object The object to be manipulated - * @param {string} property The name of the property to be manipulated - */ -class StringController extends _Controller__WEBPACK_IMPORTED_MODULE_0__.default { - constructor(object, property) { - super(object, property); - - const _this = this; - - function onChange() { - _this.setValue(_this.__input.value); - } - - function onBlur() { - if (_this.__onFinishChange) { - _this.__onFinishChange.call(_this, _this.getValue()); - } - } - - this.__input = document.createElement('input'); - this.__input.setAttribute('type', 'text'); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'keyup', onChange); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'change', onChange); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'blur', onBlur); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'keydown', function(e) { - if (e.keyCode === 13) { - this.blur(); - } - }); - - this.updateDisplay(); - - this.domElement.appendChild(this.__input); - } - - updateDisplay() { - // Stops the caret from moving on account of: - // keyup -> setValue -> updateDisplay - if (!_dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.isActive(this.__input)) { - this.__input.value = this.getValue(); - } - return super.updateDisplay(); - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (StringController); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/dom/CenteredDiv.js": -/*!*********************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/dom/CenteredDiv.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _dom_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom/dom */ "./node_modules/dat.gui/src/dat/dom/dom.js"); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - -class CenteredDiv { - constructor() { - this.backgroundElement = document.createElement('div'); - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.extend(this.backgroundElement.style, { - backgroundColor: 'rgba(0,0,0,0.8)', - top: 0, - left: 0, - display: 'none', - zIndex: '1000', - opacity: 0, - WebkitTransition: 'opacity 0.2s linear', - transition: 'opacity 0.2s linear' - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.makeFullscreen(this.backgroundElement); - this.backgroundElement.style.position = 'fixed'; - - this.domElement = document.createElement('div'); - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.extend(this.domElement.style, { - position: 'fixed', - display: 'none', - zIndex: '1001', - opacity: 0, - WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear', - transition: 'transform 0.2s ease-out, opacity 0.2s linear' - }); - - - document.body.appendChild(this.backgroundElement); - document.body.appendChild(this.domElement); - - const _this = this; - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.bind(this.backgroundElement, 'click', function() { - _this.hide(); - }); - } - - show() { - const _this = this; - - this.backgroundElement.style.display = 'block'; - - this.domElement.style.display = 'block'; - this.domElement.style.opacity = 0; -// this.domElement.style.top = '52%'; - this.domElement.style.webkitTransform = 'scale(1.1)'; - - this.layout(); - - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.defer(function() { - _this.backgroundElement.style.opacity = 1; - _this.domElement.style.opacity = 1; - _this.domElement.style.webkitTransform = 'scale(1)'; - }); - } - - /** - * Hide centered div - */ - hide() { - const _this = this; - - const hide = function() { - _this.domElement.style.display = 'none'; - _this.backgroundElement.style.display = 'none'; - - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.unbind(_this.domElement, 'webkitTransitionEnd', hide); - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.unbind(_this.domElement, 'transitionend', hide); - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.unbind(_this.domElement, 'oTransitionEnd', hide); - }; - - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.bind(this.domElement, 'webkitTransitionEnd', hide); - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.bind(this.domElement, 'transitionend', hide); - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.bind(this.domElement, 'oTransitionEnd', hide); - - this.backgroundElement.style.opacity = 0; -// this.domElement.style.top = '48%'; - this.domElement.style.opacity = 0; - this.domElement.style.webkitTransform = 'scale(1.1)'; - } - - layout() { - this.domElement.style.left = window.innerWidth / 2 - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.getWidth(this.domElement) / 2 + 'px'; - this.domElement.style.top = window.innerHeight / 2 - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.getHeight(this.domElement) / 2 + 'px'; - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CenteredDiv); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/dom/dom.js": -/*!*************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/dom/dom.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - -const EVENT_MAP = { - HTMLEvents: ['change'], - MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'], - KeyboardEvents: ['keydown'] -}; - -const EVENT_MAP_INV = {}; -_utils_common__WEBPACK_IMPORTED_MODULE_0__.default.each(EVENT_MAP, function(v, k) { - _utils_common__WEBPACK_IMPORTED_MODULE_0__.default.each(v, function(e) { - EVENT_MAP_INV[e] = k; - }); -}); - -const CSS_VALUE_PIXELS = /(\d+(\.\d+)?)px/; - -function cssValueToPixels(val) { - if (val === '0' || _utils_common__WEBPACK_IMPORTED_MODULE_0__.default.isUndefined(val)) { - return 0; - } - - const match = val.match(CSS_VALUE_PIXELS); - - if (!_utils_common__WEBPACK_IMPORTED_MODULE_0__.default.isNull(match)) { - return parseFloat(match[1]); - } - - // TODO ...ems? %? - - return 0; -} - -/** - * @namespace - * @member dat.dom - */ -const dom = { - - /** - * - * @param elem - * @param selectable - */ - makeSelectable: function(elem, selectable) { - if (elem === undefined || elem.style === undefined) return; - - elem.onselectstart = selectable ? function() { - return false; - } : function() { - }; - - elem.style.MozUserSelect = selectable ? 'auto' : 'none'; - elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none'; - elem.unselectable = selectable ? 'on' : 'off'; - }, - - /** - * - * @param elem - * @param horizontal - * @param vert - */ - makeFullscreen: function(elem, hor, vert) { - let vertical = vert; - let horizontal = hor; - - if (_utils_common__WEBPACK_IMPORTED_MODULE_0__.default.isUndefined(horizontal)) { - horizontal = true; - } - - if (_utils_common__WEBPACK_IMPORTED_MODULE_0__.default.isUndefined(vertical)) { - vertical = true; - } - - elem.style.position = 'absolute'; - - if (horizontal) { - elem.style.left = 0; - elem.style.right = 0; - } - if (vertical) { - elem.style.top = 0; - elem.style.bottom = 0; - } - }, - - /** - * - * @param elem - * @param eventType - * @param params - */ - fakeEvent: function(elem, eventType, pars, aux) { - const params = pars || {}; - const className = EVENT_MAP_INV[eventType]; - if (!className) { - throw new Error('Event type ' + eventType + ' not supported.'); - } - const evt = document.createEvent(className); - switch (className) { - case 'MouseEvents': - { - const clientX = params.x || params.clientX || 0; - const clientY = params.y || params.clientY || 0; - evt.initMouseEvent(eventType, params.bubbles || false, - params.cancelable || true, window, params.clickCount || 1, - 0, // screen X - 0, // screen Y - clientX, // client X - clientY, // client Y - false, false, false, false, 0, null); - break; - } - case 'KeyboardEvents': - { - const init = evt.initKeyboardEvent || evt.initKeyEvent; // webkit || moz - _utils_common__WEBPACK_IMPORTED_MODULE_0__.default.defaults(params, { - cancelable: true, - ctrlKey: false, - altKey: false, - shiftKey: false, - metaKey: false, - keyCode: undefined, - charCode: undefined - }); - init(eventType, params.bubbles || false, - params.cancelable, window, - params.ctrlKey, params.altKey, - params.shiftKey, params.metaKey, - params.keyCode, params.charCode); - break; - } - default: - { - evt.initEvent(eventType, params.bubbles || false, params.cancelable || true); - break; - } - } - _utils_common__WEBPACK_IMPORTED_MODULE_0__.default.defaults(evt, aux); - elem.dispatchEvent(evt); - }, - - /** - * - * @param elem - * @param event - * @param func - * @param bool - */ - bind: function(elem, event, func, newBool) { - const bool = newBool || false; - if (elem.addEventListener) { - elem.addEventListener(event, func, bool); - } else if (elem.attachEvent) { - elem.attachEvent('on' + event, func); - } - return dom; - }, - - /** - * - * @param elem - * @param event - * @param func - * @param bool - */ - unbind: function(elem, event, func, newBool) { - const bool = newBool || false; - if (elem.removeEventListener) { - elem.removeEventListener(event, func, bool); - } else if (elem.detachEvent) { - elem.detachEvent('on' + event, func); - } - return dom; - }, - - /** - * - * @param elem - * @param className - */ - addClass: function(elem, className) { - if (elem.className === undefined) { - elem.className = className; - } else if (elem.className !== className) { - const classes = elem.className.split(/ +/); - if (classes.indexOf(className) === -1) { - classes.push(className); - elem.className = classes.join(' ').replace(/^\s+/, '').replace(/\s+$/, ''); - } - } - return dom; - }, - - /** - * - * @param elem - * @param className - */ - removeClass: function(elem, className) { - if (className) { - if (elem.className === className) { - elem.removeAttribute('class'); - } else { - const classes = elem.className.split(/ +/); - const index = classes.indexOf(className); - if (index !== -1) { - classes.splice(index, 1); - elem.className = classes.join(' '); - } - } - } else { - elem.className = undefined; - } - return dom; - }, - - hasClass: function(elem, className) { - return new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)').test(elem.className) || false; - }, - - /** - * - * @param elem - */ - getWidth: function(elem) { - const style = getComputedStyle(elem); - - return cssValueToPixels(style['border-left-width']) + - cssValueToPixels(style['border-right-width']) + - cssValueToPixels(style['padding-left']) + - cssValueToPixels(style['padding-right']) + - cssValueToPixels(style.width); - }, - - /** - * - * @param elem - */ - getHeight: function(elem) { - const style = getComputedStyle(elem); - - return cssValueToPixels(style['border-top-width']) + - cssValueToPixels(style['border-bottom-width']) + - cssValueToPixels(style['padding-top']) + - cssValueToPixels(style['padding-bottom']) + - cssValueToPixels(style.height); - }, - - /** - * - * @param el - */ - getOffset: function(el) { - let elem = el; - const offset = { left: 0, top: 0 }; - if (elem.offsetParent) { - do { - offset.left += elem.offsetLeft; - offset.top += elem.offsetTop; - elem = elem.offsetParent; - } while (elem); - } - return offset; - }, - - // http://stackoverflow.com/posts/2684561/revisions - /** - * - * @param elem - */ - isActive: function(elem) { - return elem === document.activeElement && (elem.type || elem.href); - } - -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (dom); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/gui/GUI.js": -/*!*************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/gui/GUI.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/css */ "./node_modules/dat.gui/src/dat/utils/css.js"); -/* harmony import */ var _saveDialogue_html__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./saveDialogue.html */ "./node_modules/dat.gui/src/dat/gui/saveDialogue.html.js"); -/* harmony import */ var _controllers_ControllerFactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../controllers/ControllerFactory */ "./node_modules/dat.gui/src/dat/controllers/ControllerFactory.js"); -/* harmony import */ var _controllers_Controller__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../controllers/Controller */ "./node_modules/dat.gui/src/dat/controllers/Controller.js"); -/* harmony import */ var _controllers_BooleanController__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../controllers/BooleanController */ "./node_modules/dat.gui/src/dat/controllers/BooleanController.js"); -/* harmony import */ var _controllers_FunctionController__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../controllers/FunctionController */ "./node_modules/dat.gui/src/dat/controllers/FunctionController.js"); -/* harmony import */ var _controllers_NumberControllerBox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../controllers/NumberControllerBox */ "./node_modules/dat.gui/src/dat/controllers/NumberControllerBox.js"); -/* harmony import */ var _controllers_NumberControllerSlider__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../controllers/NumberControllerSlider */ "./node_modules/dat.gui/src/dat/controllers/NumberControllerSlider.js"); -/* harmony import */ var _controllers_ColorController__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../controllers/ColorController */ "./node_modules/dat.gui/src/dat/controllers/ColorController.js"); -/* harmony import */ var _utils_requestAnimationFrame__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/requestAnimationFrame */ "./node_modules/dat.gui/src/dat/utils/requestAnimationFrame.js"); -/* harmony import */ var _dom_CenteredDiv__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../dom/CenteredDiv */ "./node_modules/dat.gui/src/dat/dom/CenteredDiv.js"); -/* harmony import */ var _dom_dom__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../dom/dom */ "./node_modules/dat.gui/src/dat/dom/dom.js"); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./style.scss */ "./node_modules/dat.gui/src/dat/gui/style.scss"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - - - - - - - - - - - - - // CSS to embed in build - -_utils_css__WEBPACK_IMPORTED_MODULE_0__.default.inject(_style_scss__WEBPACK_IMPORTED_MODULE_13__.default); - -/** @ignore Outer-most className for GUI's */ -const CSS_NAMESPACE = 'dg'; - -const HIDE_KEY_CODE = 72; - -/** @ignore The only value shared between the JS and SCSS. Use caution. */ -const CLOSE_BUTTON_HEIGHT = 20; - -const DEFAULT_DEFAULT_PRESET_NAME = 'Default'; - -const SUPPORTS_LOCAL_STORAGE = (function() { - try { - return !!window.localStorage; - } catch (e) { - return false; - } -}()); - -let SAVE_DIALOGUE; - -/** @ignore Have we yet to create an autoPlace GUI? */ -let autoPlaceVirgin = true; - -/** @ignore Fixed position div that auto place GUI's go inside */ -let autoPlaceContainer; - -/** @ignore Are we hiding the GUI's ? */ -let hide = false; - -/** @private GUI's which should be hidden */ -const hideableGuis = []; - -/** - * @class A lightweight controller library for JavaScript. It allows you to easily - * manipulate variables and fire functions on the fly. - * - * @typicalname gui - * - * @example - * // Creating a GUI with options. - * var gui = new dat.GUI({name: 'My GUI'}); - * - * @example - * // Creating a GUI and a subfolder. - * var gui = new dat.GUI(); - * var folder1 = gui.addFolder('Flow Field'); - * - * @param {Object} [params] - * @param {String} [params.name] The name of this GUI. - * @param {Object} [params.load] JSON object representing the saved state of - * this GUI. - * @param {dat.gui.GUI} [params.parent] The GUI I'm nested in. - * @param {Boolean} [params.autoPlace=true] - * @param {Boolean} [params.hideable=true] If true, GUI is shown/hidden by h keypress. - * @param {Boolean} [params.closed=false] If true, starts closed - * @param {Boolean} [params.closeOnTop=false] If true, close/open button shows on top of the GUI - */ -const GUI = function(pars) { - const _this = this; - - let params = pars || {}; - - /** - * Outermost DOM Element - * @type {DOMElement} - */ - this.domElement = document.createElement('div'); - this.__ul = document.createElement('ul'); - this.domElement.appendChild(this.__ul); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(this.domElement, CSS_NAMESPACE); - - /** - * Nested GUI's by name - * @ignore - */ - this.__folders = {}; - - this.__controllers = []; - - /** - * List of objects I'm remembering for save, only used in top level GUI - * @ignore - */ - this.__rememberedObjects = []; - - /** - * Maps the index of remembered objects to a map of controllers, only used - * in top level GUI. - * - * @private - * @ignore - * - * @example - * [ - * { - * propertyName: Controller, - * anotherPropertyName: Controller - * }, - * { - * propertyName: Controller - * } - * ] - */ - this.__rememberedObjectIndecesToControllers = []; - - this.__listening = []; - - // Default parameters - params = _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.defaults(params, { - closeOnTop: false, - autoPlace: true, - width: GUI.DEFAULT_WIDTH - }); - - params = _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.defaults(params, { - resizable: params.autoPlace, - hideable: params.autoPlace - }); - - if (!_utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isUndefined(params.load)) { - // Explicit preset - if (params.preset) { - params.load.preset = params.preset; - } - } else { - params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME }; - } - - if (_utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isUndefined(params.parent) && params.hideable) { - hideableGuis.push(this); - } - - // Only root level GUI's are resizable. - params.resizable = _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isUndefined(params.parent) && params.resizable; - - if (params.autoPlace && _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isUndefined(params.scrollable)) { - params.scrollable = true; - } -// params.scrollable = common.isUndefined(params.parent) && params.scrollable === true; - - // Not part of params because I don't want people passing this in via - // constructor. Should be a 'remembered' value. - let useLocalStorage = - SUPPORTS_LOCAL_STORAGE && - localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true'; - - let saveToLocalStorage; - let titleRow; - - Object.defineProperties(this, - /** @lends GUI.prototype */ - { - /** - * The parent GUI - * @type dat.gui.GUI - */ - parent: { - get: function() { - return params.parent; - } - }, - - scrollable: { - get: function() { - return params.scrollable; - } - }, - - /** - * Handles GUI's element placement for you - * @type Boolean - */ - autoPlace: { - get: function() { - return params.autoPlace; - } - }, - - /** - * Handles GUI's position of open/close button - * @type Boolean - */ - closeOnTop: { - get: function() { - return params.closeOnTop; - } - }, - - /** - * The identifier for a set of saved values - * @type String - */ - preset: { - get: function() { - if (_this.parent) { - return _this.getRoot().preset; - } - - return params.load.preset; - }, - - set: function(v) { - if (_this.parent) { - _this.getRoot().preset = v; - } else { - params.load.preset = v; - } - setPresetSelectIndex(this); - _this.revert(); - } - }, - - /** - * The width of GUI element - * @type Number - */ - width: { - get: function() { - return params.width; - }, - set: function(v) { - params.width = v; - setWidth(_this, v); - } - }, - - /** - * The name of GUI. Used for folders. i.e - * a folder's name - * @type String - */ - name: { - get: function() { - return params.name; - }, - set: function(v) { - // TODO Check for collisions among sibling folders - params.name = v; - if (titleRow) { - titleRow.innerHTML = params.name; - } - } - }, - - /** - * Whether the GUI is collapsed or not - * @type Boolean - */ - closed: { - get: function() { - return params.closed; - }, - set: function(v) { - params.closed = v; - if (params.closed) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(_this.__ul, GUI.CLASS_CLOSED); - } else { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.removeClass(_this.__ul, GUI.CLASS_CLOSED); - } - // For browsers that aren't going to respect the CSS transition, - // Lets just check our height against the window height right off - // the bat. - this.onResize(); - - if (_this.__closeButton) { - _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED; - } - } - }, - - /** - * Contains all presets - * @type Object - */ - load: { - get: function() { - return params.load; - } - }, - - /** - * Determines whether or not to use localStorage as the means for - * remembering - * @type Boolean - */ - useLocalStorage: { - - get: function() { - return useLocalStorage; - }, - set: function(bool) { - if (SUPPORTS_LOCAL_STORAGE) { - useLocalStorage = bool; - if (bool) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(window, 'unload', saveToLocalStorage); - } else { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.unbind(window, 'unload', saveToLocalStorage); - } - localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool); - } - } - } - }); - - // Are we a root level GUI? - if (_utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isUndefined(params.parent)) { - this.closed = params.closed || false; - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(this.domElement, GUI.CLASS_MAIN); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.makeSelectable(this.domElement, false); - - // Are we supposed to be loading locally? - if (SUPPORTS_LOCAL_STORAGE) { - if (useLocalStorage) { - _this.useLocalStorage = true; - - const savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui')); - - if (savedGui) { - params.load = JSON.parse(savedGui); - } - } - } - - this.__closeButton = document.createElement('div'); - this.__closeButton.innerHTML = GUI.TEXT_CLOSED; - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON); - if (params.closeOnTop) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP); - this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]); - } else { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM); - this.domElement.appendChild(this.__closeButton); - } - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(this.__closeButton, 'click', function() { - _this.closed = !_this.closed; - }); - // Oh, you're a nested GUI! - } else { - if (params.closed === undefined) { - params.closed = true; - } - - const titleRowName = document.createTextNode(params.name); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(titleRowName, 'controller-name'); - - titleRow = addRow(_this, titleRowName); - - const onClickTitle = function(e) { - e.preventDefault(); - _this.closed = !_this.closed; - return false; - }; - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(this.__ul, GUI.CLASS_CLOSED); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(titleRow, 'title'); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(titleRow, 'click', onClickTitle); - - if (!params.closed) { - this.closed = false; - } - } - - if (params.autoPlace) { - if (_utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isUndefined(params.parent)) { - if (autoPlaceVirgin) { - autoPlaceContainer = document.createElement('div'); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(autoPlaceContainer, CSS_NAMESPACE); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER); - document.body.appendChild(autoPlaceContainer); - autoPlaceVirgin = false; - } - - // Put it in the dom for you. - autoPlaceContainer.appendChild(this.domElement); - - // Apply the auto styles - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(this.domElement, GUI.CLASS_AUTO_PLACE); - } - - - // Make it not elastic. - if (!this.parent) { - setWidth(_this, params.width); - } - } - - this.__resizeHandler = function() { - _this.onResizeDebounced(); - }; - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(window, 'resize', this.__resizeHandler); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(this.__ul, 'transitionend', this.__resizeHandler); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler); - this.onResize(); - - if (params.resizable) { - addResizeHandle(this); - } - - saveToLocalStorage = function() { - if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') { - localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject())); - } - }; - - // expose this method publicly - this.saveToLocalStorageIfPossible = saveToLocalStorage; - - function resetWidth() { - const root = _this.getRoot(); - root.width += 1; - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.defer(function() { - root.width -= 1; - }); - } - - if (!params.parent) { - resetWidth(); - } -}; - -GUI.toggleHide = function() { - hide = !hide; - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(hideableGuis, function(gui) { - gui.domElement.style.display = hide ? 'none' : ''; - }); -}; - -GUI.CLASS_AUTO_PLACE = 'a'; -GUI.CLASS_AUTO_PLACE_CONTAINER = 'ac'; -GUI.CLASS_MAIN = 'main'; -GUI.CLASS_CONTROLLER_ROW = 'cr'; -GUI.CLASS_TOO_TALL = 'taller-than-window'; -GUI.CLASS_CLOSED = 'closed'; -GUI.CLASS_CLOSE_BUTTON = 'close-button'; -GUI.CLASS_CLOSE_TOP = 'close-top'; -GUI.CLASS_CLOSE_BOTTOM = 'close-bottom'; -GUI.CLASS_DRAG = 'drag'; - -GUI.DEFAULT_WIDTH = 245; -GUI.TEXT_CLOSED = 'Close Controls'; -GUI.TEXT_OPEN = 'Open Controls'; - -GUI._keydownHandler = function(e) { - if (document.activeElement.type !== 'text' && - (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) { - GUI.toggleHide(); - } -}; -_dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(window, 'keydown', GUI._keydownHandler, false); - -_utils_common__WEBPACK_IMPORTED_MODULE_12__.default.extend( - GUI.prototype, - - /** @lends GUI.prototype */ - { - - /** - * Adds a new {@link Controller} to the GUI. The type of controller created - * is inferred from the initial value of object[property]. For - * color properties, see {@link addColor}. - * - * @param {Object} object The object to be manipulated - * @param {String} property The name of the property to be manipulated - * @param {Number} [min] Minimum allowed value - * @param {Number} [max] Maximum allowed value - * @param {Number} [step] Increment by which to change value - * @returns {Controller} The controller that was added to the GUI. - * @instance - * - * @example - * // Add a string controller. - * var person = {name: 'Sam'}; - * gui.add(person, 'name'); - * - * @example - * // Add a number controller slider. - * var person = {age: 45}; - * gui.add(person, 'age', 0, 100); - */ - add: function(object, property) { - return add( - this, - object, - property, - { - factoryArgs: Array.prototype.slice.call(arguments, 2) - } - ); - }, - - /** - * Adds a new color controller to the GUI. - * - * @param object - * @param property - * @returns {Controller} The controller that was added to the GUI. - * @instance - * - * @example - * var palette = { - * color1: '#FF0000', // CSS string - * color2: [ 0, 128, 255 ], // RGB array - * color3: [ 0, 128, 255, 0.3 ], // RGB with alpha - * color4: { h: 350, s: 0.9, v: 0.3 } // Hue, saturation, value - * }; - * gui.addColor(palette, 'color1'); - * gui.addColor(palette, 'color2'); - * gui.addColor(palette, 'color3'); - * gui.addColor(palette, 'color4'); - */ - addColor: function(object, property) { - return add( - this, - object, - property, - { - color: true - } - ); - }, - - /** - * Removes the given controller from the GUI. - * @param {Controller} controller - * @instance - */ - remove: function(controller) { - // TODO listening? - this.__ul.removeChild(controller.__li); - this.__controllers.splice(this.__controllers.indexOf(controller), 1); - const _this = this; - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.defer(function() { - _this.onResize(); - }); - }, - - /** - * Removes the root GUI from the document and unbinds all event listeners. - * For subfolders, use `gui.removeFolder(folder)` instead. - * @instance - */ - destroy: function() { - if (this.parent) { - throw new Error( - 'Only the root GUI should be removed with .destroy(). ' + - 'For subfolders, use gui.removeFolder(folder) instead.' - ); - } - - if (this.autoPlace) { - autoPlaceContainer.removeChild(this.domElement); - } - - const _this = this; - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(this.__folders, function(subfolder) { - _this.removeFolder(subfolder); - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.unbind(window, 'keydown', GUI._keydownHandler, false); - - removeListeners(this); - }, - - /** - * Creates a new subfolder GUI instance. - * @param name - * @returns {dat.gui.GUI} The new folder. - * @throws {Error} if this GUI already has a folder by the specified - * name - * @instance - */ - addFolder: function(name) { - // We have to prevent collisions on names in order to have a key - // by which to remember saved values - if (this.__folders[name] !== undefined) { - throw new Error('You already have a folder in this GUI by the' + - ' name "' + name + '"'); - } - - const newGuiParams = { name: name, parent: this }; - - // We need to pass down the autoPlace trait so that we can - // attach event listeners to open/close folder actions to - // ensure that a scrollbar appears if the window is too short. - newGuiParams.autoPlace = this.autoPlace; - - // Do we have saved appearance data for this folder? - if (this.load && // Anything loaded? - this.load.folders && // Was my parent a dead-end? - this.load.folders[name]) { // Did daddy remember me? - // Start me closed if I was closed - newGuiParams.closed = this.load.folders[name].closed; - - // Pass down the loaded data - newGuiParams.load = this.load.folders[name]; - } - - const gui = new GUI(newGuiParams); - this.__folders[name] = gui; - - const li = addRow(this, gui.domElement); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(li, 'folder'); - return gui; - }, - - /** - * Removes a subfolder GUI instance. - * @param {dat.gui.GUI} folder The folder to remove. - * @instance - */ - removeFolder: function(folder) { - this.__ul.removeChild(folder.domElement.parentElement); - - delete this.__folders[folder.name]; - - // Do we have saved appearance data for this folder? - if (this.load && // Anything loaded? - this.load.folders && // Was my parent a dead-end? - this.load.folders[folder.name]) { - delete this.load.folders[folder.name]; - } - - removeListeners(folder); - - const _this = this; - - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(folder.__folders, function(subfolder) { - folder.removeFolder(subfolder); - }); - - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.defer(function() { - _this.onResize(); - }); - }, - - /** - * Opens the GUI. - */ - open: function() { - this.closed = false; - }, - - /** - * Closes the GUI. - */ - close: function() { - this.closed = true; - }, - - /** - * Hides the GUI. - */ - hide: function() { - this.domElement.style.display = 'none'; - }, - - /** - * Shows the GUI. - */ - show: function() { - this.domElement.style.display = ''; - }, - - - onResize: function() { - // we debounce this function to prevent performance issues when rotating on tablet/mobile - const root = this.getRoot(); - if (root.scrollable) { - const top = _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.getOffset(root.__ul).top; - let h = 0; - - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(root.__ul.childNodes, function(node) { - if (!(root.autoPlace && node === root.__save_row)) { - h += _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.getHeight(node); - } - }); - - if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(root.domElement, GUI.CLASS_TOO_TALL); - root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px'; - } else { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.removeClass(root.domElement, GUI.CLASS_TOO_TALL); - root.__ul.style.height = 'auto'; - } - } - - if (root.__resize_handle) { - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.defer(function() { - root.__resize_handle.style.height = root.__ul.offsetHeight + 'px'; - }); - } - - if (root.__closeButton) { - root.__closeButton.style.width = root.width + 'px'; - } - }, - - onResizeDebounced: _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.debounce(function() { this.onResize(); }, 50), - - /** - * Mark objects for saving. The order of these objects cannot change as - * the GUI grows. When remembering new objects, append them to the end - * of the list. - * - * @param {...Object} objects - * @throws {Error} if not called on a top level GUI. - * @instance - * @ignore - */ - remember: function() { - if (_utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isUndefined(SAVE_DIALOGUE)) { - SAVE_DIALOGUE = new _dom_CenteredDiv__WEBPACK_IMPORTED_MODULE_10__.default(); - SAVE_DIALOGUE.domElement.innerHTML = _saveDialogue_html__WEBPACK_IMPORTED_MODULE_1__.default; - } - - if (this.parent) { - throw new Error('You can only call remember on a top level GUI.'); - } - - const _this = this; - - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(Array.prototype.slice.call(arguments), function(object) { - if (_this.__rememberedObjects.length === 0) { - addSaveMenu(_this); - } - if (_this.__rememberedObjects.indexOf(object) === -1) { - _this.__rememberedObjects.push(object); - } - }); - - if (this.autoPlace) { - // Set save row width - setWidth(this, this.width); - } - }, - - /** - * @returns {dat.gui.GUI} the topmost parent GUI of a nested GUI. - * @instance - */ - getRoot: function() { - let gui = this; - while (gui.parent) { - gui = gui.parent; - } - return gui; - }, - - /** - * @returns {Object} a JSON object representing the current state of - * this GUI as well as its remembered properties. - * @instance - */ - getSaveObject: function() { - const toReturn = this.load; - toReturn.closed = this.closed; - - // Am I remembering any values? - if (this.__rememberedObjects.length > 0) { - toReturn.preset = this.preset; - - if (!toReturn.remembered) { - toReturn.remembered = {}; - } - - toReturn.remembered[this.preset] = getCurrentPreset(this); - } - - toReturn.folders = {}; - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(this.__folders, function(element, key) { - toReturn.folders[key] = element.getSaveObject(); - }); - - return toReturn; - }, - - save: function() { - if (!this.load.remembered) { - this.load.remembered = {}; - } - - this.load.remembered[this.preset] = getCurrentPreset(this); - markPresetModified(this, false); - this.saveToLocalStorageIfPossible(); - }, - - saveAs: function(presetName) { - if (!this.load.remembered) { - // Retain default values upon first save - this.load.remembered = {}; - this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true); - } - - this.load.remembered[presetName] = getCurrentPreset(this); - this.preset = presetName; - addPresetOption(this, presetName, true); - this.saveToLocalStorageIfPossible(); - }, - - revert: function(gui) { - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(this.__controllers, function(controller) { - // Make revert work on Default. - if (!this.getRoot().load.remembered) { - controller.setValue(controller.initialValue); - } else { - recallSavedValue(gui || this.getRoot(), controller); - } - - // fire onFinishChange callback - if (controller.__onFinishChange) { - controller.__onFinishChange.call(controller, controller.getValue()); - } - }, this); - - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(this.__folders, function(folder) { - folder.revert(folder); - }); - - if (!gui) { - markPresetModified(this.getRoot(), false); - } - }, - - listen: function(controller) { - const init = this.__listening.length === 0; - this.__listening.push(controller); - if (init) { - updateDisplays(this.__listening); - } - }, - - updateDisplay: function() { - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(this.__controllers, function(controller) { - controller.updateDisplay(); - }); - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(this.__folders, function(folder) { - folder.updateDisplay(); - }); - } - } -); - -/** - * Add a row to the end of the GUI or before another row. - * - * @param gui - * @param [newDom] If specified, inserts the dom content in the new row - * @param [liBefore] If specified, places the new row before another row - * - * @ignore - */ -function addRow(gui, newDom, liBefore) { - const li = document.createElement('li'); - if (newDom) { - li.appendChild(newDom); - } - - if (liBefore) { - gui.__ul.insertBefore(li, liBefore); - } else { - gui.__ul.appendChild(li); - } - gui.onResize(); - return li; -} - -function removeListeners(gui) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.unbind(window, 'resize', gui.__resizeHandler); - - if (gui.saveToLocalStorageIfPossible) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.unbind(window, 'unload', gui.saveToLocalStorageIfPossible); - } -} - -function markPresetModified(gui, modified) { - const opt = gui.__preset_select[gui.__preset_select.selectedIndex]; - - if (modified) { - opt.innerHTML = opt.value + '*'; - } else { - opt.innerHTML = opt.value; - } -} - -function augmentController(gui, li, controller) { - controller.__li = li; - controller.__gui = gui; - - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.extend(controller, /** @lends Controller.prototype */ { - /** - * @param {Array|Object} options - * @return {Controller} - */ - options: function(options) { - if (arguments.length > 1) { - const nextSibling = controller.__li.nextElementSibling; - controller.remove(); - - return add( - gui, - controller.object, - controller.property, - { - before: nextSibling, - factoryArgs: [_utils_common__WEBPACK_IMPORTED_MODULE_12__.default.toArray(arguments)] - } - ); - } - - if (_utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isArray(options) || _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isObject(options)) { - const nextSibling = controller.__li.nextElementSibling; - controller.remove(); - - return add( - gui, - controller.object, - controller.property, - { - before: nextSibling, - factoryArgs: [options] - } - ); - } - }, - - /** - * Sets the name of the controller. - * @param {string} name - * @return {Controller} - */ - name: function(name) { - controller.__li.firstElementChild.firstElementChild.innerHTML = name; - return controller; - }, - - /** - * Sets controller to listen for changes on its underlying object. - * @return {Controller} - */ - listen: function() { - controller.__gui.listen(controller); - return controller; - }, - - /** - * Removes the controller from its parent GUI. - * @return {Controller} - */ - remove: function() { - controller.__gui.remove(controller); - return controller; - } - }); - - // All sliders should be accompanied by a box. - if (controller instanceof _controllers_NumberControllerSlider__WEBPACK_IMPORTED_MODULE_7__.default) { - const box = new _controllers_NumberControllerBox__WEBPACK_IMPORTED_MODULE_6__.default(controller.object, controller.property, - { min: controller.__min, max: controller.__max, step: controller.__step }); - - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function(method) { - const pc = controller[method]; - const pb = box[method]; - controller[method] = box[method] = function() { - const args = Array.prototype.slice.call(arguments); - pb.apply(box, args); - return pc.apply(controller, args); - }; - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(li, 'has-slider'); - controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild); - } else if (controller instanceof _controllers_NumberControllerBox__WEBPACK_IMPORTED_MODULE_6__.default) { - const r = function(returned) { - // Have we defined both boundaries? - if (_utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isNumber(controller.__min) && _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isNumber(controller.__max)) { - // Well, then lets just replace this with a slider. - - // lets remember if the old controller had a specific name or was listening - const oldName = controller.__li.firstElementChild.firstElementChild.innerHTML; - const wasListening = controller.__gui.__listening.indexOf(controller) > -1; - - controller.remove(); - const newController = add( - gui, - controller.object, - controller.property, - { - before: controller.__li.nextElementSibling, - factoryArgs: [controller.__min, controller.__max, controller.__step] - }); - - newController.name(oldName); - if (wasListening) newController.listen(); - - return newController; - } - - return returned; - }; - - controller.min = _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.compose(r, controller.min); - controller.max = _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.compose(r, controller.max); - } else if (controller instanceof _controllers_BooleanController__WEBPACK_IMPORTED_MODULE_4__.default) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(li, 'click', function() { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.fakeEvent(controller.__checkbox, 'click'); - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(controller.__checkbox, 'click', function(e) { - e.stopPropagation(); // Prevents double-toggle - }); - } else if (controller instanceof _controllers_FunctionController__WEBPACK_IMPORTED_MODULE_5__.default) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(li, 'click', function() { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.fakeEvent(controller.__button, 'click'); - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(li, 'mouseover', function() { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(controller.__button, 'hover'); - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(li, 'mouseout', function() { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.removeClass(controller.__button, 'hover'); - }); - } else if (controller instanceof _controllers_ColorController__WEBPACK_IMPORTED_MODULE_8__.default) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(li, 'color'); - controller.updateDisplay = _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.compose(function(val) { - li.style.borderLeftColor = controller.__color.toString(); - return val; - }, controller.updateDisplay); - - controller.updateDisplay(); - } - - controller.setValue = _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.compose(function(val) { - if (gui.getRoot().__preset_select && controller.isModified()) { - markPresetModified(gui.getRoot(), true); - } - - return val; - }, controller.setValue); -} - -function recallSavedValue(gui, controller) { - // Find the topmost GUI, that's where remembered objects live. - const root = gui.getRoot(); - - // Does the object we're controlling match anything we've been told to - // remember? - const matchedIndex = root.__rememberedObjects.indexOf(controller.object); - - // Why yes, it does! - if (matchedIndex !== -1) { - // Let me fetch a map of controllers for thcommon.isObject. - let controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex]; - - // Ohp, I believe this is the first controller we've created for this - // object. Lets make the map fresh. - if (controllerMap === undefined) { - controllerMap = {}; - root.__rememberedObjectIndecesToControllers[matchedIndex] = - controllerMap; - } - - // Keep track of this controller - controllerMap[controller.property] = controller; - - // Okay, now have we saved any values for this controller? - if (root.load && root.load.remembered) { - const presetMap = root.load.remembered; - - // Which preset are we trying to load? - let preset; - - if (presetMap[gui.preset]) { - preset = presetMap[gui.preset]; - } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) { - // Uhh, you can have the default instead? - preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME]; - } else { - // Nada. - return; - } - - // Did the loaded object remember thcommon.isObject? && Did we remember this particular property? - if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) { - // We did remember something for this guy ... - const value = preset[matchedIndex][controller.property]; - - // And that's what it is. - controller.initialValue = value; - controller.setValue(value); - } - } - } -} - -function add(gui, object, property, params) { - if (object[property] === undefined) { - throw new Error(`Object "${object}" has no property "${property}"`); - } - - let controller; - - if (params.color) { - controller = new _controllers_ColorController__WEBPACK_IMPORTED_MODULE_8__.default(object, property); - } else { - const factoryArgs = [object, property].concat(params.factoryArgs); - controller = _controllers_ControllerFactory__WEBPACK_IMPORTED_MODULE_2__.default.apply(gui, factoryArgs); - } - - if (params.before instanceof _controllers_Controller__WEBPACK_IMPORTED_MODULE_3__.default) { - params.before = params.before.__li; - } - - recallSavedValue(gui, controller); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(controller.domElement, 'c'); - - const name = document.createElement('span'); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(name, 'property-name'); - name.innerHTML = controller.property; - - const container = document.createElement('div'); - container.appendChild(name); - container.appendChild(controller.domElement); - - const li = addRow(gui, container, params.before); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(li, GUI.CLASS_CONTROLLER_ROW); - if (controller instanceof _controllers_ColorController__WEBPACK_IMPORTED_MODULE_8__.default) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(li, 'color'); - } else { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(li, typeof controller.getValue()); - } - - augmentController(gui, li, controller); - - gui.__controllers.push(controller); - - return controller; -} - -function getLocalStorageHash(gui, key) { - // TODO how does this deal with multiple GUI's? - return document.location.href + '.' + key; -} - -function addPresetOption(gui, name, setSelected) { - const opt = document.createElement('option'); - opt.innerHTML = name; - opt.value = name; - gui.__preset_select.appendChild(opt); - if (setSelected) { - gui.__preset_select.selectedIndex = gui.__preset_select.length - 1; - } -} - -function showHideExplain(gui, explain) { - explain.style.display = gui.useLocalStorage ? 'block' : 'none'; -} - -function addSaveMenu(gui) { - const div = gui.__save_row = document.createElement('li'); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(gui.domElement, 'has-save'); - - gui.__ul.insertBefore(div, gui.__ul.firstChild); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(div, 'save-row'); - - const gears = document.createElement('span'); - gears.innerHTML = ' '; - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(gears, 'button gears'); - - // TODO replace with FunctionController - const button = document.createElement('span'); - button.innerHTML = 'Save'; - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(button, 'button'); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(button, 'save'); - - const button2 = document.createElement('span'); - button2.innerHTML = 'New'; - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(button2, 'button'); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(button2, 'save-as'); - - const button3 = document.createElement('span'); - button3.innerHTML = 'Revert'; - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(button3, 'button'); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(button3, 'revert'); - - const select = gui.__preset_select = document.createElement('select'); - - if (gui.load && gui.load.remembered) { - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(gui.load.remembered, function(value, key) { - addPresetOption(gui, key, key === gui.preset); - }); - } else { - addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false); - } - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(select, 'change', function() { - for (let index = 0; index < gui.__preset_select.length; index++) { - gui.__preset_select[index].innerHTML = gui.__preset_select[index].value; - } - - gui.preset = this.value; - }); - - div.appendChild(select); - div.appendChild(gears); - div.appendChild(button); - div.appendChild(button2); - div.appendChild(button3); - - if (SUPPORTS_LOCAL_STORAGE) { - const explain = document.getElementById('dg-local-explain'); - const localStorageCheckBox = document.getElementById('dg-local-storage'); - const saveLocally = document.getElementById('dg-save-locally'); - - saveLocally.style.display = 'block'; - - if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') { - localStorageCheckBox.setAttribute('checked', 'checked'); - } - - showHideExplain(gui, explain); - - // TODO: Use a boolean controller, fool! - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(localStorageCheckBox, 'change', function() { - gui.useLocalStorage = !gui.useLocalStorage; - showHideExplain(gui, explain); - }); - } - - const newConstructorTextArea = document.getElementById('dg-new-constructor'); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(newConstructorTextArea, 'keydown', function(e) { - if (e.metaKey && (e.which === 67 || e.keyCode === 67)) { - SAVE_DIALOGUE.hide(); - } - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(gears, 'click', function() { - newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2); - SAVE_DIALOGUE.show(); - newConstructorTextArea.focus(); - newConstructorTextArea.select(); - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(button, 'click', function() { - gui.save(); - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(button2, 'click', function() { - const presetName = prompt('Enter a new preset name.'); - if (presetName) { - gui.saveAs(presetName); - } - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(button3, 'click', function() { - gui.revert(); - }); - - // div.appendChild(button2); -} - -function addResizeHandle(gui) { - let pmouseX; - - gui.__resize_handle = document.createElement('div'); - - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.extend(gui.__resize_handle.style, { - - width: '6px', - marginLeft: '-3px', - height: '200px', - cursor: 'ew-resize', - position: 'absolute' - // border: '1px solid blue' - - }); - - function drag(e) { - e.preventDefault(); - - gui.width += pmouseX - e.clientX; - gui.onResize(); - pmouseX = e.clientX; - - return false; - } - - function dragStop() { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.removeClass(gui.__closeButton, GUI.CLASS_DRAG); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.unbind(window, 'mousemove', drag); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.unbind(window, 'mouseup', dragStop); - } - - function dragStart(e) { - e.preventDefault(); - - pmouseX = e.clientX; - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(gui.__closeButton, GUI.CLASS_DRAG); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(window, 'mousemove', drag); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(window, 'mouseup', dragStop); - - return false; - } - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(gui.__resize_handle, 'mousedown', dragStart); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(gui.__closeButton, 'mousedown', dragStart); - - gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild); -} - -function setWidth(gui, w) { - gui.domElement.style.width = w + 'px'; - // Auto placed save-rows are position fixed, so we have to - // set the width manually if we want it to bleed to the edge - if (gui.__save_row && gui.autoPlace) { - gui.__save_row.style.width = w + 'px'; - } - if (gui.__closeButton) { - gui.__closeButton.style.width = w + 'px'; - } -} - -function getCurrentPreset(gui, useInitialValues) { - const toReturn = {}; - - // For each object I'm remembering - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(gui.__rememberedObjects, function(val, index) { - const savedValues = {}; - - // The controllers I've made for thcommon.isObject by property - const controllerMap = - gui.__rememberedObjectIndecesToControllers[index]; - - // Remember each value for each property - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(controllerMap, function(controller, property) { - savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue(); - }); - - // Save the values for thcommon.isObject - toReturn[index] = savedValues; - }); - - return toReturn; -} - -function setPresetSelectIndex(gui) { - for (let index = 0; index < gui.__preset_select.length; index++) { - if (gui.__preset_select[index].value === gui.preset) { - gui.__preset_select.selectedIndex = index; - } - } -} - -function updateDisplays(controllerArray) { - if (controllerArray.length !== 0) { - _utils_requestAnimationFrame__WEBPACK_IMPORTED_MODULE_9__.default.call(window, function() { - updateDisplays(controllerArray); - }); - } - - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(controllerArray, function(c) { - c.updateDisplay(); - }); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (GUI); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/gui/saveDialogue.html.js": -/*!***************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/gui/saveDialogue.html.js ***! - \***************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -const saveDialogContents = `
    - - Here's the new load parameter for your GUI's constructor: - - - -
    - - Automatically save - values to localStorage on exit. - -
    The values saved to localStorage will - override those passed to dat.GUI's constructor. This makes it - easier to work incrementally, but localStorage is fragile, - and your friends may not see the same values you do. - -
    - -
    - -
    `; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (saveDialogContents); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/utils/common.js": -/*!******************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/utils/common.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - -const ARR_EACH = Array.prototype.forEach; -const ARR_SLICE = Array.prototype.slice; - -/** - * Band-aid methods for things that should be a lot easier in JavaScript. - * Implementation and structure inspired by underscore.js - * http://documentcloud.github.com/underscore/ - */ - -const Common = { - BREAK: {}, - - extend: function(target) { - this.each(ARR_SLICE.call(arguments, 1), function(obj) { - const keys = this.isObject(obj) ? Object.keys(obj) : []; - keys.forEach(function(key) { - if (!this.isUndefined(obj[key])) { - target[key] = obj[key]; - } - }.bind(this)); - }, this); - - return target; - }, - - defaults: function(target) { - this.each(ARR_SLICE.call(arguments, 1), function(obj) { - const keys = this.isObject(obj) ? Object.keys(obj) : []; - keys.forEach(function(key) { - if (this.isUndefined(target[key])) { - target[key] = obj[key]; - } - }.bind(this)); - }, this); - - return target; - }, - - compose: function() { - const toCall = ARR_SLICE.call(arguments); - return function() { - let args = ARR_SLICE.call(arguments); - for (let i = toCall.length - 1; i >= 0; i--) { - args = [toCall[i].apply(this, args)]; - } - return args[0]; - }; - }, - - each: function(obj, itr, scope) { - if (!obj) { - return; - } - - if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) { - obj.forEach(itr, scope); - } else if (obj.length === obj.length + 0) { // Is number but not NaN - let key; - let l; - for (key = 0, l = obj.length; key < l; key++) { - if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) { - return; - } - } - } else { - for (const key in obj) { - if (itr.call(scope, obj[key], key) === this.BREAK) { - return; - } - } - } - }, - - defer: function(fnc) { - setTimeout(fnc, 0); - }, - - // if the function is called repeatedly, wait until threshold passes until we execute the function - debounce: function(func, threshold, callImmediately) { - let timeout; - - return function() { - const obj = this; - const args = arguments; - function delayed() { - timeout = null; - if (!callImmediately) func.apply(obj, args); - } - - const callNow = callImmediately || !timeout; - - clearTimeout(timeout); - timeout = setTimeout(delayed, threshold); - - if (callNow) { - func.apply(obj, args); - } - }; - }, - - toArray: function(obj) { - if (obj.toArray) return obj.toArray(); - return ARR_SLICE.call(obj); - }, - - isUndefined: function(obj) { - return obj === undefined; - }, - - isNull: function(obj) { - return obj === null; - }, - - isNaN: function(obj) { - return isNaN(obj); - }, - - isArray: Array.isArray || function(obj) { - return obj.constructor === Array; - }, - - isObject: function(obj) { - return obj === Object(obj); - }, - - isNumber: function(obj) { - return obj === obj + 0; - }, - - isString: function(obj) { - return obj === obj + ''; - }, - - isBoolean: function(obj) { - return obj === false || obj === true; - }, - - isFunction: function(obj) { - return obj instanceof Function; - } - -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Common); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/utils/css.js": -/*!***************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/utils/css.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - -const css = { - load: function(url, indoc) { - const doc = indoc || document; - const link = doc.createElement('link'); - link.type = 'text/css'; - link.rel = 'stylesheet'; - link.href = url; - doc.getElementsByTagName('head')[0].appendChild(link); - }, - - inject: function(cssContent, indoc) { - const doc = indoc || document; - const injected = document.createElement('style'); - injected.type = 'text/css'; - injected.innerHTML = cssContent; - const head = doc.getElementsByTagName('head')[0]; - try { - head.appendChild(injected); - } catch (e) { // Unable to inject CSS, probably because of a Content Security Policy - } - } -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (css); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/utils/requestAnimationFrame.js": -/*!*********************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/utils/requestAnimationFrame.js ***! - \*********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - -function requestAnimationFrame(callback) { - setTimeout(callback, 1000 / 60); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (window.requestAnimationFrame || - window.webkitRequestAnimationFrame || - window.mozRequestAnimationFrame || - window.oRequestAnimationFrame || - window.msRequestAnimationFrame || - requestAnimationFrame); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/gui/style.scss": -/*!*****************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/gui/style.scss ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); -/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _css_loader_dist_cjs_js_sass_loader_dist_cjs_js_style_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../../css-loader/dist/cjs.js!../../../../sass-loader/dist/cjs.js!./style.scss */ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/dat.gui/src/dat/gui/style.scss"); - - - -var options = {}; - -options.insert = "head"; -options.singleton = false; - -var update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_css_loader_dist_cjs_js_sass_loader_dist_cjs_js_style_scss__WEBPACK_IMPORTED_MODULE_1__.default, options); - - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_css_loader_dist_cjs_js_sass_loader_dist_cjs_js_style_scss__WEBPACK_IMPORTED_MODULE_1__.default.locals || {}); - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js": -/*!****************************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! - \****************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - - - -var isOldIE = function isOldIE() { - var memo; - return function memorize() { - if (typeof memo === 'undefined') { - // Test for IE <= 9 as proposed by Browserhacks - // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 - // Tests for existence of standard globals is to allow style-loader - // to operate correctly into non-standard environments - // @see https://github.com/webpack-contrib/style-loader/issues/177 - memo = Boolean(window && document && document.all && !window.atob); - } - - return memo; - }; -}(); - -var getTarget = function getTarget() { - var memo = {}; - return function memorize(target) { - if (typeof memo[target] === 'undefined') { - var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself - - if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { - try { - // This will throw an exception if access to iframe is blocked - // due to cross-origin restrictions - styleTarget = styleTarget.contentDocument.head; - } catch (e) { - // istanbul ignore next - styleTarget = null; - } - } - - memo[target] = styleTarget; - } - - return memo[target]; - }; -}(); - -var stylesInDom = []; - -function getIndexByIdentifier(identifier) { - var result = -1; - - for (var i = 0; i < stylesInDom.length; i++) { - if (stylesInDom[i].identifier === identifier) { - result = i; - break; - } - } - - return result; -} - -function modulesToDom(list, options) { - var idCountMap = {}; - var identifiers = []; - - for (var i = 0; i < list.length; i++) { - var item = list[i]; - var id = options.base ? item[0] + options.base : item[0]; - var count = idCountMap[id] || 0; - var identifier = "".concat(id, " ").concat(count); - idCountMap[id] = count + 1; - var index = getIndexByIdentifier(identifier); - var obj = { - css: item[1], - media: item[2], - sourceMap: item[3] - }; - - if (index !== -1) { - stylesInDom[index].references++; - stylesInDom[index].updater(obj); - } else { - stylesInDom.push({ - identifier: identifier, - updater: addStyle(obj, options), - references: 1 - }); - } - - identifiers.push(identifier); - } - - return identifiers; -} - -function insertStyleElement(options) { - var style = document.createElement('style'); - var attributes = options.attributes || {}; - - if (typeof attributes.nonce === 'undefined') { - var nonce = true ? __webpack_require__.nc : 0; - - if (nonce) { - attributes.nonce = nonce; - } - } - - Object.keys(attributes).forEach(function (key) { - style.setAttribute(key, attributes[key]); - }); - - if (typeof options.insert === 'function') { - options.insert(style); - } else { - var target = getTarget(options.insert || 'head'); - - if (!target) { - throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); - } - - target.appendChild(style); - } - - return style; -} - -function removeStyleElement(style) { - // istanbul ignore if - if (style.parentNode === null) { - return false; - } - - style.parentNode.removeChild(style); -} -/* istanbul ignore next */ - - -var replaceText = function replaceText() { - var textStore = []; - return function replace(index, replacement) { - textStore[index] = replacement; - return textStore.filter(Boolean).join('\n'); - }; -}(); - -function applyToSingletonTag(style, index, remove, obj) { - var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE - - /* istanbul ignore if */ - - if (style.styleSheet) { - style.styleSheet.cssText = replaceText(index, css); - } else { - var cssNode = document.createTextNode(css); - var childNodes = style.childNodes; - - if (childNodes[index]) { - style.removeChild(childNodes[index]); - } - - if (childNodes.length) { - style.insertBefore(cssNode, childNodes[index]); - } else { - style.appendChild(cssNode); - } - } -} - -function applyToTag(style, options, obj) { - var css = obj.css; - var media = obj.media; - var sourceMap = obj.sourceMap; - - if (media) { - style.setAttribute('media', media); - } else { - style.removeAttribute('media'); - } - - if (sourceMap && typeof btoa !== 'undefined') { - css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); - } // For old IE - - /* istanbul ignore if */ - - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - while (style.firstChild) { - style.removeChild(style.firstChild); - } - - style.appendChild(document.createTextNode(css)); - } -} - -var singleton = null; -var singletonCounter = 0; - -function addStyle(obj, options) { - var style; - var update; - var remove; - - if (options.singleton) { - var styleIndex = singletonCounter++; - style = singleton || (singleton = insertStyleElement(options)); - update = applyToSingletonTag.bind(null, style, styleIndex, false); - remove = applyToSingletonTag.bind(null, style, styleIndex, true); - } else { - style = insertStyleElement(options); - update = applyToTag.bind(null, style, options); - - remove = function remove() { - removeStyleElement(style); - }; - } - - update(obj); - return function updateStyle(newObj) { - if (newObj) { - if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) { - return; - } - - update(obj = newObj); - } else { - remove(); - } - }; -} - -module.exports = function (list, options) { - options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of +
    -
    -
    - -
    - - - + +
    \ No newline at end of file diff --git a/solver.wasm b/solver.wasm index d439a49..c46e8f1 100644 Binary files a/solver.wasm and b/solver.wasm differ