waves/public/assets/g/turbowarp/main/js/addon-entry-variable-manager.js
2025-04-09 17:11:14 -05:00

513 lines
23 KiB
JavaScript

(window["webpackJsonpGUI"] = window["webpackJsonpGUI"] || []).push([["addon-entry-variable-manager"],{
/***/ "./node_modules/css-loader/index.js!./src/addons/addons/variable-manager/style.css":
/*!********************************************************************************!*\
!*** ./node_modules/css-loader!./src/addons/addons/variable-manager/style.css ***!
\********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
var escape = __webpack_require__(/*! ../../../../node_modules/css-loader/lib/url/escape.js */ "./node_modules/css-loader/lib/url/escape.js");
exports = module.exports = __webpack_require__(/*! ../../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false);
// imports
// module
exports.push([module.i, "/* Change z-indexes to allow more than 3 tabs */\n[class*=\"gui_tab_\"][class*=\"gui_is-selected_\"] {\n z-index: 10 !important;\n}\n[class*=\"gui_tab_\"]:nth-of-type(1) {\n z-index: 9;\n}\n[class*=\"gui_tab_\"]:nth-of-type(2) {\n z-index: 8;\n}\n[class*=\"gui_tab_\"]:nth-of-type(3) {\n z-index: 7;\n}\n[class*=\"gui_tab_\"]:nth-of-type(4) {\n z-index: 6;\n}\n\n.sa-var-manager {\n display: block;\n padding: 18px;\n /* weird hack to fix scrolling??? */\n height: 50px;\n overflow-y: auto;\n}\n\n.sa-var-manager-searchbox {\n background-image: url(" + escape(__webpack_require__(/*! ./search.svg */ "./src/addons/addons/variable-manager/search.svg")) + ");\n width: 25%;\n margin-bottom: 4px;\n padding: 8px;\n padding-right: 32px; /* for the text to not overlap the image */\n border-radius: 4px;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n background-position: calc(100% - 7px) center;\n font-size: 0.75rem;\n}\n[theme=\"dark\"] .sa-var-manager-searchbox {\n border-color: #333;\n}\n\n[dir=\"rtl\"] .sa-var-manager-searchbox {\n padding-right: 8px;\n padding-left: 32px;\n background-position: 7px center;\n}\n\n.sa-var-manager.freeze .sa-var-manager-value *,\n.sa-var-manager.freeze .sa-var-manager-name * {\n opacity: 0.5;\n}\n\n.sa-var-manager.freeze input:focus,\n.sa-var-manager.freeze textarea:focus {\n opacity: 1;\n}\n\n.sa-var-manager-heading {\n display: block;\n font-weight: bold;\n font-size: large;\n margin-top: 6px;\n margin-bottom: 6px;\n}\n\n.sa-var-manager-name {\n word-break: break-word;\n}\n\n.sa-var-manager .sa-var-manager-value {\n width: 75%;\n}\n\n.sa-var-manager * > input {\n background: none;\n border: none;\n padding: 8px;\n width: 100%;\n height: 100%;\n}\n\n.sa-var-manager-value > textarea {\n background: none;\n border: none;\n padding: 8px;\n width: 100%;\n height: 100%;\n line-height: 2em;\n resize: none;\n}\n\n.sa-var-manager-too-big {\n display: none;\n cursor: pointer;\n font: inherit;\n font-style: italic;\n color: inherit;\n background: none;\n border: none;\n margin: 0;\n padding: 8px;\n opacity: 0.8;\n width: 100%;\n text-align: left;\n}\n.sa-var-manager-too-big:hover {\n text-decoration: underline;\n}\n[data-too-big=\"true\"] .sa-var-manager-too-big {\n display: block;\n}\n[data-too-big=\"true\"] .sa-var-manager-value-input {\n display: none;\n}\n\n.sa-var-manager table {\n border-radius: 5px;\n border-collapse: collapse;\n width: 100%;\n}\n\n.sa-var-manager td {\n border: 1px solid rgba(0, 0, 0, 0.15);\n text-align: left;\n}\n[theme=\"dark\"] .sa-var-manager td {\n border-color: #333;\n}\n\n/* tr:nth-child(even) {\n background-color: #dddddd;\n} */\n", ""]);
// exports
/***/ }),
/***/ "./node_modules/url-loader/dist/cjs.js!./src/addons/addons/variable-manager/icon.svg":
/*!*******************************************************************************************!*\
!*** ./node_modules/url-loader/dist/cjs.js!./src/addons/addons/variable-manager/icon.svg ***!
\*******************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony default export */ __webpack_exports__["default"] = ("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iI0ZGNEM0QyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNC42NDkgMy4wODRBMSAxIDAgMCAxIDUuMTYzIDQuNCAxMy45NSAxMy45NSAwIDAgMCA0IDEwYzAgMS45OTMuNDE2IDMuODg2IDEuMTY0IDUuNmExIDEgMCAwIDEtMS44MzIuOEExNS45NSAxNS45NSAwIDAgMSAyIDEwYzAtMi4yNzQuNDc1LTQuNDQgMS4zMzItNi40YTEgMSAwIDAgMSAxLjMxNy0uNTE2ek0xMi45NiA3YTMgMyAwIDAgMC0yLjM0MiAxLjEyNmwtLjMyOC40MS0uMTExLS4yNzlBMiAyIDAgMCAwIDguMzIzIDdIOGExIDEgMCAwIDAgMCAyaC4zMjNsLjUzMiAxLjMzLTEuMDM1IDEuMjk1YTEgMSAwIDAgMS0uNzgxLjM3NUg3YTEgMSAwIDEgMCAwIDJoLjAzOWEzIDMgMCAwIDAgMi4zNDItMS4xMjZsLjMyOC0uNDEuMTExLjI3OUEyIDIgMCAwIDAgMTEuNjc3IDE0SDEyYTEgMSAwIDEgMCAwLTJoLS4zMjNsLS41MzItMS4zMyAxLjAzNS0xLjI5NUExIDEgMCAwIDEgMTIuOTYxIDlIMTNhMSAxIDAgMSAwIDAtMmgtLjAzOXptMS44NzQtMi42YTEgMSAwIDAgMSAxLjgzMy0uOEExNS45NSAxNS45NSAwIDAgMSAxOCAxMGMwIDIuMjc0LS40NzUgNC40NC0xLjMzMiA2LjRhMSAxIDAgMSAxLTEuODMyLS44QTEzLjk0OSAxMy45NDkgMCAwIDAgMTYgMTBjMC0xLjk5My0uNDE2LTMuODg2LTEuMTY1LTUuNnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPgo=");
/***/ }),
/***/ "./node_modules/url-loader/dist/cjs.js!./src/addons/addons/variable-manager/search.svg":
/*!*********************************************************************************************!*\
!*** ./node_modules/url-loader/dist/cjs.js!./src/addons/addons/variable-manager/search.svg ***!
\*********************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony default export */ __webpack_exports__["default"] = ("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0E2LjQ3MSA2LjQ3MSAwIDAgMCAxNiA5LjUgNi41IDYuNSAwIDEgMCA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiIgZmlsbD0iI0QzRDNEMyIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz4=");
/***/ }),
/***/ "./src/addons/addons/variable-manager/_runtime_entry.js":
/*!**************************************************************!*\
!*** ./src/addons/addons/variable-manager/_runtime_entry.js ***!
\**************************************************************/
/*! exports provided: resources */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resources", function() { return resources; });
/* harmony import */ var _userscript_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./userscript.js */ "./src/addons/addons/variable-manager/userscript.js");
/* harmony import */ var _css_loader_style_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! css-loader!./style.css */ "./node_modules/css-loader/index.js!./src/addons/addons/variable-manager/style.css");
/* harmony import */ var _css_loader_style_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_style_css__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _url_loader_icon_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! url-loader!./icon.svg */ "./node_modules/url-loader/dist/cjs.js!./src/addons/addons/variable-manager/icon.svg");
/* harmony import */ var _url_loader_search_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! url-loader!./search.svg */ "./node_modules/url-loader/dist/cjs.js!./src/addons/addons/variable-manager/search.svg");
/* generated by pull.js */
const resources = {
"userscript.js": _userscript_js__WEBPACK_IMPORTED_MODULE_0__["default"],
"style.css": _css_loader_style_css__WEBPACK_IMPORTED_MODULE_1___default.a,
"icon.svg": _url_loader_icon_svg__WEBPACK_IMPORTED_MODULE_2__["default"],
"search.svg": _url_loader_search_svg__WEBPACK_IMPORTED_MODULE_3__["default"]
};
/***/ }),
/***/ "./src/addons/addons/variable-manager/search.svg":
/*!*******************************************************!*\
!*** ./src/addons/addons/variable-manager/search.svg ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__.p + "static/assets/1821649bb254ff5d93bb397ad646a23f.svg";
/***/ }),
/***/ "./src/addons/addons/variable-manager/userscript.js":
/*!**********************************************************!*\
!*** ./src/addons/addons/variable-manager/userscript.js ***!
\**********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony default export */ __webpack_exports__["default"] = (async function ({
addon,
console,
msg
}) {
const vm = addon.tab.traps.vm;
let localVariables = [];
let globalVariables = [];
let preventUpdate = false;
const manager = document.createElement("div");
manager.classList.add(addon.tab.scratchClass("asset-panel_wrapper"), "sa-var-manager");
const searchBox = document.createElement("input");
searchBox.placeholder = msg("search");
searchBox.className = addon.tab.scratchClass("input_input-form", {
others: "sa-var-manager-searchbox"
});
searchBox.addEventListener("input", e => {
for (const variable of localVariables) {
variable.handleSearch(searchBox.value);
}
for (const variable of globalVariables) {
variable.handleSearch(searchBox.value);
}
updateHeadingVisibility();
});
manager.appendChild(searchBox);
const localVars = document.createElement("div");
const localHeading = document.createElement("span");
const localList = document.createElement("table");
localHeading.className = "sa-var-manager-heading";
localHeading.innerText = msg("for-this-sprite");
localVars.appendChild(localHeading);
localVars.appendChild(localList);
const globalVars = document.createElement("div");
const globalHeading = document.createElement("span");
const globalList = document.createElement("table");
globalHeading.className = "sa-var-manager-heading";
globalHeading.innerText = msg("for-all-sprites");
globalVars.appendChild(globalHeading);
globalVars.appendChild(globalList);
manager.appendChild(localVars);
manager.appendChild(globalVars);
const varTab = document.createElement("li");
addon.tab.displayNoneWhileDisabled(varTab, {
display: "flex"
});
varTab.classList.add(addon.tab.scratchClass("react-tabs_react-tabs__tab"), addon.tab.scratchClass("gui_tab")); // Cannot use number due to conflict after leaving and re-entering editor
varTab.id = "react-tabs-sa-variable-manager";
const varTabIcon = document.createElement("img");
varTabIcon.draggable = false;
varTabIcon.src = addon.self.getResource("/icon.svg")
/* rewritten by pull.js */
;
const varTabText = document.createElement("span");
varTabText.innerText = msg("variables");
varTab.appendChild(varTabIcon);
varTab.appendChild(varTabText);
function updateHeadingVisibility() {
// used to hide the headings if there are no variables
let filteredLocals = localVariables.filter(v => v.row.style.display !== "none");
let filteredGlobals = globalVariables.filter(v => v.row.style.display !== "none");
localHeading.style.display = filteredLocals.length === 0 ? "none" : "";
globalHeading.style.display = filteredGlobals.length === 0 ? "none" : "";
}
const rowToVariableMap = new WeakMap();
const observer = new IntersectionObserver(changes => {
for (const change of changes) {
const variable = rowToVariableMap.get(change.target);
variable.setVisible(change.isIntersecting);
}
}, {
rootMargin: "100px"
});
class WrappedVariable {
constructor(scratchVariable, target) {
this.scratchVariable = scratchVariable;
this.target = target;
this.visible = false;
this.ignoreTooBig = false;
this.buildDOM();
}
updateValue(force) {
if (!this.visible && !force) return;
let newValue;
let maxSafeLength;
if (this.scratchVariable.type === "list") {
newValue = this.scratchVariable.value.join("\n");
maxSafeLength = 5000000;
} else {
newValue = this.scratchVariable.value;
maxSafeLength = 1000000;
}
if (!this.ignoreTooBig && newValue.length > maxSafeLength) {
this.input.value = "";
this.row.dataset.tooBig = true;
return;
}
this.row.dataset.tooBig = false;
if (newValue !== this.input.value) {
this.input.disabled = false;
this.input.value = newValue;
}
}
handleSearch(search) {
// this doesn't check if this.visible is true or whatever. maybe that would improve performance while typing into the search box but it's probably fine™
if (this.scratchVariable.name.toLowerCase().includes(search.toLowerCase()) || !search) {
// fuzzy searches are lame we are too cool for fuzzy searches (& i doubt they're even the right thing to use here, this should work fine enough)
this.row.style.display = ""; // make the row normal
this.updateValue(true); // force it to update because its hidden and it wouldn't be able to otherwise
} else {
this.row.style.display = "none"; // set the entire row as hidden
}
}
resizeInputIfList() {
if (this.scratchVariable.type === "list") {
this.input.style.height = "auto";
const height = Math.min(1000, this.input.scrollHeight);
if (height > 0) {
this.input.style.height = height + "px";
}
}
}
setVisible(visible) {
if (this.visible === visible) return;
this.visible = visible;
if (visible) {
this.updateValue();
}
}
buildDOM() {
const id = "sa-variable-manager-".concat(this.scratchVariable.id);
const row = document.createElement("tr");
this.row = row;
const labelCell = document.createElement("td");
labelCell.className = "sa-var-manager-name";
const label = document.createElement("input");
label.value = this.scratchVariable.name;
label.htmlFor = id;
const onLabelOut = e => {
e.preventDefault();
const workspace = Blockly.getMainWorkspace();
let newName = label.value;
if (newName === this.scratchVariable.name) {
// If the name is unchanged before we make sure the cloud prefix exists, there's nothing to do.
return;
}
const CLOUD_SYMBOL = "☁";
const CLOUD_PREFIX = CLOUD_SYMBOL + " ";
if (this.scratchVariable.isCloud) {
if (newName.startsWith(CLOUD_SYMBOL)) {
if (!newName.startsWith(CLOUD_PREFIX)) {
// There isn't a space between the cloud symbol and the name, so add one.
newName = newName.substring(0, 1) + " " + newName.substring(1);
}
} else {
newName = CLOUD_PREFIX + newName;
}
}
let nameAlreadyUsed = false;
if (this.target.isStage) {
// Global variables must not conflict with any global variables or local variables in any sprite.
const existingNames = vm.runtime.getAllVarNamesOfType(this.scratchVariable.type);
nameAlreadyUsed = existingNames.includes(newName);
} else {
// Local variables must not conflict with any global variables or local variables in this sprite.
nameAlreadyUsed = !!workspace.getVariable(newName, this.scratchVariable.type);
}
const isEmpty = !newName.trim();
if (isEmpty || nameAlreadyUsed) {
label.value = this.scratchVariable.name;
} else {
workspace.renameVariableById(this.scratchVariable.id, newName); // Only update the input's value when we need to to avoid resetting undo history.
if (label.value !== newName) {
label.value = newName;
}
}
};
label.addEventListener("keydown", e => {
if (e.key === "Enter") e.target.blur();
});
label.addEventListener("focusout", onLabelOut);
label.addEventListener("focus", e => {
preventUpdate = true;
manager.classList.add("freeze");
});
label.addEventListener("blur", e => {
preventUpdate = false;
manager.classList.remove("freeze");
});
labelCell.appendChild(label);
rowToVariableMap.set(row, this);
observer.observe(row);
const valueCell = document.createElement("td");
valueCell.className = "sa-var-manager-value";
const tooBigElement = document.createElement("button");
this.tooBigElement = tooBigElement;
tooBigElement.textContent = msg("too-big");
tooBigElement.className = "sa-var-manager-too-big";
tooBigElement.addEventListener("click", () => {
this.ignoreTooBig = true;
this.updateValue(true);
});
let input;
if (this.scratchVariable.type === "list") {
input = document.createElement("textarea");
} else {
input = document.createElement("input");
}
input.className = "sa-var-manager-value-input";
input.id = id;
this.input = input;
this.updateValue(true);
if (this.scratchVariable.type === "list") {
this.input.addEventListener("input", () => this.resizeInputIfList(), false);
}
const onInputOut = e => {
e.preventDefault();
if (this.scratchVariable.type === "list") {
vm.setVariableValue(this.target.id, this.scratchVariable.id, input.value.split("\n"));
} else {
vm.setVariableValue(this.target.id, this.scratchVariable.id, input.value);
}
input.blur();
};
input.addEventListener("keydown", e => {
if (e.target.nodeName === "INPUT" && e.key === "Enter") e.target.blur();
});
input.addEventListener("focusout", onInputOut);
input.addEventListener("focus", e => {
preventUpdate = true;
manager.classList.add("freeze");
});
input.addEventListener("blur", e => {
preventUpdate = false;
manager.classList.remove("freeze");
});
valueCell.appendChild(input);
valueCell.appendChild(tooBigElement);
row.appendChild(labelCell);
row.appendChild(valueCell);
this.handleSearch(searchBox.value);
}
}
function fullReload() {
var _addon$tab$redux$stat, _addon$tab$redux$stat2, _addon$tab$redux$stat3;
if (((_addon$tab$redux$stat = addon.tab.redux.state) === null || _addon$tab$redux$stat === void 0 ? void 0 : (_addon$tab$redux$stat2 = _addon$tab$redux$stat.scratchGui) === null || _addon$tab$redux$stat2 === void 0 ? void 0 : (_addon$tab$redux$stat3 = _addon$tab$redux$stat2.editorTab) === null || _addon$tab$redux$stat3 === void 0 ? void 0 : _addon$tab$redux$stat3.activeTabIndex) !== 3 || preventUpdate) return;
const editingTarget = vm.runtime.getEditingTarget();
const stage = vm.runtime.getTargetForStage();
localVariables = editingTarget.isStage ? [] : Object.values(editingTarget.variables).filter(i => i.type === "" || i.type === "list").map(i => new WrappedVariable(i, editingTarget));
globalVariables = Object.values(stage.variables).filter(i => i.type === "" || i.type === "list").map(i => new WrappedVariable(i, stage));
updateHeadingVisibility();
while (localList.firstChild) {
localList.removeChild(localList.firstChild);
}
while (globalList.firstChild) {
globalList.removeChild(globalList.firstChild);
}
for (const variable of localVariables) {
localList.appendChild(variable.row);
variable.resizeInputIfList();
}
for (const variable of globalVariables) {
globalList.appendChild(variable.row);
variable.resizeInputIfList();
}
}
function quickReload() {
var _addon$tab$redux$stat4, _addon$tab$redux$stat5, _addon$tab$redux$stat6;
if (((_addon$tab$redux$stat4 = addon.tab.redux.state) === null || _addon$tab$redux$stat4 === void 0 ? void 0 : (_addon$tab$redux$stat5 = _addon$tab$redux$stat4.scratchGui) === null || _addon$tab$redux$stat5 === void 0 ? void 0 : (_addon$tab$redux$stat6 = _addon$tab$redux$stat5.editorTab) === null || _addon$tab$redux$stat6 === void 0 ? void 0 : _addon$tab$redux$stat6.activeTabIndex) !== 3 || preventUpdate) return;
for (const variable of localVariables) {
variable.updateValue();
}
for (const variable of globalVariables) {
variable.updateValue();
}
}
function cleanup() {
localVariables = [];
globalVariables = [];
}
varTab.addEventListener("click", e => {
addon.tab.redux.dispatch({
type: "scratch-gui/navigation/ACTIVATE_TAB",
activeTabIndex: 3
});
});
function setVisible(visible) {
if (visible) {
varTab.classList.add(addon.tab.scratchClass("react-tabs_react-tabs__tab--selected"), addon.tab.scratchClass("gui_is-selected"));
const contentArea = document.querySelector("[class^=gui_tabs]");
contentArea.insertAdjacentElement("beforeend", manager);
fullReload();
} else {
varTab.classList.remove(addon.tab.scratchClass("react-tabs_react-tabs__tab--selected"), addon.tab.scratchClass("gui_is-selected"));
manager.remove();
cleanup();
}
}
addon.tab.redux.initialize();
addon.tab.redux.addEventListener("statechanged", ({
detail
}) => {
if (detail.action.type === "scratch-gui/navigation/ACTIVATE_TAB") {
setVisible(detail.action.activeTabIndex === 3);
} else if (detail.action.type === "scratch-gui/mode/SET_PLAYER") {
if (!detail.action.isPlayerOnly && addon.tab.redux.state.scratchGui.editorTab.activeTabIndex === 3) {
// DOM doesn't actually exist yet
queueMicrotask(() => setVisible(true));
}
}
});
vm.runtime.on("PROJECT_LOADED", () => {
try {
fullReload();
} catch (e) {
console.error(e);
}
});
vm.runtime.on("TOOLBOX_EXTENSIONS_NEED_UPDATE", () => {
try {
fullReload();
} catch (e) {
console.error(e);
}
});
const oldStep = vm.runtime._step;
vm.runtime._step = function (...args) {
const ret = oldStep.call(this, ...args);
try {
quickReload();
} catch (e) {
console.error(e);
}
return ret;
};
addon.self.addEventListener("disabled", () => {
if (addon.tab.redux.state.scratchGui.editorTab.activeTabIndex === 3) {
addon.tab.redux.dispatch({
type: "scratch-gui/navigation/ACTIVATE_TAB",
activeTabIndex: 2
});
}
});
while (true) {
await addon.tab.waitForElement("[class^='react-tabs_react-tabs__tab-list']", {
markAsSeen: true,
reduxEvents: ["scratch-gui/mode/SET_PLAYER", "fontsLoaded/SET_FONTS_LOADED", "scratch-gui/locales/SELECT_LOCALE"],
reduxCondition: state => !state.scratchGui.mode.isPlayerOnly
});
addon.tab.appendToSharedSpace({
space: "afterSoundTab",
element: varTab,
order: 3
});
}
});
/***/ })
}]);
//# sourceMappingURL=addon-entry-variable-manager.js.map