@linkdlab/funcnodes_react_flow 0.3.2 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2626,7 +2626,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2626
2626
  \***************************************/
2627
2627
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2628
2628
 
2629
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var _funcnodesreactflow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../funcnodesreactflow */ \"./src/frontend/funcnodesreactflow/index.tsx\");\n/* harmony import */ var _header_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./header.scss */ \"./src/frontend/header/header.scss\");\n/* harmony import */ var _dialog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dialog */ \"./src/frontend/dialog.tsx\");\n/* harmony import */ var _radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @radix-ui/react-dropdown-menu */ \"../node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs\");\n/* harmony import */ var _mui_icons_material_MenuRounded__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/icons-material/MenuRounded */ \"../node_modules/@mui/icons-material/MenuRounded.js\");\n/* harmony import */ var _mui_material_Typography__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material/Typography */ \"../node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material_Stack__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material/Stack */ \"../node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_icons_material_ChevronRight__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/icons-material/ChevronRight */ \"../node_modules/@mui/icons-material/ChevronRight.js\");\n/* harmony import */ var _utils_data__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/data */ \"./src/utils/data.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar NewWorkerDialog = function (_a) {\n var trigger = _a.trigger, setOpen = _a.setOpen, open = _a.open;\n var _b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"), name = _b[0], setName = _b[1];\n var _c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false), copyLib = _c[0], setCopyLib = _c[1];\n var _d = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false), copyNS = _d[0], setCopyNS = _d[1];\n var fnrf_zst = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_funcnodesreactflow__WEBPACK_IMPORTED_MODULE_1__.FuncNodesContext);\n var workersstate = fnrf_zst.workers();\n var _e = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n name: \"None\",\n uuid: \"\",\n }), reference = _e[0], setReference = _e[1];\n if (!fnrf_zst.options.useWorkerManager)\n return null;\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_dialog__WEBPACK_IMPORTED_MODULE_3__[\"default\"], { setOpen: setOpen, open: open, trigger: trigger, title: \"New Worker\", description: \"Please provide a name and select a another worker as interpreter reference\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", null,\n \"Name:\",\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"br\", null),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"input\", { className: \"styledinput\", onChange: function (e) {\n setName(e.currentTarget.value);\n }, value: name })),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", null,\n \"Reference Worker:\",\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"br\", null),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"select\", { className: \"styleddropdown\", onChange: function (e) {\n var uuid = e.target.value;\n var name = e.target.selectedOptions[0].innerText;\n setReference({ name: name, uuid: uuid });\n }, value: reference.uuid },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"option\", { value: \"\" }, \"None\"),\n Object.keys(workersstate).map(function (workerid) { return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"option\", { className: \"\", key: workerid, value: workerid }, workersstate[workerid].name || workerid)); })),\n reference.uuid && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", null,\n \"Copy Lib:\",\n \" \",\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"input\", { type: \"checkbox\", className: \"styledcheckbox\", checked: copyLib, onChange: function (e) {\n setCopyLib(e.currentTarget.checked);\n } })),\n copyLib && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", null,\n \"Copy Nodespace\",\n \" \",\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"input\", { type: \"checkbox\", className: \"styledcheckbox\", checked: copyNS, onChange: function (e) {\n setCopyNS(e.currentTarget.checked);\n if (e.currentTarget.checked) {\n setCopyLib(true);\n }\n } }))))),\n name && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"button\", { className: \"styledbtn\", onClick: function () {\n var _a;\n (_a = fnrf_zst.workermanager) === null || _a === void 0 ? void 0 : _a.new_worker({\n name: name,\n reference: reference.uuid,\n copyLib: copyLib,\n copyNS: copyNS,\n });\n } }, \"Create\"))))));\n};\nvar Statusbar = function () {\n var fnrf_zst = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_funcnodesreactflow__WEBPACK_IMPORTED_MODULE_1__.FuncNodesContext);\n var progress = fnrf_zst.progress_state();\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"statusbar\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"span\", { className: \"statusbar-progressbar\", style: { width: Math.min(100, 100 * progress.progress) + \"%\" } }),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"span\", { className: \"statusbar-message\" }, progress.message)));\n};\nvar WorkerMenu = function () {\n var _a;\n var fnrf_zst = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_funcnodesreactflow__WEBPACK_IMPORTED_MODULE_1__.FuncNodesContext);\n var workersstate = fnrf_zst.workers();\n var _b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false), isNewWorkerDialogOpen = _b[0], setNewWorkerDialogOpen = _b[1];\n var workerselectchange = function (workerid) {\n if (workerid === \"__select__\")\n return;\n if (!fnrf_zst.workers)\n return;\n if (!fnrf_zst.workermanager)\n return;\n if (!workersstate[workerid])\n return;\n if (!workersstate[workerid].active) {\n //create popup\n var ans = window.confirm(\"this is an inactive worker, selecting it will start it, continue?\");\n if (!ans)\n return;\n }\n fnrf_zst.workermanager.set_active(workerid);\n };\n var exportWorker = function () { return __awaiter(void 0, void 0, void 0, function () {\n var data;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!fnrf_zst.worker)\n return [2 /*return*/];\n return [4 /*yield*/, fnrf_zst.worker.export()];\n case 1:\n data = _a.sent();\n (0,_utils_data__WEBPACK_IMPORTED_MODULE_4__.downloadBase64)(data, \"worker.fnw\", \"application/zip\");\n return [2 /*return*/];\n }\n });\n }); };\n var updateWorker = function () { return __awaiter(void 0, void 0, void 0, function () {\n var ans, data;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!fnrf_zst.worker)\n return [2 /*return*/];\n ans = window.confirm(\"Updateing the worker might replace the current nodespace, continue?\");\n if (!ans)\n return [2 /*return*/];\n return [4 /*yield*/, (0,_utils_data__WEBPACK_IMPORTED_MODULE_4__.fileDialogToBase64)(\".fnw\")];\n case 1:\n data = _a.sent();\n fnrf_zst.worker.update_from_export(data);\n return [2 /*return*/];\n }\n });\n }); };\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fragment, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Root, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Trigger, { asChild: true },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"button\", { className: \"styledbtn\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_material_Stack__WEBPACK_IMPORTED_MODULE_6__[\"default\"], { direction: \"row\", spacing: 1 },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_material_Typography__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, \"Worker\"),\n \" \",\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_icons_material_MenuRounded__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null)))),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Portal, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Content, { className: \"headermenucontent\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Group, null,\n fnrf_zst.options.useWorkerManager && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Sub, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.SubTrigger, { className: \"headermenuitem submenuitem\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_material_Stack__WEBPACK_IMPORTED_MODULE_6__[\"default\"], { direction: \"row\", spacing: 1 },\n \"Select\",\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_icons_material_ChevronRight__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null))),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Portal, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.SubContent, { className: \"headermenucontent\", sideOffset: 2, alignOffset: -5 },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.RadioGroup, { value: (_a = fnrf_zst.worker) === null || _a === void 0 ? void 0 : _a.uuid, onValueChange: function (value) {\n workerselectchange(value);\n } }, Object.keys(workersstate)\n .sort(function (a, b) {\n // First, sort by active status (active workers come first)\n if (workersstate[a].active &&\n !workersstate[b].active)\n return -1;\n if (!workersstate[a].active &&\n workersstate[b].active)\n return 1;\n // If both are active or both are inactive, sort by name or ID\n var nameA = workersstate[a].name || a;\n var nameB = workersstate[b].name || b;\n return nameA.localeCompare(nameB);\n })\n .map(function (workerid) {\n var _a;\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.RadioItem, { className: \"headermenuitem workerselectoption\" +\n (workersstate[workerid].active\n ? \" active\"\n : \" inactive\") +\n \" headermenuitem\", key: workerid, value: workerid, disabled: workerid === ((_a = fnrf_zst.worker) === null || _a === void 0 ? void 0 : _a.uuid) }, workersstate[workerid].name || workerid));\n })))))),\n fnrf_zst.worker && fnrf_zst.worker.is_open && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fragment, null,\n fnrf_zst.workermanager && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Item, { className: \"headermenuitem\", onClick: function () {\n var _a;\n if (!fnrf_zst.worker)\n return;\n if (!fnrf_zst.workermanager)\n return fnrf_zst.logger.error(\"no workermanager\");\n (_a = fnrf_zst.workermanager) === null || _a === void 0 ? void 0 : _a.restart_worker(fnrf_zst.worker.uuid);\n } }, \"Restart\")),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Item, { className: \"headermenuitem\", onClick: function () {\n if (!fnrf_zst.worker)\n return;\n fnrf_zst.worker.stop();\n } }, \"Stop\"),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Item, { className: \"headermenuitem\", onClick: exportWorker }, \"Export\"),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Item, { className: \"headermenuitem\", onClick: updateWorker }, \"Update\"))),\n fnrf_zst.options.useWorkerManager && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fragment, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Item, { className: \"headermenuitem\", onClick: function () { return setNewWorkerDialogOpen(true); } }, \"New\"))))))),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(NewWorkerDialog, { open: isNewWorkerDialogOpen, setOpen: setNewWorkerDialogOpen })));\n};\nvar NodeSpaceMenu = function () {\n var fnrf_zst = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_funcnodesreactflow__WEBPACK_IMPORTED_MODULE_1__.FuncNodesContext);\n var onNew = function () {\n var _a;\n var alert = window.confirm(\"Are you sure you want to start a new flow?\");\n if (alert) {\n (_a = fnrf_zst.worker) === null || _a === void 0 ? void 0 : _a.clear();\n }\n };\n var onSave = function () { return __awaiter(void 0, void 0, void 0, function () {\n var data, blob, url, a;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, ((_a = fnrf_zst.worker) === null || _a === void 0 ? void 0 : _a.save())];\n case 1:\n data = _b.sent();\n if (!data)\n return [2 /*return*/];\n blob = new Blob([JSON.stringify(data)], {\n type: \"application/json\",\n });\n url = URL.createObjectURL(blob);\n a = document.createElement(\"a\");\n a.href = url;\n a.download = \"flow.json\";\n a.click();\n URL.revokeObjectURL(url);\n a.remove();\n return [2 /*return*/];\n }\n });\n }); };\n var onOpen = function () { return __awaiter(void 0, void 0, void 0, function () {\n var input;\n return __generator(this, function (_a) {\n input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \".json\";\n input.onchange = function (e) { return __awaiter(void 0, void 0, void 0, function () {\n var file, reader;\n var _a;\n return __generator(this, function (_b) {\n file = (_a = e.target.files) === null || _a === void 0 ? void 0 : _a[0];\n if (!file)\n return [2 /*return*/];\n reader = new FileReader();\n reader.onload = function (e) { return __awaiter(void 0, void 0, void 0, function () {\n var contents, data;\n var _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n contents = (_a = e.target) === null || _a === void 0 ? void 0 : _a.result;\n if (!contents)\n return [2 /*return*/];\n data = JSON.parse(contents);\n return [4 /*yield*/, ((_b = fnrf_zst.worker) === null || _b === void 0 ? void 0 : _b.load(data))];\n case 1:\n _c.sent();\n return [2 /*return*/];\n }\n });\n }); };\n reader.readAsText(file);\n return [2 /*return*/];\n });\n }); };\n input.click();\n return [2 /*return*/];\n });\n }); };\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fragment, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Root, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Trigger, { asChild: true },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"button\", { className: \"styledbtn\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_material_Stack__WEBPACK_IMPORTED_MODULE_6__[\"default\"], { direction: \"row\", spacing: 1 },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_material_Typography__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, \"Nodespace\"),\n \" \",\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_icons_material_MenuRounded__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null)))),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Portal, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Content, { className: \"headermenucontent\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Group, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Item, { className: \"headermenuitem\", onClick: onNew }, \"New\"),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Item, { className: \"headermenuitem\", onClick: onSave }, \"Save\"),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Item, { className: \"headermenuitem\", onClick: onOpen }, \"Load\")))))));\n};\nvar FuncnodesHeader = function (_a) {\n var headerprops = __rest(_a, []);\n var fnrf_zst = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_funcnodesreactflow__WEBPACK_IMPORTED_MODULE_1__.FuncNodesContext);\n var workerstate = fnrf_zst.workerstate();\n // pserudouse headerprops\n if (Object.keys(headerprops).length > 0) {\n fnrf_zst.logger.debug(\"headerprops\", headerprops);\n }\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"funcnodesreactflowheader\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"headerelement\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(Statusbar, null)),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"headerelement\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(WorkerMenu, null)),\n fnrf_zst.worker && workerstate.is_open && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"headerelement\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(NodeSpaceMenu, null)))));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FuncnodesHeader);\n\n\n//# sourceURL=webpack://@linkdlab/funcnodes_react_flow/./src/frontend/header/index.tsx?");
2629
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var _funcnodesreactflow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../funcnodesreactflow */ \"./src/frontend/funcnodesreactflow/index.tsx\");\n/* harmony import */ var _header_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./header.scss */ \"./src/frontend/header/header.scss\");\n/* harmony import */ var _dialog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dialog */ \"./src/frontend/dialog.tsx\");\n/* harmony import */ var _radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @radix-ui/react-dropdown-menu */ \"../node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs\");\n/* harmony import */ var _mui_icons_material_MenuRounded__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/icons-material/MenuRounded */ \"../node_modules/@mui/icons-material/MenuRounded.js\");\n/* harmony import */ var _mui_material_Typography__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material/Typography */ \"../node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material_Stack__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material/Stack */ \"../node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_icons_material_ChevronRight__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/icons-material/ChevronRight */ \"../node_modules/@mui/icons-material/ChevronRight.js\");\n/* harmony import */ var _utils_data__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/data */ \"./src/utils/data.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar NewWorkerDialog = function (_a) {\n var trigger = _a.trigger, setOpen = _a.setOpen, open = _a.open;\n var _b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"), name = _b[0], setName = _b[1];\n var _c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false), copyLib = _c[0], setCopyLib = _c[1];\n var _d = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false), copyNS = _d[0], setCopyNS = _d[1];\n var fnrf_zst = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_funcnodesreactflow__WEBPACK_IMPORTED_MODULE_1__.FuncNodesContext);\n var workersstate = fnrf_zst.workers();\n var _e = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n name: \"None\",\n uuid: \"\",\n }), reference = _e[0], setReference = _e[1];\n if (!fnrf_zst.options.useWorkerManager)\n return null;\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_dialog__WEBPACK_IMPORTED_MODULE_3__[\"default\"], { setOpen: setOpen, open: open, trigger: trigger, title: \"New Worker\", description: \"Please provide a name and select a another worker as interpreter reference\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", null,\n \"Name:\",\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"br\", null),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"input\", { className: \"styledinput\", onChange: function (e) {\n setName(e.currentTarget.value);\n }, value: name })),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", null,\n \"Reference Worker:\",\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"br\", null),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"select\", { className: \"styleddropdown\", onChange: function (e) {\n var uuid = e.target.value;\n var name = e.target.selectedOptions[0].innerText;\n setReference({ name: name, uuid: uuid });\n }, value: reference.uuid },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"option\", { value: \"\" }, \"None\"),\n Object.keys(workersstate).map(function (workerid) { return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"option\", { className: \"\", key: workerid, value: workerid }, workersstate[workerid].name || workerid)); })),\n reference.uuid && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", null,\n \"Copy Lib:\",\n \" \",\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"input\", { type: \"checkbox\", className: \"styledcheckbox\", checked: copyLib, onChange: function (e) {\n setCopyLib(e.currentTarget.checked);\n } })),\n copyLib && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", null,\n \"Copy Nodespace\",\n \" \",\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"input\", { type: \"checkbox\", className: \"styledcheckbox\", checked: copyNS, onChange: function (e) {\n setCopyNS(e.currentTarget.checked);\n if (e.currentTarget.checked) {\n setCopyLib(true);\n }\n } }))))),\n name && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"button\", { className: \"styledbtn\", onClick: function () {\n var _a;\n (_a = fnrf_zst.workermanager) === null || _a === void 0 ? void 0 : _a.new_worker({\n name: name,\n reference: reference.uuid,\n copyLib: copyLib,\n copyNS: copyNS,\n });\n setOpen(false);\n } }, \"Create\"))))));\n};\nvar Statusbar = function () {\n var fnrf_zst = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_funcnodesreactflow__WEBPACK_IMPORTED_MODULE_1__.FuncNodesContext);\n var progress = fnrf_zst.progress_state();\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"statusbar\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"span\", { className: \"statusbar-progressbar\", style: { width: Math.min(100, 100 * progress.progress) + \"%\" } }),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"span\", { className: \"statusbar-message\" }, progress.message)));\n};\nvar WorkerMenu = function () {\n var _a;\n var fnrf_zst = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_funcnodesreactflow__WEBPACK_IMPORTED_MODULE_1__.FuncNodesContext);\n var workersstate = fnrf_zst.workers();\n var _b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false), isNewWorkerDialogOpen = _b[0], setNewWorkerDialogOpen = _b[1];\n var workerselectchange = function (workerid) {\n if (workerid === \"__select__\")\n return;\n if (!fnrf_zst.workers)\n return;\n if (!fnrf_zst.workermanager)\n return;\n if (!workersstate[workerid])\n return;\n if (!workersstate[workerid].active) {\n //create popup\n var ans = window.confirm(\"this is an inactive worker, selecting it will start it, continue?\");\n if (!ans)\n return;\n }\n fnrf_zst.workermanager.set_active(workerid);\n };\n var exportWorker = function () { return __awaiter(void 0, void 0, void 0, function () {\n var data;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!fnrf_zst.worker)\n return [2 /*return*/];\n return [4 /*yield*/, fnrf_zst.worker.export()];\n case 1:\n data = _a.sent();\n (0,_utils_data__WEBPACK_IMPORTED_MODULE_4__.downloadBase64)(data, \"worker.fnw\", \"application/zip\");\n return [2 /*return*/];\n }\n });\n }); };\n var updateWorker = function () { return __awaiter(void 0, void 0, void 0, function () {\n var ans, data;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!fnrf_zst.worker)\n return [2 /*return*/];\n ans = window.confirm(\"Updateing the worker might replace the current nodespace, continue?\");\n if (!ans)\n return [2 /*return*/];\n return [4 /*yield*/, (0,_utils_data__WEBPACK_IMPORTED_MODULE_4__.fileDialogToBase64)(\".fnw\")];\n case 1:\n data = _a.sent();\n fnrf_zst.worker.update_from_export(data);\n return [2 /*return*/];\n }\n });\n }); };\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fragment, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Root, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Trigger, { asChild: true },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"button\", { className: \"styledbtn\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_material_Stack__WEBPACK_IMPORTED_MODULE_6__[\"default\"], { direction: \"row\", spacing: 1 },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_material_Typography__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, \"Worker\"),\n \" \",\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_icons_material_MenuRounded__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null)))),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Portal, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Content, { className: \"headermenucontent\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Group, null,\n fnrf_zst.options.useWorkerManager && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Sub, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.SubTrigger, { className: \"headermenuitem submenuitem\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_material_Stack__WEBPACK_IMPORTED_MODULE_6__[\"default\"], { direction: \"row\", spacing: 1 },\n \"Select\",\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_icons_material_ChevronRight__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null))),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Portal, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.SubContent, { className: \"headermenucontent\", sideOffset: 2, alignOffset: -5 },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.RadioGroup, { value: (_a = fnrf_zst.worker) === null || _a === void 0 ? void 0 : _a.uuid, onValueChange: function (value) {\n workerselectchange(value);\n } }, Object.keys(workersstate)\n .sort(function (a, b) {\n // First, sort by active status (active workers come first)\n if (workersstate[a].active &&\n !workersstate[b].active)\n return -1;\n if (!workersstate[a].active &&\n workersstate[b].active)\n return 1;\n // If both are active or both are inactive, sort by name or ID\n var nameA = workersstate[a].name || a;\n var nameB = workersstate[b].name || b;\n return nameA.localeCompare(nameB);\n })\n .map(function (workerid) {\n var _a;\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.RadioItem, { className: \"headermenuitem workerselectoption\" +\n (workersstate[workerid].active\n ? \" active\"\n : \" inactive\") +\n \" headermenuitem\", key: workerid, value: workerid, disabled: workerid === ((_a = fnrf_zst.worker) === null || _a === void 0 ? void 0 : _a.uuid) }, workersstate[workerid].name || workerid));\n })))))),\n fnrf_zst.worker && fnrf_zst.worker.is_open && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fragment, null,\n fnrf_zst.workermanager && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Item, { className: \"headermenuitem\", onClick: function () {\n var _a;\n if (!fnrf_zst.worker)\n return;\n if (!fnrf_zst.workermanager)\n return fnrf_zst.logger.error(\"no workermanager\");\n (_a = fnrf_zst.workermanager) === null || _a === void 0 ? void 0 : _a.restart_worker(fnrf_zst.worker.uuid);\n } }, \"Restart\")),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Item, { className: \"headermenuitem\", onClick: function () {\n if (!fnrf_zst.worker)\n return;\n fnrf_zst.worker.stop();\n } }, \"Stop\"),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Item, { className: \"headermenuitem\", onClick: exportWorker }, \"Export\"),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Item, { className: \"headermenuitem\", onClick: updateWorker }, \"Update\"))),\n fnrf_zst.options.useWorkerManager && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fragment, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Item, { className: \"headermenuitem\", onClick: function () { return setNewWorkerDialogOpen(true); } }, \"New\"))))))),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(NewWorkerDialog, { open: isNewWorkerDialogOpen, setOpen: setNewWorkerDialogOpen })));\n};\nvar NodeSpaceMenu = function () {\n var fnrf_zst = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_funcnodesreactflow__WEBPACK_IMPORTED_MODULE_1__.FuncNodesContext);\n var onNew = function () {\n var _a;\n var alert = window.confirm(\"Are you sure you want to start a new flow?\");\n if (alert) {\n (_a = fnrf_zst.worker) === null || _a === void 0 ? void 0 : _a.clear();\n }\n };\n var onSave = function () { return __awaiter(void 0, void 0, void 0, function () {\n var data, blob, url, a;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, ((_a = fnrf_zst.worker) === null || _a === void 0 ? void 0 : _a.save())];\n case 1:\n data = _b.sent();\n if (!data)\n return [2 /*return*/];\n blob = new Blob([JSON.stringify(data)], {\n type: \"application/json\",\n });\n url = URL.createObjectURL(blob);\n a = document.createElement(\"a\");\n a.href = url;\n a.download = \"flow.json\";\n a.click();\n URL.revokeObjectURL(url);\n a.remove();\n return [2 /*return*/];\n }\n });\n }); };\n var onOpen = function () { return __awaiter(void 0, void 0, void 0, function () {\n var input;\n return __generator(this, function (_a) {\n input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \".json\";\n input.onchange = function (e) { return __awaiter(void 0, void 0, void 0, function () {\n var file, reader;\n var _a;\n return __generator(this, function (_b) {\n file = (_a = e.target.files) === null || _a === void 0 ? void 0 : _a[0];\n if (!file)\n return [2 /*return*/];\n reader = new FileReader();\n reader.onload = function (e) { return __awaiter(void 0, void 0, void 0, function () {\n var contents, data;\n var _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n contents = (_a = e.target) === null || _a === void 0 ? void 0 : _a.result;\n if (!contents)\n return [2 /*return*/];\n data = JSON.parse(contents);\n return [4 /*yield*/, ((_b = fnrf_zst.worker) === null || _b === void 0 ? void 0 : _b.load(data))];\n case 1:\n _c.sent();\n return [2 /*return*/];\n }\n });\n }); };\n reader.readAsText(file);\n return [2 /*return*/];\n });\n }); };\n input.click();\n return [2 /*return*/];\n });\n }); };\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fragment, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Root, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Trigger, { asChild: true },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"button\", { className: \"styledbtn\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_material_Stack__WEBPACK_IMPORTED_MODULE_6__[\"default\"], { direction: \"row\", spacing: 1 },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_material_Typography__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, \"Nodespace\"),\n \" \",\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_icons_material_MenuRounded__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null)))),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Portal, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Content, { className: \"headermenucontent\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Group, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Item, { className: \"headermenuitem\", onClick: onNew }, \"New\"),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Item, { className: \"headermenuitem\", onClick: onSave }, \"Save\"),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_radix_ui_react_dropdown_menu__WEBPACK_IMPORTED_MODULE_5__.Item, { className: \"headermenuitem\", onClick: onOpen }, \"Load\")))))));\n};\nvar FuncnodesHeader = function (_a) {\n var headerprops = __rest(_a, []);\n var fnrf_zst = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_funcnodesreactflow__WEBPACK_IMPORTED_MODULE_1__.FuncNodesContext);\n var workerstate = fnrf_zst.workerstate();\n // pserudouse headerprops\n if (Object.keys(headerprops).length > 0) {\n fnrf_zst.logger.debug(\"headerprops\", headerprops);\n }\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"funcnodesreactflowheader\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"headerelement\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(Statusbar, null)),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"headerelement\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(WorkerMenu, null)),\n fnrf_zst.worker && workerstate.is_open && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"headerelement\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(NodeSpaceMenu, null)))));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FuncnodesHeader);\n\n\n//# sourceURL=webpack://@linkdlab/funcnodes_react_flow/./src/frontend/header/index.tsx?");
2630
2630
 
2631
2631
  /***/ }),
2632
2632
 
@@ -2746,7 +2746,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2746
2746
  \************************************/
2747
2747
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2748
2748
 
2749
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ NodeName: () => (/* binding */ NodeName),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var _mui_icons_material_ExpandLess__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/icons-material/ExpandLess */ \"../node_modules/@mui/icons-material/ExpandLess.js\");\n/* harmony import */ var _mui_icons_material_Lan__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/icons-material/Lan */ \"../node_modules/@mui/icons-material/Lan.js\");\n/* harmony import */ var _mui_icons_material_PlayCircleFilled__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/icons-material/PlayCircleFilled */ \"../node_modules/@mui/icons-material/PlayCircleFilled.js\");\n/* harmony import */ var _node_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node.scss */ \"./src/frontend/node/node.scss\");\n/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! .. */ \"./src/frontend/index.tsx\");\n/* harmony import */ var _io__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./io */ \"./src/frontend/node/io/index.tsx\");\n/* harmony import */ var _dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dialog */ \"./src/frontend/dialog.tsx\");\n/* harmony import */ var _body_data_renderer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./body_data_renderer */ \"./src/frontend/node/body_data_renderer.tsx\");\n/* harmony import */ var _datarenderer_rendermappings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../datarenderer/rendermappings */ \"./src/frontend/datarenderer/rendermappings.tsx\");\n/* harmony import */ var _utils_progressbar__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/progressbar */ \"./src/frontend/utils/progressbar.tsx\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n\n\n\n\n\n\n\n\n\n\n\nvar NodeHeader = function (_a) {\n var node_data = _a.node_data;\n var fnrf_zst = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(___WEBPACK_IMPORTED_MODULE_2__.FuncNodesContext);\n var clicktrigger = function () {\n fnrf_zst.on_node_action({\n type: \"trigger\",\n from_remote: false,\n id: node_data.id,\n });\n };\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"nodeheader\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"nodeheader_element\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_icons_material_PlayCircleFilled__WEBPACK_IMPORTED_MODULE_8__[\"default\"], { fontSize: \"inherit\", className: \"triggerbutton\", onClick: clicktrigger }),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_icons_material_Lan__WEBPACK_IMPORTED_MODULE_9__[\"default\"], { fontSize: \"inherit\", onClick: function () { return __awaiter(void 0, void 0, void 0, function () {\n var _a, _b, _c;\n var _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n _b = (_a = fnrf_zst.logger).info;\n _c = [\"nodestatus\"];\n return [4 /*yield*/, ((_d = fnrf_zst.worker) === null || _d === void 0 ? void 0 : _d.get_node_status(node_data.id))];\n case 1:\n _b.apply(_a, _c.concat([_e.sent()]));\n return [2 /*return*/];\n }\n });\n }); } })),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"nodeheader_element nodeheader_title\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"nodeheader_title_text\" }, node_data.node_name)),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"nodeheader_element\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_icons_material_ExpandLess__WEBPACK_IMPORTED_MODULE_10__[\"default\"], { fontSize: \"inherit\" }))));\n};\nvar NodeDataRenderer = function (_a) {\n var _b, _c, _d, _e;\n var node_data = _a.node_data;\n var io = ((_c = (_b = node_data.render_options) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.src)\n ? node_data.io[(_e = (_d = node_data.render_options) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.src]\n : undefined;\n var _f = io\n ? (0,_body_data_renderer__WEBPACK_IMPORTED_MODULE_5__.BodyDataRendererForIo)(io)\n : [undefined, undefined], pvhandle = _f[0], overlayhandle = _f[1];\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"nodrag nodedatabody\" }, pvhandle && io && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_dialog__WEBPACK_IMPORTED_MODULE_4__[\"default\"], { trigger: react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_datarenderer_rendermappings__WEBPACK_IMPORTED_MODULE_6__.DynamicComponentLoader, { component: pvhandle, io: io })), onOpenChange: function (open) {\n if (open) {\n if (io === null || io === void 0 ? void 0 : io.try_get_full_value)\n io === null || io === void 0 ? void 0 : io.try_get_full_value();\n }\n } }, react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_datarenderer_rendermappings__WEBPACK_IMPORTED_MODULE_6__.DynamicComponentLoader, { component: overlayhandle, io: io })))));\n};\nvar NodeBody = function (_a) {\n var _b, _c;\n var node_data = _a.node_data;\n var inputs = Object.values(node_data.io).filter(function (io) { return io.is_input; });\n var outputs = Object.values(node_data.io).filter(function (io) { return !io.is_input; });\n if ((_c = (_b = node_data.render_options) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.src) {\n }\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"nodebody\" },\n outputs.map(function (io) {\n if (io.hidden)\n return null;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_io__WEBPACK_IMPORTED_MODULE_3__.NodeOutput, { key: io.id, io: io });\n }),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(NodeDataRenderer, { node_data: node_data }),\n inputs.map(function (io) {\n if (io.hidden)\n return null;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_io__WEBPACK_IMPORTED_MODULE_3__.NodeInput, { key: io.id, io: io });\n })));\n};\nvar NodeName = function (_a) {\n var node_data = _a.node_data;\n var _b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(node_data.name), name = _b[0], setName = _b[1];\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n setName(node_data.name);\n }, [node_data]);\n var fnrf_zst = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(___WEBPACK_IMPORTED_MODULE_2__.FuncNodesContext);\n var handleChange = function (event) {\n setName(event.target.value);\n };\n var finalSetName = function (e) {\n var new_name = e.target.value;\n fnrf_zst.on_node_action({\n type: \"update\",\n from_remote: false,\n id: node_data.id,\n node: { name: new_name },\n });\n };\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"input\", { className: \"nodename_input\", value: name, onChange: handleChange, onBlur: finalSetName }));\n};\nvar NodeFooter = function (_a) {\n var node_data = _a.node_data;\n var nodeprogess = node_data.progressState();\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"nodefooter\" },\n node_data.error && react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"nodeerror\" }, node_data.error),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_utils_progressbar__WEBPACK_IMPORTED_MODULE_7__[\"default\"], { timer: true, showText: true, total: nodeprogess.total, label: nodeprogess.label, current: nodeprogess.current })));\n};\n/**\n * A generic function to deeply merge two objects of type T.\n *\n * @param {T} target - The target object to be merged.\n * @param {DeepPartial<T>} source - The source object to merge into the target. All properties of this object are optional.\n *\n * @returns {Object} An object containing the merged object (new_obj) and a boolean indicating if there was a change (change).\n *\n * @throws {Type 'string' cannot be used to index type 'T'} This error is ignored using the @ts-ignore directive because we are dynamically accessing properties of a generic type T.\n */\nvar DefaultNode = function (_a) {\n var data = _a.data;\n // Use the NodeStore to get the data for the node.\n var storedata = data.UseNodeStore();\n var collapsed = storedata.frontend.collapsed || false;\n var _b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false), visualTrigger = _b[0], setVisualTrigger = _b[1];\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var timeoutId;\n // When in_trigger becomes true, set visualTrigger to true immediately\n if (storedata.in_trigger) {\n setVisualTrigger(true);\n }\n else if (visualTrigger) {\n // When in_trigger becomes false, wait for a minimum duration before setting visualTrigger to false\n timeoutId = setTimeout(function () { return setVisualTrigger(false); }, 200); // 50ms or any other duration you see fit\n }\n return function () { return clearTimeout(timeoutId); }; // Cleanup timeout on component unmount or state changes\n }, [storedata.in_trigger, visualTrigger]);\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fragment, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"innernode\" +\n (visualTrigger ? \" intrigger\" : \"\") +\n (storedata.error ? \" error\" : \"\") },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(NodeHeader, { node_data: storedata }),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(NodeName, { node_data: storedata }),\n collapsed ? null : react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(NodeBody, { node_data: storedata }),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(NodeFooter, { node_data: storedata }))));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DefaultNode);\n\n\n\n//# sourceURL=webpack://@linkdlab/funcnodes_react_flow/./src/frontend/node/node.tsx?");
2749
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ NodeName: () => (/* binding */ NodeName),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var _mui_icons_material_ExpandLess__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/icons-material/ExpandLess */ \"../node_modules/@mui/icons-material/ExpandLess.js\");\n/* harmony import */ var _mui_icons_material_Lan__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/icons-material/Lan */ \"../node_modules/@mui/icons-material/Lan.js\");\n/* harmony import */ var _mui_icons_material_PlayCircleFilled__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/icons-material/PlayCircleFilled */ \"../node_modules/@mui/icons-material/PlayCircleFilled.js\");\n/* harmony import */ var _node_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node.scss */ \"./src/frontend/node/node.scss\");\n/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! .. */ \"./src/frontend/index.tsx\");\n/* harmony import */ var _io__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./io */ \"./src/frontend/node/io/index.tsx\");\n/* harmony import */ var _dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dialog */ \"./src/frontend/dialog.tsx\");\n/* harmony import */ var _body_data_renderer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./body_data_renderer */ \"./src/frontend/node/body_data_renderer.tsx\");\n/* harmony import */ var _datarenderer_rendermappings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../datarenderer/rendermappings */ \"./src/frontend/datarenderer/rendermappings.tsx\");\n/* harmony import */ var _utils_progressbar__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/progressbar */ \"./src/frontend/utils/progressbar.tsx\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n\n\n\n\n\n\n\n\n\n\n\nvar NodeHeader = function (_a) {\n var node_data = _a.node_data;\n var fnrf_zst = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(___WEBPACK_IMPORTED_MODULE_2__.FuncNodesContext);\n var clicktrigger = function () {\n fnrf_zst.on_node_action({\n type: \"trigger\",\n from_remote: false,\n id: node_data.id,\n });\n };\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"nodeheader\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"nodeheader_element\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_icons_material_PlayCircleFilled__WEBPACK_IMPORTED_MODULE_8__[\"default\"], { fontSize: \"inherit\", className: \"triggerbutton\", onClick: clicktrigger }),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_icons_material_Lan__WEBPACK_IMPORTED_MODULE_9__[\"default\"], { fontSize: \"inherit\", onClick: function () { return __awaiter(void 0, void 0, void 0, function () {\n var _a, _b, _c;\n var _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n _b = (_a = fnrf_zst.logger).info;\n _c = [\"nodestatus\"];\n return [4 /*yield*/, ((_d = fnrf_zst.worker) === null || _d === void 0 ? void 0 : _d.get_node_status(node_data.id))];\n case 1:\n _b.apply(_a, _c.concat([_e.sent()]));\n return [2 /*return*/];\n }\n });\n }); } })),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"nodeheader_element nodeheader_title\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"nodeheader_title_text\" }, node_data.node_name)),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"nodeheader_element\" },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_mui_icons_material_ExpandLess__WEBPACK_IMPORTED_MODULE_10__[\"default\"], { fontSize: \"inherit\" }))));\n};\nvar NodeDataRenderer = function (_a) {\n var _b, _c, _d, _e;\n var node_data = _a.node_data;\n var io = ((_c = (_b = node_data.render_options) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.src)\n ? node_data.io[(_e = (_d = node_data.render_options) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.src]\n : undefined;\n var _f = io\n ? (0,_body_data_renderer__WEBPACK_IMPORTED_MODULE_5__.BodyDataRendererForIo)(io)\n : [undefined, undefined], pvhandle = _f[0], overlayhandle = _f[1];\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"nodrag nodedatabody\" }, pvhandle && io && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_dialog__WEBPACK_IMPORTED_MODULE_4__[\"default\"], { trigger: react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_datarenderer_rendermappings__WEBPACK_IMPORTED_MODULE_6__.DynamicComponentLoader, { component: pvhandle, io: io })), onOpenChange: function (open) {\n if (open) {\n if (io === null || io === void 0 ? void 0 : io.try_get_full_value)\n io === null || io === void 0 ? void 0 : io.try_get_full_value();\n }\n } }, react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_datarenderer_rendermappings__WEBPACK_IMPORTED_MODULE_6__.DynamicComponentLoader, { component: overlayhandle, io: io })))));\n};\nvar NodeBody = function (_a) {\n var _b, _c;\n var node_data = _a.node_data;\n var inputs = Object.values(node_data.io).filter(function (io) { return io.is_input; });\n var outputs = Object.values(node_data.io).filter(function (io) { return !io.is_input; });\n if ((_c = (_b = node_data.render_options) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.src) {\n }\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"nodebody\" },\n outputs.map(function (io) {\n if (io.hidden)\n return null;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_io__WEBPACK_IMPORTED_MODULE_3__.NodeOutput, { key: io.id, io: io });\n }),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(NodeDataRenderer, { node_data: node_data }),\n inputs.map(function (io) {\n if (io.hidden)\n return null;\n return react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_io__WEBPACK_IMPORTED_MODULE_3__.NodeInput, { key: io.id, io: io });\n })));\n};\nvar NodeName = function (_a) {\n var node_data = _a.node_data;\n var _b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(node_data.name), name = _b[0], setName = _b[1];\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n setName(node_data.name);\n }, [node_data]);\n var fnrf_zst = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(___WEBPACK_IMPORTED_MODULE_2__.FuncNodesContext);\n var handleChange = function (event) {\n setName(event.target.value);\n };\n var finalSetName = function (e) {\n var new_name = e.target.value;\n fnrf_zst.on_node_action({\n type: \"update\",\n from_remote: false,\n id: node_data.id,\n node: { name: new_name },\n });\n };\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"input\", { className: \"nodename_input\", value: name, onChange: handleChange, onBlur: finalSetName }));\n};\nvar NodeProgressBar = function (_a) {\n var node_data = _a.node_data;\n if (!node_data.progress)\n return null;\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_utils_progressbar__WEBPACK_IMPORTED_MODULE_7__[\"default\"], { style: {\n height: node_data.progress.prefix === \"idle\" ? \"0px\" : undefined,\n }, state: node_data.progress, className: \"nodeprogress\" }));\n};\nvar NodeFooter = function (_a) {\n var node_data = _a.node_data;\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"nodefooter\" },\n node_data.error && react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"nodeerror\" }, node_data.error),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(NodeProgressBar, { node_data: node_data })));\n};\n/**\n * A generic function to deeply merge two objects of type T.\n *\n * @param {T} target - The target object to be merged.\n * @param {DeepPartial<T>} source - The source object to merge into the target. All properties of this object are optional.\n *\n * @returns {Object} An object containing the merged object (new_obj) and a boolean indicating if there was a change (change).\n *\n * @throws {Type 'string' cannot be used to index type 'T'} This error is ignored using the @ts-ignore directive because we are dynamically accessing properties of a generic type T.\n */\nvar DefaultNode = function (_a) {\n var data = _a.data;\n // Use the NodeStore to get the data for the node.\n var storedata = data.UseNodeStore();\n var collapsed = storedata.frontend.collapsed || false;\n var _b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false), visualTrigger = _b[0], setVisualTrigger = _b[1];\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var timeoutId;\n // When in_trigger becomes true, set visualTrigger to true immediately\n if (storedata.in_trigger) {\n setVisualTrigger(true);\n }\n else if (visualTrigger) {\n // When in_trigger becomes false, wait for a minimum duration before setting visualTrigger to false\n timeoutId = setTimeout(function () { return setVisualTrigger(false); }, 200); // 50ms or any other duration you see fit\n }\n return function () { return clearTimeout(timeoutId); }; // Cleanup timeout on component unmount or state changes\n }, [storedata.in_trigger, visualTrigger]);\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fragment, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"innernode\" +\n (visualTrigger ? \" intrigger\" : \"\") +\n (storedata.error ? \" error\" : \"\") },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(NodeHeader, { node_data: storedata }),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(NodeName, { node_data: storedata }),\n collapsed ? null : react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(NodeBody, { node_data: storedata }),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(NodeFooter, { node_data: storedata }))));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DefaultNode);\n\n\n\n//# sourceURL=webpack://@linkdlab/funcnodes_react_flow/./src/frontend/node/node.tsx?");
2750
2750
 
2751
2751
  /***/ }),
2752
2752
 
@@ -2786,7 +2786,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2786
2786
  \********************************************/
2787
2787
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2788
2788
 
2789
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n\nvar units_per_second = function (_a) {\n var start = _a.start, _b = _a.start_items, start_items = _b === void 0 ? 0 : _b, items = _a.items;\n //returns the rate in units per second\n var elapsed = (Date.now() - start) / 1000;\n if (items === undefined) {\n return 0;\n }\n return (items - start_items) / elapsed;\n};\nvar ProgressBar = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function (_a, ref) {\n var _b = _a.initial, initial = _b === void 0 ? 0 : _b, _c = _a.current, current = _c === void 0 ? 0 : _c, _d = _a.label, label = _d === void 0 ? \"\" : _d, showText = _a.showText, _e = _a.unit, unit = _e === void 0 ? \"items\" : _e, total = _a.total, _f = _a.timer, timer = _f === void 0 ? false : _f;\n var _g = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initial), initialValue = _g[0], setInitialValue = _g[1];\n var _h = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(current), _current = _h[0], setCurrent = _h[1];\n var _j = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(Date.now()), startTime = _j[0], setStartTime = _j[1];\n var _k = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), unitsPerSecond = _k[0], setUnitsPerSecond = _k[1];\n var _l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(Infinity), eta = _l[0], setEta = _l[1];\n var _m = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(label), clabel = _m[0], setLabel = _m[1];\n var previousValue = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(initial);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var interval = setInterval(function () {\n if (total === 0)\n return;\n var ups = units_per_second({\n start: startTime,\n start_items: initial,\n items: current,\n });\n var eta = total ? (total - current) / ups : Infinity;\n setEta(eta);\n setUnitsPerSecond(ups);\n }, 1000);\n return function () { return clearInterval(interval); };\n }, [current, total, startTime, initialValue]);\n timer &&\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var interval = setInterval(function () {\n handleIncrement(1);\n console.log(\"incrementing\");\n }, 1000);\n return function () { return clearInterval(interval); };\n });\n var handleIncrement = function (amount) {\n setCurrent(function (prev) { return Math.min(prev + amount, total || Infinity); });\n previousValue.current = current;\n };\n var text = \"\";\n var percentage = total ? (current / total) * 100 : 0;\n if (showText) {\n text = clabel;\n if (total !== 0) {\n text = \": \".concat(current);\n if (total !== undefined) {\n text += \"/\".concat(total);\n }\n text += \" \".concat(unit);\n }\n }\n // Expose the handleIncrement function to the parent via ref\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useImperativeHandle)(ref, function () { return ({\n increment: handleIncrement,\n setCurrent: setCurrent,\n reset: function (initial) {\n setStartTime(Date.now());\n setCurrent(0);\n setUnitsPerSecond(null);\n setEta(Infinity);\n setInitialValue(initial);\n setLabel(label);\n },\n }); });\n console.log(eta);\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"progress-bar-container\", style: {\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n } },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"progress-bar-fill\", style: {\n width: \"\".concat(percentage, \"%\"),\n height: \"100%\",\n backgroundColor: \"#76c7c0\",\n transition: \"width 0.3s ease-in-out\",\n position: \"absolute\",\n } }),\n showText && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", null,\n text,\n unitsPerSecond !== null && (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Fragment, null,\n unitsPerSecond.toExponential(),\n \" \",\n unit,\n \"/s \",\n eta)))))));\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ProgressBar);\n\n\n//# sourceURL=webpack://@linkdlab/funcnodes_react_flow/./src/frontend/utils/progressbar.tsx?");
2789
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var _utils_autolayout_txt__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/autolayout/txt */ \"./src/utils/autolayout/txt.ts\");\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\nfunction formatMeter(options) {\n var _a, _b;\n if (options === void 0) { options = {\n n: 0,\n elapsed: 0,\n ascii: false,\n unit: \"it\",\n unit_scale: false,\n unit_divisor: 1000,\n }; }\n var total = (_a = options.total) !== null && _a !== void 0 ? _a : null;\n var n = options.n, unit_scale = options.unit_scale, elapsed = options.elapsed, \n // ascii,\n unit = options.unit, unit_divisor = options.unit_divisor, \n // ncols = undefined,\n _c = options.prefix, \n // ncols = undefined,\n prefix = _c === void 0 ? \"\" : _c, _d = options.rate, rate = _d === void 0 ? undefined : _d, \n // bar_format = undefined,\n _e = options.postfix, \n // bar_format = undefined,\n postfix = _e === void 0 ? null : _e, _f = options.initial, initial = _f === void 0 ? 0 : _f;\n if (total !== null && n >= total + 0.5) {\n total = null;\n }\n var scaledN = n;\n var scaledTotal = total;\n var scaledRate = rate;\n if (unit_scale && unit_scale !== true && unit_scale !== 1) {\n if (total !== null) {\n scaledTotal = total * unit_scale;\n }\n scaledN = n * unit_scale;\n if (rate !== undefined) {\n scaledRate = rate * unit_scale;\n }\n }\n var elapsedStr = formatInterval(elapsed);\n if (scaledRate === undefined && elapsed > 0) {\n scaledRate = (scaledN - initial) / elapsed;\n }\n var invRate = scaledRate ? 1 / scaledRate : undefined;\n var rateNoInvFmt = (scaledRate ? \"\".concat(scaledRate.toFixed(2)) : \"?\") + unit + \"/s\";\n var rateInvFmt = invRate ? \"\".concat(invRate.toFixed(2), \"s/\") + unit : \"?\";\n var rateFmt = invRate && invRate > 1 ? rateInvFmt : rateNoInvFmt;\n var nFmt = unit_scale\n ? formatSize(scaledN, unit_divisor)\n : scaledN.toString();\n var totalFmt = unit_scale && scaledTotal !== null\n ? formatSize(scaledTotal, unit_divisor)\n : (_b = scaledTotal === null || scaledTotal === void 0 ? void 0 : scaledTotal.toString()) !== null && _b !== void 0 ? _b : \"?\";\n var remaining = scaledRate && scaledTotal !== null\n ? (scaledTotal - scaledN) / scaledRate\n : 0;\n var remainingStr = scaledRate ? formatInterval(remaining) : \"?\";\n var lBar = prefix ? \"\".concat(prefix, \": \") : \"\";\n if (total !== null) {\n var percentage = (scaledN / total) * 100;\n var rBar = \" \".concat(nFmt, \"/\").concat(totalFmt, \" [\").concat(elapsedStr, \" < \").concat(remainingStr, \", \").concat(rateFmt).concat(postfix !== null && postfix !== void 0 ? postfix : \"\", \"]\");\n // const progressBar = createProgressBar(scaledN / total, ncols);\n return \"\".concat(lBar).concat(percentage.toFixed(0), \"%\").concat(rBar);\n }\n return \"\".concat(lBar).concat(nFmt).concat(unit, \" [\").concat(elapsedStr, \", \").concat(rateFmt).concat(postfix !== null && postfix !== void 0 ? postfix : \"\", \"]\");\n}\nfunction formatInterval(seconds) {\n var minutes = Math.floor(seconds / 60);\n var secs = Math.floor(seconds % 60);\n return \"\".concat(minutes, \":\").concat(secs.toString().padStart(2, \"0\"));\n}\nfunction formatSize(value, divisor) {\n var units = [\"\", \"K\", \"M\", \"G\", \"T\"];\n var unitIndex = 0;\n while (value >= divisor && unitIndex < units.length - 1) {\n value /= divisor;\n unitIndex++;\n }\n return \"\".concat(value.toFixed(2)).concat(units[unitIndex]);\n}\n// function createProgressBar(\n// fraction: number,\n// ncols: number | undefined\n// ): string {\n// const width = ncols ?? 10;\n// const filled = Math.round(fraction * width);\n// const empty = width - filled;\n// return \"#\".repeat(filled) + \"-\".repeat(empty);\n// }\nvar ProgressBar = function (_a) {\n var state = _a.state, _b = _a.className, className = _b === void 0 ? \"reacttqdm\" : _b, rest = __rest(_a, [\"state\", \"className\"]);\n var containerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n var textcontainerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var handleResize = function () {\n if (!containerRef.current || !textcontainerRef.current)\n return;\n (0,_utils_autolayout_txt__WEBPACK_IMPORTED_MODULE_1__.fitTextToContainer)(containerRef.current, textcontainerRef.current, {\n maxFontSize: 12,\n decrementFactor: 0.9,\n });\n };\n handleResize(); // Initial calculation\n window.addEventListener(\"resize\", handleResize);\n return function () {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n console.log(\"STATE\", state);\n var progressPercentage = state.total ? (state.n / state.total) * 100 : 0;\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", __assign({ ref: containerRef, className: className }, rest),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { style: {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n } },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: className + \"-bar\", style: {\n position: \"absolute\",\n width: \"100%\",\n height: \"100%\", // Adjust height if needed\n overflow: \"hidden\",\n } },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: className + \"-progress\", style: {\n width: \"\".concat(progressPercentage, \"%\"),\n height: \"100%\",\n } })),\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: className + \"-text\", ref: textcontainerRef }, formatMeter(state)))));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ProgressBar);\n\n\n//# sourceURL=webpack://@linkdlab/funcnodes_react_flow/./src/frontend/utils/progressbar.tsx?");
2790
2790
 
2791
2791
  /***/ }),
2792
2792
 
@@ -2816,7 +2816,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2816
2816
  \******************************************/
2817
2817
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2818
2818
 
2819
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! uuid */ \"../node_modules/uuid/dist/esm-browser/v4.js\");\n/* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! zustand */ \"../node_modules/zustand/esm/index.mjs\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\n/* harmony import */ var _utils_debugger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/debugger */ \"./src/utils/debugger.ts\");\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n\n\n\n\nvar FuncNodesWorker = /** @class */ (function () {\n function FuncNodesWorker(data) {\n var _this = this;\n this.uuid = data.uuid;\n this.on_error =\n data.on_error ||\n (function (err) {\n var _a;\n (_a = _this._zustand) === null || _a === void 0 ? void 0 : _a.logger.error(err);\n });\n this.messagePromises = new Map();\n this._local_nodeupdates = new Map();\n this._nodeupdatetimer = setTimeout(function () {\n _this.sync_local_node_updates();\n }, 1000);\n this.state = (0,zustand__WEBPACK_IMPORTED_MODULE_2__.create)(function (_set, _get) { return ({\n is_open: true,\n }); });\n if (data.zustand)\n this.set_zustand(data.zustand);\n if (data.on_sync_complete) {\n this.on_sync_complete = data.on_sync_complete;\n }\n else {\n this.on_sync_complete = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {\n return [2 /*return*/];\n }); }); };\n }\n }\n FuncNodesWorker.prototype.set_zustand = function (zustand) {\n if (zustand === this._zustand)\n return;\n this._zustand = zustand;\n zustand.set_worker(this);\n this._zustand.auto_progress();\n this.stepwise_fullsync();\n };\n Object.defineProperty(FuncNodesWorker.prototype, \"is_open\", {\n get: function () {\n return this.state.getState().is_open;\n },\n set: function (v) {\n this.state.setState({ is_open: v });\n },\n enumerable: false,\n configurable: true\n });\n FuncNodesWorker.prototype.stepwise_fullsync = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this._zustand)\n return [2 /*return*/];\n if (!this.is_open)\n return [2 /*return*/];\n return [4 /*yield*/, this.sync_lib()];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.sync_external_worker()];\n case 2:\n _a.sent();\n return [4 /*yield*/, this.sync_funcnodes_plugins()];\n case 3:\n _a.sent();\n return [4 /*yield*/, this.sync_nodespace()];\n case 4:\n _a.sent();\n return [4 /*yield*/, this.sync_view_state()];\n case 5:\n _a.sent();\n return [4 /*yield*/, this.on_sync_complete(this)];\n case 6:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.sync_lib = function () {\n return __awaiter(this, void 0, void 0, function () {\n var resp;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this._zustand)\n return [2 /*return*/];\n if (!this.is_open)\n return [2 /*return*/];\n return [4 /*yield*/, this._send_cmd({\n cmd: \"get_library\",\n wait_for_response: true,\n retries: 2,\n })];\n case 1:\n resp = _a.sent();\n this._zustand.lib.libstate.getState().set({\n lib: resp,\n });\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.sync_external_worker = function () {\n return __awaiter(this, void 0, void 0, function () {\n var resp;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this._zustand)\n return [2 /*return*/];\n if (!this.is_open)\n return [2 /*return*/];\n return [4 /*yield*/, this._send_cmd({\n cmd: \"get_worker_dependencies\",\n wait_for_response: true,\n })];\n case 1:\n resp = _a.sent();\n this._zustand.lib.libstate.getState().set({\n external_worker: resp,\n });\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.sync_funcnodes_plugins = function () {\n return __awaiter(this, void 0, void 0, function () {\n var resp, _i, resp_1, key, plugin, _a, _b, js, scripttag, _c, _d, css, styletag, binaryString, binaryLen, bytes, i, blob, blobUrl, module;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n if (!this._zustand)\n return [2 /*return*/];\n if (!this.is_open)\n return [2 /*return*/];\n return [4 /*yield*/, this._send_cmd({\n cmd: \"get_plugin_keys\",\n wait_for_response: true,\n kwargs: { type: \"react\" },\n })];\n case 1:\n resp = (_e.sent());\n _i = 0, resp_1 = resp;\n _e.label = 2;\n case 2:\n if (!(_i < resp_1.length)) return [3 /*break*/, 6];\n key = resp_1[_i];\n return [4 /*yield*/, this._send_cmd({\n cmd: \"get_plugin\",\n wait_for_response: true,\n kwargs: { key: key, type: \"react\" },\n })];\n case 3:\n plugin = _e.sent();\n if (plugin.js) {\n for (_a = 0, _b = plugin.js; _a < _b.length; _a++) {\n js = _b[_a];\n scripttag = document.createElement(\"script\");\n scripttag.text = atob(js);\n document.body.appendChild(scripttag);\n }\n }\n if (plugin.css) {\n for (_c = 0, _d = plugin.css; _c < _d.length; _c++) {\n css = _d[_c];\n styletag = document.createElement(\"style\");\n styletag.innerHTML = atob(css);\n document.head.appendChild(styletag);\n }\n }\n if (!(plugin.module !== undefined)) return [3 /*break*/, 5];\n binaryString = atob(plugin.module);\n binaryLen = binaryString.length;\n bytes = new Uint8Array(binaryLen);\n for (i = 0; i < binaryLen; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n blob = new Blob([bytes], { type: \"application/javascript\" });\n blobUrl = URL.createObjectURL(blob);\n return [4 /*yield*/, import(/* webpackIgnore: true */ blobUrl)];\n case 4:\n module = _e.sent();\n // gc the blob\n URL.revokeObjectURL(blobUrl);\n this._zustand.add_plugin(key, module.default);\n _e.label = 5;\n case 5:\n _i++;\n return [3 /*break*/, 2];\n case 6: return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.sync_view_state = function () {\n return __awaiter(this, void 0, void 0, function () {\n var resp, nodeview, nodeid, nodev;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this._zustand)\n return [2 /*return*/];\n if (!this.is_open)\n return [2 /*return*/];\n return [4 /*yield*/, this._send_cmd({\n cmd: \"view_state\",\n wait_for_response: true,\n })];\n case 1:\n resp = (_a.sent());\n if (resp.renderoptions)\n this._zustand.update_render_options(resp.renderoptions);\n nodeview = resp.nodes;\n if (nodeview) {\n for (nodeid in nodeview) {\n nodev = nodeview[nodeid];\n this._zustand.on_node_action({\n type: \"update\",\n node: {\n frontend: nodev,\n },\n id: nodeid,\n from_remote: true,\n });\n }\n }\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.sync_nodespace = function () {\n return __awaiter(this, void 0, void 0, function () {\n var resp, _i, resp_2, node, edges, _a, edges_1, edge;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!this._zustand)\n return [2 /*return*/];\n if (!this.is_open)\n return [2 /*return*/];\n return [4 /*yield*/, this._send_cmd({\n cmd: \"get_nodes\",\n kwargs: { with_frontend: true },\n wait_for_response: true,\n })];\n case 1:\n resp = (_b.sent());\n for (_i = 0, resp_2 = resp; _i < resp_2.length; _i++) {\n node = resp_2[_i];\n this._recieve_node_added(node);\n }\n return [4 /*yield*/, this._send_cmd({\n cmd: \"get_edges\",\n wait_for_response: true,\n })];\n case 2:\n edges = (_b.sent());\n for (_a = 0, edges_1 = edges; _a < edges_1.length; _a++) {\n edge = edges_1[_a];\n this._recieve_edge_added.apply(this, edge);\n }\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.fullsync = function () {\n return __awaiter(this, void 0, void 0, function () {\n var resp, e_1, nodeview, _i, _a, node, _b, _c, edge;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n if (!this._zustand)\n return [2 /*return*/];\n if (!this.is_open)\n return [2 /*return*/];\n _d.label = 1;\n case 1:\n if (false) {}\n _d.label = 2;\n case 2:\n _d.trys.push([2, 4, , 5]);\n return [4 /*yield*/, this._send_cmd({ cmd: \"full_state\" })];\n case 3:\n resp = (_d.sent());\n return [3 /*break*/, 6];\n case 4:\n e_1 = _d.sent();\n this._zustand.logger.error(\"Error in fullsync\", e_1);\n return [3 /*break*/, 5];\n case 5: return [3 /*break*/, 1];\n case 6:\n this._zustand.logger.debug(\"Full state\", resp);\n this._zustand.lib.libstate.getState().set({\n lib: resp.backend.lib,\n external_worker: resp.worker_dependencies,\n });\n if (resp.view.renderoptions)\n this._zustand.update_render_options(resp.view.renderoptions);\n nodeview = resp.view.nodes;\n for (_i = 0, _a = resp.backend.nodes; _i < _a.length; _i++) {\n node = _a[_i];\n if (nodeview[node.id] !== undefined) {\n node.frontend = nodeview[node.id];\n }\n this._recieve_node_added(node);\n }\n for (_b = 0, _c = resp.backend.edges; _b < _c.length; _b++) {\n edge = _c[_b];\n this._recieve_edge_added.apply(this, edge);\n }\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype._recieve_edge_added = function (src_nid, src_ioid, trg_nid, trg_ioid) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (!this._zustand)\n return [2 /*return*/];\n this._zustand.on_edge_action(__assign({ type: \"add\", from_remote: true }, { src_nid: src_nid, src_ioid: src_ioid, trg_nid: trg_nid, trg_ioid: trg_ioid }));\n return [2 /*return*/];\n });\n });\n };\n FuncNodesWorker.prototype.trigger_node = function (node_id) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"trigger_node\",\n kwargs: { nid: node_id },\n wait_for_response: false,\n })];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.add_node = function (node_id) {\n return __awaiter(this, void 0, void 0, function () {\n var resp;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"add_node\",\n kwargs: { id: node_id },\n })];\n case 1:\n resp = _a.sent();\n this._recieve_node_added(resp);\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.remove_node = function (node_id) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"remove_node\",\n kwargs: { id: node_id },\n })];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype._recieve_node_added = function (data) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (!this._zustand)\n return [2 /*return*/];\n this._zustand.on_node_action({\n type: \"add\",\n node: data,\n id: data.id,\n from_remote: true,\n });\n return [2 /*return*/];\n });\n });\n };\n FuncNodesWorker.prototype.add_edge = function (_a) {\n var src_nid = _a.src_nid, src_ioid = _a.src_ioid, trg_nid = _a.trg_nid, trg_ioid = _a.trg_ioid, _b = _a.replace, replace = _b === void 0 ? false : _b;\n return this._send_cmd({\n cmd: \"add_edge\",\n kwargs: { src_nid: src_nid, src_ioid: src_ioid, trg_nid: trg_nid, trg_ioid: trg_ioid, replace: replace },\n });\n };\n FuncNodesWorker.prototype.remove_edge = function (_a) {\n var src_nid = _a.src_nid, src_ioid = _a.src_ioid, trg_nid = _a.trg_nid, trg_ioid = _a.trg_ioid;\n return this._send_cmd({\n cmd: \"remove_edge\",\n kwargs: { src_nid: src_nid, src_ioid: src_ioid, trg_nid: trg_nid, trg_ioid: trg_ioid },\n });\n };\n FuncNodesWorker.prototype.add_external_worker = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n var module = _b.module, cls_module = _b.cls_module, cls_name = _b.cls_name;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"add_external_worker\",\n kwargs: { module: module, cls_module: cls_module, cls_name: cls_name },\n })];\n case 1: return [2 /*return*/, _c.sent()];\n }\n });\n });\n };\n FuncNodesWorker.prototype.sync_local_node_updates = function () {\n var _this = this;\n clearTimeout(this._nodeupdatetimer);\n this._local_nodeupdates.forEach(function (node, id) { return __awaiter(_this, void 0, void 0, function () {\n var ans;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"update_node\",\n kwargs: { nid: id, data: node },\n wait_for_response: true,\n })];\n case 1:\n ans = _a.sent();\n if (!this._zustand)\n return [2 /*return*/];\n this._zustand.on_node_action({\n type: \"update\",\n node: ans,\n id: id,\n from_remote: true,\n });\n return [2 /*return*/];\n }\n });\n }); });\n this._local_nodeupdates.clear();\n this._nodeupdatetimer = setTimeout(function () {\n _this.sync_local_node_updates();\n }, 200);\n };\n FuncNodesWorker.prototype.locally_update_node = function (action) {\n // Add the type to the parameter\n var currentstate = this._local_nodeupdates.get(action.id);\n if (currentstate) {\n var _a = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.deep_merge)(currentstate, action.node), new_obj = _a.new_obj, change = _a.change;\n if (change) {\n this._local_nodeupdates.set(action.id, new_obj);\n }\n }\n else {\n this._local_nodeupdates.set(action.id, action.node);\n }\n if (action.immediate) {\n this.sync_local_node_updates();\n }\n };\n FuncNodesWorker.prototype.get_remote_node_state = function (nid) {\n return __awaiter(this, void 0, void 0, function () {\n var ans;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"get_node_state\",\n kwargs: { nid: nid },\n wait_for_response: true,\n })];\n case 1:\n ans = _a.sent();\n if (!this._zustand)\n return [2 /*return*/];\n this._zustand.on_node_action({\n type: \"update\",\n node: ans,\n id: ans.id,\n from_remote: true,\n });\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.set_io_value = function (_a) {\n var nid = _a.nid, ioid = _a.ioid, value = _a.value, _b = _a.set_default, set_default = _b === void 0 ? false : _b;\n return this._send_cmd({\n cmd: \"set_io_value\",\n kwargs: { nid: nid, ioid: ioid, value: value, set_default: set_default },\n wait_for_response: true,\n });\n };\n FuncNodesWorker.prototype.clear = function () {\n return this._send_cmd({ cmd: \"clear\" });\n };\n FuncNodesWorker.prototype.save = function () {\n return this._send_cmd({ cmd: \"save\", wait_for_response: true });\n };\n FuncNodesWorker.prototype.load = function (data) {\n var _this = this;\n return this._send_cmd({\n cmd: \"load_data\",\n kwargs: { data: data },\n wait_for_response: true,\n }).then(function () {\n _this.stepwise_fullsync();\n });\n };\n FuncNodesWorker.prototype.get_io_value = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n var res;\n var _c;\n var nid = _b.nid, ioid = _b.ioid;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"get_io_value\",\n kwargs: { nid: nid, ioid: ioid },\n wait_for_response: true,\n })];\n case 1:\n res = _d.sent();\n if (!this._zustand)\n return [2 /*return*/, res];\n this._zustand.on_node_action({\n type: \"update\",\n node: {\n io: (_c = {},\n _c[ioid] = {\n value: res,\n },\n _c),\n },\n id: nid,\n from_remote: true,\n });\n return [2 /*return*/, res];\n }\n });\n });\n };\n FuncNodesWorker.prototype.get_ios_values = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n var res, mappedres, ioid;\n var nid = _b.nid;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"get_ios_values\",\n kwargs: { nid: nid },\n wait_for_response: true,\n })];\n case 1:\n res = _c.sent();\n if (!this._zustand)\n return [2 /*return*/, res];\n mappedres = {};\n for (ioid in res) {\n mappedres[ioid] = { value: res[ioid] };\n }\n this._zustand.on_node_action({\n type: \"update\",\n node: {\n io: mappedres,\n },\n id: nid,\n from_remote: true,\n });\n return [2 /*return*/, res];\n }\n });\n });\n };\n FuncNodesWorker.prototype._send_cmd = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n var msg, wait_for_response_callback;\n var _this = this;\n var cmd = _b.cmd, kwargs = _b.kwargs, _c = _b.wait_for_response, wait_for_response = _c === void 0 ? true : _c, _d = _b.response_timeout, response_timeout = _d === void 0 ? 5000 : _d, _e = _b.retries, retries = _e === void 0 ? 2 : _e;\n return __generator(this, function (_f) {\n msg = {\n type: \"cmd\",\n cmd: cmd,\n kwargs: kwargs || {},\n };\n if (wait_for_response) {\n if (retries < 0)\n retries = 0;\n wait_for_response_callback = function () { return __awaiter(_this, void 0, void 0, function () {\n var response, _loop_1, this_1, state_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _loop_1 = function () {\n var msid, promise, e_2;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n msid = msg.id || (0,uuid__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n msg.id = msid;\n promise = new Promise(function (resolve, reject) {\n var timeout = setTimeout(function () {\n reject(\"Timeout@wait_for_response for \" + cmd);\n }, response_timeout);\n _this.messagePromises.set(msid, {\n resolve: function (data) {\n clearTimeout(timeout);\n resolve(data);\n _this.messagePromises.delete(msid);\n },\n reject: function (err) {\n clearTimeout(timeout);\n reject(err);\n _this.messagePromises.delete(msid);\n },\n });\n });\n return [4 /*yield*/, this_1.send(msg)];\n case 1:\n _b.sent();\n _b.label = 2;\n case 2:\n _b.trys.push([2, 4, , 5]);\n return [4 /*yield*/, promise];\n case 3:\n response = _b.sent();\n return [2 /*return*/, \"break\"];\n case 4:\n e_2 = _b.sent();\n if (retries === 0)\n throw e_2;\n retries -= 1;\n return [2 /*return*/, \"continue\"];\n case 5: return [2 /*return*/];\n }\n });\n };\n this_1 = this;\n _a.label = 1;\n case 1:\n if (!(retries >= 0)) return [3 /*break*/, 3];\n return [5 /*yield**/, _loop_1()];\n case 2:\n state_1 = _a.sent();\n if (state_1 === \"break\")\n return [3 /*break*/, 3];\n return [3 /*break*/, 1];\n case 3: return [2 /*return*/, response];\n }\n });\n }); };\n return [2 /*return*/, wait_for_response_callback()];\n }\n return [2 /*return*/, this.send(msg)];\n });\n });\n };\n FuncNodesWorker.prototype.send = function (_data) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n // this is the abstract method that should be implemented by subclasses\n throw new Error(\"Not implemented\");\n });\n });\n };\n FuncNodesWorker.prototype.handle_large_message_hint = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n return __generator(this, function (_c) {\n throw new Error(\"handle_large_message_hint not implemented \");\n });\n });\n };\n FuncNodesWorker.prototype.recieve_workerevent = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n var _c;\n var event = _b.event, data = _b.data;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _c = event;\n switch (_c) {\n case \"worker_error\": return [3 /*break*/, 1];\n case \"update_worker_dependencies\": return [3 /*break*/, 2];\n case \"lib_update\": return [3 /*break*/, 3];\n case \"fullsync\": return [3 /*break*/, 5];\n case \"external_worker_update\": return [3 /*break*/, 7];\n }\n return [3 /*break*/, 10];\n case 1:\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.logger.error(data.error)];\n case 2:\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.lib.libstate.getState().set({\n external_worker: data.worker_dependencies,\n })];\n case 3: return [4 /*yield*/, this.sync_lib()];\n case 4:\n _d.sent();\n return [2 /*return*/];\n case 5: return [4 /*yield*/, this.stepwise_fullsync()];\n case 6:\n _d.sent();\n return [2 /*return*/];\n case 7: return [4 /*yield*/, this.sync_lib()];\n case 8:\n _d.sent();\n return [4 /*yield*/, this.sync_external_worker()];\n case 9:\n _d.sent();\n return [2 /*return*/];\n case 10:\n console.warn(\"Unhandled worker event\", event, data);\n return [3 /*break*/, 11];\n case 11: return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.recieve_nodespace_event = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n var _c, _d;\n var event = _b.event, data = _b.data;\n return __generator(this, function (_e) {\n (0,_utils_debugger__WEBPACK_IMPORTED_MODULE_1__.print_object_size)(data, \"Data size for event \" + event, this._zustand);\n (0,_utils_debugger__WEBPACK_IMPORTED_MODULE_1__.print_object)(data, this._zustand);\n switch (event) {\n case \"after_set_value\":\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.on_node_action({\n type: \"update\",\n node: {\n id: data.node,\n io: (_c = {},\n _c[data.io] = {\n value: data.result,\n },\n _c),\n },\n id: data.node,\n from_remote: true,\n })];\n case \"after_update_value_options\":\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.on_node_action({\n type: \"update\",\n node: {\n id: data.node,\n io: (_d = {},\n _d[data.io] = {\n value_options: data.result,\n },\n _d),\n },\n id: data.node,\n from_remote: true,\n })];\n case \"triggerstart\":\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.on_node_action({\n type: \"update\",\n node: {\n id: data.node,\n in_trigger: true,\n },\n id: data.node,\n from_remote: true,\n })];\n case \"triggerdone\":\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.on_node_action({\n type: \"update\",\n node: {\n id: data.node,\n in_trigger: false,\n },\n id: data.node,\n from_remote: true,\n })];\n case \"node_trigger_error\":\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.on_node_action({\n type: \"error\",\n errortype: \"trigger\",\n error: data.error,\n id: data.node,\n from_remote: true,\n })];\n case \"node_removed\":\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.on_node_action({\n type: \"delete\",\n id: data.node,\n from_remote: true,\n })];\n case \"node_added\":\n return [2 /*return*/, this._recieve_node_added(data.node)];\n case \"after_disconnect\":\n if (!data.result)\n return [2 /*return*/];\n if (!Array.isArray(data.result))\n return [2 /*return*/];\n if (data.result.length !== 4)\n return [2 /*return*/];\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.on_edge_action({\n type: \"delete\",\n from_remote: true,\n src_nid: data.result[0],\n src_ioid: data.result[1],\n trg_nid: data.result[2],\n trg_ioid: data.result[3],\n })];\n case \"after_unforward\":\n if (!data.result)\n return [2 /*return*/];\n if (!Array.isArray(data.result))\n return [2 /*return*/];\n if (data.result.length !== 4)\n return [2 /*return*/];\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.on_edge_action({\n type: \"delete\",\n from_remote: true,\n src_nid: data.result[0],\n src_ioid: data.result[1],\n trg_nid: data.result[2],\n trg_ioid: data.result[3],\n })];\n case \"after_connect\":\n if (!data.result)\n return [2 /*return*/];\n if (!Array.isArray(data.result))\n return [2 /*return*/];\n if (data.result.length !== 4)\n return [2 /*return*/];\n return [2 /*return*/, this._recieve_edge_added.apply(this, data.result)];\n case \"after_forward\":\n if (!data.result)\n return [2 /*return*/];\n if (!Array.isArray(data.result))\n return [2 /*return*/];\n if (data.result.length !== 4)\n return [2 /*return*/];\n return [2 /*return*/, this._recieve_edge_added.apply(this, data.result)];\n case \"after_add_shelf\":\n if (!data.result)\n return [2 /*return*/];\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.lib.libstate.getState().set({\n lib: data.result,\n })];\n case \"after_remove_shelf\":\n if (!data.result)\n return [2 /*return*/];\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.lib.libstate.getState().set({\n lib: data.result,\n })];\n default:\n console.warn(\"Unhandled nodepsace event\", event, data);\n break;\n }\n return [2 /*return*/];\n });\n });\n };\n FuncNodesWorker.prototype.add_lib = function (lib) {\n return __awaiter(this, void 0, void 0, function () {\n var ans;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"add_package_dependency\",\n kwargs: { name: lib },\n wait_for_response: false,\n })];\n case 1:\n ans = _a.sent();\n return [2 /*return*/, ans];\n }\n });\n });\n };\n FuncNodesWorker.prototype.remove_lib = function (lib) {\n return __awaiter(this, void 0, void 0, function () {\n var ans;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"remove_package_dependency\",\n kwargs: { name: lib },\n wait_for_response: false,\n })];\n case 1:\n ans = _a.sent();\n return [2 /*return*/, ans];\n }\n });\n });\n };\n FuncNodesWorker.prototype.recieve = function (data) {\n return __awaiter(this, void 0, void 0, function () {\n var promise, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = data.type;\n switch (_a) {\n case \"nsevent\": return [3 /*break*/, 1];\n case \"result\": return [3 /*break*/, 3];\n case \"error\": return [3 /*break*/, 4];\n case \"progress\": return [3 /*break*/, 5];\n case \"workerevent\": return [3 /*break*/, 6];\n case \"large_message\": return [3 /*break*/, 8];\n }\n return [3 /*break*/, 10];\n case 1: return [4 /*yield*/, this.recieve_nodespace_event(data)];\n case 2: return [2 /*return*/, _b.sent()];\n case 3:\n promise = data.id && this.messagePromises.get(data.id);\n if (promise) {\n return [2 /*return*/, promise.resolve(data.result)];\n }\n return [3 /*break*/, 11];\n case 4:\n this.on_error(data.tb + \"\\n\" + data.error);\n promise = data.id && this.messagePromises.get(data.id);\n if (promise) {\n return [2 /*return*/, promise.reject(data.error)];\n }\n return [3 /*break*/, 11];\n case 5:\n if (!this._zustand)\n return [2 /*return*/];\n this._zustand.set_progress(data);\n return [3 /*break*/, 11];\n case 6: return [4 /*yield*/, this.recieve_workerevent(data)];\n case 7: return [2 /*return*/, _b.sent()];\n case 8: return [4 /*yield*/, this.handle_large_message_hint(data)];\n case 9: return [2 /*return*/, _b.sent()];\n case 10:\n console.warn(\"Unhandled message\", data);\n return [3 /*break*/, 11];\n case 11: return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.disconnect = function () { };\n FuncNodesWorker.prototype.onclose = function () {\n this.is_open = false;\n if (!this._zustand)\n return;\n this._zustand.auto_progress();\n };\n FuncNodesWorker.prototype.reconnect = function () {\n return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {\n return [2 /*return*/];\n }); });\n };\n FuncNodesWorker.prototype.stop = function () {\n return __awaiter(this, void 0, void 0, function () {\n var oldonclose;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({ cmd: \"stop_worker\", wait_for_response: false })];\n case 1:\n _a.sent();\n oldonclose = this.onclose.bind(this);\n this.onclose = function () {\n oldonclose();\n if (!_this._zustand)\n return;\n if (_this._zustand.worker === _this) {\n _this._zustand.clear_all();\n }\n _this.onclose = oldonclose;\n };\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.get_io_full_value = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n var res;\n var _c;\n var nid = _b.nid, ioid = _b.ioid;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"get_io_full_value\",\n kwargs: { nid: nid, ioid: ioid },\n wait_for_response: true,\n })];\n case 1:\n res = _d.sent();\n if (!this._zustand)\n return [2 /*return*/, res];\n this._zustand.on_node_action({\n type: \"update\",\n node: {\n io: (_c = {},\n _c[ioid] = {\n fullvalue: res,\n },\n _c),\n },\n id: nid,\n from_remote: true,\n });\n return [2 /*return*/, res];\n }\n });\n });\n };\n FuncNodesWorker.prototype.update_io_options = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n var res;\n var _c;\n var nid = _b.nid, ioid = _b.ioid, options = _b.options;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"update_io_options\",\n kwargs: __assign({ nid: nid, ioid: ioid }, options),\n wait_for_response: true,\n })];\n case 1:\n res = _d.sent();\n if (!this._zustand)\n return [2 /*return*/, res];\n this._zustand.on_node_action({\n type: \"update\",\n node: {\n io: (_c = {},\n _c[ioid] = __assign({}, options),\n _c),\n },\n id: nid,\n from_remote: true,\n });\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.get_node_status = function (nid) {\n return __awaiter(this, void 0, void 0, function () {\n var res;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"get_node_state\",\n kwargs: { nid: nid },\n wait_for_response: true,\n })];\n case 1:\n res = _a.sent();\n return [2 /*return*/, res];\n }\n });\n });\n };\n FuncNodesWorker.prototype.get_available_modules = function () {\n return __awaiter(this, void 0, void 0, function () {\n var res;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"get_available_modules\",\n wait_for_response: true,\n })];\n case 1:\n res = _a.sent();\n return [2 /*return*/, res];\n }\n });\n });\n };\n FuncNodesWorker.prototype.update_external_worker = function (worker_id, class_id, data) {\n return __awaiter(this, void 0, void 0, function () {\n var res;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"update_external_worker\",\n kwargs: __assign({ worker_id: worker_id, class_id: class_id }, data),\n wait_for_response: true,\n })];\n case 1:\n res = _a.sent();\n return [2 /*return*/, res];\n }\n });\n });\n };\n FuncNodesWorker.prototype.remove_external_worker = function (worker_id, class_id) {\n return __awaiter(this, void 0, void 0, function () {\n var res;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"remove_external_worker\",\n kwargs: { worker_id: worker_id, class_id: class_id },\n wait_for_response: true,\n })];\n case 1:\n res = _a.sent();\n return [2 /*return*/, res];\n }\n });\n });\n };\n FuncNodesWorker.prototype.export = function () {\n return __awaiter(this, void 0, void 0, function () {\n var res;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"export_worker\",\n wait_for_response: true,\n })];\n case 1:\n res = _a.sent();\n return [2 /*return*/, res];\n }\n });\n });\n };\n FuncNodesWorker.prototype.update_from_export = function (data) {\n return __awaiter(this, void 0, void 0, function () {\n var res;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"update_from_export\",\n kwargs: { data: data },\n wait_for_response: true,\n })];\n case 1:\n res = _a.sent();\n this.stepwise_fullsync();\n return [2 /*return*/, res];\n }\n });\n });\n };\n return FuncNodesWorker;\n}());\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FuncNodesWorker);\n\n\n//# sourceURL=webpack://@linkdlab/funcnodes_react_flow/./src/funcnodes/funcnodesworker.ts?");
2819
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! uuid */ \"../node_modules/uuid/dist/esm-browser/v4.js\");\n/* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! zustand */ \"../node_modules/zustand/esm/index.mjs\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\n/* harmony import */ var _utils_debugger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/debugger */ \"./src/utils/debugger.ts\");\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n\n\n\n\nvar FuncNodesWorker = /** @class */ (function () {\n function FuncNodesWorker(data) {\n var _this = this;\n this.uuid = data.uuid;\n this.on_error =\n data.on_error ||\n (function (err) {\n var _a;\n (_a = _this._zustand) === null || _a === void 0 ? void 0 : _a.logger.error(err);\n });\n this.messagePromises = new Map();\n this._local_nodeupdates = new Map();\n this._nodeupdatetimer = setTimeout(function () {\n _this.sync_local_node_updates();\n }, 1000);\n this.state = (0,zustand__WEBPACK_IMPORTED_MODULE_2__.create)(function (_set, _get) { return ({\n is_open: true,\n }); });\n if (data.zustand)\n this.set_zustand(data.zustand);\n if (data.on_sync_complete) {\n this.on_sync_complete = data.on_sync_complete;\n }\n else {\n this.on_sync_complete = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {\n return [2 /*return*/];\n }); }); };\n }\n }\n FuncNodesWorker.prototype.set_zustand = function (zustand) {\n if (zustand === this._zustand)\n return;\n this._zustand = zustand;\n zustand.set_worker(this);\n this._zustand.auto_progress();\n this.stepwise_fullsync();\n };\n Object.defineProperty(FuncNodesWorker.prototype, \"is_open\", {\n get: function () {\n return this.state.getState().is_open;\n },\n set: function (v) {\n this.state.setState({ is_open: v });\n },\n enumerable: false,\n configurable: true\n });\n FuncNodesWorker.prototype.stepwise_fullsync = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this._zustand)\n return [2 /*return*/];\n if (!this.is_open)\n return [2 /*return*/];\n return [4 /*yield*/, this.sync_lib()];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.sync_external_worker()];\n case 2:\n _a.sent();\n return [4 /*yield*/, this.sync_funcnodes_plugins()];\n case 3:\n _a.sent();\n return [4 /*yield*/, this.sync_nodespace()];\n case 4:\n _a.sent();\n return [4 /*yield*/, this.sync_view_state()];\n case 5:\n _a.sent();\n return [4 /*yield*/, this.on_sync_complete(this)];\n case 6:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.sync_lib = function () {\n return __awaiter(this, void 0, void 0, function () {\n var resp;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this._zustand)\n return [2 /*return*/];\n if (!this.is_open)\n return [2 /*return*/];\n return [4 /*yield*/, this._send_cmd({\n cmd: \"get_library\",\n wait_for_response: true,\n retries: 2,\n })];\n case 1:\n resp = _a.sent();\n this._zustand.lib.libstate.getState().set({\n lib: resp,\n });\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.sync_external_worker = function () {\n return __awaiter(this, void 0, void 0, function () {\n var resp;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this._zustand)\n return [2 /*return*/];\n if (!this.is_open)\n return [2 /*return*/];\n return [4 /*yield*/, this._send_cmd({\n cmd: \"get_worker_dependencies\",\n wait_for_response: true,\n })];\n case 1:\n resp = _a.sent();\n this._zustand.lib.libstate.getState().set({\n external_worker: resp,\n });\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.sync_funcnodes_plugins = function () {\n return __awaiter(this, void 0, void 0, function () {\n var resp, _i, resp_1, key, plugin, _a, _b, js, scripttag, _c, _d, css, styletag, binaryString, binaryLen, bytes, i, blob, blobUrl, module;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n if (!this._zustand)\n return [2 /*return*/];\n if (!this.is_open)\n return [2 /*return*/];\n return [4 /*yield*/, this._send_cmd({\n cmd: \"get_plugin_keys\",\n wait_for_response: true,\n kwargs: { type: \"react\" },\n })];\n case 1:\n resp = (_e.sent());\n _i = 0, resp_1 = resp;\n _e.label = 2;\n case 2:\n if (!(_i < resp_1.length)) return [3 /*break*/, 6];\n key = resp_1[_i];\n return [4 /*yield*/, this._send_cmd({\n cmd: \"get_plugin\",\n wait_for_response: true,\n kwargs: { key: key, type: \"react\" },\n })];\n case 3:\n plugin = _e.sent();\n if (plugin.js) {\n for (_a = 0, _b = plugin.js; _a < _b.length; _a++) {\n js = _b[_a];\n scripttag = document.createElement(\"script\");\n scripttag.text = atob(js);\n document.body.appendChild(scripttag);\n }\n }\n if (plugin.css) {\n for (_c = 0, _d = plugin.css; _c < _d.length; _c++) {\n css = _d[_c];\n styletag = document.createElement(\"style\");\n styletag.innerHTML = atob(css);\n document.head.appendChild(styletag);\n }\n }\n if (!(plugin.module !== undefined)) return [3 /*break*/, 5];\n binaryString = atob(plugin.module);\n binaryLen = binaryString.length;\n bytes = new Uint8Array(binaryLen);\n for (i = 0; i < binaryLen; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n blob = new Blob([bytes], { type: \"application/javascript\" });\n blobUrl = URL.createObjectURL(blob);\n return [4 /*yield*/, import(/* webpackIgnore: true */ blobUrl)];\n case 4:\n module = _e.sent();\n // gc the blob\n URL.revokeObjectURL(blobUrl);\n this._zustand.add_plugin(key, module.default);\n _e.label = 5;\n case 5:\n _i++;\n return [3 /*break*/, 2];\n case 6: return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.sync_view_state = function () {\n return __awaiter(this, void 0, void 0, function () {\n var resp, nodeview, nodeid, nodev;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this._zustand)\n return [2 /*return*/];\n if (!this.is_open)\n return [2 /*return*/];\n return [4 /*yield*/, this._send_cmd({\n cmd: \"view_state\",\n wait_for_response: true,\n })];\n case 1:\n resp = (_a.sent());\n if (resp.renderoptions)\n this._zustand.update_render_options(resp.renderoptions);\n nodeview = resp.nodes;\n if (nodeview) {\n for (nodeid in nodeview) {\n nodev = nodeview[nodeid];\n this._zustand.on_node_action({\n type: \"update\",\n node: {\n frontend: nodev,\n },\n id: nodeid,\n from_remote: true,\n });\n }\n }\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.sync_nodespace = function () {\n return __awaiter(this, void 0, void 0, function () {\n var resp, _i, resp_2, node, edges, _a, edges_1, edge;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!this._zustand)\n return [2 /*return*/];\n if (!this.is_open)\n return [2 /*return*/];\n return [4 /*yield*/, this._send_cmd({\n cmd: \"get_nodes\",\n kwargs: { with_frontend: true },\n wait_for_response: true,\n })];\n case 1:\n resp = (_b.sent());\n for (_i = 0, resp_2 = resp; _i < resp_2.length; _i++) {\n node = resp_2[_i];\n this._recieve_node_added(node);\n }\n return [4 /*yield*/, this._send_cmd({\n cmd: \"get_edges\",\n wait_for_response: true,\n })];\n case 2:\n edges = (_b.sent());\n for (_a = 0, edges_1 = edges; _a < edges_1.length; _a++) {\n edge = edges_1[_a];\n this._recieve_edge_added.apply(this, edge);\n }\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.fullsync = function () {\n return __awaiter(this, void 0, void 0, function () {\n var resp, e_1, nodeview, _i, _a, node, _b, _c, edge;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n if (!this._zustand)\n return [2 /*return*/];\n if (!this.is_open)\n return [2 /*return*/];\n _d.label = 1;\n case 1:\n if (false) {}\n _d.label = 2;\n case 2:\n _d.trys.push([2, 4, , 5]);\n return [4 /*yield*/, this._send_cmd({ cmd: \"full_state\" })];\n case 3:\n resp = (_d.sent());\n return [3 /*break*/, 6];\n case 4:\n e_1 = _d.sent();\n this._zustand.logger.error(\"Error in fullsync\", e_1);\n return [3 /*break*/, 5];\n case 5: return [3 /*break*/, 1];\n case 6:\n this._zustand.logger.debug(\"Full state\", resp);\n this._zustand.lib.libstate.getState().set({\n lib: resp.backend.lib,\n external_worker: resp.worker_dependencies,\n });\n if (resp.view.renderoptions)\n this._zustand.update_render_options(resp.view.renderoptions);\n nodeview = resp.view.nodes;\n for (_i = 0, _a = resp.backend.nodes; _i < _a.length; _i++) {\n node = _a[_i];\n if (nodeview[node.id] !== undefined) {\n node.frontend = nodeview[node.id];\n }\n this._recieve_node_added(node);\n }\n for (_b = 0, _c = resp.backend.edges; _b < _c.length; _b++) {\n edge = _c[_b];\n this._recieve_edge_added.apply(this, edge);\n }\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype._recieve_edge_added = function (src_nid, src_ioid, trg_nid, trg_ioid) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (!this._zustand)\n return [2 /*return*/];\n this._zustand.on_edge_action(__assign({ type: \"add\", from_remote: true }, { src_nid: src_nid, src_ioid: src_ioid, trg_nid: trg_nid, trg_ioid: trg_ioid }));\n return [2 /*return*/];\n });\n });\n };\n FuncNodesWorker.prototype.trigger_node = function (node_id) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"trigger_node\",\n kwargs: { nid: node_id },\n wait_for_response: false,\n })];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.add_node = function (node_id) {\n return __awaiter(this, void 0, void 0, function () {\n var resp;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"add_node\",\n kwargs: { id: node_id },\n })];\n case 1:\n resp = _a.sent();\n this._recieve_node_added(resp);\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.remove_node = function (node_id) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"remove_node\",\n kwargs: { id: node_id },\n })];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype._recieve_node_added = function (data) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (!this._zustand)\n return [2 /*return*/];\n this._zustand.on_node_action({\n type: \"add\",\n node: data,\n id: data.id,\n from_remote: true,\n });\n return [2 /*return*/];\n });\n });\n };\n FuncNodesWorker.prototype.add_edge = function (_a) {\n var src_nid = _a.src_nid, src_ioid = _a.src_ioid, trg_nid = _a.trg_nid, trg_ioid = _a.trg_ioid, _b = _a.replace, replace = _b === void 0 ? false : _b;\n return this._send_cmd({\n cmd: \"add_edge\",\n kwargs: { src_nid: src_nid, src_ioid: src_ioid, trg_nid: trg_nid, trg_ioid: trg_ioid, replace: replace },\n });\n };\n FuncNodesWorker.prototype.remove_edge = function (_a) {\n var src_nid = _a.src_nid, src_ioid = _a.src_ioid, trg_nid = _a.trg_nid, trg_ioid = _a.trg_ioid;\n return this._send_cmd({\n cmd: \"remove_edge\",\n kwargs: { src_nid: src_nid, src_ioid: src_ioid, trg_nid: trg_nid, trg_ioid: trg_ioid },\n });\n };\n FuncNodesWorker.prototype.add_external_worker = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n var module = _b.module, cls_module = _b.cls_module, cls_name = _b.cls_name;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"add_external_worker\",\n kwargs: { module: module, cls_module: cls_module, cls_name: cls_name },\n })];\n case 1: return [2 /*return*/, _c.sent()];\n }\n });\n });\n };\n FuncNodesWorker.prototype.sync_local_node_updates = function () {\n var _this = this;\n clearTimeout(this._nodeupdatetimer);\n this._local_nodeupdates.forEach(function (node, id) { return __awaiter(_this, void 0, void 0, function () {\n var ans;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"update_node\",\n kwargs: { nid: id, data: node },\n wait_for_response: true,\n })];\n case 1:\n ans = _a.sent();\n if (!this._zustand)\n return [2 /*return*/];\n this._zustand.on_node_action({\n type: \"update\",\n node: ans,\n id: id,\n from_remote: true,\n });\n return [2 /*return*/];\n }\n });\n }); });\n this._local_nodeupdates.clear();\n this._nodeupdatetimer = setTimeout(function () {\n _this.sync_local_node_updates();\n }, 200);\n };\n FuncNodesWorker.prototype.locally_update_node = function (action) {\n // Add the type to the parameter\n var currentstate = this._local_nodeupdates.get(action.id);\n if (currentstate) {\n var _a = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.deep_merge)(currentstate, action.node), new_obj = _a.new_obj, change = _a.change;\n if (change) {\n this._local_nodeupdates.set(action.id, new_obj);\n }\n }\n else {\n this._local_nodeupdates.set(action.id, action.node);\n }\n if (action.immediate) {\n this.sync_local_node_updates();\n }\n };\n FuncNodesWorker.prototype.get_remote_node_state = function (nid) {\n return __awaiter(this, void 0, void 0, function () {\n var ans;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"get_node_state\",\n kwargs: { nid: nid },\n wait_for_response: true,\n })];\n case 1:\n ans = _a.sent();\n if (!this._zustand)\n return [2 /*return*/];\n this._zustand.on_node_action({\n type: \"update\",\n node: ans,\n id: ans.id,\n from_remote: true,\n });\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.set_io_value = function (_a) {\n var nid = _a.nid, ioid = _a.ioid, value = _a.value, _b = _a.set_default, set_default = _b === void 0 ? false : _b;\n return this._send_cmd({\n cmd: \"set_io_value\",\n kwargs: { nid: nid, ioid: ioid, value: value, set_default: set_default },\n wait_for_response: true,\n });\n };\n FuncNodesWorker.prototype.clear = function () {\n return this._send_cmd({ cmd: \"clear\" });\n };\n FuncNodesWorker.prototype.save = function () {\n return this._send_cmd({ cmd: \"save\", wait_for_response: true });\n };\n FuncNodesWorker.prototype.load = function (data) {\n var _this = this;\n return this._send_cmd({\n cmd: \"load_data\",\n kwargs: { data: data },\n wait_for_response: true,\n }).then(function () {\n _this.stepwise_fullsync();\n });\n };\n FuncNodesWorker.prototype.get_io_value = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n var res;\n var _c;\n var nid = _b.nid, ioid = _b.ioid;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"get_io_value\",\n kwargs: { nid: nid, ioid: ioid },\n wait_for_response: true,\n })];\n case 1:\n res = _d.sent();\n if (!this._zustand)\n return [2 /*return*/, res];\n this._zustand.on_node_action({\n type: \"update\",\n node: {\n io: (_c = {},\n _c[ioid] = {\n value: res,\n },\n _c),\n },\n id: nid,\n from_remote: true,\n });\n return [2 /*return*/, res];\n }\n });\n });\n };\n FuncNodesWorker.prototype.get_ios_values = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n var res, mappedres, ioid;\n var nid = _b.nid;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"get_ios_values\",\n kwargs: { nid: nid },\n wait_for_response: true,\n })];\n case 1:\n res = _c.sent();\n if (!this._zustand)\n return [2 /*return*/, res];\n mappedres = {};\n for (ioid in res) {\n mappedres[ioid] = { value: res[ioid] };\n }\n this._zustand.on_node_action({\n type: \"update\",\n node: {\n io: mappedres,\n },\n id: nid,\n from_remote: true,\n });\n return [2 /*return*/, res];\n }\n });\n });\n };\n FuncNodesWorker.prototype._send_cmd = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n var msg, wait_for_response_callback;\n var _this = this;\n var cmd = _b.cmd, kwargs = _b.kwargs, _c = _b.wait_for_response, wait_for_response = _c === void 0 ? true : _c, _d = _b.response_timeout, response_timeout = _d === void 0 ? 5000 : _d, _e = _b.retries, retries = _e === void 0 ? 2 : _e;\n return __generator(this, function (_f) {\n msg = {\n type: \"cmd\",\n cmd: cmd,\n kwargs: kwargs || {},\n };\n if (wait_for_response) {\n if (retries < 0)\n retries = 0;\n wait_for_response_callback = function () { return __awaiter(_this, void 0, void 0, function () {\n var response, _loop_1, this_1, state_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _loop_1 = function () {\n var msid, promise, e_2;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n msid = msg.id || (0,uuid__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n msg.id = msid;\n promise = new Promise(function (resolve, reject) {\n var timeout = setTimeout(function () {\n reject(\"Timeout@wait_for_response for \" + cmd);\n }, response_timeout);\n _this.messagePromises.set(msid, {\n resolve: function (data) {\n clearTimeout(timeout);\n resolve(data);\n _this.messagePromises.delete(msid);\n },\n reject: function (err) {\n clearTimeout(timeout);\n reject(err);\n _this.messagePromises.delete(msid);\n },\n });\n });\n return [4 /*yield*/, this_1.send(msg)];\n case 1:\n _b.sent();\n _b.label = 2;\n case 2:\n _b.trys.push([2, 4, , 5]);\n return [4 /*yield*/, promise];\n case 3:\n response = _b.sent();\n return [2 /*return*/, \"break\"];\n case 4:\n e_2 = _b.sent();\n if (retries === 0)\n throw e_2;\n retries -= 1;\n return [2 /*return*/, \"continue\"];\n case 5: return [2 /*return*/];\n }\n });\n };\n this_1 = this;\n _a.label = 1;\n case 1:\n if (!(retries >= 0)) return [3 /*break*/, 3];\n return [5 /*yield**/, _loop_1()];\n case 2:\n state_1 = _a.sent();\n if (state_1 === \"break\")\n return [3 /*break*/, 3];\n return [3 /*break*/, 1];\n case 3: return [2 /*return*/, response];\n }\n });\n }); };\n return [2 /*return*/, wait_for_response_callback()];\n }\n return [2 /*return*/, this.send(msg)];\n });\n });\n };\n FuncNodesWorker.prototype.send = function (_data) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n // this is the abstract method that should be implemented by subclasses\n throw new Error(\"Not implemented\");\n });\n });\n };\n FuncNodesWorker.prototype.handle_large_message_hint = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n return __generator(this, function (_c) {\n throw new Error(\"handle_large_message_hint not implemented \");\n });\n });\n };\n FuncNodesWorker.prototype.recieve_workerevent = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n var _c;\n var event = _b.event, data = _b.data;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _c = event;\n switch (_c) {\n case \"worker_error\": return [3 /*break*/, 1];\n case \"update_worker_dependencies\": return [3 /*break*/, 2];\n case \"lib_update\": return [3 /*break*/, 3];\n case \"fullsync\": return [3 /*break*/, 5];\n case \"external_worker_update\": return [3 /*break*/, 7];\n }\n return [3 /*break*/, 10];\n case 1:\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.logger.error(data.error)];\n case 2:\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.lib.libstate.getState().set({\n external_worker: data.worker_dependencies,\n })];\n case 3: return [4 /*yield*/, this.sync_lib()];\n case 4:\n _d.sent();\n return [2 /*return*/];\n case 5: return [4 /*yield*/, this.stepwise_fullsync()];\n case 6:\n _d.sent();\n return [2 /*return*/];\n case 7: return [4 /*yield*/, this.sync_lib()];\n case 8:\n _d.sent();\n return [4 /*yield*/, this.sync_external_worker()];\n case 9:\n _d.sent();\n return [2 /*return*/];\n case 10:\n console.warn(\"Unhandled worker event\", event, data);\n return [3 /*break*/, 11];\n case 11: return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.recieve_nodespace_event = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n var _c, _d;\n var event = _b.event, data = _b.data;\n return __generator(this, function (_e) {\n (0,_utils_debugger__WEBPACK_IMPORTED_MODULE_1__.print_object_size)(data, \"Data size for event \" + event, this._zustand);\n (0,_utils_debugger__WEBPACK_IMPORTED_MODULE_1__.print_object)(data, this._zustand);\n switch (event) {\n case \"after_set_value\":\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.on_node_action({\n type: \"update\",\n node: {\n id: data.node,\n io: (_c = {},\n _c[data.io] = {\n value: data.result,\n },\n _c),\n },\n id: data.node,\n from_remote: true,\n })];\n case \"after_update_value_options\":\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.on_node_action({\n type: \"update\",\n node: {\n id: data.node,\n io: (_d = {},\n _d[data.io] = {\n value_options: data.result,\n },\n _d),\n },\n id: data.node,\n from_remote: true,\n })];\n case \"triggerstart\":\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.on_node_action({\n type: \"update\",\n node: {\n id: data.node,\n in_trigger: true,\n },\n id: data.node,\n from_remote: true,\n })];\n case \"triggerdone\":\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.on_node_action({\n type: \"update\",\n node: {\n id: data.node,\n in_trigger: false,\n },\n id: data.node,\n from_remote: true,\n })];\n case \"node_trigger_error\":\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.on_node_action({\n type: \"error\",\n errortype: \"trigger\",\n error: data.error,\n id: data.node,\n from_remote: true,\n })];\n case \"node_removed\":\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.on_node_action({\n type: \"delete\",\n id: data.node,\n from_remote: true,\n })];\n case \"node_added\":\n return [2 /*return*/, this._recieve_node_added(data.node)];\n case \"after_disconnect\":\n if (!data.result)\n return [2 /*return*/];\n if (!Array.isArray(data.result))\n return [2 /*return*/];\n if (data.result.length !== 4)\n return [2 /*return*/];\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.on_edge_action({\n type: \"delete\",\n from_remote: true,\n src_nid: data.result[0],\n src_ioid: data.result[1],\n trg_nid: data.result[2],\n trg_ioid: data.result[3],\n })];\n case \"after_unforward\":\n if (!data.result)\n return [2 /*return*/];\n if (!Array.isArray(data.result))\n return [2 /*return*/];\n if (data.result.length !== 4)\n return [2 /*return*/];\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.on_edge_action({\n type: \"delete\",\n from_remote: true,\n src_nid: data.result[0],\n src_ioid: data.result[1],\n trg_nid: data.result[2],\n trg_ioid: data.result[3],\n })];\n case \"after_connect\":\n if (!data.result)\n return [2 /*return*/];\n if (!Array.isArray(data.result))\n return [2 /*return*/];\n if (data.result.length !== 4)\n return [2 /*return*/];\n return [2 /*return*/, this._recieve_edge_added.apply(this, data.result)];\n case \"after_forward\":\n if (!data.result)\n return [2 /*return*/];\n if (!Array.isArray(data.result))\n return [2 /*return*/];\n if (data.result.length !== 4)\n return [2 /*return*/];\n return [2 /*return*/, this._recieve_edge_added.apply(this, data.result)];\n case \"after_add_shelf\":\n if (!data.result)\n return [2 /*return*/];\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.lib.libstate.getState().set({\n lib: data.result,\n })];\n case \"after_remove_shelf\":\n if (!data.result)\n return [2 /*return*/];\n if (!this._zustand)\n return [2 /*return*/];\n return [2 /*return*/, this._zustand.lib.libstate.getState().set({\n lib: data.result,\n })];\n case \"progress\":\n if (!this._zustand)\n return [2 /*return*/];\n if (data.node) {\n return [2 /*return*/, this._zustand.on_node_action({\n type: \"update\",\n node: {\n id: data.node,\n progress: data.info,\n },\n id: data.node,\n from_remote: true,\n })];\n }\n console.warn(\"Unhandled nodepsace event\", event, data);\n break;\n default:\n console.warn(\"Unhandled nodepsace event\", event, data);\n break;\n }\n return [2 /*return*/];\n });\n });\n };\n FuncNodesWorker.prototype.add_lib = function (lib) {\n return __awaiter(this, void 0, void 0, function () {\n var ans;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"add_package_dependency\",\n kwargs: { name: lib },\n wait_for_response: false,\n })];\n case 1:\n ans = _a.sent();\n return [2 /*return*/, ans];\n }\n });\n });\n };\n FuncNodesWorker.prototype.remove_lib = function (lib) {\n return __awaiter(this, void 0, void 0, function () {\n var ans;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"remove_package_dependency\",\n kwargs: { name: lib },\n wait_for_response: false,\n })];\n case 1:\n ans = _a.sent();\n return [2 /*return*/, ans];\n }\n });\n });\n };\n FuncNodesWorker.prototype.recieve = function (data) {\n return __awaiter(this, void 0, void 0, function () {\n var promise, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = data.type;\n switch (_a) {\n case \"nsevent\": return [3 /*break*/, 1];\n case \"result\": return [3 /*break*/, 3];\n case \"error\": return [3 /*break*/, 4];\n case \"progress\": return [3 /*break*/, 5];\n case \"workerevent\": return [3 /*break*/, 6];\n case \"large_message\": return [3 /*break*/, 8];\n }\n return [3 /*break*/, 10];\n case 1: return [4 /*yield*/, this.recieve_nodespace_event(data)];\n case 2: return [2 /*return*/, _b.sent()];\n case 3:\n promise = data.id && this.messagePromises.get(data.id);\n if (promise) {\n return [2 /*return*/, promise.resolve(data.result)];\n }\n return [3 /*break*/, 11];\n case 4:\n this.on_error(data.tb + \"\\n\" + data.error);\n promise = data.id && this.messagePromises.get(data.id);\n if (promise) {\n return [2 /*return*/, promise.reject(data.error)];\n }\n return [3 /*break*/, 11];\n case 5:\n if (!this._zustand)\n return [2 /*return*/];\n this._zustand.set_progress(data);\n return [3 /*break*/, 11];\n case 6: return [4 /*yield*/, this.recieve_workerevent(data)];\n case 7: return [2 /*return*/, _b.sent()];\n case 8: return [4 /*yield*/, this.handle_large_message_hint(data)];\n case 9: return [2 /*return*/, _b.sent()];\n case 10:\n console.warn(\"Unhandled message\", data);\n return [3 /*break*/, 11];\n case 11: return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.disconnect = function () { };\n FuncNodesWorker.prototype.onclose = function () {\n this.is_open = false;\n if (!this._zustand)\n return;\n this._zustand.auto_progress();\n };\n FuncNodesWorker.prototype.reconnect = function () {\n return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {\n return [2 /*return*/];\n }); });\n };\n FuncNodesWorker.prototype.stop = function () {\n return __awaiter(this, void 0, void 0, function () {\n var oldonclose;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({ cmd: \"stop_worker\", wait_for_response: false })];\n case 1:\n _a.sent();\n oldonclose = this.onclose.bind(this);\n this.onclose = function () {\n oldonclose();\n if (!_this._zustand)\n return;\n if (_this._zustand.worker === _this) {\n _this._zustand.clear_all();\n }\n _this.onclose = oldonclose;\n };\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.get_io_full_value = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n var res;\n var _c;\n var nid = _b.nid, ioid = _b.ioid;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"get_io_full_value\",\n kwargs: { nid: nid, ioid: ioid },\n wait_for_response: true,\n })];\n case 1:\n res = _d.sent();\n if (!this._zustand)\n return [2 /*return*/, res];\n this._zustand.on_node_action({\n type: \"update\",\n node: {\n io: (_c = {},\n _c[ioid] = {\n fullvalue: res,\n },\n _c),\n },\n id: nid,\n from_remote: true,\n });\n return [2 /*return*/, res];\n }\n });\n });\n };\n FuncNodesWorker.prototype.update_io_options = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n var res;\n var _c;\n var nid = _b.nid, ioid = _b.ioid, options = _b.options;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"update_io_options\",\n kwargs: __assign({ nid: nid, ioid: ioid }, options),\n wait_for_response: true,\n })];\n case 1:\n res = _d.sent();\n if (!this._zustand)\n return [2 /*return*/, res];\n this._zustand.on_node_action({\n type: \"update\",\n node: {\n io: (_c = {},\n _c[ioid] = __assign({}, options),\n _c),\n },\n id: nid,\n from_remote: true,\n });\n return [2 /*return*/];\n }\n });\n });\n };\n FuncNodesWorker.prototype.get_node_status = function (nid) {\n return __awaiter(this, void 0, void 0, function () {\n var res;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"get_node_state\",\n kwargs: { nid: nid },\n wait_for_response: true,\n })];\n case 1:\n res = _a.sent();\n return [2 /*return*/, res];\n }\n });\n });\n };\n FuncNodesWorker.prototype.get_available_modules = function () {\n return __awaiter(this, void 0, void 0, function () {\n var res;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"get_available_modules\",\n wait_for_response: true,\n })];\n case 1:\n res = _a.sent();\n return [2 /*return*/, res];\n }\n });\n });\n };\n FuncNodesWorker.prototype.update_external_worker = function (worker_id, class_id, data) {\n return __awaiter(this, void 0, void 0, function () {\n var res;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"update_external_worker\",\n kwargs: __assign({ worker_id: worker_id, class_id: class_id }, data),\n wait_for_response: true,\n })];\n case 1:\n res = _a.sent();\n return [2 /*return*/, res];\n }\n });\n });\n };\n FuncNodesWorker.prototype.remove_external_worker = function (worker_id, class_id) {\n return __awaiter(this, void 0, void 0, function () {\n var res;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"remove_external_worker\",\n kwargs: { worker_id: worker_id, class_id: class_id },\n wait_for_response: true,\n })];\n case 1:\n res = _a.sent();\n return [2 /*return*/, res];\n }\n });\n });\n };\n FuncNodesWorker.prototype.export = function () {\n return __awaiter(this, void 0, void 0, function () {\n var res;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"export_worker\",\n wait_for_response: true,\n })];\n case 1:\n res = _a.sent();\n return [2 /*return*/, res];\n }\n });\n });\n };\n FuncNodesWorker.prototype.update_from_export = function (data) {\n return __awaiter(this, void 0, void 0, function () {\n var res;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._send_cmd({\n cmd: \"update_from_export\",\n kwargs: { data: data },\n wait_for_response: true,\n })];\n case 1:\n res = _a.sent();\n this.stepwise_fullsync();\n return [2 /*return*/, res];\n }\n });\n });\n };\n return FuncNodesWorker;\n}());\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FuncNodesWorker);\n\n\n//# sourceURL=webpack://@linkdlab/funcnodes_react_flow/./src/funcnodes/funcnodesworker.ts?");
2820
2820
 
2821
2821
  /***/ }),
2822
2822
 
@@ -2836,7 +2836,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2836
2836
  \******************************************/
2837
2837
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2838
2838
 
2839
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _funcnodesworker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./funcnodesworker */ \"./src/funcnodes/funcnodesworker.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n\nvar WebSocketWorker = /** @class */ (function (_super) {\n __extends(WebSocketWorker, _super);\n function WebSocketWorker(data) {\n var _this = _super.call(this, data) || this;\n _this._websocket = null;\n _this.reconnectAttempts = 0;\n _this.maxReconnectAttempts = 999;\n _this.initialTimeout = 200; // Initial reconnect delay in ms\n _this.maxTimeout = 5000; // Maximum reconnect delay\n _this._reconnect = true;\n _this._url = data.url;\n _this.connect();\n if (_this._zustand)\n _this._zustand.auto_progress();\n return _this;\n }\n WebSocketWorker.prototype.connect = function () {\n var _this = this;\n var _a;\n (_a = this._zustand) === null || _a === void 0 ? void 0 : _a.logger.info(\"Connecting to websocket\");\n this.is_open = false;\n this._websocket = new WebSocket(this._url);\n this._websocket.onopen = function () {\n _this.onopen();\n };\n this._websocket.onclose = function () {\n _this.onclose();\n };\n this._websocket.onerror = function () {\n _this.on_ws_error();\n };\n this._websocket.onmessage = function (event) {\n _this.onmessage(event.data);\n };\n };\n WebSocketWorker.prototype.calculateReconnectTimeout = function () {\n // Increase timeout exponentially, capped at maxTimeout\n var timeout = Math.min(this.initialTimeout * Math.pow(2, this.reconnectAttempts), this.maxTimeout);\n return timeout;\n };\n WebSocketWorker.prototype.auto_reconnect = function () {\n var _this = this;\n var _a, _b;\n if (this.reconnectAttempts < this.maxReconnectAttempts) {\n var timeout = this.calculateReconnectTimeout();\n (_a = this._zustand) === null || _a === void 0 ? void 0 : _a.logger.info(\"Attempting to reconnect in \".concat(timeout, \" ms\"));\n setTimeout(function () {\n if (_this._websocket) {\n if (_this._websocket.readyState === WebSocket.OPEN) {\n return;\n }\n }\n _this.reconnectAttempts++;\n _this.connect();\n }, timeout);\n }\n else {\n (_b = this._zustand) === null || _b === void 0 ? void 0 : _b.logger.warn(\"Maximum reconnect attempts reached. Giving up.\");\n }\n };\n WebSocketWorker.prototype.onmessage = function (data) {\n return __awaiter(this, void 0, void 0, function () {\n var json;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n json = JSON.parse(data);\n (_a = this._zustand) === null || _a === void 0 ? void 0 : _a.logger.debug(\"Recieved data of length: \".concat(data.length, \" and data\\\"\"), json);\n return [4 /*yield*/, this.recieve(json)];\n case 1:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n WebSocketWorker.prototype.handle_large_message_hint = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n var url, resp, json;\n var msg_id = _b.msg_id;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n url = \"http\" + this._url.substring(2);\n //add /msg_id to url to get the large message (url might end with /)\n if (url[url.length - 1] !== \"/\") {\n url += \"/\";\n }\n url += \"message/\" + msg_id;\n return [4 /*yield*/, fetch(url, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Access-Control-Allow-Origin\": \"*\",\n },\n })];\n case 1:\n resp = _c.sent();\n return [4 /*yield*/, resp.json()];\n case 2:\n json = _c.sent();\n this.recieve(json);\n return [2 /*return*/];\n }\n });\n });\n };\n WebSocketWorker.prototype.onopen = function () {\n var _a;\n (_a = this._zustand) === null || _a === void 0 ? void 0 : _a.logger.info(\"Websocket opened\");\n this.is_open = true;\n if (this._zustand)\n this._zustand.auto_progress();\n this.reconnectAttempts = 0;\n this.stepwise_fullsync();\n };\n WebSocketWorker.prototype.onclose = function () {\n var _a, _b;\n (_a = this._zustand) === null || _a === void 0 ? void 0 : _a.logger.info(\"Websocket closed\");\n _super.prototype.onclose.call(this);\n if (this._reconnect) {\n (_b = this._zustand) === null || _b === void 0 ? void 0 : _b.logger.info(\"Websocket closed,reconnecting\");\n this.auto_reconnect(); // Attempt to reconnect\n }\n };\n WebSocketWorker.prototype.on_ws_error = function () {\n var _a;\n (_a = this._zustand) === null || _a === void 0 ? void 0 : _a.logger.warn(\"Websocket error\");\n if (this._websocket) {\n this._websocket.close(); // Ensure the connection is closed before attempting to reconnect\n }\n else {\n this.auto_reconnect();\n }\n };\n WebSocketWorker.prototype.send = function (data) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, _b;\n return __generator(this, function (_c) {\n if (!this._websocket || this._websocket.readyState !== WebSocket.OPEN) {\n (_a = this._zustand) === null || _a === void 0 ? void 0 : _a.logger.warn(\"Websocket not connected\");\n return [2 /*return*/];\n }\n (_b = this._zustand) === null || _b === void 0 ? void 0 : _b.logger.debug(\"Sending data\", data);\n this._websocket.send(JSON.stringify(data));\n return [2 /*return*/];\n });\n });\n };\n WebSocketWorker.prototype.stop = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, _super.prototype.stop.call(this)];\n case 1:\n _a.sent();\n this._reconnect = false;\n return [2 /*return*/];\n }\n });\n });\n };\n WebSocketWorker.prototype.close = function () {\n if (this._websocket)\n this._websocket.close();\n };\n WebSocketWorker.prototype.disconnect = function () {\n _super.prototype.disconnect.call(this);\n this._reconnect = false;\n this.close();\n };\n WebSocketWorker.prototype.reconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, _super.prototype.reconnect.call(this)];\n case 1:\n _b.sent();\n this._reconnect = true;\n if (!this._websocket) return [3 /*break*/, 4];\n (_a = this._zustand) === null || _a === void 0 ? void 0 : _a.logger.info(\"Reconnecting\");\n if (!(this._websocket.readyState === WebSocket.OPEN ||\n this._websocket.readyState === WebSocket.CONNECTING)) return [3 /*break*/, 4];\n if (!(this._websocket.readyState === WebSocket.CONNECTING)) return [3 /*break*/, 3];\n //await to ensure the websocket is connected, with a timeout of 2 seconds\n return [4 /*yield*/, new Promise(function (resolve, reject) {\n if (_this._websocket === null)\n return;\n var timeout = setTimeout(function () {\n reject(\"Timeout@reconnect\");\n }, 2000);\n _this._websocket.addEventListener(\"open\", function () {\n clearTimeout(timeout);\n resolve(null);\n }, { once: true });\n if (_this._websocket.readyState === WebSocket.OPEN) {\n clearTimeout(timeout);\n resolve(null);\n }\n })];\n case 2:\n //await to ensure the websocket is connected, with a timeout of 2 seconds\n _b.sent();\n _b.label = 3;\n case 3:\n if (this._websocket.readyState === WebSocket.OPEN) {\n this.stepwise_fullsync();\n return [2 /*return*/];\n }\n _b.label = 4;\n case 4:\n this.connect();\n return [2 /*return*/];\n }\n });\n });\n };\n return WebSocketWorker;\n}(_funcnodesworker__WEBPACK_IMPORTED_MODULE_0__[\"default\"]));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (WebSocketWorker);\n\n\n//# sourceURL=webpack://@linkdlab/funcnodes_react_flow/./src/funcnodes/websocketworker.ts?");
2839
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _funcnodesworker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./funcnodesworker */ \"./src/funcnodes/funcnodesworker.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n\nvar WebSocketWorker = /** @class */ (function (_super) {\n __extends(WebSocketWorker, _super);\n function WebSocketWorker(data) {\n var _this = _super.call(this, data) || this;\n _this._websocket = null;\n _this.reconnectAttempts = 0;\n _this.maxReconnectAttempts = 999;\n _this.initialTimeout = 200; // Initial reconnect delay in ms\n _this.maxTimeout = 5000; // Maximum reconnect delay\n _this._reconnect = true;\n _this._url = data.url;\n _this.connect();\n if (_this._zustand)\n _this._zustand.auto_progress();\n return _this;\n }\n WebSocketWorker.prototype.connect = function () {\n var _this = this;\n var _a;\n (_a = this._zustand) === null || _a === void 0 ? void 0 : _a.logger.info(\"Connecting to websocket\");\n this.is_open = false;\n this._websocket = new WebSocket(this._url);\n this._websocket.onopen = function () {\n _this.onopen();\n };\n this._websocket.onclose = function () {\n _this.onclose();\n };\n this._websocket.onerror = function () {\n _this.on_ws_error();\n };\n this._websocket.onmessage = function (event) {\n _this.onmessage(event.data);\n };\n };\n WebSocketWorker.prototype.calculateReconnectTimeout = function () {\n // Increase timeout exponentially, capped at maxTimeout\n var timeout = Math.min(this.initialTimeout * Math.pow(2, this.reconnectAttempts), this.maxTimeout);\n return timeout;\n };\n WebSocketWorker.prototype.auto_reconnect = function () {\n var _this = this;\n var _a, _b;\n if (this.reconnectAttempts < this.maxReconnectAttempts) {\n var timeout = this.calculateReconnectTimeout();\n (_a = this._zustand) === null || _a === void 0 ? void 0 : _a.logger.info(\"Attempting to reconnect in \".concat(timeout, \" ms\"));\n setTimeout(function () {\n if (_this._websocket) {\n if (_this._websocket.readyState === WebSocket.OPEN) {\n return;\n }\n }\n _this.reconnectAttempts++;\n _this.connect();\n }, timeout);\n }\n else {\n (_b = this._zustand) === null || _b === void 0 ? void 0 : _b.logger.warn(\"Maximum reconnect attempts reached. Giving up.\");\n }\n };\n WebSocketWorker.prototype.onmessage = function (data) {\n return __awaiter(this, void 0, void 0, function () {\n var json;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n json = JSON.parse(data);\n (_a = this._zustand) === null || _a === void 0 ? void 0 : _a.logger.debug(\"Recieved data of length: \".concat(data.length, \" and data\\\"\"), json);\n return [4 /*yield*/, this.recieve(json)];\n case 1:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n WebSocketWorker.prototype.handle_large_message_hint = function (_a) {\n return __awaiter(this, arguments, void 0, function (_b) {\n var url, resp, json;\n var msg_id = _b.msg_id;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n url = \"http\" + this._url.substring(2);\n //add /msg_id to url to get the large message (url might end with /)\n if (url[url.length - 1] !== \"/\") {\n url += \"/\";\n }\n url += \"message/\" + msg_id;\n return [4 /*yield*/, fetch(url, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Access-Control-Allow-Origin\": \"*\",\n },\n })];\n case 1:\n resp = _c.sent();\n return [4 /*yield*/, resp.json()];\n case 2:\n json = _c.sent();\n this.recieve(json);\n return [2 /*return*/];\n }\n });\n });\n };\n WebSocketWorker.prototype.onopen = function () {\n var _a;\n (_a = this._zustand) === null || _a === void 0 ? void 0 : _a.logger.info(\"Websocket opened\");\n this.is_open = true;\n if (this._zustand)\n this._zustand.auto_progress();\n this.reconnectAttempts = 0;\n this.stepwise_fullsync();\n };\n WebSocketWorker.prototype.onclose = function () {\n var _a, _b;\n (_a = this._zustand) === null || _a === void 0 ? void 0 : _a.logger.info(\"Websocket closed\");\n _super.prototype.onclose.call(this);\n if (this._reconnect) {\n (_b = this._zustand) === null || _b === void 0 ? void 0 : _b.logger.info(\"Websocket closed,reconnecting\");\n this.auto_reconnect(); // Attempt to reconnect\n }\n };\n WebSocketWorker.prototype.on_ws_error = function () {\n var _a;\n (_a = this._zustand) === null || _a === void 0 ? void 0 : _a.logger.warn(\"Websocket error\");\n if (this._websocket) {\n this._websocket.close(); // Ensure the connection is closed before attempting to reconnect\n }\n else {\n this.auto_reconnect();\n }\n };\n WebSocketWorker.prototype.send_large_message = function (jsondata) {\n return __awaiter(this, void 0, void 0, function () {\n var url;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n url = \"http\" + this._url.substring(2);\n //add /msg_id to url to get the large message (url might end with /)\n if (url[url.length - 1] !== \"/\") {\n url += \"/\";\n }\n url += \"message/\";\n return [4 /*yield*/, fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: jsondata,\n })];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n WebSocketWorker.prototype.send = function (data) {\n return __awaiter(this, void 0, void 0, function () {\n var jsonstring, datasize;\n var _a, _b, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n if (!this._websocket || this._websocket.readyState !== WebSocket.OPEN) {\n (_a = this._zustand) === null || _a === void 0 ? void 0 : _a.logger.warn(\"Websocket not connected\");\n return [2 /*return*/];\n }\n jsonstring = JSON.stringify(data);\n datasize = new Blob([jsonstring]).size;\n if (!(datasize > 1000000)) return [3 /*break*/, 2];\n // 1MB\n (_b = this._zustand) === null || _b === void 0 ? void 0 : _b.logger.info(\"Data too large, sending in chunks\");\n return [4 /*yield*/, this.send_large_message(jsonstring)];\n case 1: return [2 /*return*/, _d.sent()];\n case 2:\n (_c = this._zustand) === null || _c === void 0 ? void 0 : _c.logger.debug(\"Sending data\", data);\n this._websocket.send(jsonstring);\n return [2 /*return*/];\n }\n });\n });\n };\n WebSocketWorker.prototype.stop = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, _super.prototype.stop.call(this)];\n case 1:\n _a.sent();\n this._reconnect = false;\n return [2 /*return*/];\n }\n });\n });\n };\n WebSocketWorker.prototype.close = function () {\n if (this._websocket)\n this._websocket.close();\n };\n WebSocketWorker.prototype.disconnect = function () {\n _super.prototype.disconnect.call(this);\n this._reconnect = false;\n this.close();\n };\n WebSocketWorker.prototype.reconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, _super.prototype.reconnect.call(this)];\n case 1:\n _b.sent();\n this._reconnect = true;\n if (!this._websocket) return [3 /*break*/, 4];\n (_a = this._zustand) === null || _a === void 0 ? void 0 : _a.logger.info(\"Reconnecting\");\n if (!(this._websocket.readyState === WebSocket.OPEN ||\n this._websocket.readyState === WebSocket.CONNECTING)) return [3 /*break*/, 4];\n if (!(this._websocket.readyState === WebSocket.CONNECTING)) return [3 /*break*/, 3];\n //await to ensure the websocket is connected, with a timeout of 2 seconds\n return [4 /*yield*/, new Promise(function (resolve, reject) {\n if (_this._websocket === null)\n return;\n var timeout = setTimeout(function () {\n reject(\"Timeout@reconnect\");\n }, 2000);\n _this._websocket.addEventListener(\"open\", function () {\n clearTimeout(timeout);\n resolve(null);\n }, { once: true });\n if (_this._websocket.readyState === WebSocket.OPEN) {\n clearTimeout(timeout);\n resolve(null);\n }\n })];\n case 2:\n //await to ensure the websocket is connected, with a timeout of 2 seconds\n _b.sent();\n _b.label = 3;\n case 3:\n if (this._websocket.readyState === WebSocket.OPEN) {\n this.stepwise_fullsync();\n return [2 /*return*/];\n }\n _b.label = 4;\n case 4:\n this.connect();\n return [2 /*return*/];\n }\n });\n });\n };\n return WebSocketWorker;\n}(_funcnodesworker__WEBPACK_IMPORTED_MODULE_0__[\"default\"]));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (WebSocketWorker);\n\n\n//# sourceURL=webpack://@linkdlab/funcnodes_react_flow/./src/funcnodes/websocketworker.ts?");
2840
2840
 
2841
2841
  /***/ }),
2842
2842
 
@@ -2856,7 +2856,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2856
2856
  \***********************/
2857
2857
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2858
2858
 
2859
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ FuncNodes: () => (/* binding */ FuncNodes),\n/* harmony export */ FuncNodesReactFlowZustand: () => (/* reexport safe */ _states__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n/* harmony export */ WebSocketWorker: () => (/* reexport safe */ _funcnodes_websocketworker__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ helperfunctions: () => (/* reexport safe */ _utils_helperfunctions__WEBPACK_IMPORTED_MODULE_3__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var _frontend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./frontend */ \"./src/frontend/index.tsx\");\n/* harmony import */ var _funcnodes_websocketworker__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./funcnodes/websocketworker */ \"./src/funcnodes/websocketworker.ts\");\n/* harmony import */ var _utils_helperfunctions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/helperfunctions */ \"./src/utils/helperfunctions.ts\");\n/* harmony import */ var _states__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./states */ \"./src/states/index.ts\");\n/* harmony import */ var react_dom_client__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-dom/client */ \"../node_modules/react-dom/client.js\");\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_frontend__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\nvar App = function (_a) {\n var id = _a.id, ws_url = _a.ws_url, on_sync_complete = _a.on_sync_complete;\n var useWorkerManager = true;\n var worker = undefined;\n if (ws_url !== undefined) {\n useWorkerManager = false;\n worker = new _funcnodes_websocketworker__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n url: ws_url,\n uuid: id,\n on_sync_complete: on_sync_complete,\n });\n var fnrf_zst = (0,_states__WEBPACK_IMPORTED_MODULE_4__[\"default\"])({\n useWorkerManager: useWorkerManager,\n default_worker: worker,\n });\n worker.set_zustand(fnrf_zst);\n }\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"App\", style: {\n height: \"100%\",\n width: \"100%\",\n } },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_frontend__WEBPACK_IMPORTED_MODULE_1__[\"default\"], { id: id, useWorkerManager: useWorkerManager, default_worker: worker, on_sync_complete: on_sync_complete })));\n};\nvar FuncNodes = function (id_or_element, options) {\n var id;\n var element;\n if (options === undefined) {\n options = {};\n }\n if (typeof id_or_element === \"string\") {\n id = id_or_element;\n element = document.getElementById(id);\n }\n else {\n element = id_or_element;\n id = element.id;\n }\n react_dom_client__WEBPACK_IMPORTED_MODULE_5__.createRoot(element).render(react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].StrictMode, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(App, { id: id, ws_url: options.ws_url, on_sync_complete: options.on_sync_complete })));\n};\n// @ts-ignore\nwindow.FuncNodes = FuncNodes;\n// import ReactDOM from \"react-dom\";\n// (async () => {\n// // @ts-ignore\n// window.React = await import(\"react\");\n// })();\n// window.ReactDOM = ReactDOM;\n// @ts-ignore\nwindow.React = react__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n\n\n\n//# sourceURL=webpack://@linkdlab/funcnodes_react_flow/./src/index.tsx?");
2859
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ FuncNodes: () => (/* binding */ FuncNodes),\n/* harmony export */ FuncNodesContext: () => (/* reexport safe */ _frontend__WEBPACK_IMPORTED_MODULE_1__.FuncNodesContext),\n/* harmony export */ FuncNodesReactFlowZustand: () => (/* reexport safe */ _states__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n/* harmony export */ WebSocketWorker: () => (/* reexport safe */ _funcnodes_websocketworker__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ helperfunctions: () => (/* reexport safe */ _utils_helperfunctions__WEBPACK_IMPORTED_MODULE_3__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var _frontend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./frontend */ \"./src/frontend/index.tsx\");\n/* harmony import */ var _funcnodes_websocketworker__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./funcnodes/websocketworker */ \"./src/funcnodes/websocketworker.ts\");\n/* harmony import */ var _utils_helperfunctions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/helperfunctions */ \"./src/utils/helperfunctions.ts\");\n/* harmony import */ var _states__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./states */ \"./src/states/index.ts\");\n/* harmony import */ var react_dom_client__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-dom/client */ \"../node_modules/react-dom/client.js\");\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_frontend__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\nvar App = function (_a) {\n var id = _a.id, ws_url = _a.ws_url, on_sync_complete = _a.on_sync_complete;\n var useWorkerManager = true;\n var worker = undefined;\n if (ws_url !== undefined) {\n useWorkerManager = false;\n worker = new _funcnodes_websocketworker__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n url: ws_url,\n uuid: id,\n on_sync_complete: on_sync_complete,\n });\n var fnrf_zst = (0,_states__WEBPACK_IMPORTED_MODULE_4__[\"default\"])({\n useWorkerManager: useWorkerManager,\n default_worker: worker,\n });\n worker.set_zustand(fnrf_zst);\n }\n return (react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", { className: \"App\", style: {\n height: \"100%\",\n width: \"100%\",\n } },\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(_frontend__WEBPACK_IMPORTED_MODULE_1__[\"default\"], { id: id, useWorkerManager: useWorkerManager, default_worker: worker, on_sync_complete: on_sync_complete })));\n};\nvar FuncNodes = function (id_or_element, options) {\n var id;\n var element;\n if (options === undefined) {\n options = {};\n }\n if (typeof id_or_element === \"string\") {\n id = id_or_element;\n element = document.getElementById(id);\n }\n else {\n element = id_or_element;\n id = element.id;\n }\n react_dom_client__WEBPACK_IMPORTED_MODULE_5__.createRoot(element).render(react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].StrictMode, null,\n react__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(App, { id: id, ws_url: options.ws_url, on_sync_complete: options.on_sync_complete })));\n};\n// @ts-ignore\nwindow.FuncNodes = FuncNodes;\n// import ReactDOM from \"react-dom\";\n// (async () => {\n// // @ts-ignore\n// window.React = await import(\"react\");\n// })();\n// window.ReactDOM = ReactDOM;\n// @ts-ignore\nwindow.React = react__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n\n\n\n//# sourceURL=webpack://@linkdlab/funcnodes_react_flow/./src/index.tsx?");
2860
2860
 
2861
2861
  /***/ }),
2862
2862
 
@@ -2876,7 +2876,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2876
2876
  \*******************************/
2877
2877
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2878
2878
 
2879
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LibZustand: () => (/* reexport safe */ _lib__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ NodeSpaceZustand: () => (/* reexport safe */ _nodespace__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ assert_reactflow_node: () => (/* binding */ assert_reactflow_node),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _lib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib */ \"./src/states/lib.ts\");\n/* harmony import */ var _nodespace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./nodespace */ \"./src/states/nodespace.ts\");\n/* harmony import */ var _node__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node */ \"./src/states/node.ts\");\n/* harmony import */ var _reactflow__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./reactflow */ \"./src/states/reactflow.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\n/* harmony import */ var _edge__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./edge */ \"./src/states/edge.ts\");\n/* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! zustand */ \"../node_modules/zustand/esm/index.mjs\");\n/* harmony import */ var _utils_logger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.ts\");\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\n\n\n\n\n\nvar _fill_node_frontend = function (node, fnrf_instance) {\n var frontend = node.frontend || {};\n if (!frontend.size) {\n frontend.size = [200, 100];\n }\n if (!frontend.pos ||\n frontend.pos.length !== 2 ||\n isNaN(frontend.pos[0]) ||\n frontend.pos[0] === null ||\n isNaN(frontend.pos[1]) ||\n frontend.pos[1] === null) {\n if (!fnrf_instance ||\n !fnrf_instance.rf_instance ||\n fnrf_instance.reactflowRef === null) {\n frontend.pos = [0, 0];\n }\n else {\n var ref = fnrf_instance.reactflowRef;\n var rect = ref.getBoundingClientRect(); // Step 2: Get bounding rectangle\n var centerX = rect.left + rect.width / 2; // Calculate center X\n var centerY = rect.top + rect.height / 2; // Calculate center Y\n var flowpos = fnrf_instance.rf_instance.screenToFlowPosition({\n x: centerX,\n y: centerY,\n });\n frontend.pos = [\n flowpos.x - frontend.size[0] / 2,\n flowpos.y - frontend.size[1] / 2,\n ];\n }\n }\n if (!frontend.collapsed) {\n frontend.collapsed = false;\n }\n node.frontend = frontend;\n};\nvar assert_react_flow_io = function (io, fnrf_instance) {\n if (io.value === \"<NoValue>\") {\n io.value = undefined;\n }\n if (io.fullvalue === \"<NoValue>\") {\n io.fullvalue = undefined;\n }\n if (io.try_get_full_value === undefined) {\n io.try_get_full_value = function () {\n var _a;\n if (!fnrf_instance) {\n return;\n }\n if (io.node === undefined || io.id === undefined) {\n return;\n }\n (_a = fnrf_instance.worker) === null || _a === void 0 ? void 0 : _a.get_io_full_value({ nid: io.node, ioid: io.id });\n };\n }\n if (io.hidden === undefined) {\n io.hidden = false;\n }\n if (io.set_hidden === undefined) {\n io.set_hidden = function (v) {\n var _a;\n if (!fnrf_instance) {\n return;\n }\n if (io.node === undefined || io.id === undefined) {\n return;\n }\n (_a = fnrf_instance.worker) === null || _a === void 0 ? void 0 : _a.update_io_options({\n nid: io.node,\n ioid: io.id,\n options: { hidden: v },\n });\n };\n }\n return io;\n};\nvar assert_reactflow_node = function (node, store, fnrf_instance) {\n _fill_node_frontend(node, fnrf_instance);\n node = (0,_node__WEBPACK_IMPORTED_MODULE_2__.assert_full_node)(node);\n if (node.id === undefined) {\n throw new Error(\"Node must have an id\");\n }\n for (var io in node.io) {\n node.io[io].node = node.id;\n assert_react_flow_io(node.io[io], fnrf_instance);\n }\n var extendedNode = __assign({ position: {\n x: node.frontend.pos[0],\n y: node.frontend.pos[1],\n }, data: {\n UseNodeStore: store,\n }, type: \"default\" }, node);\n return extendedNode;\n};\nvar FuncNodesReactFlowZustand = function (_a) {\n /*\n function that should be called when the remote node, e.g. in the python worker is performing an action\n */\n var _b = _a.useWorkerManager, useWorkerManager = _b === void 0 ? true : _b, _c = _a.default_worker, default_worker = _c === void 0 ? undefined : _c, _d = _a.on_sync_complete, on_sync_complete = _d === void 0 ? undefined : _d;\n var options = {\n useWorkerManager: useWorkerManager,\n default_worker: default_worker,\n on_sync_complete: on_sync_complete,\n };\n var _add_node = function (action) {\n var _a;\n var rfstate = rfstore.getState();\n if (action.from_remote) {\n var store = ns.get_node(action.node.id, false);\n if (!store) {\n try {\n store = (0,_node__WEBPACK_IMPORTED_MODULE_2__.createNodeStore)(action.node);\n ns.nodesstates.set(action.node.id, store);\n }\n catch (e) {\n return;\n }\n }\n var node = store.getState();\n var new_ndoes = __spreadArray(__spreadArray([], rfstate.nodes, true), [\n assert_reactflow_node(node, store, iterf),\n ], false);\n rfstore.setState({ nodes: new_ndoes });\n // wait 200 ms then set the full value of all ios\n for (var io in action.node.io) {\n var ioid = action.node.io[io].id;\n if (ioid !== undefined) {\n (_a = iterf.worker) === null || _a === void 0 ? void 0 : _a.get_io_value({ nid: action.node.id, ioid: ioid });\n }\n }\n }\n };\n var _update_node = function (action) {\n var _a;\n // some action reset the error, so far trigger does, so errors should remove the in_trigger flag\n if (action.node.in_trigger) {\n action.node.error = undefined;\n }\n if (action.from_remote) {\n var store = ns.get_node(action.id);\n if (!store) {\n return;\n }\n (0,_node__WEBPACK_IMPORTED_MODULE_2__.normalize_node)(action.node);\n var state = store.getState();\n var _b = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.deep_merge)(state, action.node), new_obj = _b.new_obj, change = _b.change;\n if (change) {\n // update ios after merge, because it might be an object whch would resolt of\n // some part of the old value still being there (on the frontend)\n if (action.node.io) {\n for (var io in action.node.io) {\n // if fullvalue is in the update data, set to fullvalue otherwise set to undefined\n new_obj.io[io].fullvalue = (_a = action.node.io[io]) === null || _a === void 0 ? void 0 : _a.fullvalue;\n for (var io_1 in action.node.io) {\n var ioobj = action.node.io[io_1];\n var new_obj_io = new_obj.io[io_1];\n // check if value in io, undefined is a valid value\n if (ioobj.hasOwnProperty(\"value\")) {\n if (ioobj.value === undefined) {\n new_obj_io.value = null;\n }\n else if (ioobj.value === \"<NoValue>\") {\n new_obj_io.value = undefined;\n }\n else {\n new_obj_io.value = ioobj.value;\n }\n }\n }\n }\n }\n assert_reactflow_node(new_obj, store, iterf);\n iterf.logger.debug(\"update_action\", new_obj);\n store.setState((0,_node__WEBPACK_IMPORTED_MODULE_2__.assert_full_node)(new_obj));\n }\n }\n else {\n if (iterf.worker) {\n iterf.worker.locally_update_node(action);\n }\n }\n };\n var _delete_node = function (action) {\n var _a;\n if (action.from_remote) {\n rfstore.getState().onNodesChange([\n {\n type: \"remove\",\n id: action.id,\n },\n ]);\n }\n else {\n (_a = iterf.worker) === null || _a === void 0 ? void 0 : _a.remove_node(action.id);\n }\n };\n var _error_action = function (action) {\n iterf.logger.error(\"Error\", action);\n on_node_action({\n type: \"update\",\n id: action.id,\n node: {\n in_trigger: false,\n error: action.error,\n },\n from_remote: true,\n });\n };\n var _trigger_action = function (action) {\n var _a;\n if (action.from_remote) {\n on_node_action({\n type: \"update\",\n id: action.id,\n node: {\n in_trigger: true,\n error: undefined,\n },\n from_remote: true,\n });\n }\n else {\n (_a = iterf.worker) === null || _a === void 0 ? void 0 : _a.trigger_node(action.id);\n }\n };\n var on_node_action = function (action) {\n switch (action.type) {\n case \"add\":\n _add_node(action);\n break;\n case \"update\":\n _update_node(action);\n break;\n case \"delete\":\n _delete_node(action);\n break;\n case \"error\":\n _error_action(action);\n break;\n case \"trigger\":\n _trigger_action(action);\n break;\n default:\n iterf.logger.error(\"Unknown node action\", action);\n }\n };\n var on_edge_action = function (action) {\n var _a, _b, _c, _d;\n var rfstate = rfstore.getState();\n switch (action.type) {\n case \"add\":\n if (action.from_remote) {\n var edges = rfstate.edges;\n var new_edge_id_1 = (0,_edge__WEBPACK_IMPORTED_MODULE_5__.generate_edge_id)(action);\n //cehck if edge already exists including reversed\n if (edges.some(function (e) { return e.id === new_edge_id_1; })) {\n return;\n }\n var new_edge = {\n id: new_edge_id_1,\n source: action.src_nid,\n target: action.trg_nid,\n sourceHandle: action.src_ioid,\n targetHandle: action.trg_ioid,\n className: \"funcnodes-edge animated\",\n };\n iterf.logger.info(\"Adding edge\", new_edge);\n rfstore.setState({ edges: __spreadArray(__spreadArray([], edges, true), [new_edge], false) });\n (_a = iterf.worker) === null || _a === void 0 ? void 0 : _a.get_remote_node_state(action.src_nid);\n (_b = iterf.worker) === null || _b === void 0 ? void 0 : _b.get_remote_node_state(action.trg_nid);\n }\n else {\n }\n break;\n case \"delete\":\n if (action.from_remote) {\n var edges = rfstate.edges;\n var del_edge_id_1 = (0,_edge__WEBPACK_IMPORTED_MODULE_5__.generate_edge_id)(action);\n var new_edges = edges.filter(function (edge) { return edge.id !== del_edge_id_1; });\n rfstore.setState({ edges: new_edges });\n (_c = iterf.worker) === null || _c === void 0 ? void 0 : _c.get_remote_node_state(action.src_nid);\n (_d = iterf.worker) === null || _d === void 0 ? void 0 : _d.get_remote_node_state(action.trg_nid);\n }\n else {\n }\n break;\n default:\n iterf.logger.error(\"Unknown edge action\", action);\n }\n };\n /*\n on_node_cahnge is called by react flow when a note change event is fired\n should update the local state if something changed\n */\n var on_node_change = function (nodechange) {\n for (var _i = 0, nodechange_1 = nodechange; _i < nodechange_1.length; _i++) {\n var change = nodechange_1[_i];\n switch (change.type) {\n case \"position\":\n if (change.position) {\n on_node_action({\n type: \"update\",\n id: change.id,\n node: {\n frontend: { pos: [change.position.x, change.position.y] },\n },\n from_remote: false,\n });\n }\n break;\n case \"dimensions\":\n if (change.dimensions) {\n on_node_action({\n type: \"update\",\n id: change.id,\n node: {\n frontend: {\n size: [change.dimensions.width, change.dimensions.height],\n },\n },\n from_remote: false,\n });\n }\n break;\n }\n }\n };\n var on_edge_change = function (_edgechange) { };\n var on_connect = function (connection) {\n if (connection.source === null ||\n connection.target === null ||\n connection.sourceHandle === null ||\n connection.targetHandle === null ||\n !iterf.worker) {\n return;\n }\n iterf.worker.add_edge({\n src_nid: connection.source,\n src_ioid: connection.sourceHandle,\n trg_nid: connection.target,\n trg_ioid: connection.targetHandle,\n replace: true,\n });\n };\n var rfstore = (0,_reactflow__WEBPACK_IMPORTED_MODULE_3__[\"default\"])({\n on_node_change: on_node_change,\n on_edge_change: on_edge_change,\n on_connect: on_connect,\n });\n var ns = (0,_nodespace__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({});\n var lib = (0,_lib__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n var clear_all = function () {\n var _a, _b;\n (_a = iterf.worker) === null || _a === void 0 ? void 0 : _a.disconnect();\n iterf.set_worker(undefined);\n (_b = iterf.workermanager) === null || _b === void 0 ? void 0 : _b.setWorker(undefined);\n iterf.lib.libstate\n .getState()\n .set({ lib: { shelves: [] }, external_worker: [] });\n iterf.nodespace.nodesstates.clear();\n iterf.useReactFlowStore.setState({ nodes: [], edges: [] });\n iterf.auto_progress();\n };\n var iterf = {\n local_settings: (0,zustand__WEBPACK_IMPORTED_MODULE_7__.create)(function (_set, _get) { return ({\n view_settings: {\n expand_node_props: false,\n },\n update_view_settings: function (settings) {\n var current = iterf.local_settings.getState().view_settings;\n var _a = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.deep_merge)(current, settings), new_obj = _a.new_obj, change = _a.change;\n if (change) {\n iterf.local_settings.setState(function (prev) { return (__assign(__assign({}, prev), { view_settings: new_obj })); });\n }\n },\n }); }),\n local_state: (0,zustand__WEBPACK_IMPORTED_MODULE_7__.create)(function (_set, _get) { return ({\n selected_nodes: [],\n selected_edges: [],\n }); }),\n options: options,\n lib: lib,\n workermanager: undefined,\n workers: (0,zustand__WEBPACK_IMPORTED_MODULE_7__.create)(function (_set, _get) { return ({}); }),\n workerstate: (0,zustand__WEBPACK_IMPORTED_MODULE_7__.create)(function (_set, _get) { return ({\n is_open: false,\n }); }),\n render_options: (0,zustand__WEBPACK_IMPORTED_MODULE_7__.create)(function (_set, _get) { return ({}); }),\n progress_state: (0,zustand__WEBPACK_IMPORTED_MODULE_7__.create)(function (_set, _get) { return ({\n message: \"please select worker\",\n status: \"info\",\n progress: 0,\n blocking: false,\n }); }),\n update_render_options: function (options) {\n var current = iterf.render_options.getState();\n var _a = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.deep_merge)(current, options), new_obj = _a.new_obj, change = _a.change;\n if (change) {\n iterf.render_options.setState(new_obj);\n }\n },\n worker: undefined,\n _unsubscribeFromWorker: undefined,\n set_worker: function (worker) {\n if (worker === iterf.worker) {\n return;\n }\n if (iterf._unsubscribeFromWorker) {\n iterf._unsubscribeFromWorker();\n iterf._unsubscribeFromWorker = undefined;\n }\n // If new worker is provided\n if (worker) {\n iterf._unsubscribeFromWorker = worker.state.subscribe(function (newState) {\n iterf.workerstate.setState(newState);\n });\n iterf.workerstate.setState(worker.state.getState());\n }\n // Update the reference\n iterf.worker = worker;\n worker === null || worker === void 0 ? void 0 : worker.set_zustand(iterf);\n },\n nodespace: ns,\n useReactFlowStore: rfstore,\n on_node_action: on_node_action,\n on_edge_action: on_edge_action,\n reactflowRef: null,\n clear_all: clear_all,\n set_progress: function (progress) {\n if (progress.message === \"\") {\n return iterf.auto_progress();\n }\n var prev_state = iterf.progress_state.getState();\n var _a = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.deep_merge)(prev_state, progress), new_obj = _a.new_obj, change = _a.change;\n if (change) {\n iterf.progress_state.setState(new_obj);\n }\n },\n auto_progress: function () {\n if (iterf.worker === undefined) {\n return iterf.set_progress({\n progress: 0,\n message: \"please select worker\",\n status: \"error\",\n blocking: false,\n });\n }\n if (!iterf.worker.is_open) {\n return iterf.set_progress({\n progress: 0,\n message: \"connecting to worker\",\n status: \"info\",\n blocking: true,\n });\n }\n iterf.set_progress({\n progress: 1,\n message: \"running\",\n status: \"info\",\n blocking: false,\n });\n },\n plugins: (0,zustand__WEBPACK_IMPORTED_MODULE_7__.create)(function (_set, _get) { return ({}); }),\n add_plugin: function (name, plugin) {\n if (plugin === undefined)\n return;\n iterf.plugins.setState(function (prev) {\n var _a;\n return __assign(__assign({}, prev), (_a = {}, _a[name] = plugin, _a));\n });\n },\n dev_settings: {\n debug: true,\n },\n logger: new _utils_logger__WEBPACK_IMPORTED_MODULE_6__.ConsoleLogger(\"fn\", _utils_logger__WEBPACK_IMPORTED_MODULE_6__.INFO),\n };\n return iterf;\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FuncNodesReactFlowZustand);\n\n\n\n//# sourceURL=webpack://@linkdlab/funcnodes_react_flow/./src/states/fnrfzst.ts?");
2879
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LibZustand: () => (/* reexport safe */ _lib__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ NodeSpaceZustand: () => (/* reexport safe */ _nodespace__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ assert_reactflow_node: () => (/* binding */ assert_reactflow_node),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _lib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib */ \"./src/states/lib.ts\");\n/* harmony import */ var _nodespace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./nodespace */ \"./src/states/nodespace.ts\");\n/* harmony import */ var _node__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node */ \"./src/states/node.ts\");\n/* harmony import */ var _reactflow__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./reactflow */ \"./src/states/reactflow.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\n/* harmony import */ var _edge__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./edge */ \"./src/states/edge.ts\");\n/* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! zustand */ \"../node_modules/zustand/esm/index.mjs\");\n/* harmony import */ var _utils_logger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.ts\");\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\n\n\n\n\n\nvar _fill_node_frontend = function (node, fnrf_instance) {\n var frontend = node.frontend || {};\n if (!frontend.size) {\n frontend.size = [200, 100];\n }\n if (!frontend.pos ||\n frontend.pos.length !== 2 ||\n isNaN(frontend.pos[0]) ||\n frontend.pos[0] === null ||\n isNaN(frontend.pos[1]) ||\n frontend.pos[1] === null) {\n if (!fnrf_instance ||\n !fnrf_instance.rf_instance ||\n fnrf_instance.reactflowRef === null) {\n frontend.pos = [0, 0];\n }\n else {\n var ref = fnrf_instance.reactflowRef;\n var rect = ref.getBoundingClientRect(); // Step 2: Get bounding rectangle\n var centerX = rect.left + rect.width / 2; // Calculate center X\n var centerY = rect.top + rect.height / 2; // Calculate center Y\n var flowpos = fnrf_instance.rf_instance.screenToFlowPosition({\n x: centerX,\n y: centerY,\n });\n frontend.pos = [\n flowpos.x - frontend.size[0] / 2,\n flowpos.y - frontend.size[1] / 2,\n ];\n }\n }\n if (!frontend.collapsed) {\n frontend.collapsed = false;\n }\n node.frontend = frontend;\n};\nvar assert_react_flow_io = function (io, fnrf_instance) {\n if (io.value === \"<NoValue>\") {\n io.value = undefined;\n }\n if (io.fullvalue === \"<NoValue>\") {\n io.fullvalue = undefined;\n }\n if (io.try_get_full_value === undefined) {\n io.try_get_full_value = function () {\n var _a;\n if (!fnrf_instance) {\n return;\n }\n if (io.node === undefined || io.id === undefined) {\n return;\n }\n (_a = fnrf_instance.worker) === null || _a === void 0 ? void 0 : _a.get_io_full_value({ nid: io.node, ioid: io.id });\n };\n }\n if (io.hidden === undefined) {\n io.hidden = false;\n }\n if (io.set_hidden === undefined) {\n io.set_hidden = function (v) {\n var _a;\n if (!fnrf_instance) {\n return;\n }\n if (io.node === undefined || io.id === undefined) {\n return;\n }\n (_a = fnrf_instance.worker) === null || _a === void 0 ? void 0 : _a.update_io_options({\n nid: io.node,\n ioid: io.id,\n options: { hidden: v },\n });\n };\n }\n return io;\n};\nvar assert_reactflow_node = function (node, store, fnrf_instance) {\n _fill_node_frontend(node, fnrf_instance);\n node = (0,_node__WEBPACK_IMPORTED_MODULE_2__.assert_full_node)(node);\n if (node.id === undefined) {\n throw new Error(\"Node must have an id\");\n }\n for (var io in node.io) {\n node.io[io].node = node.id;\n assert_react_flow_io(node.io[io], fnrf_instance);\n }\n var extendedNode = __assign({ position: {\n x: node.frontend.pos[0],\n y: node.frontend.pos[1],\n }, data: {\n UseNodeStore: store,\n }, type: \"default\" }, node);\n return extendedNode;\n};\nvar FuncNodesReactFlowZustand = function (_a) {\n /*\n function that should be called when the remote node, e.g. in the python worker is performing an action\n */\n var _b = _a.useWorkerManager, useWorkerManager = _b === void 0 ? true : _b, _c = _a.default_worker, default_worker = _c === void 0 ? undefined : _c, _d = _a.on_sync_complete, on_sync_complete = _d === void 0 ? undefined : _d;\n var options = {\n useWorkerManager: useWorkerManager,\n default_worker: default_worker,\n on_sync_complete: on_sync_complete,\n };\n var _add_node = function (action) {\n var _a;\n var rfstate = rfstore.getState();\n if (action.from_remote) {\n var store = ns.get_node(action.node.id, false);\n if (!store) {\n try {\n store = (0,_node__WEBPACK_IMPORTED_MODULE_2__.createNodeStore)(action.node);\n ns.nodesstates.set(action.node.id, store);\n }\n catch (e) {\n return;\n }\n }\n var node = store.getState();\n var new_ndoes = __spreadArray(__spreadArray([], rfstate.nodes, true), [\n assert_reactflow_node(node, store, iterf),\n ], false);\n rfstore.setState({ nodes: new_ndoes });\n // wait 200 ms then set the full value of all ios\n for (var io in action.node.io) {\n var ioid = action.node.io[io].id;\n if (ioid !== undefined) {\n (_a = iterf.worker) === null || _a === void 0 ? void 0 : _a.get_io_value({ nid: action.node.id, ioid: ioid });\n }\n }\n }\n };\n var _update_node = function (action) {\n var _a;\n // some action reset the error, so far trigger does, so errors should remove the in_trigger flag\n if (action.node.in_trigger) {\n action.node.error = undefined;\n }\n if (action.from_remote) {\n var store = ns.get_node(action.id, false);\n if (!store) {\n return;\n }\n (0,_node__WEBPACK_IMPORTED_MODULE_2__.normalize_node)(action.node);\n var state = store.getState();\n var _b = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.deep_merge)(state, action.node), new_obj = _b.new_obj, change = _b.change;\n if (change) {\n // update ios after merge, because it might be an object whch would resolt of\n // some part of the old value still being there (on the frontend)\n if (action.node.io) {\n for (var io in action.node.io) {\n // if fullvalue is in the update data, set to fullvalue otherwise set to undefined\n new_obj.io[io].fullvalue = (_a = action.node.io[io]) === null || _a === void 0 ? void 0 : _a.fullvalue;\n for (var io_1 in action.node.io) {\n var ioobj = action.node.io[io_1];\n var new_obj_io = new_obj.io[io_1];\n // check if value in io, undefined is a valid value\n if (ioobj.hasOwnProperty(\"value\")) {\n if (ioobj.value === undefined) {\n new_obj_io.value = null;\n }\n else if (ioobj.value === \"<NoValue>\") {\n new_obj_io.value = undefined;\n }\n else {\n new_obj_io.value = ioobj.value;\n }\n }\n }\n }\n }\n assert_reactflow_node(new_obj, store, iterf);\n iterf.logger.debug(\"update_action\", new_obj);\n store.setState((0,_node__WEBPACK_IMPORTED_MODULE_2__.assert_full_node)(new_obj));\n }\n }\n else {\n if (iterf.worker) {\n iterf.worker.locally_update_node(action);\n }\n }\n };\n var _delete_node = function (action) {\n var _a;\n if (action.from_remote) {\n rfstore.getState().onNodesChange([\n {\n type: \"remove\",\n id: action.id,\n },\n ]);\n }\n else {\n (_a = iterf.worker) === null || _a === void 0 ? void 0 : _a.remove_node(action.id);\n }\n };\n var _error_action = function (action) {\n iterf.logger.error(\"Error\", action);\n on_node_action({\n type: \"update\",\n id: action.id,\n node: {\n in_trigger: false,\n error: action.error,\n },\n from_remote: true,\n });\n };\n var _trigger_action = function (action) {\n var _a;\n if (action.from_remote) {\n on_node_action({\n type: \"update\",\n id: action.id,\n node: {\n in_trigger: true,\n error: undefined,\n },\n from_remote: true,\n });\n }\n else {\n (_a = iterf.worker) === null || _a === void 0 ? void 0 : _a.trigger_node(action.id);\n }\n };\n var on_node_action = function (action) {\n switch (action.type) {\n case \"add\":\n _add_node(action);\n break;\n case \"update\":\n _update_node(action);\n break;\n case \"delete\":\n _delete_node(action);\n break;\n case \"error\":\n _error_action(action);\n break;\n case \"trigger\":\n _trigger_action(action);\n break;\n default:\n iterf.logger.error(\"Unknown node action\", action);\n }\n };\n var on_edge_action = function (action) {\n var _a, _b, _c, _d;\n var rfstate = rfstore.getState();\n switch (action.type) {\n case \"add\":\n if (action.from_remote) {\n var edges = rfstate.edges;\n var new_edge_id_1 = (0,_edge__WEBPACK_IMPORTED_MODULE_5__.generate_edge_id)(action);\n //cehck if edge already exists including reversed\n if (edges.some(function (e) { return e.id === new_edge_id_1; })) {\n return;\n }\n var new_edge = {\n id: new_edge_id_1,\n source: action.src_nid,\n target: action.trg_nid,\n sourceHandle: action.src_ioid,\n targetHandle: action.trg_ioid,\n className: \"funcnodes-edge animated\",\n };\n iterf.logger.info(\"Adding edge\", new_edge);\n rfstore.setState({ edges: __spreadArray(__spreadArray([], edges, true), [new_edge], false) });\n (_a = iterf.worker) === null || _a === void 0 ? void 0 : _a.get_remote_node_state(action.src_nid);\n (_b = iterf.worker) === null || _b === void 0 ? void 0 : _b.get_remote_node_state(action.trg_nid);\n }\n else {\n }\n break;\n case \"delete\":\n if (action.from_remote) {\n var edges = rfstate.edges;\n var del_edge_id_1 = (0,_edge__WEBPACK_IMPORTED_MODULE_5__.generate_edge_id)(action);\n var new_edges = edges.filter(function (edge) { return edge.id !== del_edge_id_1; });\n rfstore.setState({ edges: new_edges });\n (_c = iterf.worker) === null || _c === void 0 ? void 0 : _c.get_remote_node_state(action.src_nid);\n (_d = iterf.worker) === null || _d === void 0 ? void 0 : _d.get_remote_node_state(action.trg_nid);\n }\n else {\n }\n break;\n default:\n iterf.logger.error(\"Unknown edge action\", action);\n }\n };\n /*\n on_node_cahnge is called by react flow when a note change event is fired\n should update the local state if something changed\n */\n var on_node_change = function (nodechange) {\n for (var _i = 0, nodechange_1 = nodechange; _i < nodechange_1.length; _i++) {\n var change = nodechange_1[_i];\n switch (change.type) {\n case \"position\":\n if (change.position) {\n on_node_action({\n type: \"update\",\n id: change.id,\n node: {\n frontend: { pos: [change.position.x, change.position.y] },\n },\n from_remote: false,\n });\n }\n break;\n case \"dimensions\":\n if (change.dimensions) {\n on_node_action({\n type: \"update\",\n id: change.id,\n node: {\n frontend: {\n size: [change.dimensions.width, change.dimensions.height],\n },\n },\n from_remote: false,\n });\n }\n break;\n }\n }\n };\n var on_edge_change = function (_edgechange) { };\n var on_connect = function (connection) {\n if (connection.source === null ||\n connection.target === null ||\n connection.sourceHandle === null ||\n connection.targetHandle === null ||\n !iterf.worker) {\n return;\n }\n iterf.worker.add_edge({\n src_nid: connection.source,\n src_ioid: connection.sourceHandle,\n trg_nid: connection.target,\n trg_ioid: connection.targetHandle,\n replace: true,\n });\n };\n var rfstore = (0,_reactflow__WEBPACK_IMPORTED_MODULE_3__[\"default\"])({\n on_node_change: on_node_change,\n on_edge_change: on_edge_change,\n on_connect: on_connect,\n });\n var ns = (0,_nodespace__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({});\n var lib = (0,_lib__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n var clear_all = function () {\n var _a, _b;\n (_a = iterf.worker) === null || _a === void 0 ? void 0 : _a.disconnect();\n iterf.set_worker(undefined);\n (_b = iterf.workermanager) === null || _b === void 0 ? void 0 : _b.setWorker(undefined);\n iterf.lib.libstate\n .getState()\n .set({ lib: { shelves: [] }, external_worker: [] });\n iterf.nodespace.nodesstates.clear();\n iterf.useReactFlowStore.setState({ nodes: [], edges: [] });\n iterf.auto_progress();\n };\n var iterf = {\n local_settings: (0,zustand__WEBPACK_IMPORTED_MODULE_7__.create)(function (_set, _get) { return ({\n view_settings: {\n expand_node_props: false,\n },\n update_view_settings: function (settings) {\n var current = iterf.local_settings.getState().view_settings;\n var _a = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.deep_merge)(current, settings), new_obj = _a.new_obj, change = _a.change;\n if (change) {\n iterf.local_settings.setState(function (prev) { return (__assign(__assign({}, prev), { view_settings: new_obj })); });\n }\n },\n }); }),\n local_state: (0,zustand__WEBPACK_IMPORTED_MODULE_7__.create)(function (_set, _get) { return ({\n selected_nodes: [],\n selected_edges: [],\n }); }),\n options: options,\n lib: lib,\n workermanager: undefined,\n workers: (0,zustand__WEBPACK_IMPORTED_MODULE_7__.create)(function (_set, _get) { return ({}); }),\n workerstate: (0,zustand__WEBPACK_IMPORTED_MODULE_7__.create)(function (_set, _get) { return ({\n is_open: false,\n }); }),\n render_options: (0,zustand__WEBPACK_IMPORTED_MODULE_7__.create)(function (_set, _get) { return ({}); }),\n progress_state: (0,zustand__WEBPACK_IMPORTED_MODULE_7__.create)(function (_set, _get) { return ({\n message: \"please select worker\",\n status: \"info\",\n progress: 0,\n blocking: false,\n }); }),\n update_render_options: function (options) {\n var current = iterf.render_options.getState();\n var _a = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.deep_merge)(current, options), new_obj = _a.new_obj, change = _a.change;\n if (change) {\n iterf.render_options.setState(new_obj);\n }\n },\n worker: undefined,\n _unsubscribeFromWorker: undefined,\n set_worker: function (worker) {\n if (worker === iterf.worker) {\n return;\n }\n if (iterf._unsubscribeFromWorker) {\n iterf._unsubscribeFromWorker();\n iterf._unsubscribeFromWorker = undefined;\n }\n // If new worker is provided\n if (worker) {\n iterf._unsubscribeFromWorker = worker.state.subscribe(function (newState) {\n iterf.workerstate.setState(newState);\n });\n iterf.workerstate.setState(worker.state.getState());\n }\n // Update the reference\n iterf.worker = worker;\n worker === null || worker === void 0 ? void 0 : worker.set_zustand(iterf);\n },\n nodespace: ns,\n useReactFlowStore: rfstore,\n on_node_action: on_node_action,\n on_edge_action: on_edge_action,\n reactflowRef: null,\n clear_all: clear_all,\n set_progress: function (progress) {\n if (progress.message === \"\") {\n return iterf.auto_progress();\n }\n var prev_state = iterf.progress_state.getState();\n var _a = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.deep_merge)(prev_state, progress), new_obj = _a.new_obj, change = _a.change;\n if (change) {\n iterf.progress_state.setState(new_obj);\n }\n },\n auto_progress: function () {\n if (iterf.worker === undefined) {\n return iterf.set_progress({\n progress: 0,\n message: \"please select worker\",\n status: \"error\",\n blocking: false,\n });\n }\n if (!iterf.worker.is_open) {\n return iterf.set_progress({\n progress: 0,\n message: \"connecting to worker\",\n status: \"info\",\n blocking: true,\n });\n }\n iterf.set_progress({\n progress: 1,\n message: \"running\",\n status: \"info\",\n blocking: false,\n });\n },\n plugins: (0,zustand__WEBPACK_IMPORTED_MODULE_7__.create)(function (_set, _get) { return ({}); }),\n add_plugin: function (name, plugin) {\n if (plugin === undefined)\n return;\n iterf.plugins.setState(function (prev) {\n var _a;\n return __assign(__assign({}, prev), (_a = {}, _a[name] = plugin, _a));\n });\n },\n dev_settings: {\n debug: true,\n },\n logger: new _utils_logger__WEBPACK_IMPORTED_MODULE_6__.ConsoleLogger(\"fn\", _utils_logger__WEBPACK_IMPORTED_MODULE_6__.INFO),\n };\n return iterf;\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FuncNodesReactFlowZustand);\n\n\n\n//# sourceURL=webpack://@linkdlab/funcnodes_react_flow/./src/states/fnrfzst.ts?");
2880
2880
 
2881
2881
  /***/ }),
2882
2882
 
@@ -2906,7 +2906,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2906
2906
  \****************************/
2907
2907
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2908
2908
 
2909
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ assert_full_node: () => (/* binding */ assert_full_node),\n/* harmony export */ createNodeStore: () => (/* binding */ createNodeStore),\n/* harmony export */ normalize_node: () => (/* binding */ normalize_node)\n/* harmony export */ });\n/* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! zustand */ \"../node_modules/zustand/esm/index.mjs\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\n\n\nvar dummy_nodeio = {\n id: \"dummy\",\n name: \"dummy\",\n node: \"dummy\",\n full_id: \"dummy\",\n type: \"any\",\n value: undefined,\n is_input: false,\n connected: false,\n does_trigger: true,\n fullvalue: undefined,\n try_get_full_value: undefined,\n render_options: {\n set_default: true,\n type: \"any\",\n },\n set_hidden: undefined,\n hidden: false,\n};\nvar assert_full_nodeio = function (io) {\n if (!io.id) {\n throw new Error(\"IO must have an id but is missing for \" + JSON.stringify(io));\n }\n if (io.name === undefined) {\n io.name = io.id;\n }\n var new_obj = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.deep_update)(io, dummy_nodeio).new_obj;\n if (new_obj.render_options.type === \"any\" ||\n new_obj.render_options.type === undefined)\n new_obj.render_options.type = new_obj.type;\n return new_obj;\n};\n//@ts-ignore\nvar dummy_node = {\n id: \"dummy\",\n node_name: \"dummy\",\n frontend: {\n pos: [NaN, NaN],\n size: [200, 100],\n collapsed: false,\n },\n io: {},\n name: \"dummy\",\n in_trigger: false,\n io_order: [],\n};\nvar dummy_node_json = JSON.stringify(dummy_node);\nvar assert_full_node = function (node) {\n if (!node.id) {\n throw new Error(\"Node must have an id\");\n }\n var dummy_node = JSON.parse(dummy_node_json);\n var new_obj = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.deep_update)(node, dummy_node).new_obj;\n for (var ioid in new_obj.io) {\n if (new_obj.io[ioid] === undefined)\n continue;\n var io = assert_full_nodeio(new_obj.io[ioid]);\n new_obj.io[ioid] = io;\n }\n if (node.progressState === undefined) {\n new_obj.progressState = (0,zustand__WEBPACK_IMPORTED_MODULE_1__.create)(function (_set, _get) {\n return {\n label: \"idle\",\n total: 0,\n current: 0,\n };\n });\n }\n return new_obj;\n};\nvar normalize_node = function (node) {\n if (node.io === undefined) {\n node.io = {};\n }\n if (node.io_order === undefined) {\n if (Array.isArray(node.io)) {\n node.io_order = node.io.map(function (io) { return io.id; });\n var new_io = {};\n for (var _i = 0, _a = node.io; _i < _a.length; _i++) {\n var io = _a[_i];\n new_io[io.id] = io;\n }\n node.io = new_io;\n }\n else {\n node.io_order = Object.keys(node.io);\n }\n }\n else {\n if (Array.isArray(node.io)) {\n var new_io = {};\n for (var _b = 0, _c = node.io; _b < _c.length; _b++) {\n var io = _c[_b];\n new_io[io.id] = io;\n if (!node.io_order.includes(io.id)) {\n node.io_order.push(io.id);\n }\n }\n node.io = new_io;\n }\n else {\n for (var io in node.io) {\n if (!node.io_order.includes(io)) {\n node.io_order.push(io);\n }\n }\n }\n }\n return node;\n};\nvar createNodeStore = function (node) {\n // check if node is Object\n return (0,zustand__WEBPACK_IMPORTED_MODULE_1__.create)(function (_set, _get) {\n return assert_full_node(normalize_node(node));\n });\n};\n\n\n\n//# sourceURL=webpack://@linkdlab/funcnodes_react_flow/./src/states/node.ts?");
2909
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ assert_full_node: () => (/* binding */ assert_full_node),\n/* harmony export */ createNodeStore: () => (/* binding */ createNodeStore),\n/* harmony export */ normalize_node: () => (/* binding */ normalize_node)\n/* harmony export */ });\n/* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! zustand */ \"../node_modules/zustand/esm/index.mjs\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\n\n\nvar dummy_nodeio = {\n id: \"dummy\",\n name: \"dummy\",\n node: \"dummy\",\n full_id: \"dummy\",\n type: \"any\",\n value: undefined,\n is_input: false,\n connected: false,\n does_trigger: true,\n fullvalue: undefined,\n try_get_full_value: undefined,\n render_options: {\n set_default: true,\n type: \"any\",\n },\n set_hidden: undefined,\n hidden: false,\n};\nvar assert_full_nodeio = function (io) {\n if (!io.id) {\n throw new Error(\"IO must have an id but is missing for \" + JSON.stringify(io));\n }\n if (io.name === undefined) {\n io.name = io.id;\n }\n var new_obj = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.deep_update)(io, dummy_nodeio).new_obj;\n if (new_obj.render_options.type === \"any\" ||\n new_obj.render_options.type === undefined)\n new_obj.render_options.type = new_obj.type;\n return new_obj;\n};\nvar dummy_node = {\n id: \"dummy\",\n node_name: \"dummy\",\n frontend: {\n pos: [NaN, NaN],\n size: [200, 100],\n collapsed: false,\n },\n io: {},\n name: \"dummy\",\n in_trigger: false,\n io_order: [],\n progress: {\n ascii: false,\n elapsed: 0,\n initial: 0,\n n: 0,\n prefix: \"idle\",\n unit: \"it\",\n unit_divisor: 1000,\n unit_scale: false,\n },\n};\nvar dummy_node_json = JSON.stringify(dummy_node);\nvar assert_full_node = function (node) {\n if (!node.id) {\n throw new Error(\"Node must have an id\");\n }\n var dummy_node = JSON.parse(dummy_node_json);\n var new_obj = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.deep_update)(node, dummy_node).new_obj;\n for (var ioid in new_obj.io) {\n if (new_obj.io[ioid] === undefined)\n continue;\n var io = assert_full_nodeio(new_obj.io[ioid]);\n new_obj.io[ioid] = io;\n }\n return new_obj;\n};\nvar normalize_node = function (node) {\n if (node.io === undefined) {\n node.io = {};\n }\n if (node.io_order === undefined) {\n if (Array.isArray(node.io)) {\n node.io_order = node.io.map(function (io) { return io.id; });\n var new_io = {};\n for (var _i = 0, _a = node.io; _i < _a.length; _i++) {\n var io = _a[_i];\n new_io[io.id] = io;\n }\n node.io = new_io;\n }\n else {\n node.io_order = Object.keys(node.io);\n }\n }\n else {\n if (Array.isArray(node.io)) {\n var new_io = {};\n for (var _b = 0, _c = node.io; _b < _c.length; _b++) {\n var io = _c[_b];\n new_io[io.id] = io;\n if (!node.io_order.includes(io.id)) {\n node.io_order.push(io.id);\n }\n }\n node.io = new_io;\n }\n else {\n for (var io in node.io) {\n if (!node.io_order.includes(io)) {\n node.io_order.push(io);\n }\n }\n }\n }\n return node;\n};\nvar createNodeStore = function (node) {\n // check if node is Object\n return (0,zustand__WEBPACK_IMPORTED_MODULE_1__.create)(function (_set, _get) {\n return assert_full_node(normalize_node(node));\n });\n};\n\n\n\n//# sourceURL=webpack://@linkdlab/funcnodes_react_flow/./src/states/node.ts?");
2910
2910
 
2911
2911
  /***/ }),
2912
2912
 
@@ -2930,6 +2930,16 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2930
2930
 
2931
2931
  /***/ }),
2932
2932
 
2933
+ /***/ "./src/utils/autolayout/txt.ts":
2934
+ /*!*************************************!*\
2935
+ !*** ./src/utils/autolayout/txt.ts ***!
2936
+ \*************************************/
2937
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2938
+
2939
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ fitTextToContainer: () => (/* binding */ fitTextToContainer)\n/* harmony export */ });\n/**\n * Dynamically adjusts the font size of a text element so that it fits within its container.\n *\n * @param container - The container element that defines the maximum space.\n * @param textElement - The element whose text needs to be resized.\n * @param options - Optional configuration (maxFontSize, minFontSize, decrementFactor).\n */\nfunction fitTextToContainer(container, textElement, options) {\n if (options === void 0) { options = {}; }\n var _a = options.maxFontSize, maxFontSize = _a === void 0 ? 100 : _a, // default maximum font size\n _b = options.minFontSize, // default maximum font size\n minFontSize = _b === void 0 ? 8 : _b, // default minimum font size\n _c = options.decrementFactor, // default minimum font size\n decrementFactor = _c === void 0 ? 0.9 : _c;\n if (!container || !textElement) {\n return;\n }\n if (decrementFactor >= 1 || decrementFactor <= 0) {\n throw new Error(\"decrementFactor must be between 0 and 1\");\n }\n // Get container dimensions\n var containerRect = container.getBoundingClientRect();\n var containerWidth = containerRect.width;\n var containerHeight = containerRect.height;\n // Start with the maximum font size\n var fontSize = maxFontSize;\n // Apply the font size, measure, and adjust\n textElement.style.whiteSpace = \"nowrap\"; // ensure single line measurement if desired\n textElement.style.display = \"inline-block\";\n // Set initial font size\n textElement.style.fontSize = fontSize + \"px\";\n var textRect = textElement.getBoundingClientRect();\n // While text doesn't fit and we haven't reached the minimum font size\n // Check both width and height to ensure the text fits completely.\n while ((textRect.width > containerWidth || textRect.height > containerHeight) &&\n fontSize > minFontSize) {\n fontSize *= decrementFactor;\n textElement.style.fontSize = fontSize + \"px\";\n textRect = textElement.getBoundingClientRect();\n }\n // If you want the text to break lines and fill multi-line container, remove whiteSpace override:\n // textElement.style.whiteSpace = \"normal\";\n}\n/*\nExample usage (in a component or script):\n-----------------------------------------\nconst container = document.getElementById('text-container');\nconst textElement = document.getElementById('text-content');\n\nif (container && textElement) {\n fitTextToContainer(container, textElement, {\n maxFontSize: 72,\n minFontSize: 10,\n decrementFactor: 0.9\n });\n}\n*/\n\n\n\n//# sourceURL=webpack://@linkdlab/funcnodes_react_flow/./src/utils/autolayout/txt.ts?");
2940
+
2941
+ /***/ }),
2942
+
2933
2943
  /***/ "./src/utils/data.ts":
2934
2944
  /*!***************************!*\
2935
2945
  !*** ./src/utils/data.ts ***!
@@ -7569,9 +7579,10 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
7569
7579
  /******/ // This entry module can't be inlined because the eval devtool is used.
7570
7580
  /******/ var __webpack_exports__ = __webpack_require__("./src/index.tsx");
7571
7581
  /******/ var __webpack_exports__FuncNodes = __webpack_exports__.FuncNodes;
7582
+ /******/ var __webpack_exports__FuncNodesContext = __webpack_exports__.FuncNodesContext;
7572
7583
  /******/ var __webpack_exports__FuncNodesReactFlowZustand = __webpack_exports__.FuncNodesReactFlowZustand;
7573
7584
  /******/ var __webpack_exports__WebSocketWorker = __webpack_exports__.WebSocketWorker;
7574
7585
  /******/ var __webpack_exports__default = __webpack_exports__["default"];
7575
7586
  /******/ var __webpack_exports__helperfunctions = __webpack_exports__.helperfunctions;
7576
- /******/ export { __webpack_exports__FuncNodes as FuncNodes, __webpack_exports__FuncNodesReactFlowZustand as FuncNodesReactFlowZustand, __webpack_exports__WebSocketWorker as WebSocketWorker, __webpack_exports__default as default, __webpack_exports__helperfunctions as helperfunctions };
7587
+ /******/ export { __webpack_exports__FuncNodes as FuncNodes, __webpack_exports__FuncNodesContext as FuncNodesContext, __webpack_exports__FuncNodesReactFlowZustand as FuncNodesReactFlowZustand, __webpack_exports__WebSocketWorker as WebSocketWorker, __webpack_exports__default as default, __webpack_exports__helperfunctions as helperfunctions };
7577
7588
  /******/