diff --git a/app.text.js b/app.text.js index 57dd8c0..333f1ff 100644 --- a/app.text.js +++ b/app.text.js @@ -12,14 +12,20 @@ export const TITLES = { INFO: "Информация", //Информационный блок WARN: "Предупреждение", //Блок предупреждения ERR: "Ошибка", //Информация об ошибке - DEFAULT_PANELS_GROUP: "Без привязки к группе" //Заголовок группы панелей по умолчанию + DEFAULT_PANELS_GROUP: "Без привязки к группе", //Заголовок группы панелей по умолчанию + DATA_SOURCE_CONFIG: "Настройка источника данных", //Заголовок для настройки источника данных + INSERT: "Добавление", //Заголовок для диалогов/форм добавления + UPDATE: "Исправление" //Заголовок для диалогов/форм исправления }; //Текст export const TEXTS = { LOADING: "Ожидайте...", //Ожидание завершения процесса NO_DATA_FOUND: "Данных не найдено", //Отсутствие данных - NO_DATA_FOUND_SHORT: "Н.Д." //Отсутствие данных (кратко) + NO_DATA_FOUND_SHORT: "Н.Д.", //Отсутствие данных (кратко) + NO_SETTINGS: "Настройки не определены", //Отстутсвие настроек + UNKNOWN_SOURCE_TYPE: "Неизвестный тип источника", //Отсуствие типа источника + UNNAMED_SOURCE: "Источник без наименования" //Отсутствие наименования источника }; //Текст кнопок @@ -38,7 +44,11 @@ export const BUTTONS = { FILTER: "Фильтр", //Фильтрация MORE: "Ещё", //Догрузка данных APPLY: "Применить", //Сохранение без закрытия интерфейса ввода - SAVE: "Сохранить" //Сохранение + SAVE: "Сохранить", //Сохранение + CONFIG: "Настроить", //Настройка + INSERT: "Добавить", //Добавление + UPDATE: "Исправить", //Исправление + DELETE: "Удалить" //Удаление }; //Метки атрибутов, сопроводительные надписи @@ -51,7 +61,9 @@ export const CAPTIONS = { START: "Начало", END: "Окончание", PROGRESS: "Прогресс", - LEGEND: "Легенда" + LEGEND: "Легенда", + USER_PROC: "Пользовательская процедура", + QUERY: "Запрос" }; //Типовые сообщения об ошибках @@ -59,7 +71,8 @@ export const ERRORS = { UNDER_CONSTRUCTION: "Панель в разработке", P8O_API_UNAVAILABLE: '"ПАРУС 8 Онлайн" недоступен', P8O_API_UNSUPPORTED: 'Функция "ПАРУС 8 Онлайн" не поддерживается', - DEFAULT: "Неожиданная ошибка" + DEFAULT: "Неожиданная ошибка", + DATA_SOURCE_NO_REQ_ARGS: "Не заданы обязательные параметры источника данных" }; //Типовые сообщения для ошибок HTTP diff --git a/app/panels/panels_editor/components/views_common.js b/app/components/editors/p8p_component_inline_message.js similarity index 60% rename from app/panels/panels_editor/components/views_common.js rename to app/components/editors/p8p_component_inline_message.js index 085ed0c..4cf4176 100644 --- a/app/panels/panels_editor/components/views_common.js +++ b/app/components/editors/p8p_component_inline_message.js @@ -1,6 +1,6 @@ /* - Парус 8 - Панели мониторинга - Редактор панелей - Общие компоненты представлений элементов панели + Парус 8 - Панели мониторинга - Редакторы панелей + Компонент: Информационное сообщение внутри компонента */ //--------------------- @@ -10,22 +10,22 @@ import React from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Stack, Icon, Typography } from "@mui/material"; //Интерфейсные элементы -import { TEXTS } from "../../../../app.text"; //Общие текстовые ресурсы +import { TEXTS } from "../../../app.text"; //Общие текстовые ресурсы //--------- //Константы //--------- -//Типы сообщений -const COMPONENT_MESSAGE_TYPE = { +//Типы сообщений компонентов +const P8P_COMPONENT_INLINE_MESSAGE_TYPE = { COMMON: "COMMON", ERROR: "ERROR" }; -//Типовые сообщения -const COMPONENT_MESSAGES = { +//Типовые сообщения компонентов +const P8P_COMPONENT_INLINE_MESSAGE = { NO_DATA_FOUND: TEXTS.NO_DATA_FOUND, - NO_SETTINGS: "Настройте компонент" + NO_SETTINGS: TEXTS.NO_SETTINGS }; //----------- @@ -33,7 +33,7 @@ const COMPONENT_MESSAGES = { //----------- //Информационное сообщение внутри компонента -const ComponentInlineMessage = ({ icon, name, message, type = COMPONENT_MESSAGE_TYPE.COMMON }) => { +const P8PComponentInlineMessage = ({ icon, name, message, type = P8P_COMPONENT_INLINE_MESSAGE_TYPE.COMMON }) => { //Формирование представления return ( @@ -45,7 +45,11 @@ const ComponentInlineMessage = ({ icon, name, message, type = COMPONENT_MESSAGE_ )} - + {message} @@ -53,15 +57,15 @@ const ComponentInlineMessage = ({ icon, name, message, type = COMPONENT_MESSAGE_ }; //Контроль свойств - Информационное сообщение внутри компонента -ComponentInlineMessage.propTypes = { +P8PComponentInlineMessage.propTypes = { icon: PropTypes.string, name: PropTypes.string, message: PropTypes.string.isRequired, - type: PropTypes.oneOf(Object.values(COMPONENT_MESSAGE_TYPE)) + type: PropTypes.oneOf(Object.values(P8P_COMPONENT_INLINE_MESSAGE_TYPE)) }; //---------------- //Интерфейс модуля //---------------- -export { COMPONENT_MESSAGE_TYPE, COMPONENT_MESSAGES, ComponentInlineMessage }; +export { P8P_COMPONENT_INLINE_MESSAGE_TYPE, P8P_COMPONENT_INLINE_MESSAGE, P8PComponentInlineMessage }; diff --git a/app/components/editors/p8p_config_dialog.js b/app/components/editors/p8p_config_dialog.js new file mode 100644 index 0000000..133dd5b --- /dev/null +++ b/app/components/editors/p8p_config_dialog.js @@ -0,0 +1,40 @@ +/* + Парус 8 - Панели мониторинга - Редакторы панелей + Компонент: Диалог настройки +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { P8PDialog } from "../p8p_dialog"; //Типовой диалог + +//----------- +//Тело модуля +//----------- + +//Диалог настройки +const P8PConfigDialog = ({ title, children, onOk, onCancel }) => { + //Формирование представления + return ( + + {children} + + ); +}; + +//Контроль свойств компонента - Диалог настройки +P8PConfigDialog.propTypes = { + title: PropTypes.string.isRequired, + children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]), + onOk: PropTypes.func, + onCancel: PropTypes.func +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { P8PConfigDialog }; diff --git a/app/components/editors/p8p_data_source.js b/app/components/editors/p8p_data_source.js new file mode 100644 index 0000000..965e7a6 --- /dev/null +++ b/app/components/editors/p8p_data_source.js @@ -0,0 +1,113 @@ +/* + Парус 8 - Панели мониторинга - Редакторы панелей + Компонент: Источник данных +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useState } from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Stack, IconButton, Icon, Typography, Chip, Button, Card, CardContent, CardActions, CardActionArea } from "@mui/material"; //Интерфейсные элементы +import { BUTTONS, TEXTS } from "../../../app.text"; //Общие текстовые ресурсы +import { STYLES as COMMON_STYLES } from "./p8p_editors_common"; //Общие ресурсы редаторов +import { P8P_DATA_SOURCE_SHAPE, P8P_DATA_SOURCE_TYPE, P8P_DATA_SOURCE_TYPE_NAME, P8P_DATA_SOURCE_INITIAL } from "./p8p_data_source_common"; //Общие ресурсы компонента "Источник данных" +import { P8PDataSourceConfigDialog } from "./p8p_data_source_config_dialog"; //Диалог настройки источника данных + +//----------- +//Тело модуля +//----------- + +//Источник данных +const P8PDataSource = ({ dataSource = null, valueProviders = {}, onChange = null } = {}) => { + //Собственное состояние - отображение диалога настройки + const [configDlg, setConfigDlg] = useState(false); + + //Уведомление родителя о смене настроек источника данных + const notifyChange = settings => onChange && onChange(settings); + + //При нажатии на настройку источника данных + const handleSetup = () => setConfigDlg(true); + + //При нажатии на настройку источника данных + const handleSetupOk = dataSource => { + setConfigDlg(false); + notifyChange(dataSource); + }; + + //При нажатии на настройку источника данных + const handleSetupCancel = () => setConfigDlg(false); + + //При удалении настроек источника данных + const handleDelete = () => notifyChange({ ...P8P_DATA_SOURCE_INITIAL }); + + //Расчет флага "настроенности" + const configured = dataSource?.type ? true : false; + + //Список аргументов + const args = + configured && + dataSource.arguments.map((argument, i) => ( + + )); + + //Формирование представления + return ( + <> + {configDlg && ( + + )} + {configured && ( + + + + + {dataSource.type === P8P_DATA_SOURCE_TYPE.USER_PROC ? dataSource.userProc : TEXTS.UNNAMED_SOURCE} + + + {P8P_DATA_SOURCE_TYPE_NAME[dataSource.type] || TEXTS.UNKNOWN_SOURCE_TYPE} + + + {args} + + + + + + delete + + + + )} + {!configured && ( + + )} + + ); +}; + +//Контроль свойств компонента - Источник данных +P8PDataSource.propTypes = { + dataSource: P8P_DATA_SOURCE_SHAPE, + valueProviders: PropTypes.object, + onChange: PropTypes.func +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { P8PDataSource }; diff --git a/app/components/editors/p8p_data_source_common.js b/app/components/editors/p8p_data_source_common.js new file mode 100644 index 0000000..722e76d --- /dev/null +++ b/app/components/editors/p8p_data_source_common.js @@ -0,0 +1,86 @@ +/* + Парус 8 - Панели мониторинга - Редакторы панелей + Общие ресурсы компонента "Источник данных" +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import PropTypes from "prop-types"; //Контроль свойств компонента +import client from "../../core/client"; //Клиент БД +import { CAPTIONS } from "../../../app.text"; //Общие текстовые ресурсы + +//--------- +//Константы +//--------- + +//Типы даных аргументов +const P8P_DATA_SOURCE_ARGUMENT_DATA_TYPE = { + STR: client.SERV_DATA_TYPE_STR, + NUMB: client.SERV_DATA_TYPE_NUMB, + DATE: client.SERV_DATA_TYPE_DATE +}; + +//Структура аргумента источника данных +const P8P_DATA_SOURCE_ARGUMENT_SHAPE = PropTypes.shape({ + name: PropTypes.string.isRequired, + caption: PropTypes.string.isRequired, + dataType: PropTypes.oneOf(Object.values(P8P_DATA_SOURCE_ARGUMENT_DATA_TYPE)), + req: PropTypes.bool.isRequired, + value: PropTypes.any, + valueSource: PropTypes.string +}); + +//Начальное состояние аргумента источника данных +const P8P_DATA_SOURCE_ARGUMENT_INITIAL = { + name: "", + caption: "", + dataType: "", + req: false, + value: "", + valueSource: "" +}; + +//Типы источников данных +const P8P_DATA_SOURCE_TYPE = { + USER_PROC: "USER_PROC", + QUERY: "QUERY" +}; + +//Типы источников данных (наименования) +const P8P_DATA_SOURCE_TYPE_NAME = { + [P8P_DATA_SOURCE_TYPE.USER_PROC]: CAPTIONS.USER_PROC, + [P8P_DATA_SOURCE_TYPE.QUERY]: CAPTIONS.QUERY +}; + +//Структура источника данных +const P8P_DATA_SOURCE_SHAPE = PropTypes.shape({ + type: PropTypes.oneOf([...Object.values(P8P_DATA_SOURCE_TYPE), ""]), + userProc: PropTypes.string, + stored: PropTypes.string, + respArg: PropTypes.string, + arguments: PropTypes.arrayOf(P8P_DATA_SOURCE_ARGUMENT_SHAPE) +}); + +//Начальное состояние истоника данных +const P8P_DATA_SOURCE_INITIAL = { + type: "", + userProc: "", + stored: "", + respArg: "", + arguments: [] +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { + P8P_DATA_SOURCE_ARGUMENT_DATA_TYPE, + P8P_DATA_SOURCE_ARGUMENT_INITIAL, + P8P_DATA_SOURCE_SHAPE, + P8P_DATA_SOURCE_TYPE, + P8P_DATA_SOURCE_TYPE_NAME, + P8P_DATA_SOURCE_INITIAL +}; diff --git a/app/components/editors/p8p_data_source_config_dialog.js b/app/components/editors/p8p_data_source_config_dialog.js new file mode 100644 index 0000000..864a96f --- /dev/null +++ b/app/components/editors/p8p_data_source_config_dialog.js @@ -0,0 +1,185 @@ +/* + Парус 8 - Панели мониторинга - Редакторы панелей + Компонент: Диалог настройки источника данных +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useState, useEffect, useContext } from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Stack, IconButton, Icon, TextField, InputAdornment, MenuItem, Menu } from "@mui/material"; //Интерфейсные элементы +import { ApplicationСtx } from "../../context/application"; //Контекст приложения +import { TITLES, CAPTIONS } from "../../../app.text"; //Общие текстовые ресурсы +import { P8PConfigDialog } from "./p8p_config_dialog"; //Типовой диалог настройки +import { P8P_DATA_SOURCE_TYPE, P8P_DATA_SOURCE_SHAPE, P8P_DATA_SOURCE_ARGUMENT_INITIAL, P8P_DATA_SOURCE_INITIAL } from "./p8p_data_source_common"; //Общие ресурсы компонента "Источник данных" +import { useUserProcDesc } from "./p8p_data_source_hooks"; //Хуки источников данных + +//----------- +//Тело модуля +//----------- + +//Диалог настройки источника данных +const P8PDataSourceConfigDialog = ({ dataSource = null, valueProviders = {}, onOk = null, onCancel = null } = {}) => { + //Собственное состояние - параметры элемента формы + const [state, setState] = useState({ ...P8P_DATA_SOURCE_INITIAL, ...dataSource }); + + //Собственное состояние - флаги обновление данных + const [refresh, setRefresh] = useState({ userProcDesc: 0 }); + + //Собственное состояние - элемент привязки меню выбора источника + const [valueProvidersMenuAnchorEl, setValueProvidersMenuAnchorEl] = useState(null); + + //Описание выбранной пользовательской процедуры + const [userProcDesc] = useUserProcDesc({ code: state.userProc, refresh: refresh.userProcDesc }); + + //Подключение к контексту приложения + const { pOnlineShowDictionary } = useContext(ApplicationСtx); + + //Установка значения/привязки аргумента + const setArgumentValueSource = (index, value, valueSource) => + setState(pv => ({ + ...pv, + arguments: pv.arguments.map((argument, i) => ({ ...argument, ...(i == index ? { value, valueSource } : {}) })) + })); + + //Открытие/сокрытие меню выбора источника + const toggleValueProvidersMenu = target => setValueProvidersMenuAnchorEl(target instanceof Element ? target : null); + + //При нажатии на очистку наименования пользовательской процедуры + const handleUserProcClearClick = () => setState({ ...P8P_DATA_SOURCE_INITIAL }); + + //При нажатии на выбор пользовательской процедуры в качестве источника данных + const handleUserProcSelectClick = () => { + pOnlineShowDictionary({ + unitCode: "UserProcedures", + showMethod: "main", + inputParameters: [{ name: "in_CODE", value: state.userProc }], + callBack: res => { + if (res.success) { + setState(pv => ({ ...pv, type: P8P_DATA_SOURCE_TYPE.USER_PROC, userProc: res.outParameters.out_CODE })); + setRefresh(pv => ({ ...pv, userProcDesc: pv.userProcDesc + 1 })); + } + } + }); + }; + + //При закрытии дилога с сохранением + const handleOk = () => onOk && onOk({ ...state }); + + //При закртии диалога отменой + const handleCancel = () => onCancel && onCancel(); + + //При очистке значения/связывания аргумента + const handleArgumentClearClick = index => setArgumentValueSource(index, "", ""); + + //При отображении меню связывания аргумента с поставщиком данных + const handleArgumentLinkMenuClick = e => setValueProvidersMenuAnchorEl(e.currentTarget); + + //При выборе элемента меню связывания аргумента с поставщиком данных + const handleArgumentLinkClick = valueSource => { + setArgumentValueSource(valueProvidersMenuAnchorEl.id, "", valueSource); + toggleValueProvidersMenu(); + }; + + //При вводе значения аргумента + const handleArgumentChange = (index, value) => setArgumentValueSource(index, value, ""); + + //При изменении описания пользовательской процедуры + useEffect(() => { + if (userProcDesc) + setState(pv => ({ + ...pv, + stored: userProcDesc?.stored?.name, + respArg: userProcDesc?.stored?.respArg, + arguments: (userProcDesc?.arguments || []).map(argument => ({ ...P8P_DATA_SOURCE_ARGUMENT_INITIAL, ...argument })) + })); + }, [userProcDesc]); + + //Список значений + const values = Object.keys(valueProviders).reduce((res, key) => [...res, ...Object.keys(valueProviders[key])], []); + + //Наличие значений + const isValues = values && values.length > 0 ? true : false; + + //Меню привязки к поставщикам значений + const valueProvidersMenu = isValues && ( + + {values.map((value, i) => ( + handleArgumentLinkClick(value)}> + {value} + + ))} + + ); + + //Формирование представления + return ( + + + {valueProvidersMenu} + + + clear + + + list + + + ) + }} + /> + {Array.isArray(state?.arguments) && + state.arguments.map((argument, i) => ( + handleArgumentChange(i, e.target.value)} + InputLabelProps={{ shrink: true }} + InputProps={{ + endAdornment: ( + + handleArgumentClearClick(i)}> + clear + + {isValues && ( + + settings_ethernet + + )} + + ) + }} + /> + ))} + + + ); +}; + +//Контроль свойств компонента - Диалог настройки источника данных +P8PDataSourceConfigDialog.propTypes = { + dataSource: P8P_DATA_SOURCE_SHAPE, + valueProviders: PropTypes.object, + onOk: PropTypes.func, + onCancel: PropTypes.func +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { P8PDataSourceConfigDialog }; diff --git a/app/components/editors/p8p_data_source_hooks.js b/app/components/editors/p8p_data_source_hooks.js new file mode 100644 index 0000000..60c9cf5 --- /dev/null +++ b/app/components/editors/p8p_data_source_hooks.js @@ -0,0 +1,151 @@ +/* + Парус 8 - Панели мониторинга - Редакторы панелей + Пользовательские хуки компонента "Источник данных" +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import { useState, useContext, useEffect, useRef } from "react"; //Классы React +import client from "../../core/client"; //Клиент взаимодействия с сервером приложений +import { ERRORS } from "../../../app.text"; //Общие текстовые ресурсы +import { formatErrorMessage } from "../../core/utils"; //Общие вспомогательные функции +import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером +import { P8P_DATA_SOURCE_TYPE, P8P_DATA_SOURCE_ARGUMENT_DATA_TYPE } from "./p8p_data_source_common"; //Общие ресурсы источника данных + +//----------- +//Тело модуля +//----------- + +//Описание пользовательской процедуры +const useUserProcDesc = ({ code, refresh }) => { + //Собственное состояние - флаг загрузки + const [isLoading, setLoading] = useState(false); + + //Собственное состояние - данные + const [data, setData] = useState(null); + + //Подключение к контексту взаимодействия с сервером + const { executeStored } = useContext(BackEndСtx); + + //При необходимости обновить данные компонента + useEffect(() => { + //Загрузка данных с сервера + const loadData = async () => { + try { + setLoading(true); + const data = await executeStored({ + stored: "PKG_P8PANELS_PE.USERPROCS_DESC", + args: { SCODE: code }, + respArg: "COUT", + isArray: name => name === "arguments", + loader: false + }); + setData(data?.XUSERPROC || null); + } finally { + setLoading(false); + } + }; + //Если надо обновить и есть для чего получать данные + if (refresh > 0) + if (code) loadData(); + else setData(null); + }, [refresh, code, executeStored]); + + //Возвращаем интерфейс хука + return [data, isLoading]; +}; + +//Получение данных из источника +const useDataSource = ({ dataSource, values }) => { + //Контроллер для прерывания запросов + const abortController = useRef(null); + + //Собственное состояние - параметры исполнения + const [state, setState] = useState({ stored: null, storedArgs: [], respArg: null, reqSet: false }); + + //Собственное состояние - флаг загрузки + const [isLoading, setLoading] = useState(false); + + //Собственное состояние - данные + const [data, setData] = useState({ init: false }); + + //Собственное состояние - ошибка получения данных + const [error, setError] = useState(null); + + //Подключение к контексту взаимодействия с сервером + const { executeStored } = useContext(BackEndСtx); + + //При необходимости обновить данные + useEffect(() => { + //Загрузка данных с сервера + const loadData = async () => { + try { + setLoading(true); + abortController.current?.abort?.(); + abortController.current = new AbortController(); + const data = await executeStored({ + stored: state.stored, + args: { ...(state.storedArgs ? state.storedArgs : {}) }, + respArg: state.respArg, + loader: false, + signal: abortController.current.signal, + showErrorMessage: false + }); + setError(null); + setData({ ...data, init: true }); + } catch (e) { + if (e.message !== client.ERR_ABORTED) { + setError(formatErrorMessage(e.message).text); + setData({ init: false }); + } + } finally { + setLoading(false); + } + }; + if (state.reqSet) { + if (state.stored) loadData(); + } else setData({ init: false }); + return () => abortController.current?.abort?.(); + }, [state.stored, state.storedArgs, state.respArg, state.reqSet, executeStored]); + + //При изменении свойств + useEffect(() => { + setState(pv => { + if (dataSource?.type == P8P_DATA_SOURCE_TYPE.USER_PROC) { + const { stored, respArg } = dataSource; + let reqSet = true; + const storedArgs = {}; + dataSource.arguments.forEach(argument => { + let v = argument.valueSource ? values[argument.valueSource] : argument.value; + storedArgs[argument.name] = + argument.dataType == P8P_DATA_SOURCE_ARGUMENT_DATA_TYPE.NUMB + ? isNaN(parseFloat(v)) + ? null + : parseFloat(v) + : argument.dataType == P8P_DATA_SOURCE_ARGUMENT_DATA_TYPE.DATE + ? new Date(v) + : String(v === undefined ? "" : v); + if (argument.req === true && [undefined, null, ""].includes(storedArgs[argument.name])) reqSet = false; + }); + if (pv.stored != stored || pv.respArg != respArg || JSON.stringify(pv.storedArgs) != JSON.stringify(storedArgs)) { + if (!reqSet) { + setError(ERRORS.DATA_SOURCE_NO_REQ_ARGS); + setData({ init: false }); + } + return { stored, respArg, storedArgs, reqSet }; + } else return pv; + } else return pv; + }); + }, [dataSource, values]); + + //Возвращаем интерфейс хука + return [data, error, isLoading]; +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { useUserProcDesc, useDataSource }; diff --git a/app/components/editors/p8p_editor_box.js b/app/components/editors/p8p_editor_box.js new file mode 100644 index 0000000..9f01da4 --- /dev/null +++ b/app/components/editors/p8p_editor_box.js @@ -0,0 +1,59 @@ +/* + Парус 8 - Панели мониторинга - Редакторы панелей + Компонент: Контейнер редактора +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Box, Divider, IconButton, Icon, Stack } from "@mui/material"; //Интерфейсные компоненты MUI +import { BUTTONS } from "../../../app.text"; //Общие текстовые ресурсы + +//----------- +//Тело модуля +//----------- + +//Контейнер редактора +const P8PEditorBox = ({ title, children, onSave }) => { + //При нажатии на "Сохранить" + const handleSaveClick = (closeEditor = false) => onSave && onSave(closeEditor); + + //Флаг отображения кнопок сохранения + const showSaveBar = onSave ? true : false; + + //Формирование представления + return ( + + {title} + + {children} + + {showSaveBar && ( + + handleSaveClick(false)} title={BUTTONS.APPLY}> + done + + handleSaveClick(true)} title={BUTTONS.SAVE}> + done_all + + + )} + + ); +}; + +//Контроль свойств компонента - Контейнер редактора +P8PEditorBox.propTypes = { + title: PropTypes.string.isRequired, + children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]), + onSave: PropTypes.func +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { P8PEditorBox }; diff --git a/app/components/editors/p8p_editor_sub_header.js b/app/components/editors/p8p_editor_sub_header.js new file mode 100644 index 0000000..8d97d1a --- /dev/null +++ b/app/components/editors/p8p_editor_sub_header.js @@ -0,0 +1,46 @@ +/* + Парус 8 - Панели мониторинга - Редакторы панелей + Компонент: Заголовок раздела редактора +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Divider, Chip } from "@mui/material"; //Интерфейсные компоненты MUI + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + DIVIDER: { paddingTop: "20px" } +}; + +//----------- +//Тело модуля +//----------- + +//Заголовок раздела редактора +const P8PEditorSubHeader = ({ title }) => { + //Формирование представления + return ( + + + + ); +}; + +//Контроль свойств компонента - Заголовок раздела редактора +P8PEditorSubHeader.propTypes = { + title: PropTypes.string.isRequired +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { P8PEditorSubHeader }; diff --git a/app/components/editors/p8p_editor_toolbar.js b/app/components/editors/p8p_editor_toolbar.js new file mode 100644 index 0000000..bc01d08 --- /dev/null +++ b/app/components/editors/p8p_editor_toolbar.js @@ -0,0 +1,53 @@ +/* + Парус 8 - Панели мониторинга - Редакторы панелей + Компонент: Панель инструментов редактора +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { IconButton, Icon, Stack } from "@mui/material"; //Интерфейсные компоненты MUI + +//--------- +//Константы +//--------- + +//Структура элемента панели инструментов редактора +const P8P_EDITOR_TOOL_BAR_ITEM_SHAPE = PropTypes.shape({ + icon: PropTypes.string.isRequired, + title: PropTypes.string.isRequired, + disabled: PropTypes.bool, + onClick: PropTypes.func.isRequired +}); + +//----------- +//Тело модуля +//----------- + +//Панель инструментов редактора +const P8PEditorToolBar = ({ items = [] }) => { + //Формирование представления + return ( + + {items.map((item, i) => ( + + {item.icon} + + ))} + + ); +}; + +//Контроль свойств компонента - Панель инструментов редактора +P8PEditorToolBar.propTypes = { + items: PropTypes.arrayOf(P8P_EDITOR_TOOL_BAR_ITEM_SHAPE) +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { P8PEditorToolBar }; diff --git a/app/components/editors/p8p_editors_common.js b/app/components/editors/p8p_editors_common.js new file mode 100644 index 0000000..8911cc2 --- /dev/null +++ b/app/components/editors/p8p_editors_common.js @@ -0,0 +1,30 @@ +/* + Парус 8 - Панели мониторинга - Редакторы панелей + Общие ресурсы редакторов +*/ + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + CHIP: (fullWidth = false, multiLine = false) => ({ + ...(multiLine ? { height: "auto" } : {}), + "& .MuiChip-label": { + ...(multiLine + ? { + display: "block", + whiteSpace: "normal" + } + : {}), + ...(fullWidth ? { width: "100%" } : {}) + } + }) +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { STYLES }; diff --git a/app/panels/panels_editor/component_editor.js b/app/panels/panels_editor/component_editor.js index ce3bc8d..0da26e6 100644 --- a/app/panels/panels_editor/component_editor.js +++ b/app/panels/panels_editor/component_editor.js @@ -11,7 +11,6 @@ import React from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Box, Typography } from "@mui/material"; //Интерфейсные элементы import { useComponentModule } from "./components/components_hooks"; //Хуки компонентов -import "./panels_editor.css"; //Стили редактора //----------- //Тело модуля @@ -27,7 +26,7 @@ const ComponentEditor = ({ id, path, settings = {}, valueProviders = {}, onSetti //Формирование представления return ( - + {haveComponent && init && ( )} diff --git a/app/panels/panels_editor/component_view.js b/app/panels/panels_editor/component_view.js index c914010..2cac128 100644 --- a/app/panels/panels_editor/component_view.js +++ b/app/panels/panels_editor/component_view.js @@ -11,7 +11,6 @@ import React from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Box, Typography } from "@mui/material"; //Интерфейсные элементы import { useComponentModule } from "./components/components_hooks"; //Хуки компонентов -import "./panels_editor.css"; //Стили редактора //----------- //Тело модуля diff --git a/app/panels/panels_editor/components/chart/editor.js b/app/panels/panels_editor/components/chart/editor.js index b6aa7f3..5cf3379 100644 --- a/app/panels/panels_editor/components/chart/editor.js +++ b/app/panels/panels_editor/components/chart/editor.js @@ -9,8 +9,10 @@ import React, { useEffect, useState } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента -import { DATA_SOURCE_SHAPE, DataSource, EditorBox, EditorSubHeader } from "../editors_common"; //Общие компоненты редакторов -import "../../panels_editor.css"; //Стили редактора +import { P8PEditorBox } from "../../../../components/editors/p8p_editor_box"; //Контейнер редактора +import { P8PEditorSubHeader } from "../../../../components/editors/p8p_editor_sub_header"; //Заголовок раздела редактора +import { P8P_DATA_SOURCE_SHAPE } from "../../../../components/editors/p8p_data_source_common"; //Общие ресурсы источника данных +import { P8PDataSource } from "../../../../components/editors/p8p_data_source"; //Источник данных //----------- //Тело модуля @@ -34,17 +36,17 @@ const ChartEditor = ({ id, dataSource = null, valueProviders = {}, onSettingsCha //Формирование представления return ( - - - - + + + + ); }; //Контроль свойств компонента - График (редактор настроек) ChartEditor.propTypes = { id: PropTypes.string.isRequired, - dataSource: DATA_SOURCE_SHAPE, + dataSource: P8P_DATA_SOURCE_SHAPE, valueProviders: PropTypes.object, onSettingsChange: PropTypes.func }; diff --git a/app/panels/panels_editor/components/chart/view.js b/app/panels/panels_editor/components/chart/view.js index 273da15..3a31c68 100644 --- a/app/panels/panels_editor/components/chart/view.js +++ b/app/panels/panels_editor/components/chart/view.js @@ -11,10 +11,13 @@ import React from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Paper } from "@mui/material"; //Интерфейсные элементы import { P8PChart } from "../../../../components/p8p_chart"; //График -import { useComponentDataSource } from "../components_hooks"; //Хуки для данных -import { DATA_SOURCE_SHAPE } from "../editors_common"; //Общие объекты компонентов -import { COMPONENT_MESSAGE_TYPE, COMPONENT_MESSAGES, ComponentInlineMessage } from "../views_common"; //Общие компоненты представлений -import "../../panels_editor.css"; //Стили редактора +import { useDataSource } from "../../../../components/editors/p8p_data_source_hooks"; //Хуки для данных +import { P8P_DATA_SOURCE_SHAPE } from "../../../../components/editors/p8p_data_source_common"; //Общие ресурсы источника данных +import { + P8P_COMPONENT_INLINE_MESSAGE_TYPE, + P8P_COMPONENT_INLINE_MESSAGE, + P8PComponentInlineMessage +} from "../../../../components/editors/p8p_component_inline_message"; //Информационное сообщение внутри компонента //--------- //Константы @@ -38,7 +41,7 @@ const STYLES = { //График (представление) const Chart = ({ dataSource = null, values = {} } = {}) => { //Собственное состояние - данные - const [data, error] = useComponentDataSource({ dataSource, values }); + const [data, error] = useDataSource({ dataSource, values }); //Флаг настроенности графика const haveConfing = dataSource?.stored ? true : false; @@ -55,11 +58,11 @@ const Chart = ({ dataSource = null, values = {} } = {}) => { {haveConfing && haveData ? ( ) : ( - )} @@ -68,7 +71,7 @@ const Chart = ({ dataSource = null, values = {} } = {}) => { //Контроль свойств компонента - График (представление) Chart.propTypes = { - dataSource: DATA_SOURCE_SHAPE, + dataSource: P8P_DATA_SOURCE_SHAPE, values: PropTypes.object }; diff --git a/app/panels/panels_editor/components/components.js b/app/panels/panels_editor/components/components.js index 5c87a24..a17c301 100644 --- a/app/panels/panels_editor/components/components.js +++ b/app/panels/panels_editor/components/components.js @@ -11,7 +11,7 @@ const COMPONETNS = [ { name: "Форма", path: "form", - settings: { + settings2: { title: "Параметры формирования", autoApply: true, items: [ @@ -75,7 +75,7 @@ const COMPONETNS = [ { name: "Индикатор", path: "indicator", - settings: { + settings2: { dataSource: { type: "USER_PROC", userProc: "ИндКолДогКонтрТип", @@ -95,7 +95,7 @@ const COMPONETNS = [ ] } } - }, + } /*, { name: "Индикатор2", path: "indicator", @@ -119,7 +119,7 @@ const COMPONETNS = [ ] } } - } + }*/ ]; //---------------- diff --git a/app/panels/panels_editor/components/components_hooks.js b/app/panels/panels_editor/components/components_hooks.js index 518cd82..e539f52 100644 --- a/app/panels/panels_editor/components/components_hooks.js +++ b/app/panels/panels_editor/components/components_hooks.js @@ -7,17 +7,13 @@ //Подключение библиотек //--------------------- -import { useState, useContext, useEffect, useRef } from "react"; //Классы React -import client from "../../../core/client"; //Клиент взаимодействия с сервером приложений -import { formatErrorMessage } from "../../../core/utils"; //Общие вспомогательные функции -import { BackEndСtx } from "../../../context/backend"; //Контекст взаимодействия с сервером -import { DATA_SOURCE_TYPE, ARGUMENT_DATA_TYPE } from "./editors_common"; //Общие объекты редакторов +import { useState, useEffect } from "react"; //Классы React //----------- //Тело модуля //----------- -//Загрузка модуля компонента из модуля (можно применять как альтернативу React.lazy) +//Отложенная загрузка модуля компонента (как альтернативу можно применять React.lazy) const useComponentModule = ({ path = null, module = "view" } = {}) => { //Собственное состояние - импортированный модуль компонента const [componentModule, setComponentModule] = useState(null); @@ -41,134 +37,8 @@ const useComponentModule = ({ path = null, module = "view" } = {}) => { return [componentModule, init]; }; -//Описание пользовательской процедуры -const useUserProcDesc = ({ code, refresh }) => { - //Собственное состояние - флаг загрузки - const [isLoading, setLoading] = useState(false); - - //Собственное состояние - данные - const [data, setData] = useState(null); - - //Подключение к контексту взаимодействия с сервером - const { executeStored } = useContext(BackEndСtx); - - //При необходимости обновить данные компонента - useEffect(() => { - //Загрузка данных с сервера - const loadData = async () => { - try { - setLoading(true); - const data = await executeStored({ - stored: "PKG_P8PANELS_PE.USERPROCS_DESC", - args: { SCODE: code }, - respArg: "COUT", - isArray: name => name === "arguments", - loader: false - }); - setData(data?.XUSERPROC || null); - } finally { - setLoading(false); - } - }; - //Если надо обновить и есть для чего получать данные - if (refresh > 0) - if (code) loadData(); - else setData(null); - }, [refresh, code, executeStored]); - - //Возвращаем интерфейс хука - return [data, isLoading]; -}; - -//Получение данных компонента из источника -const useComponentDataSource = ({ dataSource, values }) => { - //Контроллер для прерывания запросов - const abortController = useRef(null); - - //Собственное состояние - параметры исполнения - const [state, setState] = useState({ stored: null, storedArgs: [], respArg: null, reqSet: false }); - - //Собственное состояние - флаг загрузки - const [isLoading, setLoading] = useState(false); - - //Собственное состояние - данные - const [data, setData] = useState({ init: false }); - - //Собственное состояние - ошибка получения данных - const [error, setError] = useState(null); - - //Подключение к контексту взаимодействия с сервером - const { executeStored } = useContext(BackEndСtx); - - //При необходимости обновить данные - useEffect(() => { - //Загрузка данных с сервера - const loadData = async () => { - try { - setLoading(true); - abortController.current?.abort?.(); - abortController.current = new AbortController(); - const data = await executeStored({ - stored: state.stored, - args: { ...(state.storedArgs ? state.storedArgs : {}) }, - respArg: state.respArg, - loader: false, - signal: abortController.current.signal, - showErrorMessage: false - }); - setError(null); - setData({ ...data, init: true }); - } catch (e) { - if (e.message !== client.ERR_ABORTED) { - setError(formatErrorMessage(e.message).text); - setData({ init: false }); - } - } finally { - setLoading(false); - } - }; - if (state.reqSet) { - if (state.stored) loadData(); - } else setData({ init: false }); - return () => abortController.current?.abort?.(); - }, [state.stored, state.storedArgs, state.respArg, state.reqSet, executeStored]); - - //При изменении свойств - useEffect(() => { - setState(pv => { - if (dataSource?.type == DATA_SOURCE_TYPE.USER_PROC) { - const { stored, respArg } = dataSource; - let reqSet = true; - const storedArgs = {}; - dataSource.arguments.forEach(argument => { - let v = argument.valueSource ? values[argument.valueSource] : argument.value; - storedArgs[argument.name] = - argument.dataType == ARGUMENT_DATA_TYPE.NUMB - ? isNaN(parseFloat(v)) - ? null - : parseFloat(v) - : argument.dataType == ARGUMENT_DATA_TYPE.DATE - ? new Date(v) - : String(v === undefined ? "" : v); - if (argument.req === true && [undefined, null, ""].includes(storedArgs[argument.name])) reqSet = false; - }); - if (pv.stored != stored || pv.respArg != respArg || JSON.stringify(pv.storedArgs) != JSON.stringify(storedArgs)) { - if (!reqSet) { - setError("Не заданы обязательные параметры источника данных"); - setData({ init: false }); - } - return { stored, respArg, storedArgs, reqSet }; - } else return pv; - } else return pv; - }); - }, [dataSource, values]); - - //Возвращаем интерфейс хука - return [data, error, isLoading]; -}; - //---------------- //Интерфейс модуля //---------------- -export { useComponentModule, useUserProcDesc, useComponentDataSource }; +export { useComponentModule }; diff --git a/app/panels/panels_editor/components/editors_common.js b/app/panels/panels_editor/components/editors_common.js deleted file mode 100644 index 20bf1d0..0000000 --- a/app/panels/panels_editor/components/editors_common.js +++ /dev/null @@ -1,426 +0,0 @@ -/* - Парус 8 - Панели мониторинга - Редактор панелей - Общие компоненты редакторов свойств -*/ - -//--------------------- -//Подключение библиотек -//--------------------- - -import React, { useState, useContext, useEffect } from "react"; //Классы React -import PropTypes from "prop-types"; //Контроль свойств компонента -import { - Box, - Stack, - IconButton, - Icon, - Typography, - Divider, - Chip, - Button, - TextField, - InputAdornment, - MenuItem, - Menu, - Card, - CardContent, - CardActions, - CardActionArea -} from "@mui/material"; //Интерфейсные элементы -import client from "../../../core/client"; //Клиент БД -import { ApplicationСtx } from "../../../context/application"; //Контекст приложения -import { BUTTONS } from "../../../../app.text"; //Общие текстовые ресурсы -import { P8PDialog } from "../../../components/p8p_dialog"; //Типовой диалог -import { useUserProcDesc } from "./components_hooks"; //Общие хуки компонентов -import "../panels_editor.css"; //Стили редактора - -//--------- -//Константы -//--------- - -//Стили -const STYLES = { - CHIP: (fullWidth = false, multiLine = false) => ({ - ...(multiLine ? { height: "auto" } : {}), - "& .MuiChip-label": { - ...(multiLine - ? { - display: "block", - whiteSpace: "normal" - } - : {}), - ...(fullWidth ? { width: "100%" } : {}) - } - }) -}; - -//Типы даных аргументов -const ARGUMENT_DATA_TYPE = { - STR: client.SERV_DATA_TYPE_STR, - NUMB: client.SERV_DATA_TYPE_NUMB, - DATE: client.SERV_DATA_TYPE_DATE -}; - -//Типы источников данных -const DATA_SOURCE_TYPE = { - USER_PROC: "USER_PROC", - QUERY: "QUERY" -}; - -//Типы источников данных (наименования) -const DATA_SOURCE_TYPE_NAME = { - [DATA_SOURCE_TYPE.USER_PROC]: "Пользовательская процедура", - [DATA_SOURCE_TYPE.QUERY]: "Запрос" -}; - -//Структура аргумента источника данных -const DATA_SOURCE_ARGUMENT_SHAPE = PropTypes.shape({ - name: PropTypes.string.isRequired, - caption: PropTypes.string.isRequired, - dataType: PropTypes.oneOf(Object.values(ARGUMENT_DATA_TYPE)), - req: PropTypes.bool.isRequired, - value: PropTypes.any, - valueSource: PropTypes.string -}); - -//Начальное состояние аргумента источника данных -const DATA_SOURCE_ARGUMENT_INITIAL = { - name: "", - caption: "", - dataType: "", - req: false, - value: "", - valueSource: "" -}; - -//Структура источника данных -const DATA_SOURCE_SHAPE = PropTypes.shape({ - type: PropTypes.oneOf([...Object.values(DATA_SOURCE_TYPE), ""]), - userProc: PropTypes.string, - stored: PropTypes.string, - respArg: PropTypes.string, - arguments: PropTypes.arrayOf(DATA_SOURCE_ARGUMENT_SHAPE) -}); - -//Начальное состояние истоника данных -const DATA_SOURCE_INITIAL = { - type: "", - userProc: "", - stored: "", - respArg: "", - arguments: [] -}; - -//----------- -//Тело модуля -//----------- - -//Контейнер редактора -const EditorBox = ({ title, children, onSave }) => { - //При нажатии на "Сохранить" - const handleSaveClick = (closeEditor = false) => onSave && onSave(closeEditor); - - //Формирование представления - return ( - - {title} - - {children} - - - handleSaveClick(false)} title={BUTTONS.APPLY}> - done - - handleSaveClick(true)} title={BUTTONS.SAVE}> - done_all - - - - ); -}; - -//Контроль свойств компонента - контейнер редактора -EditorBox.propTypes = { - title: PropTypes.string.isRequired, - children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]), - onSave: PropTypes.func -}; - -//Заголовок раздела редактора -const EditorSubHeader = ({ title }) => { - //Формирование представления - return ( - - - - ); -}; - -//Контроль свойств компонента - заголовок раздела редактора -EditorSubHeader.propTypes = { - title: PropTypes.string.isRequired -}; - -//Диалог настройки -const ConfigDialog = ({ title, children, onOk, onCancel }) => { - //Формирование представления - return ( - - {children} - - ); -}; - -//Контроль свойств компонента - диалог настройки -ConfigDialog.propTypes = { - title: PropTypes.string.isRequired, - children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]), - onOk: PropTypes.func, - onCancel: PropTypes.func -}; - -//Диалог настройки источника данных -const ConfigDataSourceDialog = ({ dataSource = null, valueProviders = {}, onOk = null, onCancel = null } = {}) => { - //Собственное состояние - параметры элемента формы - const [state, setState] = useState({ ...DATA_SOURCE_INITIAL, ...dataSource }); - - //Собственное состояние - флаги обновление данных - const [refresh, setRefresh] = useState({ userProcDesc: 0 }); - - //Собственное состояние - элемент привязки меню выбора источника - const [valueProvidersMenuAnchorEl, setValueProvidersMenuAnchorEl] = useState(null); - - //Описание выбранной пользовательской процедуры - const [userProcDesc] = useUserProcDesc({ code: state.userProc, refresh: refresh.userProcDesc }); - - //Подключение к контексту приложения - const { pOnlineShowDictionary } = useContext(ApplicationСtx); - - //Установка значения/привязки аргумента - const setArgumentValueSource = (index, value, valueSource) => - setState(pv => ({ - ...pv, - arguments: pv.arguments.map((argument, i) => ({ ...argument, ...(i == index ? { value, valueSource } : {}) })) - })); - - //Открытие/сокрытие меню выбора источника - const toggleValueProvidersMenu = target => setValueProvidersMenuAnchorEl(target instanceof Element ? target : null); - - //При нажатии на очистку наименования пользовательской процедуры - const handleUserProcClearClick = () => setState({ ...DATA_SOURCE_INITIAL }); - - //При нажатии на выбор пользовательской процедуры в качестве источника данных - const handleUserProcSelectClick = () => { - pOnlineShowDictionary({ - unitCode: "UserProcedures", - showMethod: "main", - inputParameters: [{ name: "in_CODE", value: state.userProc }], - callBack: res => { - if (res.success) { - setState(pv => ({ ...pv, type: DATA_SOURCE_TYPE.USER_PROC, userProc: res.outParameters.out_CODE })); - setRefresh(pv => ({ ...pv, userProcDesc: pv.userProcDesc + 1 })); - } - } - }); - }; - - //При закрытии дилога с сохранением - const handleOk = () => onOk && onOk({ ...state }); - - //При закртии диалога отменой - const handleCancel = () => onCancel && onCancel(); - - //При очистке значения/связывания аргумента - const handleArgumentClearClick = index => setArgumentValueSource(index, "", ""); - - //При отображении меню связывания аргумента с поставщиком данных - const handleArgumentLinkMenuClick = e => setValueProvidersMenuAnchorEl(e.currentTarget); - - //При выборе элемента меню связывания аргумента с поставщиком данных - const handleArgumentLinkClick = valueSource => { - setArgumentValueSource(valueProvidersMenuAnchorEl.id, "", valueSource); - toggleValueProvidersMenu(); - }; - - //При вводе значения аргумента - const handleArgumentChange = (index, value) => setArgumentValueSource(index, value, ""); - - //При изменении описания пользовательской процедуры - useEffect(() => { - if (userProcDesc) - setState(pv => ({ - ...pv, - stored: userProcDesc?.stored?.name, - respArg: userProcDesc?.stored?.respArg, - arguments: (userProcDesc?.arguments || []).map(argument => ({ ...DATA_SOURCE_ARGUMENT_INITIAL, ...argument })) - })); - }, [userProcDesc]); - - //Список значений - const values = Object.keys(valueProviders).reduce((res, key) => [...res, ...Object.keys(valueProviders[key])], []); - - //Наличие значений - const isValues = values && values.length > 0 ? true : false; - - //Меню привязки к поставщикам значений - const valueProvidersMenu = isValues && ( - - {values.map((value, i) => ( - handleArgumentLinkClick(value)}> - {value} - - ))} - - ); - - //Формирование представления - return ( - - - {valueProvidersMenu} - - - clear - - - list - - - ) - }} - /> - {Array.isArray(state?.arguments) && - state.arguments.map((argument, i) => ( - handleArgumentChange(i, e.target.value)} - InputLabelProps={{ shrink: true }} - InputProps={{ - endAdornment: ( - - handleArgumentClearClick(i)}> - clear - - {isValues && ( - - settings_ethernet - - )} - - ) - }} - /> - ))} - - - ); -}; - -//Контроль свойств компонента - Диалог настройки источника данных -ConfigDataSourceDialog.propTypes = { - dataSource: DATA_SOURCE_SHAPE, - valueProviders: PropTypes.object, - onOk: PropTypes.func, - onCancel: PropTypes.func -}; - -//Источник данных -const DataSource = ({ dataSource = null, valueProviders = {}, onChange = null } = {}) => { - //Собственное состояние - отображение диалога настройки - const [configDlg, setConfigDlg] = useState(false); - - //Уведомление родителя о смене настроек источника данных - const notifyChange = settings => onChange && onChange(settings); - - //При нажатии на настройку источника данных - const handleSetup = () => setConfigDlg(true); - - //При нажатии на настройку источника данных - const handleSetupOk = dataSource => { - setConfigDlg(false); - notifyChange(dataSource); - }; - - //При нажатии на настройку источника данных - const handleSetupCancel = () => setConfigDlg(false); - - //При удалении настроек источника данных - const handleDelete = () => notifyChange({ ...DATA_SOURCE_INITIAL }); - - //Расчет флага "настроенности" - const configured = dataSource?.type ? true : false; - - //Список аргументов - const args = - configured && - dataSource.arguments.map((argument, i) => ( - - )); - - //Формирование представления - return ( - <> - {configDlg && ( - - )} - {configured && ( - - - - - {dataSource.type === DATA_SOURCE_TYPE.USER_PROC ? dataSource.userProc : "Источник без наименования"} - - - {DATA_SOURCE_TYPE_NAME[dataSource.type] || "Неизвестный тип источника"} - - - {args} - - - - - - delete - - - - )} - {!configured && ( - - )} - - ); -}; - -//Контроль свойств компонента - Источник данных -DataSource.propTypes = { - dataSource: DATA_SOURCE_SHAPE, - valueProviders: PropTypes.object, - onChange: PropTypes.func -}; - -//---------------- -//Интерфейс модуля -//---------------- - -export { STYLES, ARGUMENT_DATA_TYPE, DATA_SOURCE_TYPE, DATA_SOURCE_SHAPE, DATA_SOURCE_INITIAL, EditorBox, EditorSubHeader, ConfigDialog, DataSource }; diff --git a/app/panels/panels_editor/components/form/editor.js b/app/panels/panels_editor/components/form/editor.js index 719a82b..4020b6c 100644 --- a/app/panels/panels_editor/components/form/editor.js +++ b/app/panels/panels_editor/components/form/editor.js @@ -27,7 +27,10 @@ import { IconButton } from "@mui/material"; //Интерфейсные элементы import { ApplicationСtx } from "../../../../context/application"; //Контекст приложения -import { STYLES as COMMON_STYLES, EditorBox, EditorSubHeader, ConfigDialog } from "../editors_common"; //Общие компоненты редакторов +import { P8PEditorBox } from "../../../../components/editors/p8p_editor_box"; //Контейнер редактора +import { P8PEditorSubHeader } from "../../../../components/editors/p8p_editor_sub_header"; //Заголовок раздела редактора +import { P8PConfigDialog } from "../../../../components/editors/p8p_config_dialog"; //Диалог настройки +import { STYLES as COMMON_STYLES } from "../../../../components/editors/p8p_editors_common"; //Общие ресурсы редакторов import { ITEM_SHAPE, ITEM_INITIAL, ITEMS_INITIAL, ORIENTATION } from "./common"; //Общие ресурсы и константы формы //--------- @@ -122,7 +125,7 @@ const ItemEditor = ({ item = null, onOk = null, onCancel = null } = {}) => { //Формирование представления return ( - + @@ -172,7 +175,7 @@ const ItemEditor = ({ item = null, onOk = null, onCancel = null } = {}) => { }} /> - + ); }; @@ -241,7 +244,7 @@ const FormEditor = ({ id, title = "", orientation = ORIENTATION.V, autoApply = f //Формирование представления return ( settings && ( - + {itemEditor.display && ( )} - + Ориентация @@ -268,7 +271,7 @@ const FormEditor = ({ id, title = "", orientation = ORIENTATION.V, autoApply = f control={} label={"Автоподтверждение"} /> - + {Array.isArray(settings?.items) && settings.items.length > 0 && settings.items.map((item, i) => ( @@ -284,7 +287,7 @@ const FormEditor = ({ id, title = "", orientation = ORIENTATION.V, autoApply = f - + ) ); }; diff --git a/app/panels/panels_editor/components/form/view.js b/app/panels/panels_editor/components/form/view.js index 77965c2..a24dd1f 100644 --- a/app/panels/panels_editor/components/form/view.js +++ b/app/panels/panels_editor/components/form/view.js @@ -11,9 +11,8 @@ import React, { useEffect, useState, useContext } from "react"; //Классы R import PropTypes from "prop-types"; //Контроль свойств компонента import { Paper, Stack, Typography, Icon, TextField, IconButton, InputAdornment } from "@mui/material"; //Интерфейсные элементы import { ApplicationСtx } from "../../../../context/application"; //Контекст приложения -import { COMPONENT_MESSAGES, ComponentInlineMessage } from "../views_common"; //Общие компоненты представлений +import { P8P_COMPONENT_INLINE_MESSAGE, P8PComponentInlineMessage } from "../../../../components/editors/p8p_component_inline_message"; //Информационное сообщение внутри компонента import { ITEM_SHAPE, ITEMS_INITIAL, ORIENTATION } from "./common"; //Общие ресурсы и константы формы -import "../../panels_editor.css"; //Стили редактора //--------- //Константы @@ -50,6 +49,7 @@ const FormItem = ({ item = null, fullWidth = false, value = "", onChange = null inputParameters: [{ name: item.inputParameter, value }], callBack: res => res.success && onChange && onChange(item.name, res.outParameters[item.outputParameter]) }); + //Формирование представления return ( item && ( @@ -144,7 +144,7 @@ const Form = ({ title = null, orientation = ORIENTATION.V, autoApply = false, it ) : ( - + )} ); diff --git a/app/panels/panels_editor/components/indicator/editor.js b/app/panels/panels_editor/components/indicator/editor.js index 5d8a3f4..81b4666 100644 --- a/app/panels/panels_editor/components/indicator/editor.js +++ b/app/panels/panels_editor/components/indicator/editor.js @@ -9,8 +9,10 @@ import React, { useEffect, useState } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента -import { DATA_SOURCE_SHAPE, DataSource, EditorBox, EditorSubHeader } from "../editors_common"; //Общие компоненты редакторов -import "../../panels_editor.css"; //Стили редактора +import { P8PEditorBox } from "../../../../components/editors/p8p_editor_box"; //Контейнер редактора +import { P8PEditorSubHeader } from "../../../../components/editors/p8p_editor_sub_header"; //Заголовок раздела редактора +import { P8P_DATA_SOURCE_SHAPE } from "../../../../components/editors/p8p_data_source_common"; //Общие ресурсы источника данных +import { P8PDataSource } from "../../../../components/editors/p8p_data_source"; //Источник данных //----------- //Тело модуля @@ -34,17 +36,17 @@ const IndicatorEditor = ({ id, dataSource = null, valueProviders = {}, onSetting //Формирование представления return ( - - - - + + + + ); }; //Контроль свойств компонента - Индикатор (редактор настроек) IndicatorEditor.propTypes = { id: PropTypes.string.isRequired, - dataSource: DATA_SOURCE_SHAPE, + dataSource: P8P_DATA_SOURCE_SHAPE, valueProviders: PropTypes.object, onSettingsChange: PropTypes.func }; diff --git a/app/panels/panels_editor/components/indicator/view.js b/app/panels/panels_editor/components/indicator/view.js index 82495ad..6526a5d 100644 --- a/app/panels/panels_editor/components/indicator/view.js +++ b/app/panels/panels_editor/components/indicator/view.js @@ -11,10 +11,13 @@ import React from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Paper } from "@mui/material"; //Интерфейсные элементы import { P8PIndicator } from "../../../../components/p8p_indicator"; //Компонент индикатора -import { useComponentDataSource } from "../components_hooks"; //Хуки для данных -import { DATA_SOURCE_SHAPE } from "../editors_common"; //Общие объекты компонентов -import { COMPONENT_MESSAGE_TYPE, COMPONENT_MESSAGES, ComponentInlineMessage } from "../views_common"; //Общие компоненты представлений -import "../../panels_editor.css"; //Стили редактора +import { useDataSource } from "../../../../components/editors/p8p_data_source_hooks"; //Хуки для данных +import { P8P_DATA_SOURCE_SHAPE } from "../../../../components/editors/p8p_data_source_common"; //Общие ресурсы источника данных +import { + P8P_COMPONENT_INLINE_MESSAGE_TYPE, + P8P_COMPONENT_INLINE_MESSAGE, + P8PComponentInlineMessage +} from "../../../../components/editors/p8p_component_inline_message"; //Информационное сообщение внутри компонента //--------- //Константы @@ -38,7 +41,7 @@ const STYLES = { //Индикатор (представление) const Indicator = ({ dataSource = null, values = {} } = {}) => { //Собственное состояние - данные - const [data, error] = useComponentDataSource({ dataSource, values }); + const [data, error] = useDataSource({ dataSource, values }); //Флаг настроенности индикатора const haveConfing = dataSource?.stored ? true : false; @@ -60,11 +63,11 @@ const Indicator = ({ dataSource = null, values = {} } = {}) => { {haveConfing && haveData ? ( ) : ( - )} @@ -73,7 +76,7 @@ const Indicator = ({ dataSource = null, values = {} } = {}) => { //Контроль свойств компонента - Индикатор (представление) Indicator.propTypes = { - dataSource: DATA_SOURCE_SHAPE, + dataSource: P8P_DATA_SOURCE_SHAPE, values: PropTypes.object }; diff --git a/app/panels/panels_editor/components/table/editor.js b/app/panels/panels_editor/components/table/editor.js index d0dba28..b61a220 100644 --- a/app/panels/panels_editor/components/table/editor.js +++ b/app/panels/panels_editor/components/table/editor.js @@ -9,8 +9,10 @@ import React, { useEffect, useState } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента -import { DATA_SOURCE_SHAPE, DataSource, EditorBox, EditorSubHeader } from "../editors_common"; //Общие компоненты редакторов -import "../../panels_editor.css"; //Стили редактора +import { P8PEditorBox } from "../../../../components/editors/p8p_editor_box"; //Контейнер редактора +import { P8PEditorSubHeader } from "../../../../components/editors/p8p_editor_sub_header"; //Заголовок раздела редактора +import { P8P_DATA_SOURCE_SHAPE } from "../../../../components/editors/p8p_data_source_common"; //Общие ресурсы источника данных +import { P8PDataSource } from "../../../../components/editors/p8p_data_source"; //Источник данных //----------- //Тело модуля @@ -34,17 +36,17 @@ const TableEditor = ({ id, dataSource = null, valueProviders = {}, onSettingsCha //Формирование представления return ( - - - - + + + + ); }; //Контроль свойств компонента - Таблица (редактор настроек) TableEditor.propTypes = { id: PropTypes.string.isRequired, - dataSource: DATA_SOURCE_SHAPE, + dataSource: P8P_DATA_SOURCE_SHAPE, valueProviders: PropTypes.object, onSettingsChange: PropTypes.func }; diff --git a/app/panels/panels_editor/components/table/view.js b/app/panels/panels_editor/components/table/view.js index 4b86d1c..d9b976f 100644 --- a/app/panels/panels_editor/components/table/view.js +++ b/app/panels/panels_editor/components/table/view.js @@ -13,10 +13,13 @@ import { Paper } from "@mui/material"; //Интерфейсные элемент import { APP_STYLES } from "../../../../../app.styles"; //Типовые стили import { P8PDataGrid } from "../../../../components/p8p_data_grid"; //Таблица данных import { P8P_DATA_GRID_CONFIG_PROPS } from "../../../../config_wrapper"; //Подключение компонентов к настройкам приложения -import { useComponentDataSource } from "../components_hooks"; //Хуки для данных -import { DATA_SOURCE_SHAPE } from "../editors_common"; //Общие объекты компонентов -import { COMPONENT_MESSAGE_TYPE, COMPONENT_MESSAGES, ComponentInlineMessage } from "../views_common"; //Общие компоненты представлений -import "../../panels_editor.css"; //Стили редактора +import { useDataSource } from "../../../../components/editors/p8p_data_source_hooks"; //Хуки для данных +import { P8P_DATA_SOURCE_SHAPE } from "../../../../components/editors/p8p_data_source_common"; //Общие ресурсы источника данных +import { + P8P_COMPONENT_INLINE_MESSAGE_TYPE, + P8P_COMPONENT_INLINE_MESSAGE, + P8PComponentInlineMessage +} from "../../../../components/editors/p8p_component_inline_message"; //Информационное сообщение внутри компонента //--------- //Константы @@ -45,7 +48,7 @@ const STYLES = { //Таблица (представление) const Table = ({ dataSource = null, values = {} } = {}) => { //Собственное состояние - данные - const [data, error] = useComponentDataSource({ dataSource, values }); + const [data, error] = useDataSource({ dataSource, values }); //Флаг настроенности таблицы const haveConfing = dataSource?.stored ? true : false; @@ -72,11 +75,11 @@ const Table = ({ dataSource = null, values = {} } = {}) => { containerComponentProps={{ sx: STYLES.DATA_GRID_CONTAINER, elevation: 0 }} /> ) : ( - )} @@ -85,7 +88,7 @@ const Table = ({ dataSource = null, values = {} } = {}) => { //Контроль свойств компонента - Таблица (представление) Table.propTypes = { - dataSource: DATA_SOURCE_SHAPE, + dataSource: P8P_DATA_SOURCE_SHAPE, values: PropTypes.object }; diff --git a/app/panels/panels_editor/layout_item.js b/app/panels/panels_editor/layout_item.js index db6f650..f4754d4 100644 --- a/app/panels/panels_editor/layout_item.js +++ b/app/panels/panels_editor/layout_item.js @@ -10,7 +10,6 @@ import React from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { IconButton, Icon, Stack } from "@mui/material"; //Интерфейсные элементы -import "./panels_editor.css"; //Кастомные стили //--------- //Константы diff --git a/app/panels/panels_editor/panels_editor.css b/app/panels/panels_editor/panels_editor.css index 0729e89..8c8c221 100644 --- a/app/panels/panels_editor/panels_editor.css +++ b/app/panels/panels_editor/panels_editor.css @@ -12,17 +12,6 @@ border-radius: 4px; } -.component-editor__wrap { -} - -.component-editor__container { - padding: 10px; -} - -.component-editor__divider { - padding-top: 20px; -} - .component-view__wrap { height: 100%; } diff --git a/app/panels/panels_editor/panels_editor.js b/app/panels/panels_editor/panels_editor.js index 04ce0a3..0af2219 100644 --- a/app/panels/panels_editor/panels_editor.js +++ b/app/panels/panels_editor/panels_editor.js @@ -9,9 +9,10 @@ import React, { useEffect, useState, useContext } from "react"; //Классы React import { Responsive, WidthProvider } from "react-grid-layout"; //Адаптивный макет -import { Box, Grid, Stack, Menu, MenuItem, IconButton, Icon, Fab } from "@mui/material"; //Интерфейсные элементы +import { Box, Grid, Menu, MenuItem, Icon, Fab } from "@mui/material"; //Интерфейсные элементы import { ApplicationСtx } from "../../context/application"; //Контекст приложения import { APP_BAR_HEIGHT } from "../../components/p8p_app_workspace"; //Рабочая область приложения +import { P8PEditorToolBar } from "../../components/editors/p8p_editor_toolbar"; //Панель инструментов редактора import { genGUID } from "../../core/utils"; //Общие вспомогательные функции import { LayoutItem } from "./layout_item"; //Элемент макета import { ComponentView } from "./component_view"; //Представление компонента панели @@ -19,6 +20,7 @@ import { ComponentEditor } from "./component_editor"; //Редактор сво import { COMPONETNS } from "./components/components"; //Описание доступных компонентов import "react-grid-layout/css/styles.css"; //Стили для адаптивного макета import "react-resizable/css/styles.css"; //Стили для адаптивного макета +import "./panels_editor.css"; //Стили редактора панелей //--------- //Константы @@ -140,9 +142,9 @@ const PanelsEditor = () => { //При подключении к странице useEffect(() => { - addComponent(COMPONETNS[0]); - addComponent(COMPONETNS[3]); - addComponent(COMPONETNS[4]); + //addComponent(COMPONETNS[0]); + //addComponent(COMPONETNS[3]); + //addComponent(COMPONETNS[4]); //addComponent(COMPONETNS[1]); //addComponent(COMPONETNS[2]); // eslint-disable-next-line react-hooks/exhaustive-deps @@ -171,14 +173,16 @@ const PanelsEditor = () => { //Панель инструмментов const toolBar = ( - - - play_arrow - - - add - - + ); //Генерация содержимого diff --git a/app/panels/query_editor/common.js b/app/panels/query_editor/common.js new file mode 100644 index 0000000..fc243db --- /dev/null +++ b/app/panels/query_editor/common.js @@ -0,0 +1,23 @@ +/* + Парус 8 - Панели мониторинга - Редактор запросов + Обще ресурсы и константы +*/ + +//--------- +//Константы +//--------- + +//Типы данных +const DATA_TYPE = { STR: 0, NUMB: 1, DATE: 2 }; + +//Типы элементов диаграммы +const NODE_TYPE = { + ENTITY: "entity", + ATTRIBUTE: "attribute" +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { DATA_TYPE, NODE_TYPE }; diff --git a/app/panels/query_editor/components/attribute/attribute.js b/app/panels/query_editor/components/attribute/attribute.js new file mode 100644 index 0000000..f1d36ef --- /dev/null +++ b/app/panels/query_editor/components/attribute/attribute.js @@ -0,0 +1,104 @@ +/* + Парус 8 - Панели мониторинга - Редактор запросов + Компоненты: Атрибут сущности +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Handle, Position, useStore } from "reactflow"; //Библиотека редактора диаграмм +import { Box, Stack, Icon, Typography } from "@mui/material"; //Компоненты UI +import { DATA_TYPE } from "../../common"; //Общие ресурсы и константы редактора + +//--------- +//Константы +//--------- + +//Типовые цвета точек привязки +const HANDLE_BORDER_COLOR = "#69db7c"; +const HANDLE_BORDER_COLOR_DISABLED = "#adb5bd"; + +//Стили +const STYLES = { + CONTAINER: { display: "flex", width: "100%", height: "100%" }, + HANDLE_SOURCE: isConnecting => ({ + width: 14, + height: 14, + right: -10, + border: `2px solid ${isConnecting ? HANDLE_BORDER_COLOR_DISABLED : HANDLE_BORDER_COLOR}`, + borderRadius: 7, + background: "white" + }), + HANDLE_TARGET: isConnecting => ({ + width: isConnecting ? 14 : 0, + height: 14, + left: isConnecting ? -7 : 0, + border: `2px solid ${HANDLE_BORDER_COLOR}`, + borderRadius: 7, + background: "white", + visibility: isConnecting ? "visible" : "hidden" + }), + CONTENT_STACK: { width: "100%" }, + TITLE_NAME_STACK: { width: "100%", containerType: "inline-size" } +}; + +//Иконки +const ICONS = { + [DATA_TYPE.STR]: "format_align_left", + [DATA_TYPE.NUMB]: "pin", + [DATA_TYPE.DATE]: "calendar_month", + DEFAULT: "category" +}; + +//Структура данных об атрибуте сущности +const ATTRIBUTE_DATA_SHAPE = PropTypes.shape({ + name: PropTypes.string.isRequired, + title: PropTypes.string.isRequired, + dataType: PropTypes.number.isRequired +}); + +//----------- +//Тело модуля +//----------- + +//Атрибут сущности +const Attribute = ({ data }) => { + //Поиск идентификатора соединяемого элемента + const connectionNodeId = useStore(state => state.connectionNodeId); + + //Флаг выполнения соединения сущностей + const isConnecting = Boolean(connectionNodeId); + + //Формирование представления + return ( + + + + + {ICONS[data.dataType] || ICONS.DEFAULT} + + + {data.title} + + + {data.name} + + + + + ); +}; + +//Контроль свойств компонента - Атрибут сущности +Attribute.propTypes = { + data: ATTRIBUTE_DATA_SHAPE +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { Attribute }; diff --git a/app/panels/query_editor/components/entity/entity.css b/app/panels/query_editor/components/entity/entity.css new file mode 100644 index 0000000..1f64803 --- /dev/null +++ b/app/panels/query_editor/components/entity/entity.css @@ -0,0 +1,33 @@ +.entity__wrapper { + width: 100%; + height: 100%; + border: 1px solid var(--border-color-dark); + border-radius: 6px; + box-shadow: var(--shadow-entity); + overflow: hidden; + background-color: white; +} + +.entity__wrapper[data-selected="true"] { + outline: 1px solid var(--outline-color); + border-color: var(--outline-color); +} + +.entity__title { + width: 100%; + height: 50px; + align-content: center; + border-bottom: 1px solid var(--border-color); + font-weight: 900; + text-align: center; + background-color: var(--entity-title-bg); + cursor: move; +} + +.entity__name { + width: 100%; + align-content: center; + text-align: center; + font-size: 0.8rem; + color: gray; +} diff --git a/app/panels/query_editor/components/entity/entity.js b/app/panels/query_editor/components/entity/entity.js new file mode 100644 index 0000000..89b9797 --- /dev/null +++ b/app/panels/query_editor/components/entity/entity.js @@ -0,0 +1,50 @@ +/* + Парус 8 - Панели мониторинга - Редактор запросов + Компоненты: Сущность запроса +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import "./entity.css"; //Стили компомнента + +//--------- +//Константы +//--------- + +//Структура данных о сущности запроса +const ENTITY_DATA_SHAPE = PropTypes.shape({ + name: PropTypes.string.isRequired, + title: PropTypes.string.isRequired +}); + +//----------- +//Тело модуля +//----------- + +//Сущность запроса +const Entity = ({ data, selected }) => { + return ( +
+
+ {data.title} +
{data.name}
+
+
+ ); +}; + +//Контроль свойств компонента - Сущность запроса +Entity.propTypes = { + data: ENTITY_DATA_SHAPE, + selected: PropTypes.bool.isRequired +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { Entity }; diff --git a/app/panels/query_editor/components/entity_add_dialog/entity_add_dialog.js b/app/panels/query_editor/components/entity_add_dialog/entity_add_dialog.js new file mode 100644 index 0000000..b67a589 --- /dev/null +++ b/app/panels/query_editor/components/entity_add_dialog/entity_add_dialog.js @@ -0,0 +1,43 @@ +/* + Парус 8 - Панели мониторинга - Редактор запросов + Компонент: Диалог добавления сущности запроса +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { P8PDialog } from "../../../../components/p8p_dialog"; //Типовой диалог +import { TITLES } from "../../../../../app.text"; //Общие текстовые ресурсы приложения + +//----------- +//Тело модуля +//----------- + +//Диалог добавления сущности запроса +const EntityAddDialog = ({ onOk, onCancel }) => { + //Нажатие на кнопку "Ok" + const handleOk = values => onOk && onOk({ ...values }); + + //Нажатие на кнопку "Отмена" + const handleCancel = () => onCancel && onCancel(); + + //Генерация содержимого + return ( + + ); +}; + +//Контроль свойств - Диалог добавления сущности запроса +EntityAddDialog.propTypes = { + onOk: PropTypes.func, + onCancel: PropTypes.func +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { EntityAddDialog }; diff --git a/app/panels/query_editor/components/queries_manager/queries_list.js b/app/panels/query_editor/components/queries_manager/queries_list.js new file mode 100644 index 0000000..f3347e9 --- /dev/null +++ b/app/panels/query_editor/components/queries_manager/queries_list.js @@ -0,0 +1,142 @@ +/* + Парус 8 - Панели мониторинга - Редактор запросов + Компонент: Список запросов +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Stack, List, ListItem, IconButton, Icon, ListItemButton, ListItemText, Typography } from "@mui/material"; //Интерфейсные компоненты MUI +import { BUTTONS } from "../../../../../app.text"; //Общие текстовые ресурсы приложения + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + SMALL_TOOL_ICON: { + fontSize: 20 + } +}; + +//--------- +//Константы +//--------- + +//Структура данных о сущности запроса +const QUERIES_LIST_ITEM_SHAPE = PropTypes.shape({ + rn: PropTypes.number.isRequired, + code: PropTypes.string.isRequired, + name: PropTypes.string.isRequired, + author: PropTypes.string.isRequired, + chDate: PropTypes.string.isRequired, + modify: PropTypes.oneOf([0, 1]).isRequired, + pbl: PropTypes.oneOf([0, 1]).isRequired, + ready: PropTypes.oneOf([0, 1]).isRequired +}); + +//----------- +//Тело модуля +//----------- + +//Диалог открытия запроса +const QueriesList = ({ queries = [], current = null, onSelect = null, onPbl = null, onReady = null, onEdit = null, onDelete = null } = {}) => { + //При выборе элемента списка + const handleSelectClick = query => { + onSelect && onSelect(query); + }; + + //При нажатии на общедоступность + const handlePblClick = (e, query) => { + e.stopPropagation(); + onPbl && onPbl(query); + }; + + //При нажатии на готовность + const handleReadyClick = (e, query) => { + e.stopPropagation(); + onReady && onReady(query); + }; + + //При нажатии на исправлении + const handleEditClick = (e, query) => { + e.stopPropagation(); + onEdit && onEdit(query); + }; + + //При нажатии на удаление + const handleDeleteClick = (e, query) => { + e.stopPropagation(); + onDelete && onDelete(query); + }; + + //Формирование представления + return ( + + {queries.map((query, i) => { + const selected = query.rn === current; + const disabled = !query.modify; + const pblTitle = `${query.pbl === 1 ? "Общедоступный" : "Приватный"}${!disabled ? " - нажмите, чтобы изменить" : ""}`; + const pblIcon = query.pbl === 1 ? "groups" : "lock_person"; + const readyTitle = `${query.ready === 1 ? "Готов" : "Не готов"}${!disabled ? " - нажмите, чтобы изменить" : ""}`; + const readyIcon = query.ready === 1 ? "touch_app" : "do_not_touch"; + return ( + + handleSelectClick(query)} selected={selected}> + + {`${query.code}, ${query.author}, ${query.chDate}`} + +
+ handlePblClick(e, query)}> + {pblIcon} + +
+
+ handleReadyClick(e, query)}> + {readyIcon} + +
+
+ + } + /> + + handleEditClick(e, query)} disabled={disabled} title={BUTTONS.UPDATE}> + edit + + handleDeleteClick(e, query)} disabled={disabled} title={BUTTONS.DELETE}> + delete + + +
+
+ ); + })} +
+ ); +}; + +//Контроль свойств компонента - Список запросов +QueriesList.propTypes = { + queries: PropTypes.arrayOf(QUERIES_LIST_ITEM_SHAPE), + current: PropTypes.number, + onSelect: PropTypes.func, + onPbl: PropTypes.func, + onReady: PropTypes.func, + onEdit: PropTypes.func, + onDelete: PropTypes.func +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { QueriesList }; diff --git a/app/panels/query_editor/components/queries_manager/queries_manager.js b/app/panels/query_editor/components/queries_manager/queries_manager.js new file mode 100644 index 0000000..fe31615 --- /dev/null +++ b/app/panels/query_editor/components/queries_manager/queries_manager.js @@ -0,0 +1,105 @@ +/* + Парус 8 - Панели мониторинга - Редактор запросов + Компонент: Менеджер запросов +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useState, useContext } from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Button, Icon } from "@mui/material"; //Интерфейсные компоненты MUI +import { MessagingСtx } from "../../../../context/messaging"; //Контекст сообщений +import { BUTTONS } from "../../../../../app.text"; //Общие текстовые ресурсы приложения +import { P8PConfigDialog } from "../../../../components/editors/p8p_config_dialog"; //Типовой диалог настройки +import { useQuery } from "../../hooks"; //Пользовательские хуки +import { QueriesList } from "./queries_list"; //Список запросов +import { QueryIUDialog } from "./query_iu_dialog"; //Диалог добавления/исправления запроса + +//----------- +//Тело модуля +//----------- + +//Менеджер запросов +const QueriesManager = ({ current = null, onQuerySelect = null, onCancel = null } = {}) => { + //Собственное состояние - изменяемый запрос + const [modQuery, setModQuery] = useState(null); + + //Работа со списком запросов + const [queries, insertQuery, updateQuery, deleteQuery, setQueryReady, setQueryPbl] = useQuery(); + + //Подключение к контексту сообщений + const { showMsgWarn } = useContext(MessagingСtx); + + //При добавлении запроса + const handleQueryAdd = () => setModQuery(true); + + //При выборе запроса + const handleQuerySelect = query => onQuerySelect && onQuerySelect(query.rn); + + //При установке признака публичности + const handleQueryPblSet = query => setQueryPbl(query.rn, query.pbl === 1 ? 0 : 1); + + //При установке признака готовности + const handleQueryReadySet = query => setQueryReady(query.rn, query.ready === 1 ? 0 : 1); + + //При исправлении запроса + const handleQueryEdit = query => setModQuery({ ...query }); + + //При удалении запроса + const handleQueryDelete = query => showMsgWarn("Удалить запрос?", () => deleteQuery(query.rn)); + + //При закрытии диалога добавления/исправления по "ОК" + const handleIUDialogOk = async values => { + if (modQuery === true) await insertQuery(values.code, values.name); + else await updateQuery(modQuery.rn, values.code, values.name); + setModQuery(null); + }; + + //При закрытии диалога добавления/исправления по "Отмена" + const handleIUDialogCancel = () => setModQuery(null); + + //При закртии менеджера отменой + const handleCancel = () => onCancel && onCancel(); + + //Формирование представления + return ( + + {modQuery && ( + + )} + + + + ); +}; + +//Контроль свойств компонента - Менеджер запросов +QueriesManager.propTypes = { + current: PropTypes.number, + onQuerySelect: PropTypes.func, + onCancel: PropTypes.func +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { QueriesManager }; diff --git a/app/panels/query_editor/components/queries_manager/query_iu_dialog.js b/app/panels/query_editor/components/queries_manager/query_iu_dialog.js new file mode 100644 index 0000000..6053f07 --- /dev/null +++ b/app/panels/query_editor/components/queries_manager/query_iu_dialog.js @@ -0,0 +1,54 @@ +/* + Парус 8 - Панели мониторинга - Редактор запросов + Компонент: Диалог добавления/исправления запроса +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { P8PDialog } from "../../../../components/p8p_dialog"; //Типовой диалог +import { TITLES } from "../../../../../app.text"; //Общие текстовые ресурсы приложения + +//----------- +//Тело модуля +//----------- + +//Диалог добавления/исправления запроса +const QueryIUDialog = ({ code = "", name = "", insert = true, onOk, onCancel }) => { + //Нажатие на кнопку "Ok" + const handleOk = values => onOk && onOk({ ...values }); + + //Нажатие на кнопку "Отмена" + const handleCancel = () => onCancel && onCancel(); + + //Генерация содержимого + return ( + + ); +}; + +//Контроль свойств - Диалог добавления/исправления запроса +QueryIUDialog.propTypes = { + code: PropTypes.string, + name: PropTypes.string, + insert: PropTypes.bool, + onOk: PropTypes.func, + onCancel: PropTypes.func +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { QueryIUDialog }; diff --git a/app/panels/query_editor/components/query_diagram/query_diagram.css b/app/panels/query_editor/components/query_diagram/query_diagram.css new file mode 100644 index 0000000..535e228 --- /dev/null +++ b/app/panels/query_editor/components/query_diagram/query_diagram.css @@ -0,0 +1,9 @@ +.query_diagram { + --border-color: #dee2e6; + --border-color-dark: #adb5bd; + --outline-color: #74c0fc; + --entity-title-bg: #f1f3f5; + --shadow-entity: 0 -2px 5px 0 hsl(220 3% 15% / calc(1% + 2%)), 0 1px 1px -2px hsl(220 3% 15% / calc(1% + 3%)), + 0 2px 2px -2px hsl(220 3% 15% / calc(1% + 3%)), 0 5px 5px -2px hsl(220 3% 15% / calc(1% + 4%)), 0 9px 9px -2px hsl(220 3% 15% / calc(1% + 5%)), + 0 16px 16px -2px hsl(220 3% 15% / calc(1% + 6%)); +} diff --git a/app/panels/query_editor/components/query_diagram/query_diagram.js b/app/panels/query_editor/components/query_diagram/query_diagram.js new file mode 100644 index 0000000..2715653 --- /dev/null +++ b/app/panels/query_editor/components/query_diagram/query_diagram.js @@ -0,0 +1,160 @@ +/* + Парус 8 - Панели мониторинга - Редактор запросов + Диаграмма запроса +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useState, useCallback, useEffect } from "react"; //Классы React +import ReactFlow, { addEdge, Controls, getOutgoers, applyNodeChanges, applyEdgeChanges } from "reactflow"; //Библиотека редактора диаграмм +import { NODE_TYPE } from "../../common"; //Общие ресурсы и константы редактора +import { Entity } from "../entity/entity"; //Сущность запроса +import { Attribute } from "../attribute/attribute"; //Атрибут сущности +import "reactflow/dist/style.css"; //Типовые стили библиотеки редактора диаграмм +import "./query_diagram.css"; //Стили компонента + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + CONNECTION_LINE: { + strokeWidth: 2, + stroke: "gray" + }, + EDGE: { + strokeWidth: 2 + } +}; + +//Привязка компонтов диаграммы к типам +const NODE_TYPES_COMPONENTS = { + [NODE_TYPE.ENTITY]: Entity, + [NODE_TYPE.ATTRIBUTE]: Attribute +}; + +//------------------------------------ +//Вспомогательные функции и компоненты +//------------------------------------ + +const hasCycle = (connection, target, nodes, edges, visited = new Set()) => { + if (visited.has(target.id)) { + return false; + } + + visited.add(target.id); + + for (const outgoer of getOutgoers(target, nodes, edges)) { + if (outgoer.id === connection.source || hasCycle(connection, outgoer, nodes, edges, visited)) { + return true; + } + } + + return false; +}; + +const isValidConnection = (connection, nodes, edges) => { + if (!connection.source || !connection.target) { + return false; + } + + const tableId = connection.source.split("-")[0]; + const isSameTable = connection.target.startsWith(tableId); + if (isSameTable) { + return false; + } + + const target = nodes.find(node => node.id === connection.target); + if (!target || target.id === connection.source) { + return false; + } + + return !hasCycle(connection, target, nodes, edges); +}; + +//----------- +//Тело модуля +//----------- + +//Диаграмма запроса +const QueryDiagram = ({ entities, relations, onEntityPositionChange, onEntityRemove, onRelationAdd, onRelationRemove }) => { + //Собственное состояние - элементы + const [nodes, setNodes] = useState(entities); + + //Собственное состояние - связи + const [edges, setEdges] = useState(relations); + + //Собственное состояние - перемещённый элемент + const [movedNode, setMovedNode] = useState(null); + + //При изменении элементов на диаграмме + const handleNodesChange = useCallback( + changes => { + setNodes(nodesSnapshot => applyNodeChanges(changes, nodesSnapshot)); + if (changes.length == 1 && changes[0].type == "position" && changes[0].dragging) + setMovedNode({ id: changes[0].id, position: { ...changes[0].position } }); + if (changes.length == 1 && changes[0].type == "position" && !changes[0].dragging && movedNode) { + if (onEntityPositionChange) onEntityPositionChange(movedNode.id, movedNode.position); + setMovedNode(null); + } + if (changes[0].type == "remove" && entities.find(e => e.id == changes[0].id && e.type == NODE_TYPE.ENTITY) && onEntityRemove) + onEntityRemove(changes[0].id); + }, + [movedNode, entities, onEntityPositionChange, onEntityRemove] + ); + + //При связывании элементов на диаграмме + const handleConnect = connection => { + setEdges(state => addEdge({ ...connection, id: `${connection.source}-${connection.target}` }, state)); + onRelationAdd && onRelationAdd(connection.source, connection.target); + }; + + //При изменении связей на диаграмме + const handleEdgesChange = useCallback( + changes => { + setEdges(edgesSnapshot => applyEdgeChanges(changes, edgesSnapshot)); + if (changes.length == 1 && changes[0].type == "remove" && onRelationRemove) onRelationRemove(changes[0].id); + }, + [onRelationRemove] + ); + + const validateConnection = connection => { + return isValidConnection(connection, nodes, edges); + }; + + //При изменении состава сущностей + useEffect(() => setNodes(entities), [entities]); + + //При изменении состава связей + useEffect(() => setEdges(relations), [relations]); + + //Генерация содержимого + return ( + + + + ); +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { QueryDiagram }; diff --git a/app/panels/query_editor/hooks.js b/app/panels/query_editor/hooks.js new file mode 100644 index 0000000..eb6a9f9 --- /dev/null +++ b/app/panels/query_editor/hooks.js @@ -0,0 +1,290 @@ +/* + Парус 8 - Панели мониторинга - Редактор запросов + Пользовательские хуки +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import { useState, useContext, useEffect, useCallback } from "react"; //Классы React +import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером +import { NODE_TYPE } from "./common"; //Общие ресурсы и константы редактора + +//------------------------------------ +//Вспомогательные функции и компоненты +//------------------------------------ + +//Конвертация серверного описания сущностей запроса в элементы диаграммы +const serverEntity2QueryDiagramNodes = entity => { + const groupWidth = 250; + const nameColumnHeight = 50; + const columns = entity?.XATTRS?.XATTR || []; + const columnsCount = columns.length; + const groupHeight = nameColumnHeight + columnsCount * 50; + + const groupNode = { + id: entity.id, + type: NODE_TYPE.ENTITY, + data: { ...entity }, + position: { x: entity.x, y: entity.y }, + style: { + width: groupWidth, + height: groupHeight + }, + draggable: true + }; + + const columnNodes = columns.map((column, index, columns) => { + const x = 1; + const y = 50 * (index + 1); + const width = groupWidth - 2; + const height = 50; + + const isLast = index === columns.length - 1; + const defaultColumnStyles = { + borderBottom: "1px solid #dee2e6" + }; + const lastColumnStyles = { + borderBottom: "none" + }; + const otherStyles = isLast ? lastColumnStyles : defaultColumnStyles; + + return { + id: column.id, + type: NODE_TYPE.ATTRIBUTE, + data: { + ...column, + included: false, + parentEntity: entity.id + }, + position: { x, y }, + parentId: entity.id, + extent: "parent", + style: { + width, + height, + ...otherStyles + }, + draggable: false, + selectable: true + }; + }); + + return [groupNode, ...columnNodes]; +}; + +//Конвертация серверного описания запроса в данные для редактора диаграмм +const serverQueryData2QueryDiagram = (entities, relations) => { + const result = { entities: [], relations: [...relations] }; + entities.forEach(entity => { + const nodes = serverEntity2QueryDiagramNodes(entity); + result.entities = [...result.entities, ...nodes]; + }); + return result; +}; + +//----------- +//Тело модуля +//----------- + +//Работа с запросами +const useQuery = () => { + //Собственное состояние - флаг инициализированности + const [isInit, setInit] = useState(false); + + //Собственное состояние - флаг загрузки + const [isLoading, setLoading] = useState(false); + + //Собственное состояние - флаг необходимости обновления + const [refresh, setRefresh] = useState(true); + + //Собственное состояние - данные + const [data, setData] = useState(null); + + //Подключение к контексту взаимодействия с сервером + const { executeStored } = useContext(BackEndСtx); + + //Обновление данных + const doRefresh = () => setRefresh(true); + + //Добавление запроса + const insertQuery = useCallback( + async (code, name) => { + await executeStored({ stored: "PKG_P8PANELS_QE.QUERY_INSERT", args: { SCODE: code, SNAME: name }, loader: false }); + setRefresh(true); + }, + [executeStored] + ); + + //Изменение запроса + const updateQuery = useCallback( + async (query, code, name) => { + await executeStored({ stored: "PKG_P8PANELS_QE.QUERY_UPDATE", args: { NRN: query, SCODE: code, SNAME: name }, loader: false }); + setRefresh(true); + }, + [executeStored] + ); + + //Удаление запроса + const deleteQuery = useCallback( + async query => { + await executeStored({ stored: "PKG_P8PANELS_QE.QUERY_DELETE", args: { NRN: query }, loader: false }); + setRefresh(true); + }, + [executeStored] + ); + + //Установка флага готовности запроса + const setQueryReady = useCallback( + async (query, ready) => { + await executeStored({ stored: "PKG_P8PANELS_QE.QUERY_READY_SET", args: { NRN: query, NREADY: ready }, loader: false }); + setRefresh(true); + }, + [executeStored] + ); + + //Установка флага публичности запроса + const setQueryPbl = useCallback( + async (query, pbl) => { + await executeStored({ stored: "PKG_P8PANELS_QE.QUERY_PBL_SET", args: { NRN: query, NPBL: pbl }, loader: false }); + setRefresh(true); + }, + [executeStored] + ); + + //При необходимости получить/обновить данные + useEffect(() => { + //Загрузка данных с сервера + const loadData = async () => { + try { + setLoading(true); + const data = await executeStored({ + stored: "PKG_P8PANELS_QE.QUERY_LIST", + respArg: "COUT", + isArray: name => ["XQUERY"].includes(name), + attributeValueProcessor: (name, val) => (["code", "name"].includes(name) ? undefined : val), + loader: true + }); + setData(data?.XQUERIES?.XQUERY || []); + setInit(true); + } finally { + setRefresh(false); + setLoading(false); + } + }; + //Если надо обновить + if (refresh) + //Получим данные + loadData(); + }, [refresh, executeStored]); + + //Возвращаем интерфейс хука + return [data, insertQuery, updateQuery, deleteQuery, setQueryReady, setQueryPbl, doRefresh, isLoading, isInit]; +}; + +//Работа с содержимым запроса +const useQueryDesc = query => { + //Собственное состояние - флаг инициализированности + const [isInit, setInit] = useState(false); + + //Собственное состояние - флаг загрузки + const [isLoading, setLoading] = useState(false); + + //Собственное состояние - флаг необходимости обновления + const [refresh, setRefresh] = useState(true); + + //Собственное состояние - данные + const [data, setData] = useState(null); + + //Подключение к контексту взаимодействия с сервером + const { executeStored } = useContext(BackEndСtx); + + //Обновление данных + const doRefresh = () => setRefresh(true); + + //Добавление сущности в запрос + const addEnt = useCallback( + async (name, type) => { + await executeStored({ stored: "PKG_P8PANELS_QE.QUERY_ENT_ADD", args: { NRN: query, SNAME: name, STYPE: type }, loader: false }); + setRefresh(true); + }, + [query, executeStored] + ); + + //Удаление сущности из запроса + const removeEnt = useCallback( + async ent => { + await executeStored({ stored: "PKG_P8PANELS_QE.QUERY_ENT_REMOVE", args: { NRN: query, SID: ent }, loader: false }); + setRefresh(true); + }, + [query, executeStored] + ); + + //Сохранение координат сущности на диаграммем + const setEntPosition = useCallback( + async (ent, x, y) => { + await executeStored({ stored: "PKG_P8PANELS_QE.QUERY_ENT_POSITION_SET", args: { NRN: query, SID: ent, NX: x, NY: y }, loader: false }); + }, + [query, executeStored] + ); + + //Добавление отношения сущностей в запрос + const addRl = useCallback( + async (source, target) => { + await executeStored({ stored: "PKG_P8PANELS_QE.QUERY_RL_ADD", args: { NRN: query, SSOURCE: source, STARGET: target }, loader: false }); + setRefresh(true); + }, + [query, executeStored] + ); + + //Удаление отношения сущностей из запроса + const removeRl = useCallback( + async rl => { + await executeStored({ stored: "PKG_P8PANELS_QE.QUERY_RL_REMOVE", args: { NRN: query, SID: rl }, loader: false }); + setRefresh(true); + }, + [query, executeStored] + ); + + //При необходимости получить/обновить данные + useEffect(() => { + //Загрузка данных с сервера + const loadData = async () => { + try { + setLoading(true); + const data = await executeStored({ + stored: "PKG_P8PANELS_QE.QUERY_DESC", + args: { NRN: query }, + respArg: "COUT", + isArray: name => ["XENT", "XATTR", "XRL"].includes(name), + loader: true + }); + setData(serverQueryData2QueryDiagram(data?.XENTS?.XENT || [], data?.XRLS?.XRL || [])); + setInit(true); + } finally { + setRefresh(false); + setLoading(false); + } + }; + //Если надо обновить + if (refresh) + if (query) + //Если есть для чего получать данные + loadData(); + //Нет идентификатора запроса - нет данных + else setData(null); + }, [refresh, query, executeStored]); + + //При изменении входных свойств - поднимаем флаг обновления + useEffect(() => setRefresh(true), [query]); + + //Возвращаем интерфейс хука + return [data, addEnt, removeEnt, setEntPosition, addRl, removeRl, doRefresh, isLoading, isInit]; +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { useQuery, useQueryDesc }; diff --git a/app/panels/query_editor/index.js b/app/panels/query_editor/index.js new file mode 100644 index 0000000..7675a82 --- /dev/null +++ b/app/panels/query_editor/index.js @@ -0,0 +1,16 @@ +/* + Парус 8 - Панели мониторинга - Редактор запросов + Редактор запросов: точка входа +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import { QueryEditor } from "./query_editor"; //Корневая панель редактора + +//---------------- +//Интерфейс модуля +//---------------- + +export const RootClass = QueryEditor; diff --git a/app/panels/query_editor/query_editor.js b/app/panels/query_editor/query_editor.js new file mode 100644 index 0000000..22e4069 --- /dev/null +++ b/app/panels/query_editor/query_editor.js @@ -0,0 +1,137 @@ +/* + Парус 8 - Панели мониторинга - Редактор запросов + Корневой компонент +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useState } from "react"; //Классы React +import { Box, Grid, Button, Icon } from "@mui/material"; //Интерфейсные компоненты MUI +import { APP_BAR_HEIGHT } from "../../components/p8p_app_workspace"; //Компоненты рабочего стола +import { P8PEditorToolBar } from "../../components/editors/p8p_editor_toolbar"; //Панель инструментов редактора +import { BUTTONS } from "../../../app.text"; //Общие текстовые ресурсы приложения +import { QueryDiagram } from "./components/query_diagram/query_diagram"; //Диаграмма запроса +import { QueriesManager } from "./components/queries_manager/queries_manager"; //Менеджер запросов +import { EntityAddDialog } from "./components/entity_add_dialog/entity_add_dialog"; //Диалог добавления сущности +import { P8PEditorBox } from "../../components/editors/p8p_editor_box"; //Контейнер параметров редактора +import { P8PEditorSubHeader } from "../../components/editors/p8p_editor_sub_header"; //Подзаголовок группы параметров редактора +import { useQueryDesc } from "./hooks"; //Пользовательские хуки + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + CONTAINER: { display: "flex" }, + GRID_CONTAINER: { height: `calc(100vh - ${APP_BAR_HEIGHT})` }, + GRID_ITEM_INSPECTOR: { backgroundColor: "#e9ecef" } +}; + +//----------- +//Тело модуля +//----------- + +//Корневой компонент редактора запросов +const QueryEditor = () => { + //Текущий запрос + const [query, setQuery] = useState(null); + + //Отображения менеджера запросов + const [openQueriesManager, setOpenQueriesManager] = useState(true); + + //Отображение диалога добавления сущности + const [openEntityAddDialog, setOpenEntityAddDialog] = useState(false); + + //Получение данных запроса + const [queryDiagram, addEnt, removeEnt, setEntPosition, addRl, removeRl] = useQueryDesc(query); + + //Обработка изменения положения сущности на диаграмме + const handleEntityPositionChange = (ent, position) => setEntPosition(ent, position.x, position.y); + + //Обработка удаления сущности из запроса + const handleEntityRemove = ent => removeEnt(ent); + + //Обработка добавления отношения cущностей + const handleRelationAdd = (source, target) => addRl(source, target); + + //Обработка удаления отношения cущностей + const handleRelationRemove = rl => removeRl(rl); + + //Открытие менеджера запросов + const handleOpenQueriesManager = () => setOpenQueriesManager(true); + + //Закрытие менеджера запросов + const handleCancelQueriesManager = () => setOpenQueriesManager(false); + + //Закрытие запроса + const handleQueryClose = () => setQuery(null); + + //При выборе запроса + const handleQuerySelect = query => { + setQuery(query); + setOpenQueriesManager(false); + }; + + //При добавлении сущности в запрос + const handleEntityAdd = () => setOpenEntityAddDialog(true); + + //Закрытие диалога добавления сущности по "ОК" + const handleEntityAddDialogOk = async values => { + await addEnt(values.name, "VIEW"); + setOpenEntityAddDialog(false); + }; + + //Закрытие диалога добавления сущности по "ОК" + const handleEntityAddDialogCancel = () => setOpenEntityAddDialog(false); + + //Панель инструмментов + const toolBar = ( + + ); + + //Генерация содержимого + return ( + + {openQueriesManager && } + {openEntityAddDialog && } + + + {queryDiagram && ( + + )} + + + {toolBar} + {query && ( + + + + + )} + + + + ); +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { QueryEditor }; diff --git a/db/P8PNL_QE_QUERY.sql b/db/P8PNL_QE_QUERY.sql new file mode 100644 index 0000000..318bc7d --- /dev/null +++ b/db/P8PNL_QE_QUERY.sql @@ -0,0 +1,25 @@ +/* + Парус 8 - Панели мониторинга - Общие - Редактор запросов + Запросы +*/ +create table P8PNL_QE_QUERY +( + RN number(17) not null, -- Рег. номер записи + CODE varchar2(100) not null, -- Мнемокод + NAME varchar2(2000) not null, -- Наименование + AUTHOR varchar2(30) not null, -- Автор + CH_DATE date not null, -- Дата последнего изменения + READY number(1) default 0 not null, -- Флаг готовности к использованию (0 - нет, 1 - да) + PBL number(1) default 0 not null, -- Флаг публичности (0 - нет, 1 - да) + OPTS clob, -- Параметры запроса + ENTS clob, -- Сущности запроса + RLS clob, -- Отношения сущностей запроса + QRY clob, -- Запрос + constraint C_P8PNL_QE_QUERY_RN_PK primary key (RN), + constraint C_P8PNL_QE_QUERY_CODE_NB check (rtrim(CODE) is not null), + constraint C_P8PNL_QE_QUERY_NAME_NB check (rtrim(NAME) is not null), + constraint C_P8PNL_QE_QUERY_AUTHOR_FK foreign key (AUTHOR) references USERLIST (AUTHID) on delete cascade, + constraint C_P8PNL_QE_QUERY_READY_VAL check (READY in (0, 1)), + constraint C_P8PNL_QE_QUERY_PBL_VAL check (PBL in (0, 1)), + constraint C_P8PNL_QE_QUERY_UN unique (CODE) +); diff --git a/db/PKG_P8PANELS_QE.pck b/db/PKG_P8PANELS_QE.pck new file mode 100644 index 0000000..a0f68c6 --- /dev/null +++ b/db/PKG_P8PANELS_QE.pck @@ -0,0 +1,342 @@ +create or replace package PKG_P8PANELS_QE as + + /* Получение списка запросов */ + procedure QUERY_LIST + ( + COUT out clob -- Сериализованный список запросов + ); + + /* Добавление запроса */ + procedure QUERY_INSERT + ( + SCODE in varchar2, -- Мнемокод + SNAME in varchar2, -- Наименование + NRN out number -- Рег. номер добавленного запроса + ); + + /* Исправление запроса */ + procedure QUERY_UPDATE + ( + NRN in number, -- Рег. номер запроса + SCODE in varchar2, -- Мнемокод + SNAME in varchar2 -- Наименование + ); + + /* Удаление запроса */ + procedure QUERY_DELETE + ( + NRN in number -- Рег. номер запроса + ); + + /* Получение данных о запросе */ + procedure QUERY_DESC + ( + NRN in number, -- Рег. номер запроса + COUT out clob -- Сериализованное описание запроса + ); + + /* Добавление сущности в запрос */ + procedure QUERY_ENT_ADD + ( + NRN in number, -- Рег. номер запроса + SNAME in varchar2, -- Имя + STYPE in varchar2 -- Тип (см. константы SENT_TYPE_*) + ); + + /* Удаление сущности из запроса */ + procedure QUERY_ENT_REMOVE + ( + NRN in number, -- Рег. номер запроса + SID in varchar2 -- Идентификатор сущности + ); + + /* Установка координат сущности в редакторе диаграммы запроса */ + procedure QUERY_ENT_POSITION_SET + ( + NRN in number, -- Рег. номер запроса + SID in varchar2, -- Идентификатор сущности + NX in number, -- Координата по оси абсцисс + NY in number -- Координата по оси ординат + ); + + /* Добавление связи в запрос */ + procedure QUERY_RL_ADD + ( + NRN in number, -- Рег. номер запроса + SSOURCE in varchar2, -- Идентификатор атрибута-источника + STARGET in varchar2 -- Идентификатор атрибута-приёмника + ); + + /* Удаление связи из запроса */ + procedure QUERY_RL_REMOVE + ( + NRN in number, -- Рег. номер запроса + SID in varchar2 -- Идентификатор связи + ); + + /* Установка признака "готовности" запроса */ + procedure QUERY_READY_SET + ( + NRN in number, -- Рег. номер запроса + NREADY in number -- Флаг готовности к использованию (0 - нет, 1 - да) + ); + + /* Установка признака "публичности" запроса */ + procedure QUERY_PBL_SET + ( + NRN in number, -- Рег. номер запроса + NPBL in number -- Флаг публичности (0 - приватный, 1 - публичный) + ); + +end PKG_P8PANELS_QE; +/ +create or replace package body PKG_P8PANELS_QE as + + /* Получение списка запросов */ + procedure QUERY_LIST + ( + COUT out clob -- Сериализованный список запросов + ) + is + begin + /* Базово сформируем список */ + COUT := PKG_P8PANELS_QE_BASE.QUERY_LIST_GET(SUSER => UTILIZER()); + end QUERY_LIST; + + /* Добавление запроса */ + procedure QUERY_INSERT + ( + SCODE in varchar2, -- Мнемокод + SNAME in varchar2, -- Наименование + NRN out number -- Рег. номер добавленного запроса + ) + is + begin + /* Базовое добавление */ + PKG_P8PANELS_QE_BASE.QUERY_INSERT(SCODE => SCODE, SNAME => SNAME, NRN => NRN); + end QUERY_INSERT; + + /* Исправление запроса */ + procedure QUERY_UPDATE + ( + NRN in number, -- Рег. номер запроса + SCODE in varchar2, -- Мнемокод + SNAME in varchar2 -- Наименование + ) + is + begin + /* Провим права доступа */ + PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER()); + /* Базовое исправление */ + PKG_P8PANELS_QE_BASE.QUERY_UPDATE(NRN => NRN, SCODE => SCODE, SNAME => SNAME); + end QUERY_UPDATE; + + /* Удаление запроса */ + procedure QUERY_DELETE + ( + NRN in number -- Рег. номер запроса + ) + is + begin + /* Провим права доступа */ + PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER()); + /* Базовое удаление */ + PKG_P8PANELS_QE_BASE.QUERY_DELETE(NRN => NRN); + end QUERY_DELETE; + + /* Получение описания запроса */ + procedure QUERY_DESC + ( + NRN in number, -- Рег. номер запроса + COUT out clob -- Сериализованное описание запроса + ) + is + begin + /* Проверим права доступа */ + PKG_P8PANELS_QE_BASE.QUERY_ACCESS_VIEW(NRN => NRN, SUSER => UTILIZER()); + /* Получим описание запроса */ + COUT := PKG_P8PANELS_QE_BASE.QUERY_DESC_GET(NRN => NRN); + end QUERY_DESC; + + /* Добавление сущности в запрос */ + procedure QUERY_ENT_ADD + ( + NRN in number, -- Рег. номер запроса + SNAME in varchar2, -- Имя + STYPE in varchar2 -- Тип (см. константы SENT_TYPE_*) + ) + is + RQ P8PNL_QE_QUERY%rowtype; -- Запись запроса + RENTS PKG_P8PANELS_QE_BASE.TENTS; -- Коллекция существующих сущностей + begin + /* Провим права доступа */ + PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER()); + /* Читаем запись запроса */ + RQ := PKG_P8PANELS_QE_BASE.QUERY_GET(NRN => NRN); + /* Читаем существующие сущности */ + RENTS := PKG_P8PANELS_QE_BASE.QUERY_ENTS_GET(CENTS => RQ.ENTS); + /* Формируем описание новой сущности и добавляем её в коллекцию */ + PKG_P8PANELS_QE_BASE.TENTS_APPEND(RENTS => RENTS, SNAME => SNAME, STYPE => STYPE); + /* Сохраняем обновленный набор сущностей */ + PKG_P8PANELS_QE_BASE.QUERY_ENTS_SET(NRN => RQ.RN, RENTS => RENTS); + end QUERY_ENT_ADD; + + /* Удаление сущности из запроса */ + procedure QUERY_ENT_REMOVE + ( + NRN in number, -- Рег. номер запроса + SID in varchar2 -- Идентификатор сущности + ) + is + RQ P8PNL_QE_QUERY%rowtype; -- Запись запроса + RENTS PKG_P8PANELS_QE_BASE.TENTS; -- Коллекция существующих сущностей + RENT PKG_P8PANELS_QE_BASE.TENT; -- Удаляемая сущность + RRLS PKG_P8PANELS_QE_BASE.TRLS; -- Коллекция существующих связей + RRLS_TMP PKG_P8PANELS_QE_BASE.TRLS; -- Буфер для коллекции удаляемых связей + begin + /* Провим права доступа */ + PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER()); + /* Читаем запись запроса */ + RQ := PKG_P8PANELS_QE_BASE.QUERY_GET(NRN => NRN); + /* Читаем существующие сущности */ + RENTS := PKG_P8PANELS_QE_BASE.QUERY_ENTS_GET(CENTS => RQ.ENTS); + /* Читаем свзяи */ + RRLS := PKG_P8PANELS_QE_BASE.QUERY_RLS_GET(CRLS => RQ.RLS); + /* Находим удаляемую сущность */ + begin + RENT := RENTS(PKG_P8PANELS_QE_BASE.TENTS_INDEX_BY_ID(RENTS => RENTS, SID => SID)); + exception + when VALUE_ERROR then + P_EXCEPTION(0, + 'Сущность с идентификатором "%s" в запросе "%s" не определена.', + COALESCE(SID, '<НЕ УКАЗАН>'), + TO_CHAR(NRN)); + end; + /* Удаляем сущность из коллекции */ + PKG_P8PANELS_QE_BASE.TENTS_REMOVE(RENTS => RENTS, SID => SID); + /* Обходим атрибуты сущности */ + if ((RENT.RATTRS is not null) and (RENT.RATTRS.COUNT > 0)) then + for I in RENT.RATTRS.FIRST .. RENT.RATTRS.LAST + loop + /* Если атрибут есть в связях (как источник или как приёмник) */ + for J in 0 .. 1 + loop + RRLS_TMP := PKG_P8PANELS_QE_BASE.TRLS_LIST_BY_ST(RRLS => RRLS, + SSOURCE_TARGET => RENT.RATTRS(I).SID, + NLIST_TYPE => J); + /* То связь должна быть удалена */ + if ((RRLS_TMP is not null) and (RRLS_TMP.COUNT > 0)) then + for K in RRLS_TMP.FIRST .. RRLS_TMP.LAST + loop + PKG_P8PANELS_QE_BASE.TRLS_REMOVE(RRLS => RRLS, SID => RRLS_TMP(K).SID); + end loop; + end if; + end loop; + end loop; + end if; + /* Сохраняем обновленный набор сущностей */ + PKG_P8PANELS_QE_BASE.QUERY_ENTS_SET(NRN => RQ.RN, RENTS => RENTS); + /* Сохраняем обновленный набор связей */ + PKG_P8PANELS_QE_BASE.QUERY_RLS_SET(NRN => RQ.RN, RRLS => RRLS); + end QUERY_ENT_REMOVE; + + /* Установка координат сущности в редакторе диаграммы запроса */ + procedure QUERY_ENT_POSITION_SET + ( + NRN in number, -- Рег. номер запроса + SID in varchar2, -- Идентификатор сущности + NX in number, -- Координата по оси абсцисс + NY in number -- Координата по оси ординат + ) + is + RQ P8PNL_QE_QUERY%rowtype; -- Запись запроса + RENTS PKG_P8PANELS_QE_BASE.TENTS; -- Коллекция существующих сущностей + begin + /* Читаем запись запроса */ + RQ := PKG_P8PANELS_QE_BASE.QUERY_GET(NRN => NRN); + /* Сохранять расположение будем только если это автор - так остальные могут перемещать на экране диаграмму, но не запоминать расположение сущностей */ + if (RQ.AUTHOR = UTILIZER()) then + /* Читаем существующие сущности */ + RENTS := PKG_P8PANELS_QE_BASE.QUERY_ENTS_GET(CENTS => RQ.ENTS); + /* Меняем координаты сущности в коллекции */ + PKG_P8PANELS_QE_BASE.TENTS_POSITION_SET(RENTS => RENTS, SID => SID, NX => NX, NY => NY); + /* Сохраняем обновленный набор сущностей */ + PKG_P8PANELS_QE_BASE.QUERY_ENTS_SET(NRN => RQ.RN, RENTS => RENTS); + end if; + end QUERY_ENT_POSITION_SET; + + /* Добавление связи в запрос */ + procedure QUERY_RL_ADD + ( + NRN in number, -- Рег. номер запроса + SSOURCE in varchar2, -- Идентификатор атрибута-источника + STARGET in varchar2 -- Идентификатор атрибута-приёмника + ) + is + RQ P8PNL_QE_QUERY%rowtype; -- Запись запроса + RRLS PKG_P8PANELS_QE_BASE.TRLS; -- Коллекция существующих связей + begin + /* Провим права доступа */ + PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER()); + /* Читаем запись запроса */ + RQ := PKG_P8PANELS_QE_BASE.QUERY_GET(NRN => NRN); + /* Читаем существующие связи */ + RRLS := PKG_P8PANELS_QE_BASE.QUERY_RLS_GET(CRLS => RQ.RLS); + /* Формируем описание новой связи и добавляем её в коллекцию */ + PKG_P8PANELS_QE_BASE.TRLS_APPEND(RRLS => RRLS, SSOURCE => SSOURCE, STARGET => STARGET); + /* Сохраняем обновленный набор связей */ + PKG_P8PANELS_QE_BASE.QUERY_RLS_SET(NRN => RQ.RN, RRLS => RRLS); + end QUERY_RL_ADD; + + /* Удаление связи из запроса */ + procedure QUERY_RL_REMOVE + ( + NRN in number, -- Рег. номер запроса + SID in varchar2 -- Идентификатор связи + ) + is + RQ P8PNL_QE_QUERY%rowtype; -- Запись запроса + RRLS PKG_P8PANELS_QE_BASE.TRLS; -- Коллекция существующих связей + begin + /* Провим права доступа */ + PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER()); + /* Читаем запись запроса */ + RQ := PKG_P8PANELS_QE_BASE.QUERY_GET(NRN => NRN); + /* Читаем существующие связи */ + RRLS := PKG_P8PANELS_QE_BASE.QUERY_RLS_GET(CRLS => RQ.RLS); + /* Удаляем связи из коллекции */ + PKG_P8PANELS_QE_BASE.TRLS_REMOVE(RRLS => RRLS, SID => SID); + /* Сохраняем обновленный набор связей */ + PKG_P8PANELS_QE_BASE.QUERY_RLS_SET(NRN => RQ.RN, RRLS => RRLS); + end QUERY_RL_REMOVE; + + /* Установка признака "готовности" запроса */ + procedure QUERY_READY_SET + ( + NRN in number, -- Рег. номер запроса + NREADY in number -- Флаг готовности к использованию (0 - нет, 1 - да) + ) + is + begin + /* Провим права доступа */ + PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER()); + /* Базовая установка признака готовности */ + PKG_P8PANELS_QE_BASE.QUERY_READY_SET(NRN => NRN, NREADY => NREADY); + end QUERY_READY_SET; + + /* Установка признака "публичности" запроса */ + procedure QUERY_PBL_SET + ( + NRN in number, -- Рег. номер запроса + NPBL in number -- Флаг публичности (0 - приватный, 1 - публичный) + ) + is + begin + /* Провим права доступа */ + PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER()); + /* Базовая установка признака публичности */ + PKG_P8PANELS_QE_BASE.QUERY_PBL_SET(NRN => NRN, NPBL => NPBL); + end QUERY_PBL_SET; + +end PKG_P8PANELS_QE; +/ diff --git a/db/PKG_P8PANELS_QE_BASE.pck b/db/PKG_P8PANELS_QE_BASE.pck new file mode 100644 index 0000000..2e30f80 --- /dev/null +++ b/db/PKG_P8PANELS_QE_BASE.pck @@ -0,0 +1,1573 @@ +create or replace package PKG_P8PANELS_QE_BASE as + + /* Константы - Типы сущностей */ + SENT_TYPE_TABLE constant PKG_STD.TSTRING := 'TABLE'; -- Таблица + SENT_TYPE_VIEW constant PKG_STD.TSTRING := 'VIEW'; -- Представление + + /* Типы данных - Атрибут сущности */ + type TATTR is record + ( + SID PKG_STD.TSTRING, -- Уникальный идентификатор в запросе + SNAME PKG_STD.TSTRING, -- Имя + STITLE PKG_STD.TSTRING, -- Заголовок + NDATA_TYPE PKG_STD.TNUMBER -- Тип данных (см. константы PKG_STD.DATA_TYPE_*) + ); + + /* Типы данных - Коллекция атрибутов сущности */ + type TATTRS is table of TATTR; + + /* Типы данных - Сущность */ + type TENT is record + ( + SID PKG_STD.TSTRING, -- Уникальный идентификатор в запросе + SNAME PKG_STD.TSTRING, -- Имя + STITLE PKG_STD.TSTRING, -- Заголовок + STYPE PKG_STD.TSTRING, -- Тип (см. константы SENT_TYPE_*) + NX PKG_STD.TNUMBER := 0, -- Координата по оси абсцисс + NY PKG_STD.TNUMBER := 0, -- Координата по оси ординат + RATTRS TATTRS -- Атрибуты + ); + + /* Типы данных - Коллекция сущностей */ + type TENTS is table of TENT; + + /* Типы данных - Отношение */ + type TRL is record + ( + SID PKG_STD.TSTRING, -- Уникальный идентификатор в запросе + SSOURCE PKG_STD.TSTRING, -- Идентификатор атрибута-источника + STARGET PKG_STD.TSTRING -- Идентификатор атрибута-приёмника + ); + + /* Типы данных - Коллекция отношений */ + type TRLS is table of TRL; + + /* Поиск индекса сущности по идентификатору */ + function TENTS_INDEX_BY_ID + ( + RENTS in TENTS, -- Коллекция сущностей + SID in varchar2 -- Искомый идентификатор + ) return number; -- Индекс найденной сущности (null - если не найдено) + + /* Добавление сущности в коллекцию */ + procedure TENTS_APPEND + ( + RENTS in out nocopy TENTS, -- Изменяемая коллекция + SNAME in varchar2, -- Имя + STYPE in varchar2 -- Тип (см. константы SENT_TYPE_*) + ); + + /* Удаление сущности из коллекции */ + procedure TENTS_REMOVE + ( + RENTS in out nocopy TENTS, -- Изменяемая коллекция + SID in varchar2 -- Идентификатор удялемой сущности + ); + + /* Установка координат сущности в коллекции */ + procedure TENTS_POSITION_SET + ( + RENTS in out nocopy TENTS, -- Изменяемая коллекция + SID in varchar2, -- Идентификатор сущности + NX in number, -- Координата по оси абсцисс + NY in number -- Координата по оси ординат + ); + + /* Формирование коллекции связей по источнику/приёмнику */ + function TRLS_LIST_BY_ST + ( + RRLS in TRLS, -- Коллекция связей + SSOURCE_TARGET in varchar2, -- Идентификатор источника/приёмкника + NLIST_TYPE in number -- Тип формирования коллекции (0 - по источнику, 1 - по приёмнику + ) return TRLS; -- Сформированная коллекция + + /* Добавление связи в коллекцию */ + procedure TRLS_APPEND + ( + RRLS in out nocopy TRLS, -- Изменяемая коллекция + SSOURCE in varchar2, -- Источник + STARGET in varchar2 -- Приёмник + ); + + /* Удаление связи из коллекции */ + procedure TRLS_REMOVE + ( + RRLS in out nocopy TRLS, -- Изменяемая коллекция + SID in varchar2 -- Идентификатор удялемой связи + ); + + /* Считывание записи запроса */ + function QUERY_GET + ( + NRN in number -- Рег. номер запроса + ) return P8PNL_QE_QUERY%rowtype; -- Запись запроса + + /* Получение признака возможности изменения запроса */ + function QUERY_ACCESS_SIGN_MODIFY + ( + NRN in number, -- Рег. номер запроса + SUSER in varchar2 -- Имя пользователя + ) return number; -- Признак возможности изменения запроса (0 - нет, 1 - да) + + /* Проверка возможности изменения запроса */ + procedure QUERY_ACCESS_MODIFY + ( + NRN in number, -- Рег. номер запроса + SUSER in varchar2 -- Имя пользователя + ); + + /* Получение признака возможности просмотра запроса */ + function QUERY_ACCESS_SIGN_VIEW + ( + NRN in number, -- Рег. номер запроса + SUSER in varchar2 -- Имя пользователя + ) return number; -- Признак возможности просмотра запроса (0 - нет, 1 - да) + + /* Проверка возможности просмотра запроса */ + procedure QUERY_ACCESS_VIEW + ( + NRN in number, -- Рег. номер запроса + SUSER in varchar2 -- Имя пользователя + ); + + /* Добавление запроса */ + procedure QUERY_INSERT + ( + SCODE in varchar2, -- Мнемокод + SNAME in varchar2, -- Наименование + NRN out number -- Рег. номер добавленного запроса + ); + + /* Исправление запроса */ + procedure QUERY_UPDATE + ( + NRN in number, -- Рег. номер запроса + SCODE in varchar2, -- Мнемокод + SNAME in varchar2 -- Наименование + ); + + /* Удаление запроса */ + procedure QUERY_DELETE + ( + NRN in number -- Рег. номер запроса + ); + + /* Формирование списка запросов */ + function QUERY_LIST_GET + ( + SUSER in varchar2 -- Имя пользователя + ) return clob; -- Список запросов + + /* Получение описания запроса */ + function QUERY_DESC_GET + ( + NRN in number -- Рег. номер запроса + ) return clob; -- XML-описание + + /* Чтение сущностей запроса */ + function QUERY_ENTS_GET + ( + CENTS in clob -- Сериализованное описание сущностей + ) return TENTS; -- Коллекция сущностей + + /* Запись сущностей запроса */ + procedure QUERY_ENTS_SET + ( + NRN in number, -- Рег. номер запроса + RENTS in TENTS -- Коллекция сущностей + ); + + /* Чтение связей запроса */ + function QUERY_RLS_GET + ( + CRLS in clob -- Сериализованное описание связей + ) return TRLS; -- Коллекция связей + + /* Запись связей запроса */ + procedure QUERY_RLS_SET + ( + NRN in number, -- Рег. номер запроса + RRLS in TRLS -- Коллекция связей + ); + + /* Установка признака "готовности" запроса */ + procedure QUERY_READY_SET + ( + NRN in number, -- Рег. номер запроса + NREADY in number -- Флаг готовности к использованию (0 - нет, 1 - да) + ); + + /* Установка признака "публичности" запроса */ + procedure QUERY_PBL_SET + ( + NRN in number, -- Рег. номер запроса + NPBL in number -- Флаг публичности (0 - приватный, 1 - публичный) + ); + +end PKG_P8PANELS_QE_BASE; +/ +create or replace package body PKG_P8PANELS_QE_BASE as + + /* Константы - Теги для сериализации */ + STAG_DATA constant PKG_STD.TSTRING := 'XDATA'; -- Данные + STAG_QUERIES constant PKG_STD.TSTRING := 'XQUERIES'; -- Запросы + STAG_QUERY constant PKG_STD.TSTRING := 'XQUERY'; -- Запрос + STAG_ATTRS constant PKG_STD.TSTRING := 'XATTRS'; -- Атрибуты сущности + STAG_ATTR constant PKG_STD.TSTRING := 'XATTR'; -- Атрибут сущности + STAG_ENTS constant PKG_STD.TSTRING := 'XENTS'; -- Сущности + STAG_ENT constant PKG_STD.TSTRING := 'XENT'; -- Сущность + STAG_RLS constant PKG_STD.TSTRING := 'XRLS'; -- Связи + STAG_RL constant PKG_STD.TSTRING := 'XRL'; -- Связь + STAG_OPTS constant PKG_STD.TSTRING := 'XOPTS'; -- Параметры + STAG_OPT constant PKG_STD.TSTRING := 'XOPT'; -- Параметр + + /* Константы - Атрибуты для сериализации */ + SATTR_ID constant PKG_STD.TSTRING := 'id'; -- Идентификатор + SATTR_RN constant PKG_STD.TSTRING := 'rn'; -- Регистрационный номер + SATTR_CODE constant PKG_STD.TSTRING := 'code'; -- Код + SATTR_NAME constant PKG_STD.TSTRING := 'name'; -- Имя + SATTR_AUTHOR constant PKG_STD.TSTRING := 'author'; -- Автор + SATTR_CH_DATE constant PKG_STD.TSTRING := 'chDate'; -- Дата изменения + SATTR_READY constant PKG_STD.TSTRING := 'ready'; -- Готовность к использованию + SATTR_PBL constant PKG_STD.TSTRING := 'pbl'; -- Публичность + SATTR_MODIFY constant PKG_STD.TSTRING := 'modify'; -- Изменяемость + SATTR_TITLE constant PKG_STD.TSTRING := 'title'; -- Заголовок + SATTR_TYPE constant PKG_STD.TSTRING := 'type'; -- Тип + SATTR_DATA_TYPE constant PKG_STD.TSTRING := 'dataType'; -- Тип данных + SATTR_X constant PKG_STD.TSTRING := 'x'; -- Координата по X + SATTR_Y constant PKG_STD.TSTRING := 'y'; -- Координата по Y + SATTR_SOURCE constant PKG_STD.TSTRING := 'source'; -- Источник + SATTR_TARGET constant PKG_STD.TSTRING := 'target'; -- Приёмник + + /* Получение заголовка представления из метаданных */ + function DMSCLVIEWS_TITLE_GET + ( + SVIEW_NAME in varchar2 -- Имя представления + ) return varchar2 -- Заголовок представления из метаданных + is + begin + /* Обратимся к метаописанию представления */ + for V in (select T.VIEW_NOTE, + UL.UNITNAME + from DMSCLVIEWS T, + UNITLIST UL + where T.VIEW_NAME = SVIEW_NAME + and T.CUSTOM_QUERY = 0 + and T.PRN = UL.RN) + loop + if (V.VIEW_NOTE = SVIEW_NAME) then + return V.UNITNAME; + else + return V.VIEW_NOTE; + end if; + end loop; + /* Ничего не нашли - вернём обычное имя */ + return SVIEW_NAME; + end DMSCLVIEWS_TITLE_GET; + + /* Получение заголовка атрибута представления из метаданных */ + function DMSCLVIEWSATTRS_TITLE_GET + ( + SVIEW_NAME in varchar2, -- Имя представления + SATTR_NAME in varchar2 -- Имя атрибута + ) return varchar2 -- Заголовок атрибута представления из метаданных + is + begin + /* Обратимся к метаописанию представления */ + for V in (select T.RN + from DMSCLVIEWS T + where T.VIEW_NAME = SVIEW_NAME + and T.CUSTOM_QUERY = 0) + loop + /* Обходим поля найденного представления */ + for F in (select A.CAPTION + from DMSCLVIEWSATTRS T, + DMSCLATTRS A + where T.PRN = V.RN + and T.COLUMN_NAME = SATTR_NAME + and T.ATTR = A.RN) + loop + return F.CAPTION; + end loop; + end loop; + /* Ничего не нашли - вернём обычное имя */ + return SATTR_NAME; + end DMSCLVIEWSATTRS_TITLE_GET; + + /* Формирование идентификатора атрибута сущности */ + function TATTR_ID_MAKE + ( + SENT_ID in varchar2, -- Уникальный идентификатор родительской сущности + SNAME in varchar2 -- Имя атрибута + ) return varchar2 -- Сформированный идентификатор + is + begin + /* Проверим параметры */ + if (SNAME is null) then + P_EXCEPTION(0, 'Не указано имя атрибута сущности.'); + end if; + if (SENT_ID is null) then + P_EXCEPTION(0, + 'Не указан идентификатор родительской сущности атрибута.'); + end if; + /* Соберем идентификатор */ + return SENT_ID || '.' || SNAME; + end TATTR_ID_MAKE; + + /* Сериализация атрибута сущности */ + procedure TATTR_TO_XML + ( + RATTR in TATTR -- Атрибут сущности + ) + is + begin + /* Открываем описание атрибута сущности */ + PKG_XFAST.DOWN_NODE(SNAME => STAG_ATTR); + /* Атрибут */ + PKG_XFAST.ATTR(SNAME => SATTR_ID, SVALUE => RATTR.SID); + PKG_XFAST.ATTR(SNAME => SATTR_NAME, SVALUE => RATTR.SNAME); + PKG_XFAST.ATTR(SNAME => SATTR_TITLE, SVALUE => RATTR.STITLE); + PKG_XFAST.ATTR(SNAME => SATTR_DATA_TYPE, NVALUE => RATTR.NDATA_TYPE); + /* Закрываем описание атрибута сущности */ + PKG_XFAST.UP(); + end TATTR_TO_XML; + + /* Десериализация атрибута сущности */ + function TATTR_FROM_XML + ( + CXML in clob -- XML-описание атрибута сущности + ) return TATTR -- Атрибут сущности + is + RRES TATTR; -- Буфер для результата + XDOC PKG_XPATH.TDOCUMENT; -- Документ XML + XROOT PKG_XPATH.TNODE; -- Корень документа XML + XNODE PKG_XPATH.TNODE; -- Буфер узла документа + begin + /* Если данные есть */ + if (CXML is not null) then + begin + /* Разбираем XML */ + XDOC := PKG_XPATH.PARSE_FROM_CLOB(LCXML => CXML); + /* Считываем корневой узел */ + XROOT := PKG_XPATH.ROOT_NODE(RDOCUMENT => XDOC); + XNODE := PKG_XPATH.SINGLE_NODE(RPARENT_NODE => XROOT, SPATTERN => '/' || STAG_ATTR); + /* Получаем значения */ + RRES.SID := PKG_XPATH.ATTRIBUTE(RNODE => XNODE, SNAME => SATTR_ID); + RRES.SNAME := PKG_XPATH.ATTRIBUTE(RNODE => XNODE, SNAME => SATTR_NAME); + RRES.STITLE := PKG_XPATH.ATTRIBUTE(RNODE => XNODE, SNAME => SATTR_TITLE); + RRES.NDATA_TYPE := PKG_XPATH.ATTRIBUTE_NUM(RNODE => XNODE, SNAME => SATTR_DATA_TYPE); + /* Освободим документ */ + PKG_XPATH.FREE(RDOCUMENT => XDOC); + exception + when others then + /* Освободим документ */ + PKG_XPATH.FREE(RDOCUMENT => XDOC); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end; + end if; + /* Вернём результат */ + return RRES; + end TATTR_FROM_XML; + + /* Сериализация коллекции атрибутов сущности */ + procedure TATTRS_TO_XML + ( + RATTRS in TATTRS -- Коллекция атрибутов сущности + ) + is + begin + /* Открываем описание атрибутов сущности */ + PKG_XFAST.DOWN_NODE(SNAME => STAG_ATTRS); + /* Обходим атрибуты из коллекции */ + if ((RATTRS is not null) and (RATTRS.COUNT > 0)) then + for I in RATTRS.FIRST .. RATTRS.LAST + loop + /* Добавляем описание атрибута сущности */ + TATTR_TO_XML(RATTR => RATTRS(I)); + end loop; + end if; + /* Закрываем описание атрибутов сущности */ + PKG_XFAST.UP(); + end TATTRS_TO_XML; + + /* Десериализация коллекции атрибутов сущности */ + function TATTRS_FROM_XML + ( + CXML in clob -- XML-описание коллекции атрибутов сущности + ) return TATTRS -- Коллекция атрибутов сущности + is + RRES TATTRS; -- Буфер для результата + XDOC PKG_XPATH.TDOCUMENT; -- Документ XML + XROOT PKG_XPATH.TNODE; -- Корень документа XML + XNODE PKG_XPATH.TNODE; -- Буфер узла документа + XNODES PKG_XPATH.TNODES; -- Буфер коллекции узлов документа + begin + /* Инициализируем результат */ + RRES := TATTRS(); + /* Если данные есть */ + if (CXML is not null) then + begin + /* Разбираем XML */ + XDOC := PKG_XPATH.PARSE_FROM_CLOB(LCXML => CXML); + /* Считываем корневой узел */ + XROOT := PKG_XPATH.ROOT_NODE(RDOCUMENT => XDOC); + /* Считывание списка атрибутов */ + XNODES := PKG_XPATH.LIST_NODES(RPARENT_NODE => XROOT, SPATTERN => '/' || STAG_ATTRS || '/' || STAG_ATTR); + /* Цикл по списку атрибутов */ + for I in 1 .. PKG_XPATH.COUNT_NODES(RNODES => XNODES) + loop + /* Считаем элемент по его номеру */ + XNODE := PKG_XPATH.ITEM_NODE(RNODES => XNODES, INUMBER => I); + /* Сериализуем и добавим его в коллекцию */ + RRES.EXTEND(); + RRES(RRES.LAST) := TATTR_FROM_XML(CXML => PKG_XPATH.SERIALIZE_TO_CLOB(RNODE => XNODE)); + end loop; + /* Освободим документ */ + PKG_XPATH.FREE(RDOCUMENT => XDOC); + exception + when others then + /* Освободим документ */ + PKG_XPATH.FREE(RDOCUMENT => XDOC); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end; + end if; + /* Вернём результат */ + return RRES; + end TATTRS_FROM_XML; + + /* Формирование идентификатора сущности */ + function TENT_ID_MAKE + ( + SNAME in varchar2, -- Имя сущности + NNUMB in number -- Номер сущности в запросе + ) return varchar2 -- Сформированный идентификатор + is + begin + /* Проверим параметры */ + if (SNAME is null) then + P_EXCEPTION(0, 'Не указано имя сущности.'); + end if; + /* Соберем идентификатор */ + if (NNUMB is null) then + return SNAME; + else + return SNAME || TO_CHAR(NNUMB); + end if; + end TENT_ID_MAKE; + + /* Формирование описания сущности */ + function TENT_MAKE + ( + SNAME in varchar2, -- Имя + STYPE in varchar2, -- Тип (см. константы SENT_TYPE_*) + NNUMB in number -- Номер сущности + ) return TENT -- Описание сущности + is + RENT TENT; -- Буфер для результата + RVIEW PKG_OBJECT_DESC.TVIEW; -- Описание представления + RVIEW_FIELDS PKG_OBJECT_DESC.TCOLUMNS; -- Коллекция описаний полей представления + RVIEW_FIELD PKG_OBJECT_DESC.TCOLUMN; -- Описание поля представления + begin + /* Проверим корректность типа сущности */ + if (STYPE not in (SENT_TYPE_TABLE, SENT_TYPE_VIEW)) then + P_EXCEPTION(0, + 'Сущности типа "%s" не поддерживаются.', + COALESCE(STYPE, '<НЕ УКАЗАН>')); + end if; + /* Если сущность это представление */ + if (STYPE = SENT_TYPE_VIEW) then + /* Получим описание представления */ + RVIEW := PKG_OBJECT_DESC.DESC_VIEW(SVIEW_NAME => SNAME, BRAISE_ERROR => true); + /* Получим список полей представления */ + RVIEW_FIELDS := PKG_OBJECT_DESC.DESC_SEL_COLUMNS(SSELECT_NAME => SNAME, BRAISE_ERROR => true); + /* Собираем заголовок сущности */ + RENT.SID := TENT_ID_MAKE(SNAME => RVIEW.VIEW_NAME, NNUMB => NNUMB); + RENT.SNAME := RVIEW.VIEW_NAME; + RENT.STITLE := DMSCLVIEWS_TITLE_GET(SVIEW_NAME => RENT.SNAME); + RENT.STYPE := SENT_TYPE_VIEW; + RENT.RATTRS := TATTRS(); + /* Собираем атрибуты в ответ */ + for I in 1 .. PKG_OBJECT_DESC.COUNT_COLUMNS(RCOLUMNS => RVIEW_FIELDS) + loop + /* По умолчанию - первые 10 */ + exit when I > 10; + /* Считываем очередное поле из коллекции описания полей представления */ + RVIEW_FIELD := PKG_OBJECT_DESC.FETCH_COLUMN(RCOLUMNS => RVIEW_FIELDS, IINDEX => I); + /* Формируем описание поля и добавляем в коллекцию атрибутов сущности */ + RENT.RATTRS.EXTEND(); + RENT.RATTRS(RENT.RATTRS.LAST).SID := TATTR_ID_MAKE(SENT_ID => RENT.SID, SNAME => RVIEW_FIELD.COLUMN_NAME); + RENT.RATTRS(RENT.RATTRS.LAST).SNAME := RVIEW_FIELD.COLUMN_NAME; + RENT.RATTRS(RENT.RATTRS.LAST).STITLE := DMSCLVIEWSATTRS_TITLE_GET(SVIEW_NAME => RENT.SNAME, + SATTR_NAME => RENT.RATTRS(RENT.RATTRS.LAST) + .SNAME); + RENT.RATTRS(RENT.RATTRS.LAST).NDATA_TYPE := RVIEW_FIELD.DATA_TYPE; + end loop; + end if; + /* Если сущность это таблица */ + if (STYPE = SENT_TYPE_TABLE) then + P_EXCEPTION(0, + 'Поддержка сущностей типа "Таблица" ещё не реализована.'); + end if; + /* Вернем полученное */ + return RENT; + end TENT_MAKE; + + /* Сериализация сущности */ + procedure TENT_TO_XML + ( + RENT in TENT -- Сущность + ) + is + begin + /* Открываем описание сущности */ + PKG_XFAST.DOWN_NODE(SNAME => STAG_ENT); + /* Cущность */ + PKG_XFAST.ATTR(SNAME => SATTR_ID, SVALUE => RENT.SID); + PKG_XFAST.ATTR(SNAME => SATTR_NAME, SVALUE => RENT.SNAME); + PKG_XFAST.ATTR(SNAME => SATTR_TITLE, SVALUE => RENT.STITLE); + PKG_XFAST.ATTR(SNAME => SATTR_TYPE, SVALUE => RENT.STYPE); + PKG_XFAST.ATTR(SNAME => SATTR_X, NVALUE => RENT.NX); + PKG_XFAST.ATTR(SNAME => SATTR_Y, NVALUE => RENT.NY); + /* Атрибуты */ + TATTRS_TO_XML(RATTRS => RENT.RATTRS); + /* Закрываем описание сущности */ + PKG_XFAST.UP(); + end TENT_TO_XML; + + /* Десериализация сущности */ + function TENT_FROM_XML + ( + CXML in clob -- XML-описание сущности + ) return TENT -- Сущность + is + RRES TENT; -- Буфер для результата + XDOC PKG_XPATH.TDOCUMENT; -- Документ XML + XROOT PKG_XPATH.TNODE; -- Корень документа XML + XNODE PKG_XPATH.TNODE; -- Буфер узла документа + begin + /* Инициализируем сущность */ + RRES.RATTRS := TATTRS(); + /* Если данные есть */ + if (CXML is not null) then + begin + /* Разбираем XML */ + XDOC := PKG_XPATH.PARSE_FROM_CLOB(LCXML => CXML); + /* Считываем корневой узел */ + XROOT := PKG_XPATH.ROOT_NODE(RDOCUMENT => XDOC); + /* Считаваем узел сущности */ + XNODE := PKG_XPATH.SINGLE_NODE(RPARENT_NODE => XROOT, SPATTERN => '/' || STAG_ENT); + /* Получаем значения */ + RRES.SID := PKG_XPATH.ATTRIBUTE(RNODE => XNODE, SNAME => SATTR_ID); + RRES.SNAME := PKG_XPATH.ATTRIBUTE(RNODE => XNODE, SNAME => SATTR_NAME); + RRES.STITLE := PKG_XPATH.ATTRIBUTE(RNODE => XNODE, SNAME => SATTR_TITLE); + RRES.STYPE := PKG_XPATH.ATTRIBUTE(RNODE => XNODE, SNAME => SATTR_TYPE); + RRES.NX := PKG_XPATH.ATTRIBUTE_NUM(RNODE => XNODE, SNAME => SATTR_X); + RRES.NY := PKG_XPATH.ATTRIBUTE_NUM(RNODE => XNODE, SNAME => SATTR_Y); + RRES.RATTRS := TATTRS_FROM_XML(CXML => PKG_XPATH.SERIALIZE_TO_CLOB(RNODE => PKG_XPATH.SINGLE_NODE(RPARENT_NODE => XNODE, + SPATTERN => STAG_ATTRS))); + /* Освободим документ */ + PKG_XPATH.FREE(RDOCUMENT => XDOC); + exception + when others then + /* Освободим документ */ + PKG_XPATH.FREE(RDOCUMENT => XDOC); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end; + end if; + /* Вернём результат */ + return RRES; + end TENT_FROM_XML; + + /* Поиск индекса сущности по идентификатору */ + function TENTS_INDEX_BY_ID + ( + RENTS in TENTS, -- Коллекция сущностей + SID in varchar2 -- Искомый идентификатор + ) return number -- Индекс найденной сущности (null - если не найдено) + is + begin + /* Обходим коллекцию */ + if ((RENTS is not null) and (RENTS.COUNT > 0)) then + for I in RENTS.FIRST .. RENTS.LAST + loop + begin + /* Возвращаем найденный индекс */ + if (RENTS(I).SID = SID) then + return I; + end if; + exception + when NO_DATA_FOUND then + null; + end; + end loop; + end if; + /* Ничего не нашли */ + return null; + end TENTS_INDEX_BY_ID; + + /* Поиск номера сущности в коллекции */ + function TENTS_NEXT_NUMB + ( + RENTS in TENTS, -- Коллекция сущностей + SNAME in varchar2 -- Имя + ) return number -- Номер сущности в коллекции + is + NNUMB PKG_STD.TNUMBER := 0; -- Буфер для результата + begin + /* Подбираем первый свободный номер */ + while (TENTS_INDEX_BY_ID(RENTS => RENTS, SID => TENT_ID_MAKE(SNAME => SNAME, NNUMB => NNUMB)) is not null) + loop + NNUMB := NNUMB + 1; + end loop; + /* Возвращаем его */ + return NNUMB; + end TENTS_NEXT_NUMB; + + /* Добавление сущности в коллекцию */ + procedure TENTS_APPEND + ( + RENTS in out nocopy TENTS, -- Изменяемая коллекция + SNAME in varchar2, -- Имя + STYPE in varchar2 -- Тип (см. константы SENT_TYPE_*) + ) + is + RENT TENT; -- Добавляемая сущность + begin + /* Инициализируем коллекцию если необходимо */ + if (RENTS is null) then + RENTS := TENTS(); + end if; + /* Формируем пописание сущности */ + RENT := TENT_MAKE(SNAME => SNAME, STYPE => STYPE, NNUMB => TENTS_NEXT_NUMB(RENTS => RENTS, SNAME => SNAME)); + /* Добавляем её в коллекцию */ + RENTS.EXTEND(); + RENTS(RENTS.LAST) := RENT; + end TENTS_APPEND; + + /* Удаление сущности из коллекции */ + procedure TENTS_REMOVE + ( + RENTS in out nocopy TENTS, -- Изменяемая коллекция + SID in varchar2 -- Идентификатор удялемой сущности + ) + is + NIND PKG_STD.TNUMBER; -- Индекс сущности в коллекции + begin + NIND := TENTS_INDEX_BY_ID(RENTS => RENTS, SID => SID); + if (NIND is not null) then + RENTS.DELETE(NIND); + end if; + end TENTS_REMOVE; + + /* Установка координат сущности в коллекции */ + procedure TENTS_POSITION_SET + ( + RENTS in out nocopy TENTS, -- Изменяемая коллекция + SID in varchar2, -- Идентификатор сущности + NX in number, -- Координата по оси абсцисс + NY in number -- Координата по оси ординат + ) + is + NIND PKG_STD.TNUMBER; -- Индекс сущности в коллекции + begin + NIND := TENTS_INDEX_BY_ID(RENTS => RENTS, SID => SID); + if (NIND is not null) then + RENTS(NIND).NX := NX; + RENTS(NIND).NY := NY; + end if; + end TENTS_POSITION_SET; + + /* Сериализация коллекции сущностей */ + procedure TENTS_TO_XML + ( + RENTS in TENTS -- Коллекция сущностей + ) + is + begin + /* Открываем описание сущностей */ + PKG_XFAST.DOWN_NODE(SNAME => STAG_ENTS); + /* Обходим сущности из коллекции */ + if ((RENTS is not null) and (RENTS.COUNT > 0)) then + for I in RENTS.FIRST .. RENTS.LAST + loop + begin + /* Добавляем описание сущности */ + TENT_TO_XML(RENT => RENTS(I)); + exception + when NO_DATA_FOUND then + null; + end; + end loop; + end if; + /* Закрываем описание сущностей */ + PKG_XFAST.UP(); + end TENTS_TO_XML; + + /* Десериализация коллекции сущностей */ + function TENTS_FROM_XML + ( + CXML in clob -- XML-описание коллекции сущностей + ) return TENTS -- Коллекция сущностей + is + RRES TENTS; -- Буфер для результата + XDOC PKG_XPATH.TDOCUMENT; -- Документ XML + XROOT PKG_XPATH.TNODE; -- Корень документа XML + XNODE PKG_XPATH.TNODE; -- Буфер узла документа + XNODES PKG_XPATH.TNODES; -- Буфер коллекции узлов документа + begin + /* Инициализируем результат */ + RRES := TENTS(); + /* Если данные есть */ + if (CXML is not null) then + begin + /* Разбираем XML */ + XDOC := PKG_XPATH.PARSE_FROM_CLOB(LCXML => CXML); + /* Считываем корневой узел */ + XROOT := PKG_XPATH.ROOT_NODE(RDOCUMENT => XDOC); + /* Считывание списка сущностей */ + XNODES := PKG_XPATH.LIST_NODES(RPARENT_NODE => XROOT, SPATTERN => '/' || STAG_ENTS || '/' || STAG_ENT); + /* Цикл по списку сущностей */ + for I in 1 .. PKG_XPATH.COUNT_NODES(RNODES => XNODES) + loop + /* Считаем элемент по его номеру */ + XNODE := PKG_XPATH.ITEM_NODE(RNODES => XNODES, INUMBER => I); + /* Сериализуем и добавим его в коллекцию */ + RRES.EXTEND(); + RRES(RRES.LAST) := TENT_FROM_XML(CXML => PKG_XPATH.SERIALIZE_TO_CLOB(RNODE => XNODE)); + end loop; + /* Освободим документ */ + PKG_XPATH.FREE(RDOCUMENT => XDOC); + exception + when others then + /* Освободим документ */ + PKG_XPATH.FREE(RDOCUMENT => XDOC); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end; + end if; + /* Вернём результат */ + return RRES; + end TENTS_FROM_XML; + + /* Формирование идентификатора связи */ + function TRL_ID_MAKE + ( + SSOURCE in varchar2, -- Источник + STARGET in varchar2 -- Приёмник + ) return varchar2 -- Сформированный идентификатор + is + begin + /* Проверим параметры */ + if (SSOURCE is null) then + P_EXCEPTION(0, 'Не указан источник связи.'); + end if; + if (STARGET is null) then + P_EXCEPTION(0, 'Не указан приёмник связи.'); + end if; + /* Соберем идентификатор */ + return SSOURCE || '-' || STARGET; + end TRL_ID_MAKE; + + /* Формирование описания связи */ + function TRL_MAKE + ( + SID in varchar2 := null, -- Идентификатор (null - автоформирование) + SSOURCE in varchar2, -- Источник + STARGET in varchar2 -- Приёмник + ) return TRL -- Описание связи + is + RRL TRL; -- Буфер для результата + begin + /* Собираем описание связи */ + RRL.SID := COALESCE(SID, TRL_ID_MAKE(SSOURCE => SSOURCE, STARGET => STARGET)); + RRL.SSOURCE := SSOURCE; + RRL.STARGET := STARGET; + /* Вернем полученное */ + return RRL; + end TRL_MAKE; + + /* Сериализация связи */ + procedure TRL_TO_XML + ( + RRL in TRL -- Связь + ) + is + begin + /* Открываем описание связи */ + PKG_XFAST.DOWN_NODE(SNAME => STAG_RL); + /* Связь */ + PKG_XFAST.ATTR(SNAME => SATTR_ID, SVALUE => RRL.SID); + PKG_XFAST.ATTR(SNAME => SATTR_SOURCE, SVALUE => RRL.SSOURCE); + PKG_XFAST.ATTR(SNAME => SATTR_TARGET, SVALUE => RRL.STARGET); + /* Закрываем описание связи */ + PKG_XFAST.UP(); + end TRL_TO_XML; + + /* Десериализация связи */ + function TRL_FROM_XML + ( + CXML in clob -- XML-описание связи + ) return TRL -- Связь + is + RRES TRL; -- Буфер для результата + XDOC PKG_XPATH.TDOCUMENT; -- Документ XML + XROOT PKG_XPATH.TNODE; -- Корень документа XML + XNODE PKG_XPATH.TNODE; -- Буфер узла документа + begin + /* Если данные есть */ + if (CXML is not null) then + begin + /* Разбираем XML */ + XDOC := PKG_XPATH.PARSE_FROM_CLOB(LCXML => CXML); + /* Считываем корневой узел */ + XROOT := PKG_XPATH.ROOT_NODE(RDOCUMENT => XDOC); + /* Считаваем узел связи */ + XNODE := PKG_XPATH.SINGLE_NODE(RPARENT_NODE => XROOT, SPATTERN => '/' || STAG_RL); + /* Получаем значения */ + RRES.SID := PKG_XPATH.ATTRIBUTE(RNODE => XNODE, SNAME => SATTR_ID); + RRES.SSOURCE := PKG_XPATH.ATTRIBUTE(RNODE => XNODE, SNAME => SATTR_SOURCE); + RRES.STARGET := PKG_XPATH.ATTRIBUTE(RNODE => XNODE, SNAME => SATTR_TARGET); + /* Освободим документ */ + PKG_XPATH.FREE(RDOCUMENT => XDOC); + exception + when others then + /* Освободим документ */ + PKG_XPATH.FREE(RDOCUMENT => XDOC); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end; + end if; + /* Вернём результат */ + return RRES; + end TRL_FROM_XML; + + /* Поиск индекса связи по идентификатору */ + function TRLS_INDEX_BY_ID + ( + RRLS in TRLS, -- Коллекция связей + SID in varchar2 -- Искомый идентификатор + ) return number -- Индекс найденной связи (null - если не найдено) + is + begin + /* Обходим коллекцию */ + if ((RRLS is not null) and (RRLS.COUNT > 0)) then + for I in RRLS.FIRST .. RRLS.LAST + loop + begin + /* Возвращаем найденный индекс */ + if (RRLS(I).SID = SID) then + return I; + end if; + exception + when NO_DATA_FOUND then + null; + end; + end loop; + end if; + /* Ничего не нашли */ + return null; + end TRLS_INDEX_BY_ID; + + /* Формирование коллекции связей по источнику/приёмнику */ + function TRLS_LIST_BY_ST + ( + RRLS in TRLS, -- Коллекция связей + SSOURCE_TARGET in varchar2, -- Идентификатор источника/приёмкника + NLIST_TYPE in number -- Тип формирования коллекции (0 - по источнику, 1 - по приёмнику + ) return TRLS -- Сформированная коллекция + is + RRES TRLS; -- Буфер для результата + begin + /* Инициализируем результат */ + RRES := TRLS(); + /* Обходим входную коллекцию */ + if ((RRLS is not null) and (RRLS.COUNT > 0)) then + for I in RRLS.FIRST .. RRLS.LAST + loop + begin + /* Формируем выходную коллекцию */ + if (((NLIST_TYPE = 0) and (RRLS(I).SSOURCE = SSOURCE_TARGET)) or + ((NLIST_TYPE = 1) and (RRLS(I).STARGET = SSOURCE_TARGET))) then + RRES.EXTEND(); + RRES(RRES.LAST) := TRL_MAKE(SID => RRLS(I).SID, SSOURCE => RRLS(I).SSOURCE, STARGET => RRLS(I).STARGET); + end if; + exception + when NO_DATA_FOUND then + null; + end; + end loop; + end if; + /* Вернем результат */ + return RRES; + end TRLS_LIST_BY_ST; + + /* Добавление связи в коллекцию */ + procedure TRLS_APPEND + ( + RRLS in out nocopy TRLS, -- Изменяемая коллекция + SSOURCE in varchar2, -- Источник + STARGET in varchar2 -- Приёмник + ) + is + RRL TRL; -- Добавляемая связь + begin + /* Инициализируем коллекцию если необходимо */ + if (RRLS is null) then + RRLS := TRLS(); + end if; + /* Формируем пописание связи */ + RRL := TRL_MAKE(SSOURCE => SSOURCE, STARGET => STARGET); + /* Добавляем её в коллекцию */ + RRLS.EXTEND(); + RRLS(RRLS.LAST) := RRL; + end TRLS_APPEND; + + /* Удаление связи из коллекции */ + procedure TRLS_REMOVE + ( + RRLS in out nocopy TRLS, -- Изменяемая коллекция + SID in varchar2 -- Идентификатор удялемой связи + ) + is + NIND PKG_STD.TNUMBER; -- Индекс связи в коллекции + begin + NIND := TRLS_INDEX_BY_ID(RRLS => RRLS, SID => SID); + if (NIND is not null) then + RRLS.DELETE(NIND); + end if; + end TRLS_REMOVE; + + /* Сериализация коллекции связей */ + procedure TRLS_TO_XML + ( + RRLS in TRLS -- Коллекция связей + ) + is + begin + /* Открываем описание связей */ + PKG_XFAST.DOWN_NODE(SNAME => STAG_RLS); + /* Обходим связи из коллекции */ + if ((RRLS is not null) and (RRLS.COUNT > 0)) then + for I in RRLS.FIRST .. RRLS.LAST + loop + begin + /* Добавляем описание связи */ + TRL_TO_XML(RRL => RRLS(I)); + exception + when NO_DATA_FOUND then + null; + end; + end loop; + end if; + /* Закрываем описание связей */ + PKG_XFAST.UP(); + end TRLS_TO_XML; + + /* Десериализация коллекции связей */ + function TRLS_FROM_XML + ( + CXML in clob -- XML-описание коллекции связей + ) return TRLS -- Коллекция связей + is + RRES TRLS; -- Буфер для результата + XDOC PKG_XPATH.TDOCUMENT; -- Документ XML + XROOT PKG_XPATH.TNODE; -- Корень документа XML + XNODE PKG_XPATH.TNODE; -- Буфер узла документа + XNODES PKG_XPATH.TNODES; -- Буфер коллекции узлов документа + begin + /* Инициализируем результат */ + RRES := TRLS(); + /* Если данные есть */ + if (CXML is not null) then + begin + /* Разбираем XML */ + XDOC := PKG_XPATH.PARSE_FROM_CLOB(LCXML => CXML); + /* Считываем корневой узел */ + XROOT := PKG_XPATH.ROOT_NODE(RDOCUMENT => XDOC); + /* Считывание списка связей */ + XNODES := PKG_XPATH.LIST_NODES(RPARENT_NODE => XROOT, SPATTERN => '/' || STAG_RLS || '/' || STAG_RL); + /* Цикл по списку связей */ + for I in 1 .. PKG_XPATH.COUNT_NODES(RNODES => XNODES) + loop + /* Считаем элемент по его номеру */ + XNODE := PKG_XPATH.ITEM_NODE(RNODES => XNODES, INUMBER => I); + /* Сериализуем и добавим его в коллекцию */ + RRES.EXTEND(); + RRES(RRES.LAST) := TRL_FROM_XML(CXML => PKG_XPATH.SERIALIZE_TO_CLOB(RNODE => XNODE)); + end loop; + /* Освободим документ */ + PKG_XPATH.FREE(RDOCUMENT => XDOC); + exception + when others then + /* Освободим документ */ + PKG_XPATH.FREE(RDOCUMENT => XDOC); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end; + end if; + /* Вернём результат */ + return RRES; + end TRLS_FROM_XML; + + /* Считывание записи запроса */ + function QUERY_GET + ( + NRN in number -- Рег. номер запроса + ) return P8PNL_QE_QUERY%rowtype -- Запись запроса + is + RRES P8PNL_QE_QUERY%rowtype; -- Буфер для результата + begin + select T.* into RRES from P8PNL_QE_QUERY T where T.RN = NRN; + return RRES; + exception + when NO_DATA_FOUND then + PKG_MSG.RECORD_NOT_FOUND(NFLAG_SMART => 0, NDOCUMENT => NRN, SUNIT_TABLE => 'P8PNL_QE_QUERY'); + end QUERY_GET; + + /* Получение признака возможности изменения запроса */ + function QUERY_ACCESS_SIGN_MODIFY + ( + NRN in number, -- Рег. номер запроса + SUSER in varchar2 -- Имя пользователя + ) return number -- Признак возможности изменения запроса (0 - нет, 1 - да) + is + RQ P8PNL_QE_QUERY%rowtype; -- Проверяемая запись запроса + begin + /* Читаем запрос */ + RQ := QUERY_GET(NRN => NRN); + /* Менять можно только свой запрос */ + if (RQ.AUTHOR = SUSER) then + return 1; + end if; + /* Проверки не пройдены - менять нельзя */ + return 0; + end QUERY_ACCESS_SIGN_MODIFY; + + /* Проверка возможности изменения запроса */ + procedure QUERY_ACCESS_MODIFY + ( + NRN in number, -- Рег. номер запроса + SUSER in varchar2 -- Имя пользователя + ) + is + begin + /* Получим признак возможности измнения */ + if (QUERY_ACCESS_SIGN_MODIFY(NRN => NRN, SUSER => SUSER) = 0) then + /* Менять нельзя */ + P_EXCEPTION(0, 'У Вас нет прав доступа для измнения запроса.'); + end if; + end QUERY_ACCESS_MODIFY; + + /* Получение признака возможности просмотра запроса */ + function QUERY_ACCESS_SIGN_VIEW + ( + NRN in number, -- Рег. номер запроса + SUSER in varchar2 -- Имя пользователя + ) return number -- Признак возможности просмотра запроса (0 - нет, 1 - да) + is + RQ P8PNL_QE_QUERY%rowtype; -- Проверяемая запись запроса + begin + /* Читаем запрос */ + RQ := QUERY_GET(NRN => NRN); + /* Смотреть можно только свой или публичный запрос */ + if ((RQ.PBL = 1) or (RQ.AUTHOR = SUSER)) then + return 1; + end if; + /* Проверки не пройдены - нельзя смотреть */ + return 0; + end QUERY_ACCESS_SIGN_VIEW; + + /* Проверка возможности просмотра запроса */ + procedure QUERY_ACCESS_VIEW + ( + NRN in number, -- Рег. номер запроса + SUSER in varchar2 -- Имя пользователя + ) + is + begin + /* Получим признак возможности просмотра */ + if (QUERY_ACCESS_SIGN_VIEW(NRN => NRN, SUSER => SUSER) = 0) then + /* Смотреть нельзя */ + P_EXCEPTION(0, 'У Вас нет прав доступа для просмотра запроса.'); + end if; + end QUERY_ACCESS_VIEW; + + /* Проверка атрибутов запроса */ + procedure QUERY_CHECK + ( + SCODE in varchar2, -- Мнемокод + SNAME in varchar2 -- Наименование + ) + is + begin + /* Мнемокод должен быть задан */ + if (SCODE is null) then + P_EXCEPTION(0, 'Не задан мнемокод запроса.'); + end if; + /* Наименование должно быть задано */ + if (SNAME is null) then + P_EXCEPTION(0, 'Не задано наименование запроса.'); + end if; + end QUERY_CHECK; + + /* Синхронизация даты изменения запроса с текущим временем */ + procedure QUERY_CH_DATE_SYNC + ( + NRN in number -- Рег. номер запроса + ) + is + begin + /* Установим текущую дату изменения */ + update P8PNL_QE_QUERY T set T.CH_DATE = sysdate where T.RN = NRN; + /* Контроль изменения данных */ + if (sql%notfound) then + PKG_MSG.RECORD_NOT_FOUND(NDOCUMENT => NRN, SUNIT_TABLE => 'P8PNL_QE_QUERY'); + end if; + end QUERY_CH_DATE_SYNC; + + /* Добавление запроса */ + procedure QUERY_INSERT + ( + SCODE in varchar2, -- Мнемокод + SNAME in varchar2, -- Наименование + NRN out number -- Рег. номер добавленного запроса + ) + is + begin + /* Проверим параметры */ + QUERY_CHECK(SCODE => SCODE, SNAME => SNAME); + /* Формируем рег. номер */ + NRN := GEN_ID(); + /* Добавляем данные */ + insert into P8PNL_QE_QUERY + (RN, CODE, name, AUTHOR, CH_DATE, READY, PBL) + values + (NRN, SCODE, SNAME, UTILIZER(), sysdate, 0, 0); + end QUERY_INSERT; + + /* Исправление запроса */ + procedure QUERY_UPDATE + ( + NRN in number, -- Рег. номер запроса + SCODE in varchar2, -- Мнемокод + SNAME in varchar2 -- Наименование + ) + is + begin + /* Проверим параметры */ + QUERY_CHECK(SCODE => SCODE, SNAME => SNAME); + /* Изменяем данные */ + update P8PNL_QE_QUERY T + set T.CODE = SCODE, + T.NAME = SNAME + where T.RN = NRN; + /* Контроль изменения данных */ + if (sql%notfound) then + PKG_MSG.RECORD_NOT_FOUND(NDOCUMENT => NRN, SUNIT_TABLE => 'P8PNL_QE_QUERY'); + end if; + /* Обновим дату изменения запроса */ + QUERY_CH_DATE_SYNC(NRN => NRN); + end QUERY_UPDATE; + + /* Удаление запроса */ + procedure QUERY_DELETE + ( + NRN in number -- Рег. номер запроса + ) + is + begin + /* Удаляем запись */ + delete from P8PNL_QE_QUERY T where T.RN = NRN; + /* Контроль изменения данных */ + if (sql%notfound) then + PKG_MSG.RECORD_NOT_FOUND(NDOCUMENT => NRN, SUNIT_TABLE => 'P8PNL_QE_QUERY'); + end if; + end QUERY_DELETE; + + /* Сериализация сущностей запроса */ + function QUERY_ENTS_TO_XML + ( + RENTS in TENTS -- Коллекция сущностей + ) return clob -- XML-описание + is + CRES clob; -- Буфер для результата + begin + /* Если сущности есть */ + if ((RENTS is not null) and (RENTS.COUNT > 0)) then + /* Начинаем формирование XML */ + PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); + /* Добавляем сущности */ + TENTS_TO_XML(RENTS => RENTS); + /* Сериализуем */ + CRES := PKG_XFAST.SERIALIZE_TO_CLOB(); + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + else + CRES := null; + end if; + /* Возвращаем полученное */ + return CRES; + exception + when others then + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end QUERY_ENTS_TO_XML; + + /* Десериализация сущностей запроса */ + function QUERY_ENTS_FROM_XML + ( + CXML in clob -- XML-описание коллекции сущностей запроса + ) return TENTS -- Коллекция сущностей + is + RENTS TENTS; -- Буфер для результата + XDOC PKG_XPATH.TDOCUMENT; -- Документ XML + XROOT PKG_XPATH.TNODE; -- Корень документа XML + XNODE PKG_XPATH.TNODE; -- Буфер узла документа + begin + /* Инициализируем результат */ + RENTS := TENTS(); + /* Если данные есть */ + if (CXML is not null) then + begin + /* Разбираем XML */ + XDOC := PKG_XPATH.PARSE_FROM_CLOB(LCXML => CXML); + /* Считываем корневой узел */ + XROOT := PKG_XPATH.ROOT_NODE(RDOCUMENT => XDOC); + /* Считываем узел сущностей */ + XNODE := PKG_XPATH.SINGLE_NODE(RPARENT_NODE => XROOT, SPATTERN => '/' || STAG_ENTS); + /* Десериализуем его */ + RENTS := TENTS_FROM_XML(CXML => PKG_XPATH.SERIALIZE_TO_CLOB(RNODE => XNODE)); + /* Освободим документ */ + PKG_XPATH.FREE(RDOCUMENT => XDOC); + exception + when others then + /* Освободим документ */ + PKG_XPATH.FREE(RDOCUMENT => XDOC); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end; + end if; + /* Вернём сформированное */ + return RENTS; + end QUERY_ENTS_FROM_XML; + + /* Сериализация связей запроса */ + function QUERY_RLS_TO_XML + ( + RRLS in TRLS -- Коллекция связей + ) return clob -- XML-описание + is + CRES clob; -- Буфер для результата + begin + /* Если связи есть */ + if ((RRLS is not null) and (RRLS.COUNT > 0)) then + /* Начинаем формирование XML */ + PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); + /* Добавляем связи */ + TRLS_TO_XML(RRLS => RRLS); + /* Сериализуем */ + CRES := PKG_XFAST.SERIALIZE_TO_CLOB(); + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + else + CRES := null; + end if; + /* Возвращаем полученное */ + return CRES; + exception + when others then + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end QUERY_RLS_TO_XML; + + /* Десериализация связей запроса */ + function QUERY_RLS_FROM_XML + ( + CXML in clob -- XML-описание коллекции связей запроса + ) return TRLS -- Коллекция связей + is + RRLS TRLS; -- Буфер для результата + XDOC PKG_XPATH.TDOCUMENT; -- Документ XML + XROOT PKG_XPATH.TNODE; -- Корень документа XML + XNODE PKG_XPATH.TNODE; -- Буфер узла документа + begin + /* Инициализируем результат */ + RRLS := TRLS(); + /* Если данные есть */ + if (CXML is not null) then + begin + /* Разбираем XML */ + XDOC := PKG_XPATH.PARSE_FROM_CLOB(LCXML => CXML); + /* Считываем корневой узел */ + XROOT := PKG_XPATH.ROOT_NODE(RDOCUMENT => XDOC); + /* Считываем узел связей */ + XNODE := PKG_XPATH.SINGLE_NODE(RPARENT_NODE => XROOT, SPATTERN => '/' || STAG_RLS); + /* Десериализуем его */ + RRLS := TRLS_FROM_XML(CXML => PKG_XPATH.SERIALIZE_TO_CLOB(RNODE => XNODE)); + /* Освободим документ */ + PKG_XPATH.FREE(RDOCUMENT => XDOC); + exception + when others then + /* Освободим документ */ + PKG_XPATH.FREE(RDOCUMENT => XDOC); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end; + end if; + /* Вернём сформированное */ + return RRLS; + end QUERY_RLS_FROM_XML; + + /* Сериализация запроса */ + function QUERY_TO_XML + ( + NRN in number -- Рег. номер запроса + ) return clob -- XML-описание + is + RQ P8PNL_QE_QUERY%rowtype; -- Запись запроса + CRES clob; -- Буфер для сериализации + begin + /* Читаем запрос */ + RQ := QUERY_GET(NRN => NRN); + /* Начинаем формирование XML */ + PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_, BALINE => true, BINDENT => true); + /* Открываем корень */ + PKG_XFAST.DOWN_NODE(SNAME => STAG_DATA); + /* Параметры */ + if (RQ.OPTS is not null) then + null; + end if; + /* Сущности (можно использовать просто PKG_XFAST.VALUE_XML и сразу отдать готовый XML из RQ.ENTS, но это приводит к формированию некорректного документа с лишней ">" между группами) */ + if (RQ.ENTS is not null) then + TENTS_TO_XML(RENTS => QUERY_ENTS_FROM_XML(CXML => RQ.ENTS)); + end if; + /* Связи (можно использовать просто PKG_XFAST.VALUE_XML и сразу отдать готовый XML из RQ.RLS, но это приводит к формированию некорректного документа с лишней ">" между группами) */ + if (RQ.RLS is not null) then + TRLS_TO_XML(RRLS => QUERY_RLS_FROM_XML(CXML => RQ.RLS)); + end if; + /* Закрываем корень */ + PKG_XFAST.UP(); + /* Сериализуем */ + CRES := PKG_XFAST.SERIALIZE_TO_CLOB(); + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + /* Возвращаем результат */ + return CRES; + exception + when others then + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end QUERY_TO_XML; + + /* Формирование списка запросов */ + function QUERY_LIST_GET + ( + SUSER in varchar2 -- Имя пользователя + ) return clob -- Список запросов + is + CRES clob; -- Буфер для сериализации + begin + /* Начинаем формирование XML */ + PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_, BALINE => true, BINDENT => true); + /* Открываем корень */ + PKG_XFAST.DOWN_NODE(SNAME => STAG_DATA); + /* Открываем список запросов */ + PKG_XFAST.DOWN_NODE(SNAME => STAG_QUERIES); + /* Обходим запросы - данного пользователя и публичные */ + for C in (select T.RN NRN, + T.CODE SCODE, + T.NAME SNAME, + UL.NAME SAUTHOR, + TO_CHAR(T.CH_DATE, 'dd.mm.yyyy hh24:mi:ss') SCH_DATE, + T.READY NREADY, + T.PBL NPBL, + QUERY_ACCESS_SIGN_MODIFY(T.RN, SUSER) NMODIFY + from P8PNL_QE_QUERY T, + USERLIST UL + where T.AUTHOR = UL.AUTHID + and QUERY_ACCESS_SIGN_VIEW(T.RN, SUSER) = 1 + order by T.CODE) + loop + /* Открываем описание запроса */ + PKG_XFAST.DOWN_NODE(SNAME => STAG_QUERY); + /* Запрос */ + PKG_XFAST.ATTR(SNAME => SATTR_RN, NVALUE => C.NRN); + PKG_XFAST.ATTR(SNAME => SATTR_CODE, SVALUE => C.SCODE); + PKG_XFAST.ATTR(SNAME => SATTR_NAME, SVALUE => C.SNAME); + PKG_XFAST.ATTR(SNAME => SATTR_AUTHOR, SVALUE => C.SAUTHOR); + PKG_XFAST.ATTR(SNAME => SATTR_CH_DATE, SVALUE => C.SCH_DATE); + PKG_XFAST.ATTR(SNAME => SATTR_READY, NVALUE => C.NREADY); + PKG_XFAST.ATTR(SNAME => SATTR_PBL, NVALUE => C.NPBL); + PKG_XFAST.ATTR(SNAME => SATTR_MODIFY, NVALUE => C.NMODIFY); + /* Закрываем описание запроса */ + PKG_XFAST.UP(); + end loop; + /* Закрываем список запросов */ + PKG_XFAST.UP(); + /* Закрываем корень */ + PKG_XFAST.UP(); + /* Сериализуем */ + CRES := PKG_XFAST.SERIALIZE_TO_CLOB(); + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + /* Возвращаем результат */ + return CRES; + exception + when others then + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end QUERY_LIST_GET; + + /* Получение описания запроса */ + function QUERY_DESC_GET + ( + NRN in number -- Рег. номер запроса + ) return clob -- XML-описание + is + begin + /* Сериализуем запрос */ + return QUERY_TO_XML(NRN => NRN); + end QUERY_DESC_GET; + + /* Чтение сущностей запроса */ + function QUERY_ENTS_GET + ( + CENTS in clob -- Сериализованное описание сущностей + ) return TENTS -- Коллекция сущностей + is + begin + /* Десериализуем */ + return QUERY_ENTS_FROM_XML(CXML => CENTS); + end QUERY_ENTS_GET; + + /* Запись сущностей запроса */ + procedure QUERY_ENTS_SET + ( + NRN in number, -- Рег. номер запроса + RENTS in TENTS -- Коллекция сущностей + ) + is + CENTS clob; -- Буфер для сериализации + begin + /* Сериализуем полученную коллекцию сущностей */ + CENTS := QUERY_ENTS_TO_XML(RENTS => RENTS); + /* Сохраним её */ + update P8PNL_QE_QUERY T set T.ENTS = CENTS where T.RN = NRN; + /* Контроль изменения данных */ + if (sql%notfound) then + PKG_MSG.RECORD_NOT_FOUND(NDOCUMENT => NRN, SUNIT_TABLE => 'P8PNL_QE_QUERY'); + end if; + /* Обновим дату изменения запроса */ + QUERY_CH_DATE_SYNC(NRN => NRN); + end QUERY_ENTS_SET; + + /* Чтение связей запроса */ + function QUERY_RLS_GET + ( + CRLS in clob -- Сериализованное описание связей + ) return TRLS -- Коллекция связей + is + begin + /* Десериализуем */ + return QUERY_RLS_FROM_XML(CXML => CRLS); + end QUERY_RLS_GET; + + /* Запись связей запроса */ + procedure QUERY_RLS_SET + ( + NRN in number, -- Рег. номер запроса + RRLS in TRLS -- Коллекция связей + ) + is + CRLS clob; -- Буфер для сериализации + begin + /* Сериализуем полученную коллекцию связей */ + CRLS := QUERY_RLS_TO_XML(RRLS => RRLS); + /* Сохраним её */ + update P8PNL_QE_QUERY T set T.RLS = CRLS where T.RN = NRN; + /* Контроль изменения данных */ + if (sql%notfound) then + PKG_MSG.RECORD_NOT_FOUND(NDOCUMENT => NRN, SUNIT_TABLE => 'P8PNL_QE_QUERY'); + end if; + /* Обновим дату изменения запроса */ + QUERY_CH_DATE_SYNC(NRN => NRN); + end QUERY_RLS_SET; + + /* Установка признака "готовности" запроса */ + procedure QUERY_READY_SET + ( + NRN in number, -- Рег. номер запроса + NREADY in number -- Флаг готовности к использованию (0 - нет, 1 - да) + ) + is + begin + /* Проверим параметры */ + if (NREADY is null) then + P_EXCEPTION(0, + 'Не задано значение признака готовности запроса к использованию.'); + end if; + if (NREADY not in (0, 1)) then + P_EXCEPTION(0, + 'Значение признака готовности запроса к использованию задано некорректно (ожидалось 0 или 1).'); + end if; + /* Установим флаг готовности к использованию */ + update P8PNL_QE_QUERY T set T.READY = NREADY where T.RN = NRN; + /* Контроль изменения данных */ + if (sql%notfound) then + PKG_MSG.RECORD_NOT_FOUND(NDOCUMENT => NRN, SUNIT_TABLE => 'P8PNL_QE_QUERY'); + end if; + /* Обновим дату изменения запроса */ + QUERY_CH_DATE_SYNC(NRN => NRN); + end QUERY_READY_SET; + + /* Установка признака "публичности" запроса */ + procedure QUERY_PBL_SET + ( + NRN in number, -- Рег. номер запроса + NPBL in number -- Флаг публичности (0 - приватный, 1 - публичный) + ) + is + begin + /* Проверим параметры */ + if (NPBL is null) then + P_EXCEPTION(0, 'Не задано значение признака публичности запроса.'); + end if; + if (NPBL not in (0, 1)) then + P_EXCEPTION(0, + 'Значение признака публичноти запроса задано некорректно (ожидалось 0 или 1).'); + end if; + /* Установим флаг публичности */ + update P8PNL_QE_QUERY T set T.PBL = NPBL where T.RN = NRN; + /* Контроль изменения данных */ + if (sql%notfound) then + PKG_MSG.RECORD_NOT_FOUND(NDOCUMENT => NRN, SUNIT_TABLE => 'P8PNL_QE_QUERY'); + end if; + /* Обновим дату изменения запроса */ + QUERY_CH_DATE_SYNC(NRN => NRN); + end QUERY_PBL_SET; + +end PKG_P8PANELS_QE_BASE; +/ diff --git a/db/grants.sql b/db/grants.sql index c12f082..34d7065 100644 --- a/db/grants.sql +++ b/db/grants.sql @@ -2,4 +2,6 @@ grant execute on PKG_P8PANELS to public; grant execute on PKG_P8PANELS_PROJECTS to public; grant execute on PKG_P8PANELS_SAMPLES to public; grant execute on PKG_P8PANELS_EQUIPSRV to public; -grant execute on PKG_P8PANELS_RRPCONFED to public; \ No newline at end of file +grant execute on PKG_P8PANELS_RRPCONFED to public; +grant execute on PKG_P8PANELS_PE to public; +grant execute on PKG_P8PANELS_QE to public; diff --git a/dist/p8-panels.js b/dist/p8-panels.js index 4ea7e30..9ad10d9 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -38,7 +38,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BUTTONS: () => (/* binding */ BUTTONS),\n/* harmony export */ CAPTIONS: () => (/* binding */ CAPTIONS),\n/* harmony export */ ERRORS: () => (/* binding */ ERRORS),\n/* harmony export */ ERRORS_HTTP: () => (/* binding */ ERRORS_HTTP),\n/* harmony export */ STATE: () => (/* binding */ STATE),\n/* harmony export */ TEXTS: () => (/* binding */ TEXTS),\n/* harmony export */ TITLES: () => (/* binding */ TITLES)\n/* harmony export */ });\n/*\r\n Парус 8 - Панели мониторинга\r\n Текстовые ресурсы и константы\r\n*/\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Заголовки\nconst TITLES = {\n INFO: \"Информация\",\n //Информационный блок\n WARN: \"Предупреждение\",\n //Блок предупреждения\n ERR: \"Ошибка\",\n //Информация об ошибке\n DEFAULT_PANELS_GROUP: \"Без привязки к группе\" //Заголовок группы панелей по умолчанию\n};\n\n//Текст\nconst TEXTS = {\n LOADING: \"Ожидайте...\",\n //Ожидание завершения процесса\n NO_DATA_FOUND: \"Данных не найдено\",\n //Отсутствие данных\n NO_DATA_FOUND_SHORT: \"Н.Д.\" //Отсутствие данных (кратко)\n};\n\n//Текст кнопок\nconst BUTTONS = {\n NAVIGATE_HOME: \"Домой\",\n //Переход к домашней странице\n NAVIGATE_BACK: \"Назад\",\n //Возврат назад по навигации\n NAVIGATE: \"Перейти\",\n //Переход к разделу/панели/адресу\n OK: \"ОК\",\n //Ок\n CANCEL: \"Отмена\",\n //Отмена\n CLOSE: \"Закрыть\",\n //Сокрытие\n DETAIL: \"Подробнее\",\n //Отображение подробностей/детализации\n HIDE: \"Скрыть\",\n //Скрытие информации\n CLEAR: \"Очистить\",\n //Очистка\n ORDER_ASC: \"По возрастанию\",\n //Сортировка по возрастанию\n ORDER_DESC: \"По убыванию\",\n //Сортировка по убыванию\n FILTER: \"Фильтр\",\n //Фильтрация\n MORE: \"Ещё\",\n //Догрузка данных\n APPLY: \"Применить\",\n //Сохранение без закрытия интерфейса ввода\n SAVE: \"Сохранить\" //Сохранение\n};\n\n//Метки атрибутов, сопроводительные надписи\nconst CAPTIONS = {\n VALUE: \"Значение\",\n VALUE_FROM: \"С\",\n VALUE_TO: \"По\",\n NUMB: \"Номер\",\n NAME: \"Наименование\",\n START: \"Начало\",\n END: \"Окончание\",\n PROGRESS: \"Прогресс\",\n LEGEND: \"Легенда\"\n};\n\n//Типовые сообщения об ошибках\nconst ERRORS = {\n UNDER_CONSTRUCTION: \"Панель в разработке\",\n P8O_API_UNAVAILABLE: '\"ПАРУС 8 Онлайн\" недоступен',\n P8O_API_UNSUPPORTED: 'Функция \"ПАРУС 8 Онлайн\" не поддерживается',\n DEFAULT: \"Неожиданная ошибка\"\n};\n\n//Типовые сообщения для ошибок HTTP\nconst ERRORS_HTTP = {\n 404: \"Адрес не найден\"\n};\n\n//Типовые статусы\nconst STATE = {\n UNDEFINED: \"UNDEFINED\",\n INFO: \"INFORMATION\",\n OK: \"OK\",\n ERR: \"ERR\",\n WARN: \"WARN\"\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app.text.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BUTTONS: () => (/* binding */ BUTTONS),\n/* harmony export */ CAPTIONS: () => (/* binding */ CAPTIONS),\n/* harmony export */ ERRORS: () => (/* binding */ ERRORS),\n/* harmony export */ ERRORS_HTTP: () => (/* binding */ ERRORS_HTTP),\n/* harmony export */ STATE: () => (/* binding */ STATE),\n/* harmony export */ TEXTS: () => (/* binding */ TEXTS),\n/* harmony export */ TITLES: () => (/* binding */ TITLES)\n/* harmony export */ });\n/*\r\n Парус 8 - Панели мониторинга\r\n Текстовые ресурсы и константы\r\n*/\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Заголовки\nconst TITLES = {\n INFO: \"Информация\",\n //Информационный блок\n WARN: \"Предупреждение\",\n //Блок предупреждения\n ERR: \"Ошибка\",\n //Информация об ошибке\n DEFAULT_PANELS_GROUP: \"Без привязки к группе\",\n //Заголовок группы панелей по умолчанию\n DATA_SOURCE_CONFIG: \"Настройка источника данных\",\n //Заголовок для настройки источника данных\n INSERT: \"Добавление\",\n //Заголовок для диалогов/форм добавления\n UPDATE: \"Исправление\" //Заголовок для диалогов/форм исправления\n};\n\n//Текст\nconst TEXTS = {\n LOADING: \"Ожидайте...\",\n //Ожидание завершения процесса\n NO_DATA_FOUND: \"Данных не найдено\",\n //Отсутствие данных\n NO_DATA_FOUND_SHORT: \"Н.Д.\",\n //Отсутствие данных (кратко)\n NO_SETTINGS: \"Настройки не определены\",\n //Отстутсвие настроек\n UNKNOWN_SOURCE_TYPE: \"Неизвестный тип источника\",\n //Отсуствие типа источника\n UNNAMED_SOURCE: \"Источник без наименования\" //Отсутствие наименования источника\n};\n\n//Текст кнопок\nconst BUTTONS = {\n NAVIGATE_HOME: \"Домой\",\n //Переход к домашней странице\n NAVIGATE_BACK: \"Назад\",\n //Возврат назад по навигации\n NAVIGATE: \"Перейти\",\n //Переход к разделу/панели/адресу\n OK: \"ОК\",\n //Ок\n CANCEL: \"Отмена\",\n //Отмена\n CLOSE: \"Закрыть\",\n //Сокрытие\n DETAIL: \"Подробнее\",\n //Отображение подробностей/детализации\n HIDE: \"Скрыть\",\n //Скрытие информации\n CLEAR: \"Очистить\",\n //Очистка\n ORDER_ASC: \"По возрастанию\",\n //Сортировка по возрастанию\n ORDER_DESC: \"По убыванию\",\n //Сортировка по убыванию\n FILTER: \"Фильтр\",\n //Фильтрация\n MORE: \"Ещё\",\n //Догрузка данных\n APPLY: \"Применить\",\n //Сохранение без закрытия интерфейса ввода\n SAVE: \"Сохранить\",\n //Сохранение\n CONFIG: \"Настроить\",\n //Настройка\n INSERT: \"Добавить\",\n //Добавление\n UPDATE: \"Исправить\",\n //Исправление\n DELETE: \"Удалить\" //Удаление\n};\n\n//Метки атрибутов, сопроводительные надписи\nconst CAPTIONS = {\n VALUE: \"Значение\",\n VALUE_FROM: \"С\",\n VALUE_TO: \"По\",\n NUMB: \"Номер\",\n NAME: \"Наименование\",\n START: \"Начало\",\n END: \"Окончание\",\n PROGRESS: \"Прогресс\",\n LEGEND: \"Легенда\",\n USER_PROC: \"Пользовательская процедура\",\n QUERY: \"Запрос\"\n};\n\n//Типовые сообщения об ошибках\nconst ERRORS = {\n UNDER_CONSTRUCTION: \"Панель в разработке\",\n P8O_API_UNAVAILABLE: '\"ПАРУС 8 Онлайн\" недоступен',\n P8O_API_UNSUPPORTED: 'Функция \"ПАРУС 8 Онлайн\" не поддерживается',\n DEFAULT: \"Неожиданная ошибка\",\n DATA_SOURCE_NO_REQ_ARGS: \"Не заданы обязательные параметры источника данных\"\n};\n\n//Типовые сообщения для ошибок HTTP\nconst ERRORS_HTTP = {\n 404: \"Адрес не найден\"\n};\n\n//Типовые статусы\nconst STATE = {\n UNDEFINED: \"UNDEFINED\",\n INFO: \"INFORMATION\",\n OK: \"OK\",\n ERR: \"ERR\",\n WARN: \"WARN\"\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app.text.js?"); /***/ }), @@ -53,6 +53,116 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./app/components/editors/p8p_component_inline_message.js": +/*!****************************************************************!*\ + !*** ./app/components/editors/p8p_component_inline_message.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PComponentInlineMessage: () => (/* binding */ P8PComponentInlineMessage),\n/* harmony export */ P8P_COMPONENT_INLINE_MESSAGE: () => (/* binding */ P8P_COMPONENT_INLINE_MESSAGE),\n/* harmony export */ P8P_COMPONENT_INLINE_MESSAGE_TYPE: () => (/* binding */ P8P_COMPONENT_INLINE_MESSAGE_TYPE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редакторы панелей\r\n Компонент: Информационное сообщение внутри компонента\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Общие текстовые ресурсы\n\n//---------\n//Константы\n//---------\n\n//Типы сообщений компонентов\nconst P8P_COMPONENT_INLINE_MESSAGE_TYPE = {\n COMMON: \"COMMON\",\n ERROR: \"ERROR\"\n};\n\n//Типовые сообщения компонентов\nconst P8P_COMPONENT_INLINE_MESSAGE = {\n NO_DATA_FOUND: _app_text__WEBPACK_IMPORTED_MODULE_1__.TEXTS.NO_DATA_FOUND,\n NO_SETTINGS: _app_text__WEBPACK_IMPORTED_MODULE_1__.TEXTS.NO_SETTINGS\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Информационное сообщение внутри компонента\nconst P8PComponentInlineMessage = ({\n icon,\n name,\n message,\n type = P8P_COMPONENT_INLINE_MESSAGE_TYPE.COMMON\n}) => {\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"column\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }, icon && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n color: \"disabled\"\n }, icon), name && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n align: \"center\",\n color: \"text.secondary\",\n variant: \"button\"\n }, name)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n align: \"center\",\n color: type != P8P_COMPONENT_INLINE_MESSAGE_TYPE.ERROR ? \"text.secondary\" : \"error.dark\",\n variant: \"caption\"\n }, message));\n};\n\n//Контроль свойств - Информационное сообщение внутри компонента\nP8PComponentInlineMessage.propTypes = {\n icon: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().string),\n name: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().string),\n message: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().string).isRequired,\n type: prop_types__WEBPACK_IMPORTED_MODULE_5___default().oneOf(Object.values(P8P_COMPONENT_INLINE_MESSAGE_TYPE))\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/editors/p8p_component_inline_message.js?"); + +/***/ }), + +/***/ "./app/components/editors/p8p_config_dialog.js": +/*!*****************************************************!*\ + !*** ./app/components/editors/p8p_config_dialog.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PConfigDialog: () => (/* binding */ P8PConfigDialog)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _p8p_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../p8p_dialog */ \"./app/components/p8p_dialog.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редакторы панелей\r\n Компонент: Диалог настройки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Типовой диалог\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог настройки\nconst P8PConfigDialog = ({\n title,\n children,\n onOk,\n onCancel\n}) => {\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__.P8PDialog, {\n title: title,\n onOk: onOk,\n onCancel: onCancel\n }, children);\n};\n\n//Контроль свойств компонента - Диалог настройки\nP8PConfigDialog.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n children: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_2___default().node), prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().node))]),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/editors/p8p_config_dialog.js?"); + +/***/ }), + +/***/ "./app/components/editors/p8p_data_source.js": +/*!***************************************************!*\ + !*** ./app/components/editors/p8p_data_source.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PDataSource: () => (/* binding */ P8PDataSource)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Chip/Chip.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Card/Card.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardActionArea/CardActionArea.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardContent/CardContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardActions/CardActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _p8p_editors_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./p8p_editors_common */ \"./app/components/editors/p8p_editors_common.js\");\n/* harmony import */ var _p8p_data_source_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./p8p_data_source_common */ \"./app/components/editors/p8p_data_source_common.js\");\n/* harmony import */ var _p8p_data_source_config_dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./p8p_data_source_config_dialog */ \"./app/components/editors/p8p_data_source_config_dialog.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редакторы панелей\r\n Компонент: Источник данных\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Общие текстовые ресурсы\n //Общие ресурсы редаторов\n //Общие ресурсы компонента \"Источник данных\"\n //Диалог настройки источника данных\n\n//-----------\n//Тело модуля\n//-----------\n\n//Источник данных\nconst P8PDataSource = ({\n dataSource = null,\n valueProviders = {},\n onChange = null\n} = {}) => {\n //Собственное состояние - отображение диалога настройки\n const [configDlg, setConfigDlg] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Уведомление родителя о смене настроек источника данных\n const notifyChange = settings => onChange && onChange(settings);\n\n //При нажатии на настройку источника данных\n const handleSetup = () => setConfigDlg(true);\n\n //При нажатии на настройку источника данных\n const handleSetupOk = dataSource => {\n setConfigDlg(false);\n notifyChange(dataSource);\n };\n\n //При нажатии на настройку источника данных\n const handleSetupCancel = () => setConfigDlg(false);\n\n //При удалении настроек источника данных\n const handleDelete = () => notifyChange({\n ..._p8p_data_source_common__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_SOURCE_INITIAL\n });\n\n //Расчет флага \"настроенности\"\n const configured = dataSource?.type ? true : false;\n\n //Список аргументов\n const args = configured && dataSource.arguments.map((argument, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n key: i,\n label: `:${argument.name} = ${argument.valueSource || argument.value || \"NULL\"}`,\n variant: \"outlined\",\n sx: _p8p_editors_common__WEBPACK_IMPORTED_MODULE_2__.STYLES.CHIP(true)\n }));\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, configDlg && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_data_source_config_dialog__WEBPACK_IMPORTED_MODULE_4__.P8PDataSourceConfigDialog, {\n dataSource: dataSource,\n valueProviders: valueProviders,\n onOk: handleSetupOk,\n onCancel: handleSetupCancel\n }), configured && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"outlined\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n onClick: handleSetup\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n variant: \"subtitle1\",\n noWrap: true\n }, dataSource.type === _p8p_data_source_common__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_SOURCE_TYPE.USER_PROC ? dataSource.userProc : _app_text__WEBPACK_IMPORTED_MODULE_1__.TEXTS.UNNAMED_SOURCE), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n variant: \"caption\",\n color: \"text.secondary\",\n noWrap: true\n }, _p8p_data_source_common__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_SOURCE_TYPE_NAME[dataSource.type] || _app_text__WEBPACK_IMPORTED_MODULE_1__.TEXTS.UNKNOWN_SOURCE_TYPE), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n direction: \"column\",\n spacing: 1,\n pt: 2\n }, args))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: handleDelete\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"delete\")))), !configured && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"build\"),\n onClick: handleSetup\n }, _app_text__WEBPACK_IMPORTED_MODULE_1__.BUTTONS.CONFIG));\n};\n\n//Контроль свойств компонента - Источник данных\nP8PDataSource.propTypes = {\n dataSource: _p8p_data_source_common__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_SOURCE_SHAPE,\n valueProviders: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().object),\n onChange: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/editors/p8p_data_source.js?"); + +/***/ }), + +/***/ "./app/components/editors/p8p_data_source_common.js": +/*!**********************************************************!*\ + !*** ./app/components/editors/p8p_data_source_common.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8P_DATA_SOURCE_ARGUMENT_DATA_TYPE: () => (/* binding */ P8P_DATA_SOURCE_ARGUMENT_DATA_TYPE),\n/* harmony export */ P8P_DATA_SOURCE_ARGUMENT_INITIAL: () => (/* binding */ P8P_DATA_SOURCE_ARGUMENT_INITIAL),\n/* harmony export */ P8P_DATA_SOURCE_INITIAL: () => (/* binding */ P8P_DATA_SOURCE_INITIAL),\n/* harmony export */ P8P_DATA_SOURCE_SHAPE: () => (/* binding */ P8P_DATA_SOURCE_SHAPE),\n/* harmony export */ P8P_DATA_SOURCE_TYPE: () => (/* binding */ P8P_DATA_SOURCE_TYPE),\n/* harmony export */ P8P_DATA_SOURCE_TYPE_NAME: () => (/* binding */ P8P_DATA_SOURCE_TYPE_NAME)\n/* harmony export */ });\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _core_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core/client */ \"./app/core/client.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редакторы панелей\r\n Общие ресурсы компонента \"Источник данных\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Контроль свойств компонента\n //Клиент БД\n //Общие текстовые ресурсы\n\n//---------\n//Константы\n//---------\n\n//Типы даных аргументов\nconst P8P_DATA_SOURCE_ARGUMENT_DATA_TYPE = {\n STR: _core_client__WEBPACK_IMPORTED_MODULE_0__[\"default\"].SERV_DATA_TYPE_STR,\n NUMB: _core_client__WEBPACK_IMPORTED_MODULE_0__[\"default\"].SERV_DATA_TYPE_NUMB,\n DATE: _core_client__WEBPACK_IMPORTED_MODULE_0__[\"default\"].SERV_DATA_TYPE_DATE\n};\n\n//Структура аргумента источника данных\nconst P8P_DATA_SOURCE_ARGUMENT_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n dataType: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOf(Object.values(P8P_DATA_SOURCE_ARGUMENT_DATA_TYPE)),\n req: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool).isRequired,\n value: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().any),\n valueSource: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)\n});\n\n//Начальное состояние аргумента источника данных\nconst P8P_DATA_SOURCE_ARGUMENT_INITIAL = {\n name: \"\",\n caption: \"\",\n dataType: \"\",\n req: false,\n value: \"\",\n valueSource: \"\"\n};\n\n//Типы источников данных\nconst P8P_DATA_SOURCE_TYPE = {\n USER_PROC: \"USER_PROC\",\n QUERY: \"QUERY\"\n};\n\n//Типы источников данных (наименования)\nconst P8P_DATA_SOURCE_TYPE_NAME = {\n [P8P_DATA_SOURCE_TYPE.USER_PROC]: _app_text__WEBPACK_IMPORTED_MODULE_1__.CAPTIONS.USER_PROC,\n [P8P_DATA_SOURCE_TYPE.QUERY]: _app_text__WEBPACK_IMPORTED_MODULE_1__.CAPTIONS.QUERY\n};\n\n//Структура источника данных\nconst P8P_DATA_SOURCE_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n type: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOf([...Object.values(P8P_DATA_SOURCE_TYPE), \"\"]),\n userProc: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n stored: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n respArg: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n arguments: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_DATA_SOURCE_ARGUMENT_SHAPE)\n});\n\n//Начальное состояние истоника данных\nconst P8P_DATA_SOURCE_INITIAL = {\n type: \"\",\n userProc: \"\",\n stored: \"\",\n respArg: \"\",\n arguments: []\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/editors/p8p_data_source_common.js?"); + +/***/ }), + +/***/ "./app/components/editors/p8p_data_source_config_dialog.js": +/*!*****************************************************************!*\ + !*** ./app/components/editors/p8p_data_source_config_dialog.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PDataSourceConfigDialog: () => (/* binding */ P8PDataSourceConfigDialog)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Menu/Menu.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _p8p_config_dialog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./p8p_config_dialog */ \"./app/components/editors/p8p_config_dialog.js\");\n/* harmony import */ var _p8p_data_source_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./p8p_data_source_common */ \"./app/components/editors/p8p_data_source_common.js\");\n/* harmony import */ var _p8p_data_source_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./p8p_data_source_hooks */ \"./app/components/editors/p8p_data_source_hooks.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редакторы панелей\r\n Компонент: Диалог настройки источника данных\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст приложения\n //Общие текстовые ресурсы\n //Типовой диалог настройки\n //Общие ресурсы компонента \"Источник данных\"\n //Хуки источников данных\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог настройки источника данных\nconst P8PDataSourceConfigDialog = ({\n dataSource = null,\n valueProviders = {},\n onOk = null,\n onCancel = null\n} = {}) => {\n //Собственное состояние - параметры элемента формы\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ..._p8p_data_source_common__WEBPACK_IMPORTED_MODULE_4__.P8P_DATA_SOURCE_INITIAL,\n ...dataSource\n });\n\n //Собственное состояние - флаги обновление данных\n const [refresh, setRefresh] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n userProcDesc: 0\n });\n\n //Собственное состояние - элемент привязки меню выбора источника\n const [valueProvidersMenuAnchorEl, setValueProvidersMenuAnchorEl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Описание выбранной пользовательской процедуры\n const [userProcDesc] = (0,_p8p_data_source_hooks__WEBPACK_IMPORTED_MODULE_5__.useUserProcDesc)({\n code: state.userProc,\n refresh: refresh.userProcDesc\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //Установка значения/привязки аргумента\n const setArgumentValueSource = (index, value, valueSource) => setState(pv => ({\n ...pv,\n arguments: pv.arguments.map((argument, i) => ({\n ...argument,\n ...(i == index ? {\n value,\n valueSource\n } : {})\n }))\n }));\n\n //Открытие/сокрытие меню выбора источника\n const toggleValueProvidersMenu = target => setValueProvidersMenuAnchorEl(target instanceof Element ? target : null);\n\n //При нажатии на очистку наименования пользовательской процедуры\n const handleUserProcClearClick = () => setState({\n ..._p8p_data_source_common__WEBPACK_IMPORTED_MODULE_4__.P8P_DATA_SOURCE_INITIAL\n });\n\n //При нажатии на выбор пользовательской процедуры в качестве источника данных\n const handleUserProcSelectClick = () => {\n pOnlineShowDictionary({\n unitCode: \"UserProcedures\",\n showMethod: \"main\",\n inputParameters: [{\n name: \"in_CODE\",\n value: state.userProc\n }],\n callBack: res => {\n if (res.success) {\n setState(pv => ({\n ...pv,\n type: _p8p_data_source_common__WEBPACK_IMPORTED_MODULE_4__.P8P_DATA_SOURCE_TYPE.USER_PROC,\n userProc: res.outParameters.out_CODE\n }));\n setRefresh(pv => ({\n ...pv,\n userProcDesc: pv.userProcDesc + 1\n }));\n }\n }\n });\n };\n\n //При закрытии дилога с сохранением\n const handleOk = () => onOk && onOk({\n ...state\n });\n\n //При закртии диалога отменой\n const handleCancel = () => onCancel && onCancel();\n\n //При очистке значения/связывания аргумента\n const handleArgumentClearClick = index => setArgumentValueSource(index, \"\", \"\");\n\n //При отображении меню связывания аргумента с поставщиком данных\n const handleArgumentLinkMenuClick = e => setValueProvidersMenuAnchorEl(e.currentTarget);\n\n //При выборе элемента меню связывания аргумента с поставщиком данных\n const handleArgumentLinkClick = valueSource => {\n setArgumentValueSource(valueProvidersMenuAnchorEl.id, \"\", valueSource);\n toggleValueProvidersMenu();\n };\n\n //При вводе значения аргумента\n const handleArgumentChange = (index, value) => setArgumentValueSource(index, value, \"\");\n\n //При изменении описания пользовательской процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (userProcDesc) setState(pv => ({\n ...pv,\n stored: userProcDesc?.stored?.name,\n respArg: userProcDesc?.stored?.respArg,\n arguments: (userProcDesc?.arguments || []).map(argument => ({\n ..._p8p_data_source_common__WEBPACK_IMPORTED_MODULE_4__.P8P_DATA_SOURCE_ARGUMENT_INITIAL,\n ...argument\n }))\n }));\n }, [userProcDesc]);\n\n //Список значений\n const values = Object.keys(valueProviders).reduce((res, key) => [...res, ...Object.keys(valueProviders[key])], []);\n\n //Наличие значений\n const isValues = values && values.length > 0 ? true : false;\n\n //Меню привязки к поставщикам значений\n const valueProvidersMenu = isValues && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n anchorEl: valueProvidersMenuAnchorEl,\n open: Boolean(valueProvidersMenuAnchorEl),\n onClose: toggleValueProvidersMenu\n }, values.map((value, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n key: i,\n onClick: () => handleArgumentLinkClick(value)\n }, value)));\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_config_dialog__WEBPACK_IMPORTED_MODULE_3__.P8PConfigDialog, {\n title: _app_text__WEBPACK_IMPORTED_MODULE_2__.TITLES.DATA_SOURCE_CONFIG,\n onOk: handleOk,\n onCancel: handleCancel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n direction: \"column\",\n spacing: 1\n }, valueProvidersMenu, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n type: \"text\",\n variant: \"standard\",\n value: state.userProc,\n label: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.USER_PROC,\n InputLabelProps: {\n shrink: true\n },\n InputProps: {\n readOnly: true,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: handleUserProcClearClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, \"clear\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: handleUserProcSelectClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, \"list\")))\n }\n }), Array.isArray(state?.arguments) && state.arguments.map((argument, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n key: i,\n type: \"text\",\n variant: \"standard\",\n value: argument.value || argument.valueSource,\n label: argument.caption,\n onChange: e => handleArgumentChange(i, e.target.value),\n InputLabelProps: {\n shrink: true\n },\n InputProps: {\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: () => handleArgumentClearClick(i)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, \"clear\")), isValues && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n id: i,\n onClick: handleArgumentLinkMenuClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, \"settings_ethernet\")))\n }\n }))));\n};\n\n//Контроль свойств компонента - Диалог настройки источника данных\nP8PDataSourceConfigDialog.propTypes = {\n dataSource: _p8p_data_source_common__WEBPACK_IMPORTED_MODULE_4__.P8P_DATA_SOURCE_SHAPE,\n valueProviders: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().object),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/editors/p8p_data_source_config_dialog.js?"); + +/***/ }), + +/***/ "./app/components/editors/p8p_data_source_hooks.js": +/*!*********************************************************!*\ + !*** ./app/components/editors/p8p_data_source_hooks.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useDataSource: () => (/* binding */ useDataSource),\n/* harmony export */ useUserProcDesc: () => (/* binding */ useUserProcDesc)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _core_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/client */ \"./app/core/client.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _p8p_data_source_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./p8p_data_source_common */ \"./app/components/editors/p8p_data_source_common.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редакторы панелей\r\n Пользовательские хуки компонента \"Источник данных\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Клиент взаимодействия с сервером приложений\n //Общие текстовые ресурсы\n //Общие вспомогательные функции\n //Контекст взаимодействия с сервером\n //Общие ресурсы источника данных\n\n//-----------\n//Тело модуля\n//-----------\n\n//Описание пользовательской процедуры\nconst useUserProcDesc = ({\n code,\n refresh\n}) => {\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - данные\n const [data, setData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //При необходимости обновить данные компонента\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Загрузка данных с сервера\n const loadData = async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PE.USERPROCS_DESC\",\n args: {\n SCODE: code\n },\n respArg: \"COUT\",\n isArray: name => name === \"arguments\",\n loader: false\n });\n setData(data?.XUSERPROC || null);\n } finally {\n setLoading(false);\n }\n };\n //Если надо обновить и есть для чего получать данные\n if (refresh > 0) if (code) loadData();else setData(null);\n }, [refresh, code, executeStored]);\n\n //Возвращаем интерфейс хука\n return [data, isLoading];\n};\n\n//Получение данных из источника\nconst useDataSource = ({\n dataSource,\n values\n}) => {\n //Контроллер для прерывания запросов\n const abortController = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Собственное состояние - параметры исполнения\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n stored: null,\n storedArgs: [],\n respArg: null,\n reqSet: false\n });\n\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - данные\n const [data, setData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false\n });\n\n //Собственное состояние - ошибка получения данных\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Загрузка данных с сервера\n const loadData = async () => {\n try {\n setLoading(true);\n abortController.current?.abort?.();\n abortController.current = new AbortController();\n const data = await executeStored({\n stored: state.stored,\n args: {\n ...(state.storedArgs ? state.storedArgs : {})\n },\n respArg: state.respArg,\n loader: false,\n signal: abortController.current.signal,\n showErrorMessage: false\n });\n setError(null);\n setData({\n ...data,\n init: true\n });\n } catch (e) {\n if (e.message !== _core_client__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ERR_ABORTED) {\n setError((0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.formatErrorMessage)(e.message).text);\n setData({\n init: false\n });\n }\n } finally {\n setLoading(false);\n }\n };\n if (state.reqSet) {\n if (state.stored) loadData();\n } else setData({\n init: false\n });\n return () => abortController.current?.abort?.();\n }, [state.stored, state.storedArgs, state.respArg, state.reqSet, executeStored]);\n\n //При изменении свойств\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setState(pv => {\n if (dataSource?.type == _p8p_data_source_common__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_SOURCE_TYPE.USER_PROC) {\n const {\n stored,\n respArg\n } = dataSource;\n let reqSet = true;\n const storedArgs = {};\n dataSource.arguments.forEach(argument => {\n let v = argument.valueSource ? values[argument.valueSource] : argument.value;\n storedArgs[argument.name] = argument.dataType == _p8p_data_source_common__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_SOURCE_ARGUMENT_DATA_TYPE.NUMB ? isNaN(parseFloat(v)) ? null : parseFloat(v) : argument.dataType == _p8p_data_source_common__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_SOURCE_ARGUMENT_DATA_TYPE.DATE ? new Date(v) : String(v === undefined ? \"\" : v);\n if (argument.req === true && [undefined, null, \"\"].includes(storedArgs[argument.name])) reqSet = false;\n });\n if (pv.stored != stored || pv.respArg != respArg || JSON.stringify(pv.storedArgs) != JSON.stringify(storedArgs)) {\n if (!reqSet) {\n setError(_app_text__WEBPACK_IMPORTED_MODULE_2__.ERRORS.DATA_SOURCE_NO_REQ_ARGS);\n setData({\n init: false\n });\n }\n return {\n stored,\n respArg,\n storedArgs,\n reqSet\n };\n } else return pv;\n } else return pv;\n });\n }, [dataSource, values]);\n\n //Возвращаем интерфейс хука\n return [data, error, isLoading];\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/editors/p8p_data_source_hooks.js?"); + +/***/ }), + +/***/ "./app/components/editors/p8p_editor_box.js": +/*!**************************************************!*\ + !*** ./app/components/editors/p8p_editor_box.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PEditorBox: () => (/* binding */ P8PEditorBox)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редакторы панелей\r\n Компонент: Контейнер редактора\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты MUI\n //Общие текстовые ресурсы\n\n//-----------\n//Тело модуля\n//-----------\n\n//Контейнер редактора\nconst P8PEditorBox = ({\n title,\n children,\n onSave\n}) => {\n //При нажатии на \"Сохранить\"\n const handleSaveClick = (closeEditor = false) => onSave && onSave(closeEditor);\n\n //Флаг отображения кнопок сохранения\n const showSaveBar = onSave ? true : false;\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n direction: \"column\",\n spacing: 1\n }, children), showSaveBar && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n direction: \"row\",\n justifyContent: \"right\",\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n onClick: () => handleSaveClick(false),\n title: _app_text__WEBPACK_IMPORTED_MODULE_1__.BUTTONS.APPLY\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, \"done\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n onClick: () => handleSaveClick(true),\n title: _app_text__WEBPACK_IMPORTED_MODULE_1__.BUTTONS.SAVE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, \"done_all\"))));\n};\n\n//Контроль свойств компонента - Контейнер редактора\nP8PEditorBox.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string).isRequired,\n children: prop_types__WEBPACK_IMPORTED_MODULE_7___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_7___default().node), prop_types__WEBPACK_IMPORTED_MODULE_7___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_7___default().node))]),\n onSave: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/editors/p8p_editor_box.js?"); + +/***/ }), + +/***/ "./app/components/editors/p8p_editor_sub_header.js": +/*!*********************************************************!*\ + !*** ./app/components/editors/p8p_editor_sub_header.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PEditorSubHeader: () => (/* binding */ P8PEditorSubHeader)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Chip/Chip.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редакторы панелей\r\n Компонент: Заголовок раздела редактора\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты MUI\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n DIVIDER: {\n paddingTop: \"20px\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Заголовок раздела редактора\nconst P8PEditorSubHeader = ({\n title\n}) => {\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: STYLES.DIVIDER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n label: title,\n size: \"small\"\n }));\n};\n\n//Контроль свойств компонента - Заголовок раздела редактора\nP8PEditorSubHeader.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/editors/p8p_editor_sub_header.js?"); + +/***/ }), + +/***/ "./app/components/editors/p8p_editor_toolbar.js": +/*!******************************************************!*\ + !*** ./app/components/editors/p8p_editor_toolbar.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PEditorToolBar: () => (/* binding */ P8PEditorToolBar)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редакторы панелей\r\n Компонент: Панель инструментов редактора\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты MUI\n\n//---------\n//Константы\n//---------\n\n//Структура элемента панели инструментов редактора\nconst P8P_EDITOR_TOOL_BAR_ITEM_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n icon: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n disabled: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func).isRequired\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Панель инструментов редактора\nconst P8PEditorToolBar = ({\n items = []\n}) => {\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"row\",\n p: 1\n }, items.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n key: i,\n onClick: item.onClick,\n title: item.title,\n disabled: item?.disabled === true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, item.icon))));\n};\n\n//Контроль свойств компонента - Панель инструментов редактора\nP8PEditorToolBar.propTypes = {\n items: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_EDITOR_TOOL_BAR_ITEM_SHAPE)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/editors/p8p_editor_toolbar.js?"); + +/***/ }), + +/***/ "./app/components/editors/p8p_editors_common.js": +/*!******************************************************!*\ + !*** ./app/components/editors/p8p_editors_common.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ STYLES: () => (/* binding */ STYLES)\n/* harmony export */ });\n/*\r\n Парус 8 - Панели мониторинга - Редакторы панелей\r\n Общие ресурсы редакторов\r\n*/\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CHIP: (fullWidth = false, multiLine = false) => ({\n ...(multiLine ? {\n height: \"auto\"\n } : {}),\n \"& .MuiChip-label\": {\n ...(multiLine ? {\n display: \"block\",\n whiteSpace: \"normal\"\n } : {}),\n ...(fullWidth ? {\n width: \"100%\"\n } : {})\n }\n })\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/editors/p8p_editors_common.js?"); + +/***/ }), + /***/ "./app/components/p8p_app_error_page.js": /*!**********************************************!*\ !*** ./app/components/p8p_app_error_page.js ***! @@ -130,6 +240,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./app/components/p8p_dialog.js": +/*!**************************************!*\ + !*** ./app/components/p8p_dialog.js ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PDialog: () => (/* binding */ P8PDialog)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../app.text */ \"./app.text.js\");\n/* harmony import */ var _p8p_input__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./p8p_input */ \"./app/components/p8p_input.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Диалог\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Общие текстовые ресурсы\n //Поле ввода\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог\nconst P8PDialog = ({\n title,\n inputs = [],\n children,\n onOk,\n onCancel,\n onClose\n}) => {\n //Состояние диалога\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //При изменении элемента ввода\n const handleInputChange = (name, value) => setState(pv => ({\n ...pv,\n [name]: value\n }));\n\n //При нажатии на \"ОК\" диалога\n const handleOk = () => onOk && onOk(state);\n\n //При нажатии на \"Отмена\" диалога\n const handleCancel = () => onCancel && onCancel();\n\n //При нажатии на \"Закрыть\" диалога\n const handleClose = () => onClose ? onClose() : onCancel ? onCancel() : null;\n\n //При подключении к старнице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setState(inputs.reduce((res, input) => ({\n ...res,\n [input.name]: input.value == undefined ? null : input.value\n }), {}));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onClose: handleClose,\n open: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, inputs.map((input, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_input__WEBPACK_IMPORTED_MODULE_2__.P8PInput, _extends({\n key: i\n }, input, {\n value: state[input.name],\n formValues: state,\n onChange: handleInputChange\n }))), children), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, onOk && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n onClick: handleOk\n }, _app_text__WEBPACK_IMPORTED_MODULE_1__.BUTTONS.OK), onCancel && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n onClick: handleCancel\n }, _app_text__WEBPACK_IMPORTED_MODULE_1__.BUTTONS.CANCEL), onClose && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n onClick: handleClose\n }, _app_text__WEBPACK_IMPORTED_MODULE_1__.BUTTONS.CLOSE)));\n};\n\n//Контроль свойств - Диалог\nP8PDialog.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n inputs: prop_types__WEBPACK_IMPORTED_MODULE_8___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_8___default().shape(_p8p_input__WEBPACK_IMPORTED_MODULE_2__.P8P_INPUT)),\n children: prop_types__WEBPACK_IMPORTED_MODULE_8___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_8___default().node), prop_types__WEBPACK_IMPORTED_MODULE_8___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_8___default().node))]),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_dialog.js?"); + +/***/ }), + /***/ "./app/components/p8p_fullscreen_dialog.js": /*!*************************************************!*\ !*** ./app/components/p8p_fullscreen_dialog.js ***! @@ -163,6 +284,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./app/components/p8p_input.js": +/*!*************************************!*\ + !*** ./app/components/p8p_input.js ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PInput: () => (/* binding */ P8PInput),\n/* harmony export */ P8P_INPUT: () => (/* binding */ P8P_INPUT)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Autocomplete/Autocomplete.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Select/Select.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Input/Input.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Поле ввода\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n\n//---------\n//Константы\n//---------\n\n//Формат свойств поля ввода\nconst P8P_INPUT = {\n name: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n value: prop_types__WEBPACK_IMPORTED_MODULE_1___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_1___default().number), (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), prop_types__WEBPACK_IMPORTED_MODULE_1___default().instanceOf(Date)]),\n label: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n onChange: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n dictionary: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n list: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().array),\n type: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),\n freeSolo: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool),\n disabled: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool),\n formValues: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().object)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Поле ввода\nconst P8PInput = ({\n name,\n value,\n label,\n onChange,\n dictionary,\n list,\n type,\n freeSolo = false,\n disabled = false,\n formValues,\n ...other\n}) => {\n //Значение элемента\n const [currentValue, setCurrentValue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(value);\n\n //При получении нового значения из вне\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setCurrentValue(value);\n }, [value]);\n\n //Выбор значения из словаря\n const handleDictionaryClick = () => dictionary && dictionary(formValues, res => res ? res.map(i => handleChangeByName(i.name, i.value)) : null);\n\n //Изменение значения элемента (по событию)\n const handleChange = e => {\n setCurrentValue(e.target.value);\n if (onChange) onChange(e.target.name, e.target.value);\n };\n\n //Изменение значения элемента (по имени и значению)\n const handleChangeByName = (targetName, value) => {\n if (targetName === name) setCurrentValue(value);\n if (onChange) onChange(targetName, value);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], _extends({\n variant: \"standard\",\n fullWidth: true\n }, other), list ? freeSolo ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n id: name,\n name: name,\n freeSolo: true,\n disabled: disabled,\n inputValue: currentValue ? currentValue : \"\",\n onChange: (event, newValue) => handleChangeByName(name, newValue),\n onInputChange: (event, newInputValue) => handleChangeByName(name, newInputValue),\n options: list,\n renderInput: params => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], _extends({}, params, {\n label: label,\n name: name,\n variant: \"standard\"\n }))\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n id: `${name}Lable`,\n shrink: true\n }, label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n labelId: `${name}Lable`,\n id: name,\n name: name,\n label: label,\n value: [undefined, null].includes(currentValue) ? \"\" : currentValue,\n onChange: handleChange,\n disabled: disabled,\n displayEmpty: true\n }, list.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n key: i,\n value: [undefined, null].includes(item.value) ? \"\" : item.value\n }, item.name)))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], _extends({}, type == \"date\" ? {\n shrink: true\n } : {}, {\n htmlFor: name\n }), label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], _extends({\n id: name,\n name: name,\n value: currentValue ? currentValue : \"\",\n endAdornment: dictionary ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n \"aria-label\": `${name} select`,\n onClick: handleDictionaryClick,\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, \"list\"))) : null\n }, type ? {\n type\n } : {}, {\n onChange: handleChange,\n disabled: disabled\n })))));\n};\n\n//Контроль свойств - Поле ввода\nP8PInput.propTypes = P8P_INPUT;\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_input.js?"); + +/***/ }), + /***/ "./app/components/p8p_panels_menu.js": /*!*******************************************!*\ !*** ./app/components/p8p_panels_menu.js ***! @@ -323,7 +455,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var reac \***********************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/filter\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter.js\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter_dialog\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_dialog.js\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_input_field\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/filter_input_field.js\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/hooks\": \"./app/panels/eqs_prfrm/hooks.js\",\n\t\"./eqs_prfrm/hooks.js\": \"./app/panels/eqs_prfrm/hooks.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail.js\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box.js\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/hooks\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/hooks.js\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/index\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/index.js\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon.js\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/styles/themes\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_assembly_mon/styles/themes.js\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp.js\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/index\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/index.js\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage_mp\": \"./app/panels/mech_rec_cost_jobs_manage_mp/index.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/\": \"./app/panels/mech_rec_cost_jobs_manage_mp/index.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/hooks\": \"./app/panels/mech_rec_cost_jobs_manage_mp/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage_mp/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/index\": \"./app/panels/mech_rec_cost_jobs_manage_mp/index.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/index.js\": \"./app/panels/mech_rec_cost_jobs_manage_mp/index.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/mech_rec_cost_jobs_manage_mp\": \"./app/panels/mech_rec_cost_jobs_manage_mp/mech_rec_cost_jobs_manage_mp.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/mech_rec_cost_jobs_manage_mp.js\": \"./app/panels/mech_rec_cost_jobs_manage_mp/mech_rec_cost_jobs_manage_mp.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/worker_include_dialog\": \"./app/panels/mech_rec_cost_jobs_manage_mp/worker_include_dialog.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/worker_include_dialog.js\": \"./app/panels/mech_rec_cost_jobs_manage_mp/worker_include_dialog.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/components/filter\": \"./app/panels/mech_rec_dept_cost_jobs/components/filter.js\",\n\t\"./mech_rec_dept_cost_jobs/components/filter.js\": \"./app/panels/mech_rec_dept_cost_jobs/components/filter.js\",\n\t\"./mech_rec_dept_cost_jobs/components/ins_department_dg\": \"./app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js\",\n\t\"./mech_rec_dept_cost_jobs/components/ins_department_dg.js\": \"./app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js\",\n\t\"./mech_rec_dept_cost_jobs/hooks\": \"./app/panels/mech_rec_dept_cost_jobs/hooks.js\",\n\t\"./mech_rec_dept_cost_jobs/hooks.js\": \"./app/panels/mech_rec_dept_cost_jobs/hooks.js\",\n\t\"./mech_rec_dept_cost_jobs/index\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index.js\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_help\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/img/1_1.png\": \"./app/panels/mech_rec_help/img/1_1.png\",\n\t\"./mech_rec_help/img/1_2.png\": \"./app/panels/mech_rec_help/img/1_2.png\",\n\t\"./mech_rec_help/img/1_3.png\": \"./app/panels/mech_rec_help/img/1_3.png\",\n\t\"./mech_rec_help/img/1_4.png\": \"./app/panels/mech_rec_help/img/1_4.png\",\n\t\"./mech_rec_help/img/1_5.png\": \"./app/panels/mech_rec_help/img/1_5.png\",\n\t\"./mech_rec_help/img/21_1.png\": \"./app/panels/mech_rec_help/img/21_1.png\",\n\t\"./mech_rec_help/img/21_2.png\": \"./app/panels/mech_rec_help/img/21_2.png\",\n\t\"./mech_rec_help/img/21_3.png\": \"./app/panels/mech_rec_help/img/21_3.png\",\n\t\"./mech_rec_help/img/2_1.png\": \"./app/panels/mech_rec_help/img/2_1.png\",\n\t\"./mech_rec_help/img/2_2.png\": \"./app/panels/mech_rec_help/img/2_2.png\",\n\t\"./mech_rec_help/img/2_3.png\": \"./app/panels/mech_rec_help/img/2_3.png\",\n\t\"./mech_rec_help/img/2_4.png\": \"./app/panels/mech_rec_help/img/2_4.png\",\n\t\"./mech_rec_help/img/2_5.png\": \"./app/panels/mech_rec_help/img/2_5.png\",\n\t\"./mech_rec_help/img/31_1.png\": \"./app/panels/mech_rec_help/img/31_1.png\",\n\t\"./mech_rec_help/img/31_10.png\": \"./app/panels/mech_rec_help/img/31_10.png\",\n\t\"./mech_rec_help/img/31_2.png\": \"./app/panels/mech_rec_help/img/31_2.png\",\n\t\"./mech_rec_help/img/31_3.png\": \"./app/panels/mech_rec_help/img/31_3.png\",\n\t\"./mech_rec_help/img/31_4.png\": \"./app/panels/mech_rec_help/img/31_4.png\",\n\t\"./mech_rec_help/img/31_5.png\": \"./app/panels/mech_rec_help/img/31_5.png\",\n\t\"./mech_rec_help/img/31_6.png\": \"./app/panels/mech_rec_help/img/31_6.png\",\n\t\"./mech_rec_help/img/31_7.png\": \"./app/panels/mech_rec_help/img/31_7.png\",\n\t\"./mech_rec_help/img/31_8.png\": \"./app/panels/mech_rec_help/img/31_8.png\",\n\t\"./mech_rec_help/img/31_9.png\": \"./app/panels/mech_rec_help/img/31_9.png\",\n\t\"./mech_rec_help/img/32_1.png\": \"./app/panels/mech_rec_help/img/32_1.png\",\n\t\"./mech_rec_help/img/32_2.png\": \"./app/panels/mech_rec_help/img/32_2.png\",\n\t\"./mech_rec_help/img/32_3.png\": \"./app/panels/mech_rec_help/img/32_3.png\",\n\t\"./mech_rec_help/img/33_1.png\": \"./app/panels/mech_rec_help/img/33_1.png\",\n\t\"./mech_rec_help/img/33_2.png\": \"./app/panels/mech_rec_help/img/33_2.png\",\n\t\"./mech_rec_help/img/33_3.png\": \"./app/panels/mech_rec_help/img/33_3.png\",\n\t\"./mech_rec_help/img/33_4.png\": \"./app/panels/mech_rec_help/img/33_4.png\",\n\t\"./mech_rec_help/img/34_1.png\": \"./app/panels/mech_rec_help/img/34_1.png\",\n\t\"./mech_rec_help/img/34_2.png\": \"./app/panels/mech_rec_help/img/34_2.png\",\n\t\"./mech_rec_help/img/34_3.png\": \"./app/panels/mech_rec_help/img/34_3.png\",\n\t\"./mech_rec_help/img/34_4.png\": \"./app/panels/mech_rec_help/img/34_4.png\",\n\t\"./mech_rec_help/img/34_5.png\": \"./app/panels/mech_rec_help/img/34_5.png\",\n\t\"./mech_rec_help/img/34_6.png\": \"./app/panels/mech_rec_help/img/34_6.png\",\n\t\"./mech_rec_help/img/34_7.png\": \"./app/panels/mech_rec_help/img/34_7.png\",\n\t\"./mech_rec_help/img/34_8.png\": \"./app/panels/mech_rec_help/img/34_8.png\",\n\t\"./mech_rec_help/img/35_1.png\": \"./app/panels/mech_rec_help/img/35_1.png\",\n\t\"./mech_rec_help/img/3_1.png\": \"./app/panels/mech_rec_help/img/3_1.png\",\n\t\"./mech_rec_help/img/410_1.png\": \"./app/panels/mech_rec_help/img/410_1.png\",\n\t\"./mech_rec_help/img/410_2.png\": \"./app/panels/mech_rec_help/img/410_2.png\",\n\t\"./mech_rec_help/img/410_3.png\": \"./app/panels/mech_rec_help/img/410_3.png\",\n\t\"./mech_rec_help/img/410_4.png\": \"./app/panels/mech_rec_help/img/410_4.png\",\n\t\"./mech_rec_help/img/410_5.png\": \"./app/panels/mech_rec_help/img/410_5.png\",\n\t\"./mech_rec_help/img/410_6.png\": \"./app/panels/mech_rec_help/img/410_6.png\",\n\t\"./mech_rec_help/img/410_7.png\": \"./app/panels/mech_rec_help/img/410_7.png\",\n\t\"./mech_rec_help/img/411_1.png\": \"./app/panels/mech_rec_help/img/411_1.png\",\n\t\"./mech_rec_help/img/411_2.png\": \"./app/panels/mech_rec_help/img/411_2.png\",\n\t\"./mech_rec_help/img/411_3.png\": \"./app/panels/mech_rec_help/img/411_3.png\",\n\t\"./mech_rec_help/img/411_4.png\": \"./app/panels/mech_rec_help/img/411_4.png\",\n\t\"./mech_rec_help/img/412_1.png\": \"./app/panels/mech_rec_help/img/412_1.png\",\n\t\"./mech_rec_help/img/412_2.png\": \"./app/panels/mech_rec_help/img/412_2.png\",\n\t\"./mech_rec_help/img/412_3.png\": \"./app/panels/mech_rec_help/img/412_3.png\",\n\t\"./mech_rec_help/img/412_4.png\": \"./app/panels/mech_rec_help/img/412_4.png\",\n\t\"./mech_rec_help/img/413_1.png\": \"./app/panels/mech_rec_help/img/413_1.png\",\n\t\"./mech_rec_help/img/413_2.png\": \"./app/panels/mech_rec_help/img/413_2.png\",\n\t\"./mech_rec_help/img/413_3.png\": \"./app/panels/mech_rec_help/img/413_3.png\",\n\t\"./mech_rec_help/img/413_4.png\": \"./app/panels/mech_rec_help/img/413_4.png\",\n\t\"./mech_rec_help/img/413_5.png\": \"./app/panels/mech_rec_help/img/413_5.png\",\n\t\"./mech_rec_help/img/414_1.png\": \"./app/panels/mech_rec_help/img/414_1.png\",\n\t\"./mech_rec_help/img/414_2.png\": \"./app/panels/mech_rec_help/img/414_2.png\",\n\t\"./mech_rec_help/img/414_3.png\": \"./app/panels/mech_rec_help/img/414_3.png\",\n\t\"./mech_rec_help/img/41_1.png\": \"./app/panels/mech_rec_help/img/41_1.png\",\n\t\"./mech_rec_help/img/41_10.png\": \"./app/panels/mech_rec_help/img/41_10.png\",\n\t\"./mech_rec_help/img/41_11.png\": \"./app/panels/mech_rec_help/img/41_11.png\",\n\t\"./mech_rec_help/img/41_12.png\": \"./app/panels/mech_rec_help/img/41_12.png\",\n\t\"./mech_rec_help/img/41_2.png\": \"./app/panels/mech_rec_help/img/41_2.png\",\n\t\"./mech_rec_help/img/41_3.png\": \"./app/panels/mech_rec_help/img/41_3.png\",\n\t\"./mech_rec_help/img/41_4.png\": \"./app/panels/mech_rec_help/img/41_4.png\",\n\t\"./mech_rec_help/img/41_5.png\": \"./app/panels/mech_rec_help/img/41_5.png\",\n\t\"./mech_rec_help/img/41_6.png\": \"./app/panels/mech_rec_help/img/41_6.png\",\n\t\"./mech_rec_help/img/41_7.png\": \"./app/panels/mech_rec_help/img/41_7.png\",\n\t\"./mech_rec_help/img/41_8.png\": \"./app/panels/mech_rec_help/img/41_8.png\",\n\t\"./mech_rec_help/img/41_9.png\": \"./app/panels/mech_rec_help/img/41_9.png\",\n\t\"./mech_rec_help/img/42_1.png\": \"./app/panels/mech_rec_help/img/42_1.png\",\n\t\"./mech_rec_help/img/42_2.png\": \"./app/panels/mech_rec_help/img/42_2.png\",\n\t\"./mech_rec_help/img/42_3.png\": \"./app/panels/mech_rec_help/img/42_3.png\",\n\t\"./mech_rec_help/img/42_4.png\": \"./app/panels/mech_rec_help/img/42_4.png\",\n\t\"./mech_rec_help/img/43_1.png\": \"./app/panels/mech_rec_help/img/43_1.png\",\n\t\"./mech_rec_help/img/43_2.png\": \"./app/panels/mech_rec_help/img/43_2.png\",\n\t\"./mech_rec_help/img/43_3.png\": \"./app/panels/mech_rec_help/img/43_3.png\",\n\t\"./mech_rec_help/img/43_4.png\": \"./app/panels/mech_rec_help/img/43_4.png\",\n\t\"./mech_rec_help/img/43_5.png\": \"./app/panels/mech_rec_help/img/43_5.png\",\n\t\"./mech_rec_help/img/43_6.png\": \"./app/panels/mech_rec_help/img/43_6.png\",\n\t\"./mech_rec_help/img/43_7.png\": \"./app/panels/mech_rec_help/img/43_7.png\",\n\t\"./mech_rec_help/img/43_8.png\": \"./app/panels/mech_rec_help/img/43_8.png\",\n\t\"./mech_rec_help/img/44_1.png\": \"./app/panels/mech_rec_help/img/44_1.png\",\n\t\"./mech_rec_help/img/44_10.png\": \"./app/panels/mech_rec_help/img/44_10.png\",\n\t\"./mech_rec_help/img/44_2.png\": \"./app/panels/mech_rec_help/img/44_2.png\",\n\t\"./mech_rec_help/img/44_3.png\": \"./app/panels/mech_rec_help/img/44_3.png\",\n\t\"./mech_rec_help/img/44_4.png\": \"./app/panels/mech_rec_help/img/44_4.png\",\n\t\"./mech_rec_help/img/44_5.png\": \"./app/panels/mech_rec_help/img/44_5.png\",\n\t\"./mech_rec_help/img/44_6.png\": \"./app/panels/mech_rec_help/img/44_6.png\",\n\t\"./mech_rec_help/img/44_7.png\": \"./app/panels/mech_rec_help/img/44_7.png\",\n\t\"./mech_rec_help/img/44_8.png\": \"./app/panels/mech_rec_help/img/44_8.png\",\n\t\"./mech_rec_help/img/44_9.png\": \"./app/panels/mech_rec_help/img/44_9.png\",\n\t\"./mech_rec_help/img/45_1.png\": \"./app/panels/mech_rec_help/img/45_1.png\",\n\t\"./mech_rec_help/img/45_10.png\": \"./app/panels/mech_rec_help/img/45_10.png\",\n\t\"./mech_rec_help/img/45_2.png\": \"./app/panels/mech_rec_help/img/45_2.png\",\n\t\"./mech_rec_help/img/45_3.png\": \"./app/panels/mech_rec_help/img/45_3.png\",\n\t\"./mech_rec_help/img/45_4.png\": \"./app/panels/mech_rec_help/img/45_4.png\",\n\t\"./mech_rec_help/img/45_5.png\": \"./app/panels/mech_rec_help/img/45_5.png\",\n\t\"./mech_rec_help/img/45_6.png\": \"./app/panels/mech_rec_help/img/45_6.png\",\n\t\"./mech_rec_help/img/45_7.png\": \"./app/panels/mech_rec_help/img/45_7.png\",\n\t\"./mech_rec_help/img/45_8.png\": \"./app/panels/mech_rec_help/img/45_8.png\",\n\t\"./mech_rec_help/img/45_9.png\": \"./app/panels/mech_rec_help/img/45_9.png\",\n\t\"./mech_rec_help/img/46_1.png\": \"./app/panels/mech_rec_help/img/46_1.png\",\n\t\"./mech_rec_help/img/46_2.png\": \"./app/panels/mech_rec_help/img/46_2.png\",\n\t\"./mech_rec_help/img/46_3.png\": \"./app/panels/mech_rec_help/img/46_3.png\",\n\t\"./mech_rec_help/img/46_4.png\": \"./app/panels/mech_rec_help/img/46_4.png\",\n\t\"./mech_rec_help/img/46_5.png\": \"./app/panels/mech_rec_help/img/46_5.png\",\n\t\"./mech_rec_help/img/46_6.png\": \"./app/panels/mech_rec_help/img/46_6.png\",\n\t\"./mech_rec_help/img/47_1.png\": \"./app/panels/mech_rec_help/img/47_1.png\",\n\t\"./mech_rec_help/img/47_10.png\": \"./app/panels/mech_rec_help/img/47_10.png\",\n\t\"./mech_rec_help/img/47_11.png\": \"./app/panels/mech_rec_help/img/47_11.png\",\n\t\"./mech_rec_help/img/47_12.png\": \"./app/panels/mech_rec_help/img/47_12.png\",\n\t\"./mech_rec_help/img/47_2.png\": \"./app/panels/mech_rec_help/img/47_2.png\",\n\t\"./mech_rec_help/img/47_3.png\": \"./app/panels/mech_rec_help/img/47_3.png\",\n\t\"./mech_rec_help/img/47_4.png\": \"./app/panels/mech_rec_help/img/47_4.png\",\n\t\"./mech_rec_help/img/47_5.png\": \"./app/panels/mech_rec_help/img/47_5.png\",\n\t\"./mech_rec_help/img/47_6.png\": \"./app/panels/mech_rec_help/img/47_6.png\",\n\t\"./mech_rec_help/img/47_7.png\": \"./app/panels/mech_rec_help/img/47_7.png\",\n\t\"./mech_rec_help/img/47_8.png\": \"./app/panels/mech_rec_help/img/47_8.png\",\n\t\"./mech_rec_help/img/47_9.png\": \"./app/panels/mech_rec_help/img/47_9.png\",\n\t\"./mech_rec_help/img/48_1.png\": \"./app/panels/mech_rec_help/img/48_1.png\",\n\t\"./mech_rec_help/img/48_2.png\": \"./app/panels/mech_rec_help/img/48_2.png\",\n\t\"./mech_rec_help/img/48_3.png\": \"./app/panels/mech_rec_help/img/48_3.png\",\n\t\"./mech_rec_help/img/48_4.png\": \"./app/panels/mech_rec_help/img/48_4.png\",\n\t\"./mech_rec_help/img/49_1.png\": \"./app/panels/mech_rec_help/img/49_1.png\",\n\t\"./mech_rec_help/img/49_2.png\": \"./app/panels/mech_rec_help/img/49_2.png\",\n\t\"./mech_rec_help/img/49_3.png\": \"./app/panels/mech_rec_help/img/49_3.png\",\n\t\"./mech_rec_help/img/add1_1.png\": \"./app/panels/mech_rec_help/img/add1_1.png\",\n\t\"./mech_rec_help/img/add1_2.png\": \"./app/panels/mech_rec_help/img/add1_2.png\",\n\t\"./mech_rec_help/img/add1_3.png\": \"./app/panels/mech_rec_help/img/add1_3.png\",\n\t\"./mech_rec_help/img/add1_4.png\": \"./app/panels/mech_rec_help/img/add1_4.png\",\n\t\"./mech_rec_help/img/add1_5.png\": \"./app/panels/mech_rec_help/img/add1_5.png\",\n\t\"./mech_rec_help/img/add1_6.png\": \"./app/panels/mech_rec_help/img/add1_6.png\",\n\t\"./mech_rec_help/img/add1_7.png\": \"./app/panels/mech_rec_help/img/add1_7.png\",\n\t\"./mech_rec_help/img/add1_8.png\": \"./app/panels/mech_rec_help/img/add1_8.png\",\n\t\"./mech_rec_help/img/add1_9.png\": \"./app/panels/mech_rec_help/img/add1_9.png\",\n\t\"./mech_rec_help/index\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/index.js\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/mech_rec_help\": \"./app/panels/mech_rec_help/mech_rec_help.js\",\n\t\"./mech_rec_help/mech_rec_help.js\": \"./app/panels/mech_rec_help/mech_rec_help.js\",\n\t\"./panels_editor\": \"./app/panels/panels_editor/index.js\",\n\t\"./panels_editor/\": \"./app/panels/panels_editor/index.js\",\n\t\"./panels_editor/component_editor\": \"./app/panels/panels_editor/component_editor.js\",\n\t\"./panels_editor/component_editor.js\": \"./app/panels/panels_editor/component_editor.js\",\n\t\"./panels_editor/component_view\": \"./app/panels/panels_editor/component_view.js\",\n\t\"./panels_editor/component_view.js\": \"./app/panels/panels_editor/component_view.js\",\n\t\"./panels_editor/components/chart/editor\": \"./app/panels/panels_editor/components/chart/editor.js\",\n\t\"./panels_editor/components/chart/editor.js\": \"./app/panels/panels_editor/components/chart/editor.js\",\n\t\"./panels_editor/components/chart/view\": \"./app/panels/panels_editor/components/chart/view.js\",\n\t\"./panels_editor/components/chart/view.js\": \"./app/panels/panels_editor/components/chart/view.js\",\n\t\"./panels_editor/components/components\": \"./app/panels/panels_editor/components/components.js\",\n\t\"./panels_editor/components/components.js\": \"./app/panels/panels_editor/components/components.js\",\n\t\"./panels_editor/components/components_hooks\": \"./app/panels/panels_editor/components/components_hooks.js\",\n\t\"./panels_editor/components/components_hooks.js\": \"./app/panels/panels_editor/components/components_hooks.js\",\n\t\"./panels_editor/components/editors_common\": \"./app/panels/panels_editor/components/editors_common.js\",\n\t\"./panels_editor/components/editors_common.js\": \"./app/panels/panels_editor/components/editors_common.js\",\n\t\"./panels_editor/components/form/common\": \"./app/panels/panels_editor/components/form/common.js\",\n\t\"./panels_editor/components/form/common.js\": \"./app/panels/panels_editor/components/form/common.js\",\n\t\"./panels_editor/components/form/editor\": \"./app/panels/panels_editor/components/form/editor.js\",\n\t\"./panels_editor/components/form/editor.js\": \"./app/panels/panels_editor/components/form/editor.js\",\n\t\"./panels_editor/components/form/view\": \"./app/panels/panels_editor/components/form/view.js\",\n\t\"./panels_editor/components/form/view.js\": \"./app/panels/panels_editor/components/form/view.js\",\n\t\"./panels_editor/components/indicator/editor\": \"./app/panels/panels_editor/components/indicator/editor.js\",\n\t\"./panels_editor/components/indicator/editor.js\": \"./app/panels/panels_editor/components/indicator/editor.js\",\n\t\"./panels_editor/components/indicator/view\": \"./app/panels/panels_editor/components/indicator/view.js\",\n\t\"./panels_editor/components/indicator/view.js\": \"./app/panels/panels_editor/components/indicator/view.js\",\n\t\"./panels_editor/components/table/editor\": \"./app/panels/panels_editor/components/table/editor.js\",\n\t\"./panels_editor/components/table/editor.js\": \"./app/panels/panels_editor/components/table/editor.js\",\n\t\"./panels_editor/components/table/view\": \"./app/panels/panels_editor/components/table/view.js\",\n\t\"./panels_editor/components/table/view.js\": \"./app/panels/panels_editor/components/table/view.js\",\n\t\"./panels_editor/components/views_common\": \"./app/panels/panels_editor/components/views_common.js\",\n\t\"./panels_editor/components/views_common.js\": \"./app/panels/panels_editor/components/views_common.js\",\n\t\"./panels_editor/index\": \"./app/panels/panels_editor/index.js\",\n\t\"./panels_editor/index.js\": \"./app/panels/panels_editor/index.js\",\n\t\"./panels_editor/layout_item\": \"./app/panels/panels_editor/layout_item.js\",\n\t\"./panels_editor/layout_item.js\": \"./app/panels/panels_editor/layout_item.js\",\n\t\"./panels_editor/panels_editor\": \"./app/panels/panels_editor/panels_editor.js\",\n\t\"./panels_editor/panels_editor.css\": \"./app/panels/panels_editor/panels_editor.css\",\n\t\"./panels_editor/panels_editor.js\": \"./app/panels/panels_editor/panels_editor.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/21_1.png\": \"./app/panels/prj_help/img/21_1.png\",\n\t\"./prj_help/img/21_2.png\": \"./app/panels/prj_help/img/21_2.png\",\n\t\"./prj_help/img/21_3.png\": \"./app/panels/prj_help/img/21_3.png\",\n\t\"./prj_help/img/21_4.png\": \"./app/panels/prj_help/img/21_4.png\",\n\t\"./prj_help/img/21_5.png\": \"./app/panels/prj_help/img/21_5.png\",\n\t\"./prj_help/img/22_1.png\": \"./app/panels/prj_help/img/22_1.png\",\n\t\"./prj_help/img/22_2.png\": \"./app/panels/prj_help/img/22_2.png\",\n\t\"./prj_help/img/22_3.png\": \"./app/panels/prj_help/img/22_3.png\",\n\t\"./prj_help/img/23_1.png\": \"./app/panels/prj_help/img/23_1.png\",\n\t\"./prj_help/img/23_2.png\": \"./app/panels/prj_help/img/23_2.png\",\n\t\"./prj_help/img/24_1.png\": \"./app/panels/prj_help/img/24_1.png\",\n\t\"./prj_help/img/24_2.png\": \"./app/panels/prj_help/img/24_2.png\",\n\t\"./prj_help/img/24_3.png\": \"./app/panels/prj_help/img/24_3.png\",\n\t\"./prj_help/img/24_4.png\": \"./app/panels/prj_help/img/24_4.png\",\n\t\"./prj_help/img/24_5.png\": \"./app/panels/prj_help/img/24_5.png\",\n\t\"./prj_help/img/3_1.png\": \"./app/panels/prj_help/img/3_1.png\",\n\t\"./prj_help/img/3_2.png\": \"./app/panels/prj_help/img/3_2.png\",\n\t\"./prj_help/img/3_3.png\": \"./app/panels/prj_help/img/3_3.png\",\n\t\"./prj_help/img/3_4.png\": \"./app/panels/prj_help/img/3_4.png\",\n\t\"./prj_help/img/3_5.png\": \"./app/panels/prj_help/img/3_5.png\",\n\t\"./prj_help/img/3_6.png\": \"./app/panels/prj_help/img/3_6.png\",\n\t\"./prj_help/img/41_1.png\": \"./app/panels/prj_help/img/41_1.png\",\n\t\"./prj_help/img/41_2.png\": \"./app/panels/prj_help/img/41_2.png\",\n\t\"./prj_help/img/42_1.png\": \"./app/panels/prj_help/img/42_1.png\",\n\t\"./prj_help/img/42_2.png\": \"./app/panels/prj_help/img/42_2.png\",\n\t\"./prj_help/img/43_1.png\": \"./app/panels/prj_help/img/43_1.png\",\n\t\"./prj_help/img/43_2.png\": \"./app/panels/prj_help/img/43_2.png\",\n\t\"./prj_help/img/43_3.png\": \"./app/panels/prj_help/img/43_3.png\",\n\t\"./prj_help/img/43_4.png\": \"./app/panels/prj_help/img/43_4.png\",\n\t\"./prj_help/img/44_1.png\": \"./app/panels/prj_help/img/44_1.png\",\n\t\"./prj_help/img/44_2.png\": \"./app/panels/prj_help/img/44_2.png\",\n\t\"./prj_help/img/44_3.png\": \"./app/panels/prj_help/img/44_3.png\",\n\t\"./prj_help/img/44_4.png\": \"./app/panels/prj_help/img/44_4.png\",\n\t\"./prj_help/img/45_1.png\": \"./app/panels/prj_help/img/45_1.png\",\n\t\"./prj_help/img/46_1.png\": \"./app/panels/prj_help/img/46_1.png\",\n\t\"./prj_help/img/47_1.png\": \"./app/panels/prj_help/img/47_1.png\",\n\t\"./prj_help/img/71_1.png\": \"./app/panels/prj_help/img/71_1.png\",\n\t\"./prj_help/img/72_1.png\": \"./app/panels/prj_help/img/72_1.png\",\n\t\"./prj_help/img/72_2.png\": \"./app/panels/prj_help/img/72_2.png\",\n\t\"./prj_help/img/72_3.png\": \"./app/panels/prj_help/img/72_3.png\",\n\t\"./prj_help/img/74_1.png\": \"./app/panels/prj_help/img/74_1.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_info\": \"./app/panels/prj_info/index.js\",\n\t\"./prj_info/\": \"./app/panels/prj_info/index.js\",\n\t\"./prj_info/filter\": \"./app/panels/prj_info/filter.js\",\n\t\"./prj_info/filter.js\": \"./app/panels/prj_info/filter.js\",\n\t\"./prj_info/filter_dialog\": \"./app/panels/prj_info/filter_dialog.js\",\n\t\"./prj_info/filter_dialog.js\": \"./app/panels/prj_info/filter_dialog.js\",\n\t\"./prj_info/index\": \"./app/panels/prj_info/index.js\",\n\t\"./prj_info/index.js\": \"./app/panels/prj_info/index.js\",\n\t\"./prj_info/layouts\": \"./app/panels/prj_info/layouts.js\",\n\t\"./prj_info/layouts.js\": \"./app/panels/prj_info/layouts.js\",\n\t\"./prj_info/prj_info\": \"./app/panels/prj_info/prj_info.js\",\n\t\"./prj_info/prj_info.js\": \"./app/panels/prj_info/prj_info.js\",\n\t\"./prj_info/projects\": \"./app/panels/prj_info/projects.js\",\n\t\"./prj_info/projects.js\": \"./app/panels/prj_info/projects.js\",\n\t\"./prj_info/projects_hooks\": \"./app/panels/prj_info/projects_hooks.js\",\n\t\"./prj_info/projects_hooks.js\": \"./app/panels/prj_info/projects_hooks.js\",\n\t\"./prj_info/projects_layouts\": \"./app/panels/prj_info/projects_layouts.js\",\n\t\"./prj_info/projects_layouts.js\": \"./app/panels/prj_info/projects_layouts.js\",\n\t\"./prj_info/stage_detail\": \"./app/panels/prj_info/stage_detail.js\",\n\t\"./prj_info/stage_detail.js\": \"./app/panels/prj_info/stage_detail.js\",\n\t\"./prj_info/stage_detail_hooks\": \"./app/panels/prj_info/stage_detail_hooks.js\",\n\t\"./prj_info/stage_detail_hooks.js\": \"./app/panels/prj_info/stage_detail_hooks.js\",\n\t\"./prj_info/stage_detail_layouts\": \"./app/panels/prj_info/stage_detail_layouts.js\",\n\t\"./prj_info/stage_detail_layouts.js\": \"./app/panels/prj_info/stage_detail_layouts.js\",\n\t\"./prj_info/stages\": \"./app/panels/prj_info/stages.js\",\n\t\"./prj_info/stages.js\": \"./app/panels/prj_info/stages.js\",\n\t\"./prj_info/stages_hooks\": \"./app/panels/prj_info/stages_hooks.js\",\n\t\"./prj_info/stages_hooks.js\": \"./app/panels/prj_info/stages_hooks.js\",\n\t\"./prj_info/stages_layouts\": \"./app/panels/prj_info/stages_layouts.js\",\n\t\"./prj_info/stages_layouts.js\": \"./app/panels/prj_info/stages_layouts.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl.js\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/layouts\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/layouts.js\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./rrp_conf_editor\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/common\": \"./app/panels/rrp_conf_editor/common.js\",\n\t\"./rrp_conf_editor/common.js\": \"./app/panels/rrp_conf_editor/common.js\",\n\t\"./rrp_conf_editor/components/action_message\": \"./app/panels/rrp_conf_editor/components/action_message.js\",\n\t\"./rrp_conf_editor/components/action_message.js\": \"./app/panels/rrp_conf_editor/components/action_message.js\",\n\t\"./rrp_conf_editor/components/dialog_help\": \"./app/panels/rrp_conf_editor/components/dialog_help.js\",\n\t\"./rrp_conf_editor/components/dialog_help.js\": \"./app/panels/rrp_conf_editor/components/dialog_help.js\",\n\t\"./rrp_conf_editor/components/dialog_mark_iu\": \"./app/panels/rrp_conf_editor/components/dialog_mark_iu.js\",\n\t\"./rrp_conf_editor/components/dialog_mark_iu.js\": \"./app/panels/rrp_conf_editor/components/dialog_mark_iu.js\",\n\t\"./rrp_conf_editor/components/dialog_order\": \"./app/panels/rrp_conf_editor/components/dialog_order.js\",\n\t\"./rrp_conf_editor/components/dialog_order.js\": \"./app/panels/rrp_conf_editor/components/dialog_order.js\",\n\t\"./rrp_conf_editor/components/dialog_section_iu\": \"./app/panels/rrp_conf_editor/components/dialog_section_iu.js\",\n\t\"./rrp_conf_editor/components/dialog_section_iu.js\": \"./app/panels/rrp_conf_editor/components/dialog_section_iu.js\",\n\t\"./rrp_conf_editor/components/form\": \"./app/panels/rrp_conf_editor/components/form.js\",\n\t\"./rrp_conf_editor/components/form.js\": \"./app/panels/rrp_conf_editor/components/form.js\",\n\t\"./rrp_conf_editor/components/form_field\": \"./app/panels/rrp_conf_editor/components/form_field.js\",\n\t\"./rrp_conf_editor/components/form_field.js\": \"./app/panels/rrp_conf_editor/components/form_field.js\",\n\t\"./rrp_conf_editor/components/mark_card\": \"./app/panels/rrp_conf_editor/components/mark_card.js\",\n\t\"./rrp_conf_editor/components/mark_card.js\": \"./app/panels/rrp_conf_editor/components/mark_card.js\",\n\t\"./rrp_conf_editor/components/mark_card_toolbar\": \"./app/panels/rrp_conf_editor/components/mark_card_toolbar.js\",\n\t\"./rrp_conf_editor/components/mark_card_toolbar.js\": \"./app/panels/rrp_conf_editor/components/mark_card_toolbar.js\",\n\t\"./rrp_conf_editor/components/mark_cn_list\": \"./app/panels/rrp_conf_editor/components/mark_cn_list.js\",\n\t\"./rrp_conf_editor/components/mark_cn_list.js\": \"./app/panels/rrp_conf_editor/components/mark_cn_list.js\",\n\t\"./rrp_conf_editor/components/marks\": \"./app/panels/rrp_conf_editor/components/marks.js\",\n\t\"./rrp_conf_editor/components/marks.js\": \"./app/panels/rrp_conf_editor/components/marks.js\",\n\t\"./rrp_conf_editor/components/marks_toolbar\": \"./app/panels/rrp_conf_editor/components/marks_toolbar.js\",\n\t\"./rrp_conf_editor/components/marks_toolbar.js\": \"./app/panels/rrp_conf_editor/components/marks_toolbar.js\",\n\t\"./rrp_conf_editor/components/section\": \"./app/panels/rrp_conf_editor/components/section.js\",\n\t\"./rrp_conf_editor/components/section.js\": \"./app/panels/rrp_conf_editor/components/section.js\",\n\t\"./rrp_conf_editor/components/section_tab\": \"./app/panels/rrp_conf_editor/components/section_tab.js\",\n\t\"./rrp_conf_editor/components/section_tab.js\": \"./app/panels/rrp_conf_editor/components/section_tab.js\",\n\t\"./rrp_conf_editor/components/sections\": \"./app/panels/rrp_conf_editor/components/sections.js\",\n\t\"./rrp_conf_editor/components/sections.js\": \"./app/panels/rrp_conf_editor/components/sections.js\",\n\t\"./rrp_conf_editor/hooks\": \"./app/panels/rrp_conf_editor/hooks.js\",\n\t\"./rrp_conf_editor/hooks.js\": \"./app/panels/rrp_conf_editor/hooks.js\",\n\t\"./rrp_conf_editor/index\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/index.js\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/layouts\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/layouts.js\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor.js\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/cyclogram\": \"./app/panels/samples/cyclogram.js\",\n\t\"./samples/cyclogram.js\": \"./app/panels/samples/cyclogram.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/indicator\": \"./app/panels/samples/indicator.js\",\n\t\"./samples/indicator.js\": \"./app/panels/samples/indicator.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\",\n\t\"./samples/svg\": \"./app/panels/samples/svg.js\",\n\t\"./samples/svg.js\": \"./app/panels/samples/svg.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); +eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/filter\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter.js\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter_dialog\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_dialog.js\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_input_field\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/filter_input_field.js\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/hooks\": \"./app/panels/eqs_prfrm/hooks.js\",\n\t\"./eqs_prfrm/hooks.js\": \"./app/panels/eqs_prfrm/hooks.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail.js\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box.js\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/hooks\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/hooks.js\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/index\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/index.js\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon.js\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/styles/themes\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_assembly_mon/styles/themes.js\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp.js\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/index\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/index.js\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage_mp\": \"./app/panels/mech_rec_cost_jobs_manage_mp/index.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/\": \"./app/panels/mech_rec_cost_jobs_manage_mp/index.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/hooks\": \"./app/panels/mech_rec_cost_jobs_manage_mp/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage_mp/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/index\": \"./app/panels/mech_rec_cost_jobs_manage_mp/index.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/index.js\": \"./app/panels/mech_rec_cost_jobs_manage_mp/index.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/mech_rec_cost_jobs_manage_mp\": \"./app/panels/mech_rec_cost_jobs_manage_mp/mech_rec_cost_jobs_manage_mp.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/mech_rec_cost_jobs_manage_mp.js\": \"./app/panels/mech_rec_cost_jobs_manage_mp/mech_rec_cost_jobs_manage_mp.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/worker_include_dialog\": \"./app/panels/mech_rec_cost_jobs_manage_mp/worker_include_dialog.js\",\n\t\"./mech_rec_cost_jobs_manage_mp/worker_include_dialog.js\": \"./app/panels/mech_rec_cost_jobs_manage_mp/worker_include_dialog.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/components/filter\": \"./app/panels/mech_rec_dept_cost_jobs/components/filter.js\",\n\t\"./mech_rec_dept_cost_jobs/components/filter.js\": \"./app/panels/mech_rec_dept_cost_jobs/components/filter.js\",\n\t\"./mech_rec_dept_cost_jobs/components/ins_department_dg\": \"./app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js\",\n\t\"./mech_rec_dept_cost_jobs/components/ins_department_dg.js\": \"./app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js\",\n\t\"./mech_rec_dept_cost_jobs/hooks\": \"./app/panels/mech_rec_dept_cost_jobs/hooks.js\",\n\t\"./mech_rec_dept_cost_jobs/hooks.js\": \"./app/panels/mech_rec_dept_cost_jobs/hooks.js\",\n\t\"./mech_rec_dept_cost_jobs/index\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index.js\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_help\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/img/1_1.png\": \"./app/panels/mech_rec_help/img/1_1.png\",\n\t\"./mech_rec_help/img/1_2.png\": \"./app/panels/mech_rec_help/img/1_2.png\",\n\t\"./mech_rec_help/img/1_3.png\": \"./app/panels/mech_rec_help/img/1_3.png\",\n\t\"./mech_rec_help/img/1_4.png\": \"./app/panels/mech_rec_help/img/1_4.png\",\n\t\"./mech_rec_help/img/1_5.png\": \"./app/panels/mech_rec_help/img/1_5.png\",\n\t\"./mech_rec_help/img/21_1.png\": \"./app/panels/mech_rec_help/img/21_1.png\",\n\t\"./mech_rec_help/img/21_2.png\": \"./app/panels/mech_rec_help/img/21_2.png\",\n\t\"./mech_rec_help/img/21_3.png\": \"./app/panels/mech_rec_help/img/21_3.png\",\n\t\"./mech_rec_help/img/2_1.png\": \"./app/panels/mech_rec_help/img/2_1.png\",\n\t\"./mech_rec_help/img/2_2.png\": \"./app/panels/mech_rec_help/img/2_2.png\",\n\t\"./mech_rec_help/img/2_3.png\": \"./app/panels/mech_rec_help/img/2_3.png\",\n\t\"./mech_rec_help/img/2_4.png\": \"./app/panels/mech_rec_help/img/2_4.png\",\n\t\"./mech_rec_help/img/2_5.png\": \"./app/panels/mech_rec_help/img/2_5.png\",\n\t\"./mech_rec_help/img/31_1.png\": \"./app/panels/mech_rec_help/img/31_1.png\",\n\t\"./mech_rec_help/img/31_10.png\": \"./app/panels/mech_rec_help/img/31_10.png\",\n\t\"./mech_rec_help/img/31_2.png\": \"./app/panels/mech_rec_help/img/31_2.png\",\n\t\"./mech_rec_help/img/31_3.png\": \"./app/panels/mech_rec_help/img/31_3.png\",\n\t\"./mech_rec_help/img/31_4.png\": \"./app/panels/mech_rec_help/img/31_4.png\",\n\t\"./mech_rec_help/img/31_5.png\": \"./app/panels/mech_rec_help/img/31_5.png\",\n\t\"./mech_rec_help/img/31_6.png\": \"./app/panels/mech_rec_help/img/31_6.png\",\n\t\"./mech_rec_help/img/31_7.png\": \"./app/panels/mech_rec_help/img/31_7.png\",\n\t\"./mech_rec_help/img/31_8.png\": \"./app/panels/mech_rec_help/img/31_8.png\",\n\t\"./mech_rec_help/img/31_9.png\": \"./app/panels/mech_rec_help/img/31_9.png\",\n\t\"./mech_rec_help/img/32_1.png\": \"./app/panels/mech_rec_help/img/32_1.png\",\n\t\"./mech_rec_help/img/32_2.png\": \"./app/panels/mech_rec_help/img/32_2.png\",\n\t\"./mech_rec_help/img/32_3.png\": \"./app/panels/mech_rec_help/img/32_3.png\",\n\t\"./mech_rec_help/img/33_1.png\": \"./app/panels/mech_rec_help/img/33_1.png\",\n\t\"./mech_rec_help/img/33_2.png\": \"./app/panels/mech_rec_help/img/33_2.png\",\n\t\"./mech_rec_help/img/33_3.png\": \"./app/panels/mech_rec_help/img/33_3.png\",\n\t\"./mech_rec_help/img/33_4.png\": \"./app/panels/mech_rec_help/img/33_4.png\",\n\t\"./mech_rec_help/img/34_1.png\": \"./app/panels/mech_rec_help/img/34_1.png\",\n\t\"./mech_rec_help/img/34_2.png\": \"./app/panels/mech_rec_help/img/34_2.png\",\n\t\"./mech_rec_help/img/34_3.png\": \"./app/panels/mech_rec_help/img/34_3.png\",\n\t\"./mech_rec_help/img/34_4.png\": \"./app/panels/mech_rec_help/img/34_4.png\",\n\t\"./mech_rec_help/img/34_5.png\": \"./app/panels/mech_rec_help/img/34_5.png\",\n\t\"./mech_rec_help/img/34_6.png\": \"./app/panels/mech_rec_help/img/34_6.png\",\n\t\"./mech_rec_help/img/34_7.png\": \"./app/panels/mech_rec_help/img/34_7.png\",\n\t\"./mech_rec_help/img/34_8.png\": \"./app/panels/mech_rec_help/img/34_8.png\",\n\t\"./mech_rec_help/img/35_1.png\": \"./app/panels/mech_rec_help/img/35_1.png\",\n\t\"./mech_rec_help/img/3_1.png\": \"./app/panels/mech_rec_help/img/3_1.png\",\n\t\"./mech_rec_help/img/410_1.png\": \"./app/panels/mech_rec_help/img/410_1.png\",\n\t\"./mech_rec_help/img/410_2.png\": \"./app/panels/mech_rec_help/img/410_2.png\",\n\t\"./mech_rec_help/img/410_3.png\": \"./app/panels/mech_rec_help/img/410_3.png\",\n\t\"./mech_rec_help/img/410_4.png\": \"./app/panels/mech_rec_help/img/410_4.png\",\n\t\"./mech_rec_help/img/410_5.png\": \"./app/panels/mech_rec_help/img/410_5.png\",\n\t\"./mech_rec_help/img/410_6.png\": \"./app/panels/mech_rec_help/img/410_6.png\",\n\t\"./mech_rec_help/img/410_7.png\": \"./app/panels/mech_rec_help/img/410_7.png\",\n\t\"./mech_rec_help/img/411_1.png\": \"./app/panels/mech_rec_help/img/411_1.png\",\n\t\"./mech_rec_help/img/411_2.png\": \"./app/panels/mech_rec_help/img/411_2.png\",\n\t\"./mech_rec_help/img/411_3.png\": \"./app/panels/mech_rec_help/img/411_3.png\",\n\t\"./mech_rec_help/img/411_4.png\": \"./app/panels/mech_rec_help/img/411_4.png\",\n\t\"./mech_rec_help/img/412_1.png\": \"./app/panels/mech_rec_help/img/412_1.png\",\n\t\"./mech_rec_help/img/412_2.png\": \"./app/panels/mech_rec_help/img/412_2.png\",\n\t\"./mech_rec_help/img/412_3.png\": \"./app/panels/mech_rec_help/img/412_3.png\",\n\t\"./mech_rec_help/img/412_4.png\": \"./app/panels/mech_rec_help/img/412_4.png\",\n\t\"./mech_rec_help/img/413_1.png\": \"./app/panels/mech_rec_help/img/413_1.png\",\n\t\"./mech_rec_help/img/413_2.png\": \"./app/panels/mech_rec_help/img/413_2.png\",\n\t\"./mech_rec_help/img/413_3.png\": \"./app/panels/mech_rec_help/img/413_3.png\",\n\t\"./mech_rec_help/img/413_4.png\": \"./app/panels/mech_rec_help/img/413_4.png\",\n\t\"./mech_rec_help/img/413_5.png\": \"./app/panels/mech_rec_help/img/413_5.png\",\n\t\"./mech_rec_help/img/414_1.png\": \"./app/panels/mech_rec_help/img/414_1.png\",\n\t\"./mech_rec_help/img/414_2.png\": \"./app/panels/mech_rec_help/img/414_2.png\",\n\t\"./mech_rec_help/img/414_3.png\": \"./app/panels/mech_rec_help/img/414_3.png\",\n\t\"./mech_rec_help/img/41_1.png\": \"./app/panels/mech_rec_help/img/41_1.png\",\n\t\"./mech_rec_help/img/41_10.png\": \"./app/panels/mech_rec_help/img/41_10.png\",\n\t\"./mech_rec_help/img/41_11.png\": \"./app/panels/mech_rec_help/img/41_11.png\",\n\t\"./mech_rec_help/img/41_12.png\": \"./app/panels/mech_rec_help/img/41_12.png\",\n\t\"./mech_rec_help/img/41_2.png\": \"./app/panels/mech_rec_help/img/41_2.png\",\n\t\"./mech_rec_help/img/41_3.png\": \"./app/panels/mech_rec_help/img/41_3.png\",\n\t\"./mech_rec_help/img/41_4.png\": \"./app/panels/mech_rec_help/img/41_4.png\",\n\t\"./mech_rec_help/img/41_5.png\": \"./app/panels/mech_rec_help/img/41_5.png\",\n\t\"./mech_rec_help/img/41_6.png\": \"./app/panels/mech_rec_help/img/41_6.png\",\n\t\"./mech_rec_help/img/41_7.png\": \"./app/panels/mech_rec_help/img/41_7.png\",\n\t\"./mech_rec_help/img/41_8.png\": \"./app/panels/mech_rec_help/img/41_8.png\",\n\t\"./mech_rec_help/img/41_9.png\": \"./app/panels/mech_rec_help/img/41_9.png\",\n\t\"./mech_rec_help/img/42_1.png\": \"./app/panels/mech_rec_help/img/42_1.png\",\n\t\"./mech_rec_help/img/42_2.png\": \"./app/panels/mech_rec_help/img/42_2.png\",\n\t\"./mech_rec_help/img/42_3.png\": \"./app/panels/mech_rec_help/img/42_3.png\",\n\t\"./mech_rec_help/img/42_4.png\": \"./app/panels/mech_rec_help/img/42_4.png\",\n\t\"./mech_rec_help/img/43_1.png\": \"./app/panels/mech_rec_help/img/43_1.png\",\n\t\"./mech_rec_help/img/43_2.png\": \"./app/panels/mech_rec_help/img/43_2.png\",\n\t\"./mech_rec_help/img/43_3.png\": \"./app/panels/mech_rec_help/img/43_3.png\",\n\t\"./mech_rec_help/img/43_4.png\": \"./app/panels/mech_rec_help/img/43_4.png\",\n\t\"./mech_rec_help/img/43_5.png\": \"./app/panels/mech_rec_help/img/43_5.png\",\n\t\"./mech_rec_help/img/43_6.png\": \"./app/panels/mech_rec_help/img/43_6.png\",\n\t\"./mech_rec_help/img/43_7.png\": \"./app/panels/mech_rec_help/img/43_7.png\",\n\t\"./mech_rec_help/img/43_8.png\": \"./app/panels/mech_rec_help/img/43_8.png\",\n\t\"./mech_rec_help/img/44_1.png\": \"./app/panels/mech_rec_help/img/44_1.png\",\n\t\"./mech_rec_help/img/44_10.png\": \"./app/panels/mech_rec_help/img/44_10.png\",\n\t\"./mech_rec_help/img/44_2.png\": \"./app/panels/mech_rec_help/img/44_2.png\",\n\t\"./mech_rec_help/img/44_3.png\": \"./app/panels/mech_rec_help/img/44_3.png\",\n\t\"./mech_rec_help/img/44_4.png\": \"./app/panels/mech_rec_help/img/44_4.png\",\n\t\"./mech_rec_help/img/44_5.png\": \"./app/panels/mech_rec_help/img/44_5.png\",\n\t\"./mech_rec_help/img/44_6.png\": \"./app/panels/mech_rec_help/img/44_6.png\",\n\t\"./mech_rec_help/img/44_7.png\": \"./app/panels/mech_rec_help/img/44_7.png\",\n\t\"./mech_rec_help/img/44_8.png\": \"./app/panels/mech_rec_help/img/44_8.png\",\n\t\"./mech_rec_help/img/44_9.png\": \"./app/panels/mech_rec_help/img/44_9.png\",\n\t\"./mech_rec_help/img/45_1.png\": \"./app/panels/mech_rec_help/img/45_1.png\",\n\t\"./mech_rec_help/img/45_10.png\": \"./app/panels/mech_rec_help/img/45_10.png\",\n\t\"./mech_rec_help/img/45_2.png\": \"./app/panels/mech_rec_help/img/45_2.png\",\n\t\"./mech_rec_help/img/45_3.png\": \"./app/panels/mech_rec_help/img/45_3.png\",\n\t\"./mech_rec_help/img/45_4.png\": \"./app/panels/mech_rec_help/img/45_4.png\",\n\t\"./mech_rec_help/img/45_5.png\": \"./app/panels/mech_rec_help/img/45_5.png\",\n\t\"./mech_rec_help/img/45_6.png\": \"./app/panels/mech_rec_help/img/45_6.png\",\n\t\"./mech_rec_help/img/45_7.png\": \"./app/panels/mech_rec_help/img/45_7.png\",\n\t\"./mech_rec_help/img/45_8.png\": \"./app/panels/mech_rec_help/img/45_8.png\",\n\t\"./mech_rec_help/img/45_9.png\": \"./app/panels/mech_rec_help/img/45_9.png\",\n\t\"./mech_rec_help/img/46_1.png\": \"./app/panels/mech_rec_help/img/46_1.png\",\n\t\"./mech_rec_help/img/46_2.png\": \"./app/panels/mech_rec_help/img/46_2.png\",\n\t\"./mech_rec_help/img/46_3.png\": \"./app/panels/mech_rec_help/img/46_3.png\",\n\t\"./mech_rec_help/img/46_4.png\": \"./app/panels/mech_rec_help/img/46_4.png\",\n\t\"./mech_rec_help/img/46_5.png\": \"./app/panels/mech_rec_help/img/46_5.png\",\n\t\"./mech_rec_help/img/46_6.png\": \"./app/panels/mech_rec_help/img/46_6.png\",\n\t\"./mech_rec_help/img/47_1.png\": \"./app/panels/mech_rec_help/img/47_1.png\",\n\t\"./mech_rec_help/img/47_10.png\": \"./app/panels/mech_rec_help/img/47_10.png\",\n\t\"./mech_rec_help/img/47_11.png\": \"./app/panels/mech_rec_help/img/47_11.png\",\n\t\"./mech_rec_help/img/47_12.png\": \"./app/panels/mech_rec_help/img/47_12.png\",\n\t\"./mech_rec_help/img/47_2.png\": \"./app/panels/mech_rec_help/img/47_2.png\",\n\t\"./mech_rec_help/img/47_3.png\": \"./app/panels/mech_rec_help/img/47_3.png\",\n\t\"./mech_rec_help/img/47_4.png\": \"./app/panels/mech_rec_help/img/47_4.png\",\n\t\"./mech_rec_help/img/47_5.png\": \"./app/panels/mech_rec_help/img/47_5.png\",\n\t\"./mech_rec_help/img/47_6.png\": \"./app/panels/mech_rec_help/img/47_6.png\",\n\t\"./mech_rec_help/img/47_7.png\": \"./app/panels/mech_rec_help/img/47_7.png\",\n\t\"./mech_rec_help/img/47_8.png\": \"./app/panels/mech_rec_help/img/47_8.png\",\n\t\"./mech_rec_help/img/47_9.png\": \"./app/panels/mech_rec_help/img/47_9.png\",\n\t\"./mech_rec_help/img/48_1.png\": \"./app/panels/mech_rec_help/img/48_1.png\",\n\t\"./mech_rec_help/img/48_2.png\": \"./app/panels/mech_rec_help/img/48_2.png\",\n\t\"./mech_rec_help/img/48_3.png\": \"./app/panels/mech_rec_help/img/48_3.png\",\n\t\"./mech_rec_help/img/48_4.png\": \"./app/panels/mech_rec_help/img/48_4.png\",\n\t\"./mech_rec_help/img/49_1.png\": \"./app/panels/mech_rec_help/img/49_1.png\",\n\t\"./mech_rec_help/img/49_2.png\": \"./app/panels/mech_rec_help/img/49_2.png\",\n\t\"./mech_rec_help/img/49_3.png\": \"./app/panels/mech_rec_help/img/49_3.png\",\n\t\"./mech_rec_help/img/add1_1.png\": \"./app/panels/mech_rec_help/img/add1_1.png\",\n\t\"./mech_rec_help/img/add1_2.png\": \"./app/panels/mech_rec_help/img/add1_2.png\",\n\t\"./mech_rec_help/img/add1_3.png\": \"./app/panels/mech_rec_help/img/add1_3.png\",\n\t\"./mech_rec_help/img/add1_4.png\": \"./app/panels/mech_rec_help/img/add1_4.png\",\n\t\"./mech_rec_help/img/add1_5.png\": \"./app/panels/mech_rec_help/img/add1_5.png\",\n\t\"./mech_rec_help/img/add1_6.png\": \"./app/panels/mech_rec_help/img/add1_6.png\",\n\t\"./mech_rec_help/img/add1_7.png\": \"./app/panels/mech_rec_help/img/add1_7.png\",\n\t\"./mech_rec_help/img/add1_8.png\": \"./app/panels/mech_rec_help/img/add1_8.png\",\n\t\"./mech_rec_help/img/add1_9.png\": \"./app/panels/mech_rec_help/img/add1_9.png\",\n\t\"./mech_rec_help/index\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/index.js\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/mech_rec_help\": \"./app/panels/mech_rec_help/mech_rec_help.js\",\n\t\"./mech_rec_help/mech_rec_help.js\": \"./app/panels/mech_rec_help/mech_rec_help.js\",\n\t\"./panels_editor\": \"./app/panels/panels_editor/index.js\",\n\t\"./panels_editor/\": \"./app/panels/panels_editor/index.js\",\n\t\"./panels_editor/component_editor\": \"./app/panels/panels_editor/component_editor.js\",\n\t\"./panels_editor/component_editor.js\": \"./app/panels/panels_editor/component_editor.js\",\n\t\"./panels_editor/component_view\": \"./app/panels/panels_editor/component_view.js\",\n\t\"./panels_editor/component_view.js\": \"./app/panels/panels_editor/component_view.js\",\n\t\"./panels_editor/components/chart/editor\": \"./app/panels/panels_editor/components/chart/editor.js\",\n\t\"./panels_editor/components/chart/editor.js\": \"./app/panels/panels_editor/components/chart/editor.js\",\n\t\"./panels_editor/components/chart/view\": \"./app/panels/panels_editor/components/chart/view.js\",\n\t\"./panels_editor/components/chart/view.js\": \"./app/panels/panels_editor/components/chart/view.js\",\n\t\"./panels_editor/components/components\": \"./app/panels/panels_editor/components/components.js\",\n\t\"./panels_editor/components/components.js\": \"./app/panels/panels_editor/components/components.js\",\n\t\"./panels_editor/components/components_hooks\": \"./app/panels/panels_editor/components/components_hooks.js\",\n\t\"./panels_editor/components/components_hooks.js\": \"./app/panels/panels_editor/components/components_hooks.js\",\n\t\"./panels_editor/components/form/common\": \"./app/panels/panels_editor/components/form/common.js\",\n\t\"./panels_editor/components/form/common.js\": \"./app/panels/panels_editor/components/form/common.js\",\n\t\"./panels_editor/components/form/editor\": \"./app/panels/panels_editor/components/form/editor.js\",\n\t\"./panels_editor/components/form/editor.js\": \"./app/panels/panels_editor/components/form/editor.js\",\n\t\"./panels_editor/components/form/view\": \"./app/panels/panels_editor/components/form/view.js\",\n\t\"./panels_editor/components/form/view.js\": \"./app/panels/panels_editor/components/form/view.js\",\n\t\"./panels_editor/components/indicator/editor\": \"./app/panels/panels_editor/components/indicator/editor.js\",\n\t\"./panels_editor/components/indicator/editor.js\": \"./app/panels/panels_editor/components/indicator/editor.js\",\n\t\"./panels_editor/components/indicator/view\": \"./app/panels/panels_editor/components/indicator/view.js\",\n\t\"./panels_editor/components/indicator/view.js\": \"./app/panels/panels_editor/components/indicator/view.js\",\n\t\"./panels_editor/components/table/editor\": \"./app/panels/panels_editor/components/table/editor.js\",\n\t\"./panels_editor/components/table/editor.js\": \"./app/panels/panels_editor/components/table/editor.js\",\n\t\"./panels_editor/components/table/view\": \"./app/panels/panels_editor/components/table/view.js\",\n\t\"./panels_editor/components/table/view.js\": \"./app/panels/panels_editor/components/table/view.js\",\n\t\"./panels_editor/index\": \"./app/panels/panels_editor/index.js\",\n\t\"./panels_editor/index.js\": \"./app/panels/panels_editor/index.js\",\n\t\"./panels_editor/layout_item\": \"./app/panels/panels_editor/layout_item.js\",\n\t\"./panels_editor/layout_item.js\": \"./app/panels/panels_editor/layout_item.js\",\n\t\"./panels_editor/panels_editor\": \"./app/panels/panels_editor/panels_editor.js\",\n\t\"./panels_editor/panels_editor.css\": \"./app/panels/panels_editor/panels_editor.css\",\n\t\"./panels_editor/panels_editor.js\": \"./app/panels/panels_editor/panels_editor.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/21_1.png\": \"./app/panels/prj_help/img/21_1.png\",\n\t\"./prj_help/img/21_2.png\": \"./app/panels/prj_help/img/21_2.png\",\n\t\"./prj_help/img/21_3.png\": \"./app/panels/prj_help/img/21_3.png\",\n\t\"./prj_help/img/21_4.png\": \"./app/panels/prj_help/img/21_4.png\",\n\t\"./prj_help/img/21_5.png\": \"./app/panels/prj_help/img/21_5.png\",\n\t\"./prj_help/img/22_1.png\": \"./app/panels/prj_help/img/22_1.png\",\n\t\"./prj_help/img/22_2.png\": \"./app/panels/prj_help/img/22_2.png\",\n\t\"./prj_help/img/22_3.png\": \"./app/panels/prj_help/img/22_3.png\",\n\t\"./prj_help/img/23_1.png\": \"./app/panels/prj_help/img/23_1.png\",\n\t\"./prj_help/img/23_2.png\": \"./app/panels/prj_help/img/23_2.png\",\n\t\"./prj_help/img/24_1.png\": \"./app/panels/prj_help/img/24_1.png\",\n\t\"./prj_help/img/24_2.png\": \"./app/panels/prj_help/img/24_2.png\",\n\t\"./prj_help/img/24_3.png\": \"./app/panels/prj_help/img/24_3.png\",\n\t\"./prj_help/img/24_4.png\": \"./app/panels/prj_help/img/24_4.png\",\n\t\"./prj_help/img/24_5.png\": \"./app/panels/prj_help/img/24_5.png\",\n\t\"./prj_help/img/3_1.png\": \"./app/panels/prj_help/img/3_1.png\",\n\t\"./prj_help/img/3_2.png\": \"./app/panels/prj_help/img/3_2.png\",\n\t\"./prj_help/img/3_3.png\": \"./app/panels/prj_help/img/3_3.png\",\n\t\"./prj_help/img/3_4.png\": \"./app/panels/prj_help/img/3_4.png\",\n\t\"./prj_help/img/3_5.png\": \"./app/panels/prj_help/img/3_5.png\",\n\t\"./prj_help/img/3_6.png\": \"./app/panels/prj_help/img/3_6.png\",\n\t\"./prj_help/img/41_1.png\": \"./app/panels/prj_help/img/41_1.png\",\n\t\"./prj_help/img/41_2.png\": \"./app/panels/prj_help/img/41_2.png\",\n\t\"./prj_help/img/42_1.png\": \"./app/panels/prj_help/img/42_1.png\",\n\t\"./prj_help/img/42_2.png\": \"./app/panels/prj_help/img/42_2.png\",\n\t\"./prj_help/img/43_1.png\": \"./app/panels/prj_help/img/43_1.png\",\n\t\"./prj_help/img/43_2.png\": \"./app/panels/prj_help/img/43_2.png\",\n\t\"./prj_help/img/43_3.png\": \"./app/panels/prj_help/img/43_3.png\",\n\t\"./prj_help/img/43_4.png\": \"./app/panels/prj_help/img/43_4.png\",\n\t\"./prj_help/img/44_1.png\": \"./app/panels/prj_help/img/44_1.png\",\n\t\"./prj_help/img/44_2.png\": \"./app/panels/prj_help/img/44_2.png\",\n\t\"./prj_help/img/44_3.png\": \"./app/panels/prj_help/img/44_3.png\",\n\t\"./prj_help/img/44_4.png\": \"./app/panels/prj_help/img/44_4.png\",\n\t\"./prj_help/img/45_1.png\": \"./app/panels/prj_help/img/45_1.png\",\n\t\"./prj_help/img/46_1.png\": \"./app/panels/prj_help/img/46_1.png\",\n\t\"./prj_help/img/47_1.png\": \"./app/panels/prj_help/img/47_1.png\",\n\t\"./prj_help/img/71_1.png\": \"./app/panels/prj_help/img/71_1.png\",\n\t\"./prj_help/img/72_1.png\": \"./app/panels/prj_help/img/72_1.png\",\n\t\"./prj_help/img/72_2.png\": \"./app/panels/prj_help/img/72_2.png\",\n\t\"./prj_help/img/72_3.png\": \"./app/panels/prj_help/img/72_3.png\",\n\t\"./prj_help/img/74_1.png\": \"./app/panels/prj_help/img/74_1.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_info\": \"./app/panels/prj_info/index.js\",\n\t\"./prj_info/\": \"./app/panels/prj_info/index.js\",\n\t\"./prj_info/filter\": \"./app/panels/prj_info/filter.js\",\n\t\"./prj_info/filter.js\": \"./app/panels/prj_info/filter.js\",\n\t\"./prj_info/filter_dialog\": \"./app/panels/prj_info/filter_dialog.js\",\n\t\"./prj_info/filter_dialog.js\": \"./app/panels/prj_info/filter_dialog.js\",\n\t\"./prj_info/index\": \"./app/panels/prj_info/index.js\",\n\t\"./prj_info/index.js\": \"./app/panels/prj_info/index.js\",\n\t\"./prj_info/layouts\": \"./app/panels/prj_info/layouts.js\",\n\t\"./prj_info/layouts.js\": \"./app/panels/prj_info/layouts.js\",\n\t\"./prj_info/prj_info\": \"./app/panels/prj_info/prj_info.js\",\n\t\"./prj_info/prj_info.js\": \"./app/panels/prj_info/prj_info.js\",\n\t\"./prj_info/projects\": \"./app/panels/prj_info/projects.js\",\n\t\"./prj_info/projects.js\": \"./app/panels/prj_info/projects.js\",\n\t\"./prj_info/projects_hooks\": \"./app/panels/prj_info/projects_hooks.js\",\n\t\"./prj_info/projects_hooks.js\": \"./app/panels/prj_info/projects_hooks.js\",\n\t\"./prj_info/projects_layouts\": \"./app/panels/prj_info/projects_layouts.js\",\n\t\"./prj_info/projects_layouts.js\": \"./app/panels/prj_info/projects_layouts.js\",\n\t\"./prj_info/stage_detail\": \"./app/panels/prj_info/stage_detail.js\",\n\t\"./prj_info/stage_detail.js\": \"./app/panels/prj_info/stage_detail.js\",\n\t\"./prj_info/stage_detail_hooks\": \"./app/panels/prj_info/stage_detail_hooks.js\",\n\t\"./prj_info/stage_detail_hooks.js\": \"./app/panels/prj_info/stage_detail_hooks.js\",\n\t\"./prj_info/stage_detail_layouts\": \"./app/panels/prj_info/stage_detail_layouts.js\",\n\t\"./prj_info/stage_detail_layouts.js\": \"./app/panels/prj_info/stage_detail_layouts.js\",\n\t\"./prj_info/stages\": \"./app/panels/prj_info/stages.js\",\n\t\"./prj_info/stages.js\": \"./app/panels/prj_info/stages.js\",\n\t\"./prj_info/stages_hooks\": \"./app/panels/prj_info/stages_hooks.js\",\n\t\"./prj_info/stages_hooks.js\": \"./app/panels/prj_info/stages_hooks.js\",\n\t\"./prj_info/stages_layouts\": \"./app/panels/prj_info/stages_layouts.js\",\n\t\"./prj_info/stages_layouts.js\": \"./app/panels/prj_info/stages_layouts.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl.js\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/layouts\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/layouts.js\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./query_editor\": \"./app/panels/query_editor/index.js\",\n\t\"./query_editor/\": \"./app/panels/query_editor/index.js\",\n\t\"./query_editor/common\": \"./app/panels/query_editor/common.js\",\n\t\"./query_editor/common.js\": \"./app/panels/query_editor/common.js\",\n\t\"./query_editor/components/attribute/attribute\": \"./app/panels/query_editor/components/attribute/attribute.js\",\n\t\"./query_editor/components/attribute/attribute.js\": \"./app/panels/query_editor/components/attribute/attribute.js\",\n\t\"./query_editor/components/entity/entity\": \"./app/panels/query_editor/components/entity/entity.js\",\n\t\"./query_editor/components/entity/entity.css\": \"./app/panels/query_editor/components/entity/entity.css\",\n\t\"./query_editor/components/entity/entity.js\": \"./app/panels/query_editor/components/entity/entity.js\",\n\t\"./query_editor/components/entity_add_dialog/entity_add_dialog\": \"./app/panels/query_editor/components/entity_add_dialog/entity_add_dialog.js\",\n\t\"./query_editor/components/entity_add_dialog/entity_add_dialog.js\": \"./app/panels/query_editor/components/entity_add_dialog/entity_add_dialog.js\",\n\t\"./query_editor/components/queries_manager/queries_list\": \"./app/panels/query_editor/components/queries_manager/queries_list.js\",\n\t\"./query_editor/components/queries_manager/queries_list.js\": \"./app/panels/query_editor/components/queries_manager/queries_list.js\",\n\t\"./query_editor/components/queries_manager/queries_manager\": \"./app/panels/query_editor/components/queries_manager/queries_manager.js\",\n\t\"./query_editor/components/queries_manager/queries_manager.js\": \"./app/panels/query_editor/components/queries_manager/queries_manager.js\",\n\t\"./query_editor/components/queries_manager/query_iu_dialog\": \"./app/panels/query_editor/components/queries_manager/query_iu_dialog.js\",\n\t\"./query_editor/components/queries_manager/query_iu_dialog.js\": \"./app/panels/query_editor/components/queries_manager/query_iu_dialog.js\",\n\t\"./query_editor/components/query_diagram/query_diagram\": \"./app/panels/query_editor/components/query_diagram/query_diagram.js\",\n\t\"./query_editor/components/query_diagram/query_diagram.css\": \"./app/panels/query_editor/components/query_diagram/query_diagram.css\",\n\t\"./query_editor/components/query_diagram/query_diagram.js\": \"./app/panels/query_editor/components/query_diagram/query_diagram.js\",\n\t\"./query_editor/hooks\": \"./app/panels/query_editor/hooks.js\",\n\t\"./query_editor/hooks.js\": \"./app/panels/query_editor/hooks.js\",\n\t\"./query_editor/index\": \"./app/panels/query_editor/index.js\",\n\t\"./query_editor/index.js\": \"./app/panels/query_editor/index.js\",\n\t\"./query_editor/query_editor\": \"./app/panels/query_editor/query_editor.js\",\n\t\"./query_editor/query_editor.js\": \"./app/panels/query_editor/query_editor.js\",\n\t\"./rrp_conf_editor\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/common\": \"./app/panels/rrp_conf_editor/common.js\",\n\t\"./rrp_conf_editor/common.js\": \"./app/panels/rrp_conf_editor/common.js\",\n\t\"./rrp_conf_editor/components/action_message\": \"./app/panels/rrp_conf_editor/components/action_message.js\",\n\t\"./rrp_conf_editor/components/action_message.js\": \"./app/panels/rrp_conf_editor/components/action_message.js\",\n\t\"./rrp_conf_editor/components/dialog_help\": \"./app/panels/rrp_conf_editor/components/dialog_help.js\",\n\t\"./rrp_conf_editor/components/dialog_help.js\": \"./app/panels/rrp_conf_editor/components/dialog_help.js\",\n\t\"./rrp_conf_editor/components/dialog_mark_iu\": \"./app/panels/rrp_conf_editor/components/dialog_mark_iu.js\",\n\t\"./rrp_conf_editor/components/dialog_mark_iu.js\": \"./app/panels/rrp_conf_editor/components/dialog_mark_iu.js\",\n\t\"./rrp_conf_editor/components/dialog_order\": \"./app/panels/rrp_conf_editor/components/dialog_order.js\",\n\t\"./rrp_conf_editor/components/dialog_order.js\": \"./app/panels/rrp_conf_editor/components/dialog_order.js\",\n\t\"./rrp_conf_editor/components/dialog_section_iu\": \"./app/panels/rrp_conf_editor/components/dialog_section_iu.js\",\n\t\"./rrp_conf_editor/components/dialog_section_iu.js\": \"./app/panels/rrp_conf_editor/components/dialog_section_iu.js\",\n\t\"./rrp_conf_editor/components/mark_card\": \"./app/panels/rrp_conf_editor/components/mark_card.js\",\n\t\"./rrp_conf_editor/components/mark_card.js\": \"./app/panels/rrp_conf_editor/components/mark_card.js\",\n\t\"./rrp_conf_editor/components/mark_card_toolbar\": \"./app/panels/rrp_conf_editor/components/mark_card_toolbar.js\",\n\t\"./rrp_conf_editor/components/mark_card_toolbar.js\": \"./app/panels/rrp_conf_editor/components/mark_card_toolbar.js\",\n\t\"./rrp_conf_editor/components/mark_cn_list\": \"./app/panels/rrp_conf_editor/components/mark_cn_list.js\",\n\t\"./rrp_conf_editor/components/mark_cn_list.js\": \"./app/panels/rrp_conf_editor/components/mark_cn_list.js\",\n\t\"./rrp_conf_editor/components/marks\": \"./app/panels/rrp_conf_editor/components/marks.js\",\n\t\"./rrp_conf_editor/components/marks.js\": \"./app/panels/rrp_conf_editor/components/marks.js\",\n\t\"./rrp_conf_editor/components/marks_toolbar\": \"./app/panels/rrp_conf_editor/components/marks_toolbar.js\",\n\t\"./rrp_conf_editor/components/marks_toolbar.js\": \"./app/panels/rrp_conf_editor/components/marks_toolbar.js\",\n\t\"./rrp_conf_editor/components/section\": \"./app/panels/rrp_conf_editor/components/section.js\",\n\t\"./rrp_conf_editor/components/section.js\": \"./app/panels/rrp_conf_editor/components/section.js\",\n\t\"./rrp_conf_editor/components/section_tab\": \"./app/panels/rrp_conf_editor/components/section_tab.js\",\n\t\"./rrp_conf_editor/components/section_tab.js\": \"./app/panels/rrp_conf_editor/components/section_tab.js\",\n\t\"./rrp_conf_editor/components/sections\": \"./app/panels/rrp_conf_editor/components/sections.js\",\n\t\"./rrp_conf_editor/components/sections.js\": \"./app/panels/rrp_conf_editor/components/sections.js\",\n\t\"./rrp_conf_editor/hooks\": \"./app/panels/rrp_conf_editor/hooks.js\",\n\t\"./rrp_conf_editor/hooks.js\": \"./app/panels/rrp_conf_editor/hooks.js\",\n\t\"./rrp_conf_editor/index\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/index.js\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/layouts\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/layouts.js\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor.js\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/cyclogram\": \"./app/panels/samples/cyclogram.js\",\n\t\"./samples/cyclogram.js\": \"./app/panels/samples/cyclogram.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/indicator\": \"./app/panels/samples/indicator.js\",\n\t\"./samples/indicator.js\": \"./app/panels/samples/indicator.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\",\n\t\"./samples/svg\": \"./app/panels/samples/svg.js\",\n\t\"./samples/svg.js\": \"./app/panels/samples/svg.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); /***/ }), @@ -686,7 +818,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecCostProdPlans: () => (/* binding */ MechRecCostProdPlans)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_20__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormGroup/FormGroup.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Checkbox/Checkbox.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Card/Card.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardHeader/CardHeader.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardContent/CardContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardActions/CardActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Select/Select.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/navigation */ \"./app/context/navigation.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_cost_prod_plans/hooks.js\");\n/* harmony import */ var _datagrids_fcroutlst__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./datagrids/fcroutlst */ \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\");\n/* harmony import */ var _datagrids_incomefromdeps__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./datagrids/incomefromdeps */ \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственная программа\r\n Панель мониторинга: Корневая панель производственной программы\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Контекст навигации\n //Подключение компонентов к настройкам приложения\n //Заголовок страницы\n //Типовые стили\n //Диаграмма Ганта\n //Вспомогательные функции\n //Вспомогательные хуки\n //Таблица \"Маршрутные листы\"\n //Таблица \"Приходы из подразделений\"\n\n//---------\n//Константы\n//---------\n\n//Склонения для документов\nconst DECLINATIONS = [\"план\", \"плана\", \"планов\"];\n\n//Поля сортировки\nconst SORT_REP_DATE = \"DREP_DATE\";\nconst SORT_REP_DATE_TO = \"DREP_DATE_TO\";\n\n//Стили\nconst STYLES = {\n PLANS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\"\n },\n PLANS_CHECKBOX_HAVEDOCS: {\n alignContent: \"space-around\"\n },\n PLANS_LIST_ITEM_ZERODOCS: {\n backgroundColor: \"#ebecec\"\n },\n PLANS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PLANS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.6rem\",\n textTransform: \"uppercase\"\n },\n PLANS_BUTTON: {\n position: \"absolute\",\n top: `calc(${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__.APP_BAR_HEIGHT} + 16px)`,\n left: \"16px\"\n },\n PLANS_DRAWER: {\n width: \"350px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"350px\",\n display: \"inline-block\",\n boxSizing: \"border-box\",\n ..._app_styles__WEBPACK_IMPORTED_MODULE_6__.APP_STYLES.SCROLL\n }\n },\n GANTT_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__.APP_BAR_HEIGHT})`,\n width: \"100vw\",\n paddingTop: \"24px\"\n },\n GANTT_TITLE: {\n paddingLeft: \"250px\",\n paddingRight: \"250px\"\n },\n SECOND_TABLE: {\n paddingTop: \"30px\"\n },\n TASK_DIALOG_CARD_CONTAINER: {\n padding: \"0px\"\n },\n TASK_DIALOG_LIST_ITEM_ICON: {\n justifyContent: \"center\"\n },\n TASK_DIALOG_ICON: {\n fontSize: \"2rem\"\n },\n TASK_DIALOG_ACTION_CONTAINER: {\n border: 1,\n borderColor: \"text.primary\",\n borderRadius: \"5px\",\n width: \"100%\"\n },\n FILTERS: {\n display: \"table\",\n float: \"right\"\n },\n FILTERS_DATE: {\n display: \"table-cell\",\n verticalAlign: \"middle\"\n },\n FILTERS_LEVEL: {\n display: \"table-cell\",\n verticalAlign: \"middle\",\n paddingLeft: \"15px\"\n },\n FILTERS_LEVEL_CAPTION: {\n display: \"flex\",\n alignItems: \"center\"\n },\n FILTERS_LEVEL_LIMIT_ICON: {\n padding: \"0px 8px\",\n color: \"#9f9c9c\"\n },\n FILTERS_LIMIT_SELECT: nOutOfLimit => {\n return nOutOfLimit === 1 ? {\n \".MuiOutlinedInput-notchedOutline\": {\n borderColor: \"#e9863c\"\n },\n \"&:hover .MuiOutlinedInput-notchedOutline\": {\n borderColor: \"#e9863c\",\n borderWidth: \"0.15rem\"\n },\n \"&.Mui-focused .MuiOutlinedInput-notchedOutline\": {\n borderColor: \"#e9863c\",\n borderWidth: \"0.15rem\"\n }\n } : {};\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Разбор XML с данными спецификации производственной программы\nconst parseProdPlanSpXML = async xmlDoc => {\n const data = await (0,_core_utils__WEBPACK_IMPORTED_MODULE_8__.xml2JSON)({\n xmlDoc,\n attributeValueProcessor: (name, val) => [\"numb\", \"title\"].includes(name) ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_8__.formatDateJSONDateOnly)(val) : val\n });\n return data.XDATA.XGANTT;\n};\n\n//Форматирование для отображения количества документов\nconst formatCountDocs = nCountDocs => {\n //Получаем последнюю цифру в значении\n let num = nCountDocs % 100 % 10;\n //Документов\n if (nCountDocs > 10 && nCountDocs < 20) return `${nCountDocs} ${DECLINATIONS[2]}`;\n //Документа\n if (num > 1 && num < 5) return `${nCountDocs} ${DECLINATIONS[1]}`;\n //Документ\n if (num == 1) return `${nCountDocs} ${DECLINATIONS[0]}`;\n //Документов\n return `${nCountDocs} ${DECLINATIONS[2]}`;\n};\n\n//Список каталогов планов\nconst PlanCtlgsList = ({\n planCtlgs = [],\n selectedPlanCtlg,\n filter,\n setFilter,\n onClick\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.PLANS_FINDER,\n name: \"planFilter\",\n label: \"\\u041A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\",\n value: filter.ctlgName,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(pv => ({\n ...pv,\n ctlgName: event.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: STYLES.PLANS_CHECKBOX_HAVEDOCS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n checked: filter.haveDocs,\n onChange: event => setFilter(pv => ({\n ...pv,\n haveDocs: event.target.checked\n }))\n }),\n label: \"\\u0422\\u043E\\u043B\\u044C\\u043A\\u043E \\u0441 \\u043F\\u043B\\u0430\\u043D\\u0430\\u043C\\u0438\",\n labelPlacement: \"end\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], null, planCtlgs.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n sx: p.NCOUNT_DOCS == 0 ? STYLES.PLANS_LIST_ITEM_ZERODOCS : null,\n key: p.NRN,\n selected: p.NRN === selectedPlanCtlg,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_SECONDARY\n }, formatCountDocs(p.NCOUNT_DOCS))\n })))));\n};\n\n//Контроль свойств - Список каталогов планов\nPlanCtlgsList.propTypes = {\n planCtlgs: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().array),\n selectedPlanCtlg: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().object),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().func)\n};\n\n//Генерация диалога задачи\nconst taskDialogRenderer = ({\n task,\n taskColors,\n close,\n handleTaskDetailOpen\n}) => {\n //Стиль и описание для легенды\n const legendDesc = (0,_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.taskLegendDesc)({\n task,\n taskColors\n });\n //Элемент карточки задачи\n const cardItem = ({\n listItemsStyle = {},\n icon,\n primaryText = null,\n secondaryText = null\n }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n disablePadding: true,\n sx: listItemsStyle\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: STYLES.TASK_DIALOG_LIST_ITEM_ICON\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n sx: STYLES.TASK_DIALOG_ICON\n }, icon)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n primary: primaryText,\n secondary: secondaryText\n })));\n //Собираем содержимое диалога\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n title: task.name,\n titleTypographyProps: {\n variant: \"h6\"\n },\n subheader: `${(0,_core_utils__WEBPACK_IMPORTED_MODULE_8__.formatDateRF)(task.start)} - ${(0,_core_utils__WEBPACK_IMPORTED_MODULE_8__.formatDateRF)(task.end)}`,\n action: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n \"aria-label\": \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\",\n onClick: close\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], null, \"close\"))\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_27__[\"default\"], {\n sx: STYLES.TASK_DIALOG_CARD_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], null, cardItem({\n icon: \"fast_forward\",\n primaryText: `${task.start_fact} ${task.meas}`,\n secondaryText: \"Запущено\"\n }), cardItem({\n icon: \"assessment\",\n primaryText: `${task.main_quant} ${task.meas}`,\n secondaryText: \"Количество план\"\n }), cardItem({\n icon: \"verified\",\n primaryText: `${task.rel_fact} ${task.meas}`,\n secondaryText: \"Количество сдано\"\n }), cardItem({\n icon: \"date_range\",\n primaryText: task.rep_date_to,\n secondaryText: \"Дата выпуска план\"\n }), legendDesc ? cardItem({\n listItemsStyle: legendDesc.style,\n icon: \"palette\",\n secondaryText: legendDesc.text\n }) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n disableSpacing: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n p: 2,\n display: \"flex\",\n justifyContent: \"center\",\n sx: STYLES.TASK_DIALOG_ACTION_CONTAINER\n }, (0,_core_utils__WEBPACK_IMPORTED_MODULE_8__.hasValue)(task.type) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_30__[\"default\"], {\n size: \"large\",\n variant: \"contained\",\n color: \"primary\",\n onClick: () => handleTaskDetailOpen(task.rn, task.type)\n }, task[\"detail_list\"]) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n color: \"textSecondary\"\n }, `Анализ отклонений недоступен${task[\"detail_list\"] ? `: ${task[\"detail_list\"]}` : \"\"}`))));\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель производственной программы\nconst MechRecCostProdPlans = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n planCtlgs: [],\n planCtlgsLoaded: false,\n selectedPlanCtlgSpecsLoaded: false,\n selectedPlanCtlg: null,\n selectedPlanCtlgMaxLevel: null,\n selectedPlanCtlgLevel: null,\n selectedPlanCtlgOutOfLimit: 0,\n selectedPlanCtlgSort: null,\n selectedPlanCtlgMenuItems: null,\n gantt: {},\n selectedTaskDetail: null,\n selectedTaskDetailType: null,\n planSpec: null\n });\n //Состояние для фильтра каталогов\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ctlgName: \"\",\n haveDocs: false\n });\n\n //Массив отфильтрованных каталогов\n const filteredPlanCtgls = (0,_hooks__WEBPACK_IMPORTED_MODULE_9__.useFilteredPlanCtlgs)(state.planCtlgs, filter);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Подключение к контексту навигации\n const {\n getNavigationSearch\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_3__.NavigationCtx);\n\n //Подключение к контексту сообщений\n const {\n showMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Инициализация каталогов планов\n const initPlanCtlgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_PP_CTLG_INIT\",\n args: {},\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_CRNS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n planCtlgs: [...(data?.XFCPRODPLAN_CRNS || [])],\n planCtlgsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Выбор каталога планов\n const selectPlan = project => {\n setState(pv => ({\n ...pv,\n selectedPlanCtlg: project,\n selectedPlanCtlgSpecsLoaded: false,\n selectedPlanCtlgMaxLevel: null,\n selectedPlanCtlgLevel: null,\n selectedPlanCtlgOutOfLimit: 0,\n selectedPlanCtlgSort: null,\n selectedPlanCtlgMenuItems: null,\n gantt: {},\n showPlanList: false,\n selectedTaskDetail: null,\n selectedTaskDetailType: null\n }));\n };\n\n //Сброс выбора каталога планов\n const unselectPlan = () => setState(pv => ({\n ...pv,\n selectedPlanCtlgSpecsLoaded: false,\n selectedPlanCtlg: null,\n selectedPlanCtlgMaxLevel: null,\n selectedPlanCtlgLevel: null,\n selectedPlanCtlgOutOfLimit: 0,\n selectedPlanCtlgSort: null,\n selectedPlanCtlgMenuItems: null,\n gantt: {},\n showPlanList: false,\n selectedTaskDetail: null,\n selectedTaskDetailType: null\n }));\n\n //Загрузка списка спецификаций каталога планов\n const loadPlanCtglSpecs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (level = null, sort = null) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLANSP_GET\",\n args: {\n NCRN: state.selectedPlanCtlg,\n NLEVEL: level,\n SSORT_FIELD: sort,\n NFCPRODPLANSP: state.planSpec\n }\n });\n let doc = await parseProdPlanSpXML(data.COUT);\n setState(pv => ({\n ...pv,\n selectedPlanCtlgMaxLevel: data.NMAX_LEVEL,\n selectedPlanCtlgLevel: level || level === 0 ? level : data.NMAX_LEVEL,\n selectedPlanCtlgOutOfLimit: data.NOUT_OF_LIMIT,\n selectedPlanCtlgSort: sort,\n selectedPlanCtlgMenuItems: state.selectedPlanCtlgMenuItems ? state.selectedPlanCtlgMenuItems : [...Array(data.NMAX_LEVEL).keys()].map(el => el + 1),\n selectedPlanCtlgSpecsLoaded: true,\n gantt: {\n ...doc,\n tasks: [...(doc?.tasks || [])]\n }\n }));\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [executeStored, state.ident, state.selectedPlanCtlg, state.planSpec]);\n\n //Обработка нажатия на элемент в списке каталогов планов\n const handleProjectClick = project => {\n if (state.selectedPlanCtlg != project.NRN) selectPlan(project.NRN);else unselectPlan();\n };\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const actionPrms = getNavigationSearch();\n if (actionPrms.NSPRN) setState(pv => ({\n ...pv,\n planSpec: parseInt(actionPrms.NSPRN),\n init: true\n }));else initPlanCtlgs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При смене выбранного каталога плана или при явном указании позиции спецификации плана\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedPlanCtlg || state.planSpec) loadPlanCtglSpecs(null, SORT_REP_DATE_TO);\n }, [state.selectedPlanCtlg, state.planSpec, loadPlanCtglSpecs]);\n\n //Выбор уровня\n const handleChangeSelectLevel = selectedLevel => {\n loadPlanCtglSpecs(selectedLevel, state.selectedPlanCtlgSort);\n setState(pv => ({\n ...pv,\n selectedPlanCtlgLevel: selectedLevel\n }));\n };\n\n //Выбор сортировки\n const handleChangeSelectSort = selectedSort => {\n loadPlanCtglSpecs(state.selectedPlanCtlgLevel, selectedSort);\n setState(pv => ({\n ...pv,\n selectedPlanCtlgSort: selectedSort\n }));\n };\n\n //При закрытии окна детализации\n const handleTaskDetailClose = () => {\n setState(pv => ({\n ...pv,\n selectedTaskDetail: null,\n selectedTaskDetailType: null\n }));\n };\n\n //При открытии окна детализации\n const handleTaskDetailOpen = (taskRn, taskType) => {\n setState(pv => ({\n ...pv,\n selectedTaskDetail: taskRn,\n selectedTaskDetailType: taskType\n }));\n };\n\n //При открытии окна информации об ограничении уровня\n const handleLevelLimitInfoOpen = () => {\n //Отображаем информацию\n showMsgInfo(`Размер производственной программы превышает предельно допустимый для одновременного отображения в виде диаграммы Ганта. \n Доступные для просмотра уровни вложенности ограничены. \n Вы можете просматривать производственную программу частями, используя действие \"Открытие панели Производственная программа\" в спецификации \"Выпуск\" \n раздела \"Планы и отчеты производства изделий\".`);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], null, !state.planSpec ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_31__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PLANS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPlanList: !pv.showPlanList\n }))\n }, \"\\u041A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\\u0438 \\u043F\\u043B\\u0430\\u043D\\u043E\\u0432\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_32__[\"default\"], {\n anchor: \"left\",\n open: state.showPlanList,\n onClose: () => setState(pv => ({\n ...pv,\n showPlanList: false\n })),\n sx: STYLES.PLANS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanCtlgsList, {\n planCtlgs: filteredPlanCtgls,\n selectedPlanCtlg: state.selectedPlanCtlg,\n filter: filter,\n setFilter: setFilter,\n onClick: handleProjectClick\n }))) : null, state.init == true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_33__[\"default\"], {\n container: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_33__[\"default\"], {\n item: true,\n xs: 12\n }, state.selectedPlanCtlgSpecsLoaded ? state.gantt.tasks.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n pt: 3\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: state.planSpec ? \"Не найдено данных для выбранной позиции плана\" : \"В каталоге планов отсутствуют записи спецификации\"\n })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], null, state.selectedPlanCtlgMaxLevel ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n sx: STYLES.FILTERS,\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n sx: STYLES.FILTERS_DATE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_34__[\"default\"], {\n id: \"select-label-sort\"\n }, \"\\u0421\\u043E\\u0440\\u0442\\u0438\\u0440\\u043E\\u0432\\u043A\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_35__[\"default\"], {\n labelId: \"select-label-sort\",\n id: \"select-sort\",\n value: state.selectedPlanCtlgSort,\n label: \"\\u0421\\u043E\\u0440\\u0442\\u0438\\u0440\\u043E\\u0432\\u043A\\u0430\",\n onChange: event => {\n handleChangeSelectSort(event.target.value);\n },\n defaultValue: state.selectedPlanCtlgLevel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_36__[\"default\"], {\n value: SORT_REP_DATE_TO,\n key: \"1\"\n }, \"\\u0414\\u0430\\u0442\\u0430 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_36__[\"default\"], {\n value: SORT_REP_DATE,\n key: \"2\"\n }, \"\\u0414\\u0430\\u0442\\u0430 \\u0437\\u0430\\u043F\\u0443\\u0441\\u043A\\u0430\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n sx: STYLES.FILTERS_LEVEL\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n sx: STYLES.FILTERS_LEVEL_CAPTION\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_34__[\"default\"], {\n id: \"select-label-level\"\n }, \"\\u0414\\u043E \\u0443\\u0440\\u043E\\u0432\\u043D\\u044F\"), state.selectedPlanCtlgOutOfLimit === 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n sx: STYLES.FILTERS_LEVEL_LIMIT_ICON,\n onClick: handleLevelLimitInfoOpen\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], null, \"info\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_35__[\"default\"], {\n sx: STYLES.FILTERS_LIMIT_SELECT(state.selectedPlanCtlgOutOfLimit),\n labelId: \"select-label-level\",\n id: \"select-level\",\n value: state.selectedPlanCtlgLevel,\n label: \"\\u0423\\u0440\\u043E\\u0432\\u0435\\u043D\\u044C\",\n onChange: event => {\n handleChangeSelectLevel(event.target.value);\n },\n defaultValue: state.selectedPlanCtlgLevel\n }, state.selectedPlanCtlgMenuItems.map(el => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_36__[\"default\"], {\n value: el,\n key: el\n }, el))))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_4__.P8P_GANTT_CONFIG_PROPS, state.gantt, {\n containerStyle: STYLES.GANTT_CONTAINER,\n titleStyle: STYLES.GANTT_TITLE,\n taskDialogRenderer: prms => taskDialogRenderer({\n ...prms,\n handleTaskDetailOpen\n })\n }))) : !state.selectedPlanCtlg ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n pt: 3\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: state.planSpec ? \"Загружаю график для выбранной позиции плана...\" : \"Укажите каталог планов для отображения их спецификаций\"\n })) : null)) : null, state.selectedTaskDetail ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_37__[\"default\"], {\n open: true,\n onClose: handleTaskDetailClose,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_38__[\"default\"], null, [0, 1, 4].includes(state.selectedTaskDetailType) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_datagrids_fcroutlst__WEBPACK_IMPORTED_MODULE_10__.CostRouteListsDataGrid, {\n task: state.selectedTaskDetail,\n taskType: state.selectedTaskDetailType\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_datagrids_incomefromdeps__WEBPACK_IMPORTED_MODULE_11__.IncomFromDepsDataGrid, {\n task: state.selectedTaskDetail,\n taskType: state.selectedTaskDetailType\n }), state.selectedTaskDetailType === 3 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n sx: STYLES.SECOND_TABLE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_datagrids_fcroutlst__WEBPACK_IMPORTED_MODULE_10__.CostRouteListsDataGrid, {\n task: state.selectedTaskDetail,\n taskType: state.selectedTaskDetailType\n })) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_39__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_30__[\"default\"], {\n onClick: handleTaskDetailClose\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\"))) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecCostProdPlans: () => (/* binding */ MechRecCostProdPlans)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_23__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormGroup/FormGroup.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Checkbox/Checkbox.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tooltip/Tooltip.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Card/Card.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardHeader/CardHeader.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardContent/CardContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardActions/CardActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Select/Select.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/navigation */ \"./app/context/navigation.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_cost_prod_plans/hooks.js\");\n/* harmony import */ var _datagrids_fcroutlst__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./datagrids/fcroutlst */ \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\");\n/* harmony import */ var _datagrids_incomefromdeps__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./datagrids/incomefromdeps */ \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственная программа\r\n Панель мониторинга: Корневая панель производственной программы\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Контекст навигации\n //Подключение компонентов к настройкам приложения\n //Заголовок страницы\n //Типовые стили\n //Диаграмма Ганта\n //Вспомогательные функции\n //Вспомогательные хуки\n //Таблица \"Маршрутные листы\"\n //Таблица \"Приходы из подразделений\"\n\n//---------\n//Константы\n//---------\n\n//Склонения для документов\nconst PLANS_DECLINATIONS = [\"план\", \"плана\", \"планов\"];\nconst SPEC_DECLINATIONS = [\"элемент\", \"элемента\", \"элементов\"];\n\n//Поля сортировки\nconst SORT_REP_DATE = \"DREP_DATE\";\nconst SORT_REP_DATE_TO = \"DREP_DATE_TO\";\n\n//Максимальное количество элементов\nconst MAX_TASKS = 10000;\n\n//Стили\nconst STYLES = {\n PLANS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\"\n },\n PLANS_CHECKBOX_HAVEDOCS: {\n alignContent: \"space-around\"\n },\n PLANS_LIST_CONTAINER: {\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\"\n },\n PLANS_LIST_ITEM_ZERODOCS: {\n backgroundColor: \"#ebecec\"\n },\n PLANS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PLANS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.6rem\",\n textTransform: \"uppercase\"\n },\n PLANS_LIST_ITEM_PLAN: {\n backgroundColor: \"#c7e7f1\",\n \"&:hover\": {\n backgroundColor: `#c7e7f1`,\n filter: \"brightness(0.92) !important\"\n }\n },\n PLANS_LIST_ITEM_PLAN_FIELD: {\n marginLeft: \"15px\"\n },\n PLANS_LIST_FILTER_CONTAINER: {\n height: \"calc(100% - 55px)\",\n overflowY: \"auto\"\n },\n PLANS_LIST_BUTTONS_CONTAINER: {\n display: \"flex\",\n justifyContent: \"space-around\",\n paddingBottom: \"10px\",\n height: \"45px\"\n },\n PLANS_LIST_BUTTON: {\n minWidth: \"125px\",\n height: \"35px\"\n },\n PLANS_BUTTON: {\n position: \"absolute\",\n top: `calc(${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__.APP_BAR_HEIGHT} + 16px)`,\n left: \"16px\"\n },\n PLANS_DRAWER: {\n width: \"350px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"350px\",\n display: \"inline-block\",\n boxSizing: \"border-box\",\n ..._app_styles__WEBPACK_IMPORTED_MODULE_6__.APP_STYLES.SCROLL\n }\n },\n GANTT_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__.APP_BAR_HEIGHT})`,\n width: \"100vw\",\n paddingTop: \"24px\"\n },\n GANTT_TITLE: {\n paddingLeft: \"250px\",\n paddingRight: \"250px\"\n },\n SECOND_TABLE: {\n paddingTop: \"30px\"\n },\n TASK_DIALOG_CARD_CONTAINER: {\n padding: \"0px\"\n },\n TASK_DIALOG_LIST_ITEM_ICON: {\n justifyContent: \"center\"\n },\n TASK_DIALOG_ICON: {\n fontSize: \"2rem\"\n },\n TASK_DIALOG_ACTION_CONTAINER: {\n border: 1,\n borderColor: \"text.primary\",\n borderRadius: \"5px\",\n width: \"100%\"\n },\n FILTERS: {\n display: \"table\",\n float: \"right\"\n },\n FILTERS_DATE: {\n display: \"table-cell\",\n verticalAlign: \"middle\"\n },\n FILTERS_LEVEL: {\n display: \"table-cell\",\n verticalAlign: \"middle\",\n paddingLeft: \"15px\"\n },\n FILTERS_LEVEL_CAPTION: {\n display: \"flex\",\n alignItems: \"center\"\n },\n FILTERS_LEVEL_LIMIT_ICON: {\n padding: \"0px 8px\",\n color: \"#9f9c9c\"\n },\n FILTERS_LIMIT_SELECT: nOutOfLimit => {\n return nOutOfLimit === 1 ? {\n \".MuiOutlinedInput-notchedOutline\": {\n borderColor: \"#e9863c\"\n },\n \"&:hover .MuiOutlinedInput-notchedOutline\": {\n borderColor: \"#e9863c\",\n borderWidth: \"0.15rem\"\n },\n \"&.Mui-focused .MuiOutlinedInput-notchedOutline\": {\n borderColor: \"#e9863c\",\n borderWidth: \"0.15rem\"\n }\n } : {};\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Разбор XML с данными спецификации производственной программы\nconst parseProdPlanSpXML = async xmlDoc => {\n const data = await (0,_core_utils__WEBPACK_IMPORTED_MODULE_8__.xml2JSON)({\n xmlDoc,\n attributeValueProcessor: (name, val) => [\"numb\", \"title\"].includes(name) ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_8__.formatDateJSONDateOnly)(val) : val\n });\n return data.XDATA.XGANTT;\n};\n\n//Форматирование для отображения количества документов\nconst formatCountDocs = (nCountDocs, nType = 0) => {\n //Склонение документов\n let DECLINATIONS = nType === 0 ? PLANS_DECLINATIONS : SPEC_DECLINATIONS;\n //Получаем последнюю цифру в значении\n let num = nCountDocs % 100 % 10;\n //Документов\n if (nCountDocs > 10 && nCountDocs < 20) return `${nCountDocs} ${DECLINATIONS[2]}`;\n //Документа\n if (num > 1 && num < 5) return `${nCountDocs} ${DECLINATIONS[1]}`;\n //Документ\n if (num == 1) return `${nCountDocs} ${DECLINATIONS[0]}`;\n //Документов\n return `${nCountDocs} ${DECLINATIONS[2]}`;\n};\n\n//Изменение информации об отмеченных планах\nconst updateCtlgPlanInfo = (selectedPlans, plan) => {\n //Результат изменений\n let res = {\n selectedPlans: [...selectedPlans] || [],\n selectedPlansElements: plan.NCOUNT_DOCS\n };\n //Определяем наличие в отмеченных планах\n let selectedIndex = res.selectedPlans.indexOf(plan.NRN);\n //Если уже есть в отмеченных - удаляем, нет - добавляем\n if (selectedIndex > -1) {\n //Удаляем план из выбранных\n res.selectedPlans.splice(selectedIndex, 1);\n //Переворачиваем сумму документов\n res.selectedPlansElements = res.selectedPlansElements * -1;\n } else {\n //Добавляем план в выбранные\n res.selectedPlans.push(plan.NRN);\n }\n //Возвращаем результат\n return res;\n};\n\n//Список каталогов планов\nconst PlanCtlgsList = ({\n planCtlgs = [],\n selectedPlans = [],\n selectedPlanCtlg,\n selectedPlansElements,\n filter,\n setFilter,\n onCtlgClick,\n onCtlgPlanClick,\n onCtlgPlansOk,\n onCtlgPlansCancel\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.PLANS_LIST_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.PLANS_LIST_FILTER_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: STYLES.PLANS_FINDER,\n name: \"planFilter\",\n label: \"\\u041A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\",\n value: filter.ctlgName,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(pv => ({\n ...pv,\n ctlgName: event.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: STYLES.PLANS_CHECKBOX_HAVEDOCS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n checked: filter.haveDocs,\n onChange: event => setFilter(pv => ({\n ...pv,\n haveDocs: event.target.checked\n }))\n }),\n label: \"\\u0422\\u043E\\u043B\\u044C\\u043A\\u043E \\u0441 \\u043F\\u043B\\u0430\\u043D\\u0430\\u043C\\u0438\",\n labelPlacement: \"end\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, planCtlgs.map(ctlg => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n key: ctlg.NRN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n sx: ctlg.NCOUNT_DOCS == 0 ? STYLES.PLANS_LIST_ITEM_ZERODOCS : null,\n key: ctlg.NRN,\n selected: ctlg.NRN === selectedPlanCtlg,\n onClick: () => onCtlgClick ? onCtlgClick(ctlg) : null,\n disabled: ctlg.NCOUNT_DOCS == 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_PRIMARY\n }, ctlg.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_SECONDARY\n }, formatCountDocs(ctlg.NCOUNT_DOCS, 0))\n })), ctlg.NRN === selectedPlanCtlg && ctlg.XCRN_PLANS.length > 1 ? ctlg.XCRN_PLANS.map(plan => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n sx: plan.NCOUNT_DOCS == 0 ? STYLES.PLANS_LIST_ITEM_ZERODOCS : STYLES.PLANS_LIST_ITEM_PLAN,\n key: plan.NRN,\n disabled: plan.NCOUNT_DOCS == 0,\n onClick: () => onCtlgPlanClick ? onCtlgPlanClick(plan) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_PLAN_FIELD,\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_PRIMARY\n }, plan.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_SECONDARY\n }, formatCountDocs(plan.NCOUNT_DOCS, 1))\n }), plan.NCOUNT_DOCS !== 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n checked: selectedPlans.includes(plan.NRN)\n }) : null)) : null)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.PLANS_LIST_BUTTONS_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n title: !selectedPlanCtlg ? \"Не выбран каталог планов\" : selectedPlans.length === 0 ? \"Не выбраны планы каталога\" : selectedPlansElements > MAX_TASKS ? `Выбранные планы превышают максимум элементов (выбрано: ${selectedPlansElements}, максимум: ${MAX_TASKS})` : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: STYLES.PLANS_LIST_BUTTON,\n variant: \"contained\",\n disabled: selectedPlans.length === 0 || selectedPlansElements > MAX_TASKS,\n onClick: onCtlgPlansOk\n }, \"\\u041F\\u0440\\u0438\\u043C\\u0435\\u043D\\u0438\\u0442\\u044C\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: STYLES.PLANS_LIST_BUTTON,\n variant: \"contained\",\n onClick: onCtlgPlansCancel\n }, \"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0430\")));\n};\n\n//Контроль свойств - Список каталогов планов\nPlanCtlgsList.propTypes = {\n planCtlgs: (prop_types__WEBPACK_IMPORTED_MODULE_23___default().array),\n selectedPlans: (prop_types__WEBPACK_IMPORTED_MODULE_23___default().array),\n selectedPlanCtlg: (prop_types__WEBPACK_IMPORTED_MODULE_23___default().number),\n selectedPlansElements: (prop_types__WEBPACK_IMPORTED_MODULE_23___default().number),\n onCtlgClick: (prop_types__WEBPACK_IMPORTED_MODULE_23___default().func),\n onCtlgPlanClick: (prop_types__WEBPACK_IMPORTED_MODULE_23___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_23___default().object),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_23___default().func),\n onCtlgPlansOk: (prop_types__WEBPACK_IMPORTED_MODULE_23___default().func),\n onCtlgPlansCancel: (prop_types__WEBPACK_IMPORTED_MODULE_23___default().func)\n};\n\n//Генерация диалога задачи\nconst taskDialogRenderer = ({\n task,\n taskColors,\n close,\n handleTaskDetailOpen\n}) => {\n //Стиль и описание для легенды\n const legendDesc = (0,_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.taskLegendDesc)({\n task,\n taskColors\n });\n //Элемент карточки задачи\n const cardItem = ({\n listItemsStyle = {},\n icon,\n primaryText = null,\n secondaryText = null\n }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n disablePadding: true,\n sx: listItemsStyle\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n sx: STYLES.TASK_DIALOG_LIST_ITEM_ICON\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n sx: STYLES.TASK_DIALOG_ICON\n }, icon)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n primary: primaryText,\n secondary: secondaryText\n })));\n //Собираем содержимое диалога\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_27__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n title: task.name,\n titleTypographyProps: {\n variant: \"h6\"\n },\n subheader: `${(0,_core_utils__WEBPACK_IMPORTED_MODULE_8__.formatDateRF)(task.start)} - ${(0,_core_utils__WEBPACK_IMPORTED_MODULE_8__.formatDateRF)(task.end)}`,\n action: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n \"aria-label\": \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\",\n onClick: close\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], null, \"close\"))\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_30__[\"default\"], {\n sx: STYLES.TASK_DIALOG_CARD_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, cardItem({\n icon: \"fast_forward\",\n primaryText: `${task.start_fact} ${task.meas}`,\n secondaryText: \"Запущено\"\n }), cardItem({\n icon: \"assessment\",\n primaryText: `${task.main_quant} ${task.meas}`,\n secondaryText: \"Количество план\"\n }), cardItem({\n icon: \"verified\",\n primaryText: `${task.rel_fact} ${task.meas}`,\n secondaryText: \"Количество сдано\"\n }), cardItem({\n icon: \"date_range\",\n primaryText: task.rep_date_to,\n secondaryText: \"Дата выпуска план\"\n }), legendDesc ? cardItem({\n listItemsStyle: legendDesc.style,\n icon: \"palette\",\n secondaryText: legendDesc.text\n }) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_31__[\"default\"], {\n disableSpacing: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n p: 2,\n display: \"flex\",\n justifyContent: \"center\",\n sx: STYLES.TASK_DIALOG_ACTION_CONTAINER\n }, (0,_core_utils__WEBPACK_IMPORTED_MODULE_8__.hasValue)(task.type) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n size: \"large\",\n variant: \"contained\",\n color: \"primary\",\n onClick: () => handleTaskDetailOpen(task.rn, task.type)\n }, task[\"detail_list\"]) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n color: \"textSecondary\"\n }, `Анализ отклонений недоступен${task[\"detail_list\"] ? `: ${task[\"detail_list\"]}` : \"\"}`))));\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель производственной программы\nconst MechRecCostProdPlans = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n planCtlgs: [],\n planCtlgsLoaded: false,\n selectedPlans: [],\n selectedPlansElements: 0,\n selectedPlanCtlgSpecsLoaded: false,\n selectedPlanCtlg: null,\n selectedPlanCtlgMaxLevel: null,\n selectedPlanCtlgLevel: null,\n selectedPlanCtlgOutOfLimit: 0,\n selectedPlanCtlgSort: null,\n selectedPlanCtlgMenuItems: null,\n loadedCtlg: null,\n loadedPlans: [],\n loadedElements: 0,\n gantt: {},\n selectedTaskDetail: null,\n selectedTaskDetailType: null,\n planSpec: null\n });\n //Состояние для фильтра каталогов\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ctlgName: \"\",\n haveDocs: false\n });\n\n //Массив отфильтрованных каталогов\n const filteredPlanCtgls = (0,_hooks__WEBPACK_IMPORTED_MODULE_9__.useFilteredPlanCtlgs)(state.planCtlgs, filter);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Подключение к контексту навигации\n const {\n getNavigationSearch\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_3__.NavigationCtx);\n\n //Подключение к контексту сообщений\n const {\n showMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Инициализация каталогов планов\n const initPlanCtlgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_PP_CTLG_INIT\",\n args: {},\n respArg: \"COUT\",\n isArray: name => [\"XFCPRODPLAN_CRNS\", \"XCRN_PLANS\"].includes(name)\n });\n setState(pv => ({\n ...pv,\n init: true,\n planCtlgs: [...(data?.XFCPRODPLAN_CRNS || [])],\n planCtlgsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Загрузка списка спецификаций каталога планов\n const loadPlanCtglSpecs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (level = null, sort = null) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLANSP_GET\",\n args: {\n NCRN: state.selectedPlanCtlg,\n CFCPRODPLANS: {\n VALUE: state.selectedPlans.length > 0 ? state.selectedPlans.join(\";\") : null,\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NLEVEL: level,\n SSORT_FIELD: sort,\n NFCPRODPLANSP: state.planSpec\n }\n });\n let doc = await parseProdPlanSpXML(data.COUT);\n setState(pv => ({\n ...pv,\n selectedPlanCtlgMaxLevel: data.NMAX_LEVEL,\n selectedPlanCtlgLevel: level || level === 0 ? level : data.NMAX_LEVEL,\n selectedPlanCtlgOutOfLimit: data.NOUT_OF_LIMIT,\n selectedPlanCtlgSort: sort,\n selectedPlanCtlgMenuItems: [...Array(data.NMAX_LEVEL).keys()].map(el => el + 1),\n selectedPlanCtlgSpecsLoaded: true,\n gantt: {\n ...doc,\n tasks: [...(doc?.tasks || [])]\n },\n loadedCtlg: state.selectedPlanCtlg,\n loadedPlans: [...state.selectedPlans],\n loadedElements: state.selectedPlansElements,\n showPlanList: false\n }));\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [executeStored, state.selectedPlanCtlg, state.selectedPlans, state.planSpec]);\n\n //Обработка нажатия на элемент в списке каталогов планов\n const handleCtlgClick = project => {\n //Если этот каталог не был выбран\n if (state.selectedPlanCtlg != project.NRN) {\n //Если выбран уже загруженный - укажем информацию о том, как он загружен\n if (project.NRN === state.loadedCtlg) {\n setState(pv => ({\n ...pv,\n selectedPlanCtlg: project.NRN,\n selectedPlans: [...pv.loadedPlans],\n selectedPlansElements: pv.loadedElements\n }));\n } else {\n setState(pv => ({\n ...pv,\n selectedPlanCtlg: project.NRN,\n selectedPlans: project.XCRN_PLANS.length === 1 ? [project.XCRN_PLANS[0].NRN] : [],\n selectedPlansElements: 0\n }));\n }\n } else {\n setState(pv => ({\n ...pv,\n selectedPlanCtlg: null,\n selectedPlans: [],\n selectedPlansElements: 0\n }));\n }\n };\n\n //Обработка нажатия на элемент в списке планов каталога\n const handleCtlgPlanClick = plan => {\n //Считываем обновленную информацию об отмеченных планах\n let newPlansInfo = updateCtlgPlanInfo(state.selectedPlans, plan);\n //Обновляем список отмеченных планов\n setState(pv => ({\n ...pv,\n selectedPlans: [...newPlansInfo.selectedPlans],\n selectedPlansElements: pv.selectedPlansElements + newPlansInfo.selectedPlansElements\n }));\n };\n\n //Обработка нажатия \"ОК\" при отборе планов\n const handleSelectedPlansOk = () => {\n //Загружаем диаграмму\n loadPlanCtglSpecs(null, SORT_REP_DATE_TO);\n };\n\n //Обработка нажатия \"Отмена\" при отборе планов\n const handleSelectedPlansCancel = () => {\n setState(pv => ({\n ...pv,\n selectedPlanCtlg: pv.loadedCtlg,\n selectedPlans: [...pv.loadedPlans] || [],\n selectedPlansElements: pv.loadedElements,\n showPlanList: false\n }));\n };\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const actionPrms = getNavigationSearch();\n if (actionPrms.NSPRN) setState(pv => ({\n ...pv,\n planSpec: parseInt(actionPrms.NSPRN),\n init: true\n }));else initPlanCtlgs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При смене выбранного каталога плана или при явном указании позиции спецификации плана\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.planSpec) loadPlanCtglSpecs(null, SORT_REP_DATE_TO);\n }, [state.planSpec, loadPlanCtglSpecs]);\n\n //Выбор уровня\n const handleChangeSelectLevel = selectedLevel => {\n loadPlanCtglSpecs(selectedLevel, state.selectedPlanCtlgSort);\n setState(pv => ({\n ...pv,\n selectedPlanCtlgLevel: selectedLevel\n }));\n };\n\n //Выбор сортировки\n const handleChangeSelectSort = selectedSort => {\n loadPlanCtglSpecs(state.selectedPlanCtlgLevel, selectedSort);\n setState(pv => ({\n ...pv,\n selectedPlanCtlgSort: selectedSort\n }));\n };\n\n //При закрытии окна детализации\n const handleTaskDetailClose = () => {\n setState(pv => ({\n ...pv,\n selectedTaskDetail: null,\n selectedTaskDetailType: null\n }));\n };\n\n //При открытии окна детализации\n const handleTaskDetailOpen = (taskRn, taskType) => {\n setState(pv => ({\n ...pv,\n selectedTaskDetail: taskRn,\n selectedTaskDetailType: taskType\n }));\n };\n\n //При открытии окна информации об ограничении уровня\n const handleLevelLimitInfoOpen = () => {\n //Отображаем информацию\n showMsgInfo(`Размер производственной программы превышает предельно допустимый для одновременного отображения в виде диаграммы Ганта. \n Доступные для просмотра уровни вложенности ограничены. \n Вы можете просматривать производственную программу частями, используя действие \"Открытие панели Производственная программа\" в спецификации \"Выпуск\" \n раздела \"Планы и отчеты производства изделий\".`);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, !state.planSpec ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_32__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PLANS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPlanList: !pv.showPlanList\n }))\n }, \"\\u041A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\\u0438 \\u043F\\u043B\\u0430\\u043D\\u043E\\u0432\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_33__[\"default\"], {\n anchor: \"left\",\n open: state.showPlanList,\n onClose: handleSelectedPlansCancel,\n sx: STYLES.PLANS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanCtlgsList, {\n planCtlgs: filteredPlanCtgls,\n selectedPlans: state.selectedPlans,\n selectedPlanCtlg: state.selectedPlanCtlg,\n selectedPlansElements: state.selectedPlansElements,\n filter: filter,\n setFilter: setFilter,\n onCtlgClick: handleCtlgClick,\n onCtlgPlanClick: handleCtlgPlanClick,\n onCtlgPlansOk: handleSelectedPlansOk,\n onCtlgPlansCancel: handleSelectedPlansCancel\n }))) : null, state.init == true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_34__[\"default\"], {\n container: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_34__[\"default\"], {\n item: true,\n xs: 12\n }, state.selectedPlanCtlgSpecsLoaded ? state.gantt.tasks.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n pt: 3\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: state.planSpec ? \"Не найдено данных для выбранной позиции плана\" : \"В каталоге планов отсутствуют записи спецификации\"\n })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, state.selectedPlanCtlgMaxLevel ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.FILTERS,\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.FILTERS_DATE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_35__[\"default\"], {\n id: \"select-label-sort\"\n }, \"\\u0421\\u043E\\u0440\\u0442\\u0438\\u0440\\u043E\\u0432\\u043A\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_36__[\"default\"], {\n labelId: \"select-label-sort\",\n id: \"select-sort\",\n value: state.selectedPlanCtlgSort,\n label: \"\\u0421\\u043E\\u0440\\u0442\\u0438\\u0440\\u043E\\u0432\\u043A\\u0430\",\n onChange: event => {\n handleChangeSelectSort(event.target.value);\n },\n defaultValue: state.selectedPlanCtlgLevel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_37__[\"default\"], {\n value: SORT_REP_DATE_TO,\n key: \"1\"\n }, \"\\u0414\\u0430\\u0442\\u0430 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_37__[\"default\"], {\n value: SORT_REP_DATE,\n key: \"2\"\n }, \"\\u0414\\u0430\\u0442\\u0430 \\u0437\\u0430\\u043F\\u0443\\u0441\\u043A\\u0430\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.FILTERS_LEVEL\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.FILTERS_LEVEL_CAPTION\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_35__[\"default\"], {\n id: \"select-label-level\"\n }, \"\\u0414\\u043E \\u0443\\u0440\\u043E\\u0432\\u043D\\u044F\"), state.selectedPlanCtlgOutOfLimit === 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n sx: STYLES.FILTERS_LEVEL_LIMIT_ICON,\n onClick: handleLevelLimitInfoOpen\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], null, \"info\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_36__[\"default\"], {\n sx: STYLES.FILTERS_LIMIT_SELECT(state.selectedPlanCtlgOutOfLimit),\n labelId: \"select-label-level\",\n id: \"select-level\",\n value: state.selectedPlanCtlgLevel,\n label: \"\\u0423\\u0440\\u043E\\u0432\\u0435\\u043D\\u044C\",\n onChange: event => {\n handleChangeSelectLevel(event.target.value);\n },\n defaultValue: state.selectedPlanCtlgLevel\n }, state.selectedPlanCtlgMenuItems.map(el => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_37__[\"default\"], {\n value: el,\n key: el\n }, el))))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_4__.P8P_GANTT_CONFIG_PROPS, state.gantt, {\n containerStyle: STYLES.GANTT_CONTAINER,\n titleStyle: STYLES.GANTT_TITLE,\n taskDialogRenderer: prms => taskDialogRenderer({\n ...prms,\n handleTaskDetailOpen\n })\n }))) : !state.loadedCtlg ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n pt: 3\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: state.planSpec ? \"Загружаю график для выбранной позиции плана...\" : \"Укажите каталог планов или планы для отображения их спецификаций\"\n })) : null)) : null, state.selectedTaskDetail ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_38__[\"default\"], {\n open: true,\n onClose: handleTaskDetailClose,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_39__[\"default\"], null, [0, 1, 4].includes(state.selectedTaskDetailType) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_datagrids_fcroutlst__WEBPACK_IMPORTED_MODULE_10__.CostRouteListsDataGrid, {\n task: state.selectedTaskDetail,\n taskType: state.selectedTaskDetailType\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_datagrids_incomefromdeps__WEBPACK_IMPORTED_MODULE_11__.IncomFromDepsDataGrid, {\n task: state.selectedTaskDetail,\n taskType: state.selectedTaskDetailType\n }), state.selectedTaskDetailType === 3 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.SECOND_TABLE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_datagrids_fcroutlst__WEBPACK_IMPORTED_MODULE_10__.CostRouteListsDataGrid, {\n task: state.selectedTaskDetail,\n taskType: state.selectedTaskDetailType\n })) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_40__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n onClick: handleTaskDetailClose\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\"))) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js?"); /***/ }), @@ -2391,7 +2523,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ComponentEditor: () => (/* binding */ ComponentEditor)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _components_components_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/components_hooks */ \"./app/panels/panels_editor/components/components_hooks.js\");\n/* harmony import */ var _panels_editor_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./panels_editor.css */ \"./app/panels/panels_editor/panels_editor.css\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Редактор свойств компонента панели\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Хуки компонентов\n //Стили редактора\n\n//-----------\n//Тело модуля\n//-----------\n\n//Редактор свойств компонента панели\nconst ComponentEditor = ({\n id,\n path,\n settings = {},\n valueProviders = {},\n onSettingsChange = null\n} = {}) => {\n //Подгрузка модуля редактора компонента (lazy здесь постоянно обновлялся при смене props, поэтому на хуке, от props независимого)\n const [ComponentEditor, init] = (0,_components_components_hooks__WEBPACK_IMPORTED_MODULE_1__.useComponentModule)({\n path,\n module: \"editor\"\n });\n\n //Расчёт флага наличия компонента\n const haveComponent = path ? true : false;\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"component-editor__wrap\"\n }, haveComponent && init && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ComponentEditor.default, _extends({\n id: id\n }, settings, {\n valueProviders: valueProviders,\n onSettingsChange: onSettingsChange\n })), !haveComponent && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n align: \"center\"\n }, \"\\u041A\\u043E\\u043C\\u043F\\u043E\\u043D\\u0435\\u043D\\u0442 \\u043D\\u0435 \\u043E\\u043F\\u0440\\u0435\\u0434\\u0435\\u043B\\u0451\\u043D\"));\n};\n\n//Контроль свойств компонента - редактор свойств компонента панели\nComponentEditor.propTypes = {\n id: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().string).isRequired,\n path: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().string).isRequired,\n settings: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().object),\n valueProviders: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().object),\n onSettingsChange: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/component_editor.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ComponentEditor: () => (/* binding */ ComponentEditor)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _components_components_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/components_hooks */ \"./app/panels/panels_editor/components/components_hooks.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Редактор свойств компонента панели\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Хуки компонентов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Редактор свойств компонента панели\nconst ComponentEditor = ({\n id,\n path,\n settings = {},\n valueProviders = {},\n onSettingsChange = null\n} = {}) => {\n //Подгрузка модуля редактора компонента (lazy здесь постоянно обновлялся при смене props, поэтому на хуке, от props независимого)\n const [ComponentEditor, init] = (0,_components_components_hooks__WEBPACK_IMPORTED_MODULE_1__.useComponentModule)({\n path,\n module: \"editor\"\n });\n\n //Расчёт флага наличия компонента\n const haveComponent = path ? true : false;\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, haveComponent && init && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ComponentEditor.default, _extends({\n id: id\n }, settings, {\n valueProviders: valueProviders,\n onSettingsChange: onSettingsChange\n })), !haveComponent && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n align: \"center\"\n }, \"\\u041A\\u043E\\u043C\\u043F\\u043E\\u043D\\u0435\\u043D\\u0442 \\u043D\\u0435 \\u043E\\u043F\\u0440\\u0435\\u0434\\u0435\\u043B\\u0451\\u043D\"));\n};\n\n//Контроль свойств компонента - редактор свойств компонента панели\nComponentEditor.propTypes = {\n id: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired,\n path: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired,\n settings: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().object),\n valueProviders: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().object),\n onSettingsChange: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/component_editor.js?"); /***/ }), @@ -2402,7 +2534,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ComponentView: () => (/* binding */ ComponentView)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _components_components_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/components_hooks */ \"./app/panels/panels_editor/components/components_hooks.js\");\n/* harmony import */ var _panels_editor_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./panels_editor.css */ \"./app/panels/panels_editor/panels_editor.css\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Представление компонента панели\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Хуки компонентов\n //Стили редактора\n\n//-----------\n//Тело модуля\n//-----------\n\n//Представление компонента панели\nconst ComponentView = ({\n id,\n path,\n settings = {},\n values = {},\n onValuesChange = null\n} = {}) => {\n //Подгрузка модуля представления компонента (lazy здесь постоянно обновлялся при смене props, поэтому на хуке, от props независимого)\n const [ComponentView, init] = (0,_components_components_hooks__WEBPACK_IMPORTED_MODULE_1__.useComponentModule)({\n path,\n module: \"view\"\n });\n\n //При смене значений\n const handleValuesChange = values => onValuesChange && onValuesChange(id, values);\n\n //Расчёт флага наличия компонента\n const haveComponent = path ? true : false;\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"component-view__wrap\"\n }, haveComponent && init && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ComponentView.default, _extends({\n id: id\n }, settings, {\n values: values,\n onValuesChange: handleValuesChange\n })), !haveComponent && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n align: \"center\"\n }, \"\\u041A\\u043E\\u043C\\u043F\\u043E\\u043D\\u0435\\u043D\\u0442 \\u043D\\u0435 \\u043E\\u043F\\u0440\\u0435\\u0434\\u0435\\u043B\\u0451\\u043D\"));\n};\n\n//Контроль свойств компонента - компонент панели\nComponentView.propTypes = {\n id: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().string).isRequired,\n path: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().string).isRequired,\n settings: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().object),\n values: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().object),\n onValuesChange: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//--------------------------\n//ВАЖНО: Можно на React.lazy\n//--------------------------\n\n//ПРИМЕР:\n/*\r\nimport React, { Suspense, lazy } from \"react\"; //Классы React\r\nconst ComponentView = ({ path = null, props = {} } = {}) => {\r\n const haveComponent = path ? true : false;\r\n const ComponentView = haveComponent ? lazy(() => import(`./components/${path}/view`)) : null;\r\n return (\r\n \r\n {haveComponent && ()}\r\n {!haveComponent && Компонент не определён}\r\n \r\n );\r\n};\r\n*/\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/component_view.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ComponentView: () => (/* binding */ ComponentView)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _components_components_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/components_hooks */ \"./app/panels/panels_editor/components/components_hooks.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Представление компонента панели\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Хуки компонентов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Представление компонента панели\nconst ComponentView = ({\n id,\n path,\n settings = {},\n values = {},\n onValuesChange = null\n} = {}) => {\n //Подгрузка модуля представления компонента (lazy здесь постоянно обновлялся при смене props, поэтому на хуке, от props независимого)\n const [ComponentView, init] = (0,_components_components_hooks__WEBPACK_IMPORTED_MODULE_1__.useComponentModule)({\n path,\n module: \"view\"\n });\n\n //При смене значений\n const handleValuesChange = values => onValuesChange && onValuesChange(id, values);\n\n //Расчёт флага наличия компонента\n const haveComponent = path ? true : false;\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"component-view__wrap\"\n }, haveComponent && init && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ComponentView.default, _extends({\n id: id\n }, settings, {\n values: values,\n onValuesChange: handleValuesChange\n })), !haveComponent && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n align: \"center\"\n }, \"\\u041A\\u043E\\u043C\\u043F\\u043E\\u043D\\u0435\\u043D\\u0442 \\u043D\\u0435 \\u043E\\u043F\\u0440\\u0435\\u0434\\u0435\\u043B\\u0451\\u043D\"));\n};\n\n//Контроль свойств компонента - компонент панели\nComponentView.propTypes = {\n id: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired,\n path: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired,\n settings: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().object),\n values: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().object),\n onValuesChange: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//--------------------------\n//ВАЖНО: Можно на React.lazy\n//--------------------------\n\n//ПРИМЕР:\n/*\r\nimport React, { Suspense, lazy } from \"react\"; //Классы React\r\nconst ComponentView = ({ path = null, props = {} } = {}) => {\r\n const haveComponent = path ? true : false;\r\n const ComponentView = haveComponent ? lazy(() => import(`./components/${path}/view`)) : null;\r\n return (\r\n \r\n {haveComponent && ()}\r\n {!haveComponent && Компонент не определён}\r\n \r\n );\r\n};\r\n*/\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/component_view.js?"); /***/ }), @@ -2423,7 +2555,7 @@ eval("var map = {\n\t\"./chart/editor\": \"./app/panels/panels_editor/components /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -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 */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _editors_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../editors_common */ \"./app/panels/panels_editor/components/editors_common.js\");\n/* harmony import */ var _panels_editor_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../panels_editor.css */ \"./app/panels/panels_editor/panels_editor.css\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: График (редактор настроек)\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Общие компоненты редакторов\n //Стили редактора\n\n//-----------\n//Тело модуля\n//-----------\n\n//График (редактор настроек)\nconst ChartEditor = ({\n id,\n dataSource = null,\n valueProviders = {},\n onSettingsChange = null\n} = {}) => {\n //Собственное состояние - текущие настройки\n const [settings, setSettings] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //При изменении компонента\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n settings?.id != id && setSettings({\n id,\n dataSource\n });\n }, [settings, id, dataSource]);\n\n //При сохранении изменений элемента\n const handleDataSourceChange = dataSource => setSettings(pv => ({\n ...pv,\n dataSource: {\n ...dataSource\n }\n }));\n\n //При сохранении настроек\n const handleSave = (closeEditor = false) => onSettingsChange && onSettingsChange({\n id,\n settings,\n closeEditor\n });\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_editors_common__WEBPACK_IMPORTED_MODULE_1__.EditorBox, {\n title: \"Параметры графика\",\n onSave: handleSave\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_editors_common__WEBPACK_IMPORTED_MODULE_1__.EditorSubHeader, {\n title: \"Источник данных\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_editors_common__WEBPACK_IMPORTED_MODULE_1__.DataSource, {\n dataSource: settings?.dataSource,\n valueProviders: valueProviders,\n onChange: handleDataSourceChange\n }));\n};\n\n//Контроль свойств компонента - График (редактор настроек)\nChartEditor.propTypes = {\n id: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n dataSource: _editors_common__WEBPACK_IMPORTED_MODULE_1__.DATA_SOURCE_SHAPE,\n valueProviders: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object),\n onSettingsChange: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ChartEditor);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/chart/editor.js?"); +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 */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _components_editors_p8p_editor_box__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../components/editors/p8p_editor_box */ \"./app/components/editors/p8p_editor_box.js\");\n/* harmony import */ var _components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../components/editors/p8p_editor_sub_header */ \"./app/components/editors/p8p_editor_sub_header.js\");\n/* harmony import */ var _components_editors_p8p_data_source_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../components/editors/p8p_data_source_common */ \"./app/components/editors/p8p_data_source_common.js\");\n/* harmony import */ var _components_editors_p8p_data_source__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../components/editors/p8p_data_source */ \"./app/components/editors/p8p_data_source.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: График (редактор настроек)\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Контейнер редактора\n //Заголовок раздела редактора\n //Общие ресурсы источника данных\n //Источник данных\n\n//-----------\n//Тело модуля\n//-----------\n\n//График (редактор настроек)\nconst ChartEditor = ({\n id,\n dataSource = null,\n valueProviders = {},\n onSettingsChange = null\n} = {}) => {\n //Собственное состояние - текущие настройки\n const [settings, setSettings] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //При изменении компонента\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n settings?.id != id && setSettings({\n id,\n dataSource\n });\n }, [settings, id, dataSource]);\n\n //При сохранении изменений элемента\n const handleDataSourceChange = dataSource => setSettings(pv => ({\n ...pv,\n dataSource: {\n ...dataSource\n }\n }));\n\n //При сохранении настроек\n const handleSave = (closeEditor = false) => onSettingsChange && onSettingsChange({\n id,\n settings,\n closeEditor\n });\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_box__WEBPACK_IMPORTED_MODULE_1__.P8PEditorBox, {\n title: \"Параметры графика\",\n onSave: handleSave\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_2__.P8PEditorSubHeader, {\n title: \"Источник данных\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_data_source__WEBPACK_IMPORTED_MODULE_4__.P8PDataSource, {\n dataSource: settings?.dataSource,\n valueProviders: valueProviders,\n onChange: handleDataSourceChange\n }));\n};\n\n//Контроль свойств компонента - График (редактор настроек)\nChartEditor.propTypes = {\n id: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().string).isRequired,\n dataSource: _components_editors_p8p_data_source_common__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_SOURCE_SHAPE,\n valueProviders: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().object),\n onSettingsChange: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ChartEditor);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/chart/editor.js?"); /***/ }), @@ -2434,7 +2566,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -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 */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _components_p8p_chart__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../components/p8p_chart */ \"./app/components/p8p_chart.js\");\n/* harmony import */ var _components_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components_hooks */ \"./app/panels/panels_editor/components/components_hooks.js\");\n/* harmony import */ var _editors_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../editors_common */ \"./app/panels/panels_editor/components/editors_common.js\");\n/* harmony import */ var _views_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../views_common */ \"./app/panels/panels_editor/components/views_common.js\");\n/* harmony import */ var _panels_editor_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../panels_editor.css */ \"./app/panels/panels_editor/panels_editor.css\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: График (представление)\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //График\n //Хуки для данных\n //Общие объекты компонентов\n //Общие компоненты представлений\n //Стили редактора\n\n//---------\n//Константы\n//---------\n\n//Иконка компонента\nconst COMPONENT_ICON = \"bar_chart\";\n\n//Наименование компонента\nconst COMPONENT_NAME = \"График\";\n\n//Стили\nconst STYLES = {\n CHART: {\n width: \"100%\",\n height: \"100%\",\n alignItems: \"center\",\n justifyContent: \"center\",\n display: \"flex\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//График (представление)\nconst Chart = ({\n dataSource = null,\n values = {}\n} = {}) => {\n //Собственное состояние - данные\n const [data, error] = (0,_components_hooks__WEBPACK_IMPORTED_MODULE_2__.useComponentDataSource)({\n dataSource,\n values\n });\n\n //Флаг настроенности графика\n const haveConfing = dataSource?.stored ? true : false;\n\n //Флаг наличия данных\n const haveData = data?.init === true && !error ? true : false;\n\n //Данные графика\n const chart = data?.XCHART || {};\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"component-view__container component-view__container__empty\",\n elevation: 6\n }, haveConfing && haveData ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_chart__WEBPACK_IMPORTED_MODULE_1__.P8PChart, _extends({\n style: STYLES.CHART\n }, chart)) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_views_common__WEBPACK_IMPORTED_MODULE_4__.ComponentInlineMessage, {\n icon: COMPONENT_ICON,\n name: COMPONENT_NAME,\n message: !haveConfing ? _views_common__WEBPACK_IMPORTED_MODULE_4__.COMPONENT_MESSAGES.NO_SETTINGS : error ? error : _views_common__WEBPACK_IMPORTED_MODULE_4__.COMPONENT_MESSAGES.NO_DATA_FOUND,\n type: error ? _views_common__WEBPACK_IMPORTED_MODULE_4__.COMPONENT_MESSAGE_TYPE.ERROR : _views_common__WEBPACK_IMPORTED_MODULE_4__.COMPONENT_MESSAGE_TYPE.COMMON\n }));\n};\n\n//Контроль свойств компонента - График (представление)\nChart.propTypes = {\n dataSource: _editors_common__WEBPACK_IMPORTED_MODULE_3__.DATA_SOURCE_SHAPE,\n values: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Chart);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/chart/view.js?"); +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 */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _components_p8p_chart__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../components/p8p_chart */ \"./app/components/p8p_chart.js\");\n/* harmony import */ var _components_editors_p8p_data_source_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../components/editors/p8p_data_source_hooks */ \"./app/components/editors/p8p_data_source_hooks.js\");\n/* harmony import */ var _components_editors_p8p_data_source_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../components/editors/p8p_data_source_common */ \"./app/components/editors/p8p_data_source_common.js\");\n/* harmony import */ var _components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../components/editors/p8p_component_inline_message */ \"./app/components/editors/p8p_component_inline_message.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: График (представление)\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //График\n //Хуки для данных\n //Общие ресурсы источника данных\n //Информационное сообщение внутри компонента\n\n//---------\n//Константы\n//---------\n\n//Иконка компонента\nconst COMPONENT_ICON = \"bar_chart\";\n\n//Наименование компонента\nconst COMPONENT_NAME = \"График\";\n\n//Стили\nconst STYLES = {\n CHART: {\n width: \"100%\",\n height: \"100%\",\n alignItems: \"center\",\n justifyContent: \"center\",\n display: \"flex\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//График (представление)\nconst Chart = ({\n dataSource = null,\n values = {}\n} = {}) => {\n //Собственное состояние - данные\n const [data, error] = (0,_components_editors_p8p_data_source_hooks__WEBPACK_IMPORTED_MODULE_2__.useDataSource)({\n dataSource,\n values\n });\n\n //Флаг настроенности графика\n const haveConfing = dataSource?.stored ? true : false;\n\n //Флаг наличия данных\n const haveData = data?.init === true && !error ? true : false;\n\n //Данные графика\n const chart = data?.XCHART || {};\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"component-view__container component-view__container__empty\",\n elevation: 6\n }, haveConfing && haveData ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_chart__WEBPACK_IMPORTED_MODULE_1__.P8PChart, _extends({\n style: STYLES.CHART\n }, chart)) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_4__.P8PComponentInlineMessage, {\n icon: COMPONENT_ICON,\n name: COMPONENT_NAME,\n message: !haveConfing ? _components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_4__.P8P_COMPONENT_INLINE_MESSAGE.NO_SETTINGS : error ? error : _components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_4__.P8P_COMPONENT_INLINE_MESSAGE.NO_DATA_FOUND,\n type: error ? _components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_4__.P8P_COMPONENT_INLINE_MESSAGE_TYPE.ERROR : _components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_4__.P8P_COMPONENT_INLINE_MESSAGE_TYPE.COMMON\n }));\n};\n\n//Контроль свойств компонента - График (представление)\nChart.propTypes = {\n dataSource: _components_editors_p8p_data_source_common__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_SOURCE_SHAPE,\n values: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Chart);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/chart/view.js?"); /***/ }), @@ -2445,7 +2577,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ COMPONETNS: () => (/* binding */ COMPONETNS)\n/* harmony export */ });\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: Описание \r\n*/\n\n//---------\n//Константы\n//---------\n\nconst COMPONETNS = [{\n name: \"Форма\",\n path: \"form\",\n settings: {\n title: \"Параметры формирования\",\n autoApply: true,\n items: [{\n name: \"AGENT\",\n caption: \"Контрагент\",\n unitCode2: \"AGNLIST\",\n unitName: \"Контрагенты\",\n showMethod: \"main\",\n showMethodName: \"main\",\n parameter: \"Мнемокод\",\n inputParameter: \"in_AGNABBR\",\n outputParameter: \"out_AGNABBR\"\n }, {\n name: \"DOC_TYPE\",\n caption: \"Тип документа\",\n unitCode2: \"DOCTYPES\",\n unitName: \"Типы документов\",\n showMethod: \"main\",\n showMethodName: \"main\",\n parameter: \"Мнемокод\",\n inputParameter: \"in_DOCCODE\",\n outputParameter: \"out_DOCCODE\"\n }]\n }\n}, {\n name: \"График\",\n path: \"chart\",\n settings2: {\n dataSource: {\n type: \"USER_PROC\",\n userProc: \"ГрафТоп5ДогКонтрТип\",\n stored: \"UDO_P_P8P_AGNCONTR_CHART\",\n respArg: \"COUT\",\n arguments: [{\n name: \"SAGENT\",\n caption: \"Контрагент\",\n dataType: \"STR\",\n req: false,\n value: \"\",\n valueSource: \"AGENT\"\n }, {\n name: \"SDOC_TYPE\",\n caption: \"Тип документа\",\n dataType: \"STR\",\n req: false,\n value: \"\",\n valueSource: \"DOC_TYPE\"\n }]\n }\n }\n}, {\n name: \"Таблица\",\n path: \"table\",\n settings2: {\n dataSource: {\n type: \"USER_PROC\",\n userProc: \"ТаблицаДогКонтрТип\",\n stored: \"UDO_P_P8P_AGNCONTR_TABLE\",\n respArg: \"COUT\",\n arguments: [{\n name: \"SAGENT\",\n caption: \"Контрагент\",\n dataType: \"STR\",\n req: false,\n value: \"\",\n valueSource: \"AGENT\"\n }, {\n name: \"SDOC_TYPE\",\n caption: \"Тип документа\",\n dataType: \"STR\",\n req: false,\n value: \"\",\n valueSource: \"DOC_TYPE\"\n }]\n }\n }\n}, {\n name: \"Индикатор\",\n path: \"indicator\",\n settings: {\n dataSource: {\n type: \"USER_PROC\",\n userProc: \"ИндКолДогКонтрТип\",\n stored: \"UDO_P_P8P_AGNCONTR_IND\",\n respArg: \"COUT\",\n arguments: [{\n name: \"SAGENT\",\n caption: \"Контрагент\",\n dataType: \"STR\",\n req: false,\n value: \"\",\n valueSource: \"AGENT\"\n }, {\n name: \"SDOC_TYPE\",\n caption: \"Тип документа\",\n dataType: \"STR\",\n req: false,\n value: \"\",\n valueSource: \"DOC_TYPE\"\n }, {\n name: \"NIND_TYPE\",\n caption: \"Тип индикатора (0 - все, 1 - неутвержденные)\",\n dataType: \"NUMB\",\n req: true,\n value: \"0\",\n valueSource: \"\"\n }]\n }\n }\n}, {\n name: \"Индикатор2\",\n path: \"indicator\",\n settings: {\n dataSource: {\n type: \"USER_PROC\",\n userProc: \"ИндКолДогКонтрТип\",\n stored: \"UDO_P_P8P_AGNCONTR_IND\",\n respArg: \"COUT\",\n arguments: [{\n name: \"SAGENT\",\n caption: \"Контрагент\",\n dataType: \"STR\",\n req: false,\n value: \"\",\n valueSource: \"AGENT\"\n }, {\n name: \"SDOC_TYPE\",\n caption: \"Тип документа\",\n dataType: \"STR\",\n req: false,\n value: \"\",\n valueSource: \"DOC_TYPE\"\n }, {\n name: \"NIND_TYPE\",\n caption: \"Тип индикатора (0 - все, 1 - неутвержденные)\",\n dataType: \"NUMB\",\n req: true,\n value: \"1\",\n valueSource: \"\"\n }]\n }\n }\n}];\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/components.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ COMPONETNS: () => (/* binding */ COMPONETNS)\n/* harmony export */ });\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: Описание \r\n*/\n\n//---------\n//Константы\n//---------\n\nconst COMPONETNS = [{\n name: \"Форма\",\n path: \"form\",\n settings2: {\n title: \"Параметры формирования\",\n autoApply: true,\n items: [{\n name: \"AGENT\",\n caption: \"Контрагент\",\n unitCode2: \"AGNLIST\",\n unitName: \"Контрагенты\",\n showMethod: \"main\",\n showMethodName: \"main\",\n parameter: \"Мнемокод\",\n inputParameter: \"in_AGNABBR\",\n outputParameter: \"out_AGNABBR\"\n }, {\n name: \"DOC_TYPE\",\n caption: \"Тип документа\",\n unitCode2: \"DOCTYPES\",\n unitName: \"Типы документов\",\n showMethod: \"main\",\n showMethodName: \"main\",\n parameter: \"Мнемокод\",\n inputParameter: \"in_DOCCODE\",\n outputParameter: \"out_DOCCODE\"\n }]\n }\n}, {\n name: \"График\",\n path: \"chart\",\n settings2: {\n dataSource: {\n type: \"USER_PROC\",\n userProc: \"ГрафТоп5ДогКонтрТип\",\n stored: \"UDO_P_P8P_AGNCONTR_CHART\",\n respArg: \"COUT\",\n arguments: [{\n name: \"SAGENT\",\n caption: \"Контрагент\",\n dataType: \"STR\",\n req: false,\n value: \"\",\n valueSource: \"AGENT\"\n }, {\n name: \"SDOC_TYPE\",\n caption: \"Тип документа\",\n dataType: \"STR\",\n req: false,\n value: \"\",\n valueSource: \"DOC_TYPE\"\n }]\n }\n }\n}, {\n name: \"Таблица\",\n path: \"table\",\n settings2: {\n dataSource: {\n type: \"USER_PROC\",\n userProc: \"ТаблицаДогКонтрТип\",\n stored: \"UDO_P_P8P_AGNCONTR_TABLE\",\n respArg: \"COUT\",\n arguments: [{\n name: \"SAGENT\",\n caption: \"Контрагент\",\n dataType: \"STR\",\n req: false,\n value: \"\",\n valueSource: \"AGENT\"\n }, {\n name: \"SDOC_TYPE\",\n caption: \"Тип документа\",\n dataType: \"STR\",\n req: false,\n value: \"\",\n valueSource: \"DOC_TYPE\"\n }]\n }\n }\n}, {\n name: \"Индикатор\",\n path: \"indicator\",\n settings2: {\n dataSource: {\n type: \"USER_PROC\",\n userProc: \"ИндКолДогКонтрТип\",\n stored: \"UDO_P_P8P_AGNCONTR_IND\",\n respArg: \"COUT\",\n arguments: [{\n name: \"SAGENT\",\n caption: \"Контрагент\",\n dataType: \"STR\",\n req: false,\n value: \"\",\n valueSource: \"AGENT\"\n }, {\n name: \"SDOC_TYPE\",\n caption: \"Тип документа\",\n dataType: \"STR\",\n req: false,\n value: \"\",\n valueSource: \"DOC_TYPE\"\n }, {\n name: \"NIND_TYPE\",\n caption: \"Тип индикатора (0 - все, 1 - неутвержденные)\",\n dataType: \"NUMB\",\n req: true,\n value: \"0\",\n valueSource: \"\"\n }]\n }\n }\n} /*,\r\n {\r\n name: \"Индикатор2\",\r\n path: \"indicator\",\r\n settings: {\r\n dataSource: {\r\n type: \"USER_PROC\",\r\n userProc: \"ИндКолДогКонтрТип\",\r\n stored: \"UDO_P_P8P_AGNCONTR_IND\",\r\n respArg: \"COUT\",\r\n arguments: [\r\n { name: \"SAGENT\", caption: \"Контрагент\", dataType: \"STR\", req: false, value: \"\", valueSource: \"AGENT\" },\r\n { name: \"SDOC_TYPE\", caption: \"Тип документа\", dataType: \"STR\", req: false, value: \"\", valueSource: \"DOC_TYPE\" },\r\n {\r\n name: \"NIND_TYPE\",\r\n caption: \"Тип индикатора (0 - все, 1 - неутвержденные)\",\r\n dataType: \"NUMB\",\r\n req: true,\r\n value: \"1\",\r\n valueSource: \"\"\r\n }\r\n ]\r\n }\r\n }\r\n }*/];\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/components.js?"); /***/ }), @@ -2456,18 +2588,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useComponentDataSource: () => (/* binding */ useComponentDataSource),\n/* harmony export */ useComponentModule: () => (/* binding */ useComponentModule),\n/* harmony export */ useUserProcDesc: () => (/* binding */ useUserProcDesc)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _core_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../core/client */ \"./app/core/client.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _editors_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./editors_common */ \"./app/panels/panels_editor/components/editors_common.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: Хуки компонентов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Клиент взаимодействия с сервером приложений\n //Общие вспомогательные функции\n //Контекст взаимодействия с сервером\n //Общие объекты редакторов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Загрузка модуля компонента из модуля (можно применять как альтернативу React.lazy)\nconst useComponentModule = ({\n path = null,\n module = \"view\"\n} = {}) => {\n //Собственное состояние - импортированный модуль компонента\n const [componentModule, setComponentModule] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Собственное состояние - флаг готовности\n const [init, setInit] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //При подмонтировании к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Динамическая загрузка модуля компонента из библиотеки\n const importComponentModule = async () => {\n setInit(false);\n const moduleContent = await __webpack_require__(\"./app/panels/panels_editor/components lazy recursive ^\\\\.\\\\/.*\\\\/.*$\")(`./${path}/${module}`);\n setComponentModule(moduleContent);\n setInit(true);\n };\n if (path) importComponentModule();\n }, [path, module]);\n\n //Возвращаем интерфейс хука\n return [componentModule, init];\n};\n\n//Описание пользовательской процедуры\nconst useUserProcDesc = ({\n code,\n refresh\n}) => {\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - данные\n const [data, setData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //При необходимости обновить данные компонента\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Загрузка данных с сервера\n const loadData = async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EDITOR.USERPROCS_DESC\",\n args: {\n SCODE: code\n },\n respArg: \"COUT\",\n isArray: name => name === \"arguments\",\n loader: false\n });\n setData(data?.XUSERPROC || null);\n } finally {\n setLoading(false);\n }\n };\n //Если надо обновить и есть для чего получать данные\n if (refresh > 0) if (code) loadData();else setData(null);\n }, [refresh, code, executeStored]);\n\n //Возвращаем интерфейс хука\n return [data, isLoading];\n};\n\n//Получение данных компонента из источника\nconst useComponentDataSource = ({\n dataSource,\n values\n}) => {\n //Контроллер для прерывания запросов\n const abortController = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Собственное состояние - параметры исполнения\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n stored: null,\n storedArgs: [],\n respArg: null,\n reqSet: false\n });\n\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - данные\n const [data, setData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false\n });\n\n //Собственное состояние - ошибка получения данных\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Загрузка данных с сервера\n const loadData = async () => {\n try {\n setLoading(true);\n abortController.current?.abort?.();\n abortController.current = new AbortController();\n const data = await executeStored({\n stored: state.stored,\n args: {\n ...(state.storedArgs ? state.storedArgs : {})\n },\n respArg: state.respArg,\n loader: false,\n signal: abortController.current.signal,\n showErrorMessage: false\n });\n setError(null);\n setData({\n ...data,\n init: true\n });\n } catch (e) {\n if (e.message !== _core_client__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ERR_ABORTED) {\n setError((0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.formatErrorMessage)(e.message).text);\n setData({\n init: false\n });\n }\n } finally {\n setLoading(false);\n }\n };\n if (state.reqSet) {\n if (state.stored) loadData();\n } else setData({\n init: false\n });\n return () => abortController.current?.abort?.();\n }, [state.stored, state.storedArgs, state.respArg, state.reqSet, executeStored]);\n\n //При изменении свойств\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setState(pv => {\n if (dataSource?.type == _editors_common__WEBPACK_IMPORTED_MODULE_4__.DATA_SOURCE_TYPE.USER_PROC) {\n const {\n stored,\n respArg\n } = dataSource;\n let reqSet = true;\n const storedArgs = {};\n dataSource.arguments.forEach(argument => {\n let v = argument.valueSource ? values[argument.valueSource] : argument.value;\n storedArgs[argument.name] = argument.dataType == _editors_common__WEBPACK_IMPORTED_MODULE_4__.ARGUMENT_DATA_TYPE.NUMB ? isNaN(parseFloat(v)) ? null : parseFloat(v) : argument.dataType == _editors_common__WEBPACK_IMPORTED_MODULE_4__.ARGUMENT_DATA_TYPE.DATE ? new Date(v) : String(v === undefined ? \"\" : v);\n if (argument.req === true && [undefined, null, \"\"].includes(storedArgs[argument.name])) reqSet = false;\n });\n if (pv.stored != stored || pv.respArg != respArg || JSON.stringify(pv.storedArgs) != JSON.stringify(storedArgs)) {\n if (!reqSet) {\n setError(\"Не заданы обязательные параметры источника данных\");\n setData({\n init: false\n });\n }\n return {\n stored,\n respArg,\n storedArgs,\n reqSet\n };\n } else return pv;\n } else return pv;\n });\n }, [dataSource, values]);\n\n //Возвращаем интерфейс хука\n return [data, error, isLoading];\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/components_hooks.js?"); - -/***/ }), - -/***/ "./app/panels/panels_editor/components/editors_common.js": -/*!***************************************************************!*\ - !*** ./app/panels/panels_editor/components/editors_common.js ***! - \***************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ARGUMENT_DATA_TYPE: () => (/* binding */ ARGUMENT_DATA_TYPE),\n/* harmony export */ ConfigDialog: () => (/* binding */ ConfigDialog),\n/* harmony export */ DATA_SOURCE_INITIAL: () => (/* binding */ DATA_SOURCE_INITIAL),\n/* harmony export */ DATA_SOURCE_SHAPE: () => (/* binding */ DATA_SOURCE_SHAPE),\n/* harmony export */ DATA_SOURCE_TYPE: () => (/* binding */ DATA_SOURCE_TYPE),\n/* harmony export */ DataSource: () => (/* binding */ DataSource),\n/* harmony export */ EditorBox: () => (/* binding */ EditorBox),\n/* harmony export */ EditorSubHeader: () => (/* binding */ EditorSubHeader),\n/* harmony export */ STYLES: () => (/* binding */ STYLES)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Chip/Chip.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Menu/Menu.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Card/Card.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardActionArea/CardActionArea.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardContent/CardContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardActions/CardActions.js\");\n/* harmony import */ var _core_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../core/client */ \"./app/core/client.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components_hooks */ \"./app/panels/panels_editor/components/components_hooks.js\");\n/* harmony import */ var _panels_editor_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../panels_editor.css */ \"./app/panels/panels_editor/panels_editor.css\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Общие компоненты редакторов свойств\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Клиент БД\n //Контекст приложения\n //Общие текстовые ресурсы\n //Общие хуки компонентов\n //Стили редактора\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CHIP: (fullWidth = false, multiLine = false) => ({\n ...(multiLine ? {\n height: \"auto\"\n } : {}),\n \"& .MuiChip-label\": {\n ...(multiLine ? {\n display: \"block\",\n whiteSpace: \"normal\"\n } : {}),\n ...(fullWidth ? {\n width: \"100%\"\n } : {})\n }\n })\n};\n\n//Типы даных аргументов\nconst ARGUMENT_DATA_TYPE = {\n STR: _core_client__WEBPACK_IMPORTED_MODULE_1__[\"default\"].SERV_DATA_TYPE_STR,\n NUMB: _core_client__WEBPACK_IMPORTED_MODULE_1__[\"default\"].SERV_DATA_TYPE_NUMB,\n DATE: _core_client__WEBPACK_IMPORTED_MODULE_1__[\"default\"].SERV_DATA_TYPE_DATE\n};\n\n//Типы источников данных\nconst DATA_SOURCE_TYPE = {\n USER_PROC: \"USER_PROC\",\n QUERY: \"QUERY\"\n};\n\n//Типы источников данных (наименования)\nconst DATA_SOURCE_TYPE_NAME = {\n [DATA_SOURCE_TYPE.USER_PROC]: \"Пользовательская процедура\",\n [DATA_SOURCE_TYPE.QUERY]: \"Запрос\"\n};\n\n//Структура аргумента источника данных\nconst DATA_SOURCE_ARGUMENT_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_6___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string).isRequired,\n dataType: prop_types__WEBPACK_IMPORTED_MODULE_6___default().oneOf(Object.values(ARGUMENT_DATA_TYPE)),\n req: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().bool).isRequired,\n value: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().any),\n valueSource: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string)\n});\n\n//Начальное состояние аргумента источника данных\nconst DATA_SOURCE_ARGUMENT_INITIAL = {\n name: \"\",\n caption: \"\",\n dataType: \"\",\n req: false,\n value: \"\",\n valueSource: \"\"\n};\n\n//Структура источника данных\nconst DATA_SOURCE_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_6___default().shape({\n type: prop_types__WEBPACK_IMPORTED_MODULE_6___default().oneOf([...Object.values(DATA_SOURCE_TYPE), \"\"]),\n userProc: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string),\n stored: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string),\n respArg: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string),\n arguments: prop_types__WEBPACK_IMPORTED_MODULE_6___default().arrayOf(DATA_SOURCE_ARGUMENT_SHAPE)\n});\n\n//Начальное состояние истоника данных\nconst DATA_SOURCE_INITIAL = {\n type: \"\",\n userProc: \"\",\n stored: \"\",\n respArg: \"\",\n arguments: []\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Контейнер редактора\nconst EditorBox = ({\n title,\n children,\n onSave\n}) => {\n //При нажатии на \"Сохранить\"\n const handleSaveClick = (closeEditor = false) => onSave && onSave(closeEditor);\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"component-editor__container\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n direction: \"column\",\n spacing: 1\n }, children), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n direction: \"row\",\n justifyContent: \"right\",\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n onClick: () => handleSaveClick(false),\n title: _app_text__WEBPACK_IMPORTED_MODULE_3__.BUTTONS.APPLY\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"done\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n onClick: () => handleSaveClick(true),\n title: _app_text__WEBPACK_IMPORTED_MODULE_3__.BUTTONS.SAVE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"done_all\"))));\n};\n\n//Контроль свойств компонента - контейнер редактора\nEditorBox.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string).isRequired,\n children: prop_types__WEBPACK_IMPORTED_MODULE_6___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_6___default().node), prop_types__WEBPACK_IMPORTED_MODULE_6___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_6___default().node))]),\n onSave: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func)\n};\n\n//Заголовок раздела редактора\nconst EditorSubHeader = ({\n title\n}) => {\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"component-editor__divider\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n label: title,\n size: \"small\"\n }));\n};\n\n//Контроль свойств компонента - заголовок раздела редактора\nEditorSubHeader.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string).isRequired\n};\n\n//Диалог настройки\nconst ConfigDialog = ({\n title,\n children,\n onOk,\n onCancel\n}) => {\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClose: onCancel,\n open: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], null, children), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n onClick: () => onOk && onOk()\n }, _app_text__WEBPACK_IMPORTED_MODULE_3__.BUTTONS.OK), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n onClick: () => onCancel && onCancel()\n }, _app_text__WEBPACK_IMPORTED_MODULE_3__.BUTTONS.CANCEL)));\n};\n\n//Контроль свойств компонента - диалог настройки\nConfigDialog.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string).isRequired,\n children: prop_types__WEBPACK_IMPORTED_MODULE_6___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_6___default().node), prop_types__WEBPACK_IMPORTED_MODULE_6___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_6___default().node))]),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func)\n};\n\n//Диалог настройки источника данных\nconst ConfigDataSourceDialog = ({\n dataSource = null,\n valueProviders = {},\n onOk = null,\n onCancel = null\n} = {}) => {\n //Собственное состояние - параметры элемента формы\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ...DATA_SOURCE_INITIAL,\n ...dataSource\n });\n\n //Собственное состояние - флаги обновление данных\n const [refresh, setRefresh] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n userProcDesc: 0\n });\n\n //Собственное состояние - элемент привязки меню выбора источника\n const [valueProvidersMenuAnchorEl, setValueProvidersMenuAnchorEl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Описание выбранной пользовательской процедуры\n const [userProcDesc] = (0,_components_hooks__WEBPACK_IMPORTED_MODULE_4__.useUserProcDesc)({\n code: state.userProc,\n refresh: refresh.userProcDesc\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Установка значения/привязки аргумента\n const setArgumentValueSource = (index, value, valueSource) => setState(pv => ({\n ...pv,\n arguments: pv.arguments.map((argument, i) => ({\n ...argument,\n ...(i == index ? {\n value,\n valueSource\n } : {})\n }))\n }));\n\n //Открытие/сокрытие меню выбора источника\n const toggleValueProvidersMenu = target => setValueProvidersMenuAnchorEl(target instanceof Element ? target : null);\n\n //При нажатии на очистку наименования пользовательской процедуры\n const handleUserProcClearClick = () => setState({\n ...DATA_SOURCE_INITIAL\n });\n\n //При нажатии на выбор пользовательской процедуры в качестве источника данных\n const handleUserProcSelectClick = () => {\n pOnlineShowDictionary({\n unitCode: \"UserProcedures\",\n showMethod: \"main\",\n inputParameters: [{\n name: \"in_CODE\",\n value: state.userProc\n }],\n callBack: res => {\n if (res.success) {\n setState(pv => ({\n ...pv,\n type: DATA_SOURCE_TYPE.USER_PROC,\n userProc: res.outParameters.out_CODE\n }));\n setRefresh(pv => ({\n ...pv,\n userProcDesc: pv.userProcDesc + 1\n }));\n }\n }\n });\n };\n\n //При закрытии дилога с сохранением\n const handleOk = () => onOk && onOk({\n ...state\n });\n\n //При закртии диалога отменой\n const handleCancel = () => onCancel && onCancel();\n\n //При очистке значения/связывания аргумента\n const handleArgumentClearClick = index => setArgumentValueSource(index, \"\", \"\");\n\n //При отображении меню связывания аргумента с поставщиком данных\n const handleArgumentLinkMenuClick = e => setValueProvidersMenuAnchorEl(e.currentTarget);\n\n //При выборе элемента меню связывания аргумента с поставщиком данных\n const handleArgumentLinkClick = valueSource => {\n setArgumentValueSource(valueProvidersMenuAnchorEl.id, \"\", valueSource);\n toggleValueProvidersMenu();\n };\n\n //При вводе значения аргумента\n const handleArgumentChange = (index, value) => setArgumentValueSource(index, value, \"\");\n\n //При изменении описания пользовательской процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (userProcDesc) setState(pv => ({\n ...pv,\n stored: userProcDesc?.stored?.name,\n respArg: userProcDesc?.stored?.respArg,\n arguments: (userProcDesc?.arguments || []).map(argument => ({\n ...DATA_SOURCE_ARGUMENT_INITIAL,\n ...argument\n }))\n }));\n }, [userProcDesc]);\n\n //Список значений\n const values = Object.keys(valueProviders).reduce((res, key) => [...res, ...Object.keys(valueProviders[key])], []);\n\n //Наличие значений\n const isValues = values && values.length > 0 ? true : false;\n\n //Меню привязки к поставщикам значений\n const valueProvidersMenu = isValues && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchorEl: valueProvidersMenuAnchorEl,\n open: Boolean(valueProvidersMenuAnchorEl),\n onClose: toggleValueProvidersMenu\n }, values.map((value, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n key: i,\n onClick: () => handleArgumentLinkClick(value)\n }, value)));\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ConfigDialog, {\n title: \"\\u041D\\u0430\\u0441\\u0442\\u0440\\u043E\\u0439\\u043A\\u0430 \\u0438\\u0441\\u0442\\u043E\\u0447\\u043D\\u0438\\u043A\\u0430 \\u0434\\u0430\\u043D\\u043D\\u044B\\u0445\",\n onOk: handleOk,\n onCancel: handleCancel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n direction: \"column\",\n spacing: 1\n }, valueProvidersMenu, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n type: \"text\",\n variant: \"standard\",\n value: state.userProc,\n label: \"Пользовательская процедура\",\n InputLabelProps: {\n shrink: true\n },\n InputProps: {\n readOnly: true,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n onClick: handleUserProcClearClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"clear\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n onClick: handleUserProcSelectClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\")))\n }\n }), Array.isArray(state?.arguments) && state.arguments.map((argument, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n key: i,\n type: \"text\",\n variant: \"standard\",\n value: argument.value || argument.valueSource,\n label: argument.caption,\n onChange: e => handleArgumentChange(i, e.target.value),\n InputLabelProps: {\n shrink: true\n },\n InputProps: {\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n onClick: () => handleArgumentClearClick(i)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"clear\")), isValues && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: i,\n onClick: handleArgumentLinkMenuClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"settings_ethernet\")))\n }\n }))));\n};\n\n//Контроль свойств компонента - Диалог настройки источника данных\nConfigDataSourceDialog.propTypes = {\n dataSource: DATA_SOURCE_SHAPE,\n valueProviders: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().object),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func)\n};\n\n//Источник данных\nconst DataSource = ({\n dataSource = null,\n valueProviders = {},\n onChange = null\n} = {}) => {\n //Собственное состояние - отображение диалога настройки\n const [configDlg, setConfigDlg] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Уведомление родителя о смене настроек источника данных\n const notifyChange = settings => onChange && onChange(settings);\n\n //При нажатии на настройку источника данных\n const handleSetup = () => setConfigDlg(true);\n\n //При нажатии на настройку источника данных\n const handleSetupOk = dataSource => {\n setConfigDlg(false);\n notifyChange(dataSource);\n };\n\n //При нажатии на настройку источника данных\n const handleSetupCancel = () => setConfigDlg(false);\n\n //При удалении настроек источника данных\n const handleDelete = () => notifyChange({\n ...DATA_SOURCE_INITIAL\n });\n\n //Расчет флага \"настроенности\"\n const configured = dataSource?.type ? true : false;\n\n //Список аргументов\n const args = configured && dataSource.arguments.map((argument, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n key: i,\n label: `:${argument.name} = ${argument.valueSource || argument.value || \"NULL\"}`,\n variant: \"outlined\",\n sx: STYLES.CHIP(true)\n }));\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, configDlg && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ConfigDataSourceDialog, {\n dataSource: dataSource,\n valueProviders: valueProviders,\n onOk: handleSetupOk,\n onCancel: handleSetupCancel\n }), configured && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n variant: \"outlined\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n onClick: handleSetup\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n variant: \"subtitle1\",\n noWrap: true\n }, dataSource.type === DATA_SOURCE_TYPE.USER_PROC ? dataSource.userProc : \"Источник без наименования\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n variant: \"caption\",\n color: \"text.secondary\",\n noWrap: true\n }, DATA_SOURCE_TYPE_NAME[dataSource.type] || \"Неизвестный тип источника\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n direction: \"column\",\n spacing: 1,\n pt: 2\n }, args))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n onClick: handleDelete\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"delete\")))), !configured && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"build\"),\n onClick: handleSetup\n }, \"\\u041D\\u0430\\u0441\\u0442\\u0440\\u043E\\u0438\\u0442\\u044C\"));\n};\n\n//Контроль свойств компонента - Источник данных\nDataSource.propTypes = {\n dataSource: DATA_SOURCE_SHAPE,\n valueProviders: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().object),\n onChange: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/editors_common.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useComponentModule: () => (/* binding */ useComponentModule)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: Хуки компонентов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n\n//-----------\n//Тело модуля\n//-----------\n\n//Отложенная загрузка модуля компонента (как альтернативу можно применять React.lazy)\nconst useComponentModule = ({\n path = null,\n module = \"view\"\n} = {}) => {\n //Собственное состояние - импортированный модуль компонента\n const [componentModule, setComponentModule] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Собственное состояние - флаг готовности\n const [init, setInit] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //При подмонтировании к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Динамическая загрузка модуля компонента из библиотеки\n const importComponentModule = async () => {\n setInit(false);\n const moduleContent = await __webpack_require__(\"./app/panels/panels_editor/components lazy recursive ^\\\\.\\\\/.*\\\\/.*$\")(`./${path}/${module}`);\n setComponentModule(moduleContent);\n setInit(true);\n };\n if (path) importComponentModule();\n }, [path, module]);\n\n //Возвращаем интерфейс хука\n return [componentModule, init];\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/components_hooks.js?"); /***/ }), @@ -2489,7 +2610,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -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 */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Select/Select.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Switch/Switch.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Chip/Chip.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _editors_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../editors_common */ \"./app/panels/panels_editor/components/editors_common.js\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./common */ \"./app/panels/panels_editor/components/form/common.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: Форма (редактор настроек)\r\n*/\n\n//TODO: Контроль уникальности имени элемента формы\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст приложения\n //Общие компоненты редакторов\n //Общие ресурсы и константы формы\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CHIP_ITEM: {\n ..._editors_common__WEBPACK_IMPORTED_MODULE_2__.STYLES.CHIP(true, false)\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Редактор элемента\nconst ItemEditor = ({\n item = null,\n onOk = null,\n onCancel = null\n} = {}) => {\n //Собственное состояние - параметры элемента формы\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ..._common__WEBPACK_IMPORTED_MODULE_3__.ITEM_INITIAL,\n ...item\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //При закрытии редактора с сохранением\n const handleOk = () => onOk && onOk({\n ...state\n });\n\n //При закрытии редактора с отменой\n const handleCancel = () => onCancel && onCancel();\n\n //При изменении параметра элемента\n const handleChange = e => setState(pv => ({\n ...pv,\n [e.target.id]: e.target.value\n }));\n\n //При нажатии на очистку раздела\n const handleClearUnitClick = () => setState(pv => ({\n ...pv,\n unitCode: \"\",\n unitName: \"\",\n showMethod: \"\",\n showMethodName: \"\",\n parameter: \"\",\n inputParameter: \"\",\n outputParameter: \"\"\n }));\n\n //При нажатии на выбор раздела\n const handleSelectUnitClick = () => {\n pOnlineShowDictionary({\n unitCode: \"Units\",\n showMethod: \"methods\",\n inputParameters: [{\n name: \"pos_unit_name\",\n value: state.unitName\n }, {\n name: \"pos_method_name\",\n value: state.showMethodName\n }],\n callBack: res => res.success && setState(pv => ({\n ...pv,\n unitCode: res.outParameters.unit_code,\n unitName: res.outParameters.unit_name,\n showMethod: res.outParameters.method_code,\n showMethodName: res.outParameters.method_name,\n parameter: \"\",\n inputParameter: \"\",\n outputParameter: \"\"\n }))\n });\n };\n\n //При нажатии на выбор параметра метода вызова\n const handleSelectUnitParameterClick = () => {\n state.unitCode && state.showMethod && pOnlineShowDictionary({\n unitCode: \"UnitParams\",\n showMethod: \"main\",\n inputParameters: [{\n name: \"in_UNITCODE\",\n value: state.unitCode\n }, {\n name: \"in_PARENT_METHOD_CODE\",\n value: state.showMethod\n }, {\n name: \"in_PARAMNAME\",\n value: state.parameter\n }],\n callBack: res => res.success && setState(pv => ({\n ...pv,\n parameter: res.outParameters.out_PARAMNAME,\n inputParameter: res.outParameters.out_IN_CODE,\n outputParameter: res.outParameters.out_OUT_CODE\n }))\n });\n };\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_editors_common__WEBPACK_IMPORTED_MODULE_2__.ConfigDialog, {\n title: `${item ? \"Изменение\" : \"Добавление\"} элемента`,\n onOk: handleOk,\n onCancel: handleCancel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n direction: \"column\",\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n type: \"text\",\n variant: \"standard\",\n value: state.name,\n label: \"Имя\",\n id: \"name\",\n onChange: handleChange\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n type: \"text\",\n variant: \"standard\",\n value: state.caption,\n label: \"Приглашение\",\n id: \"caption\",\n onChange: handleChange\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n type: \"text\",\n variant: \"standard\",\n value: state.unitName,\n label: \"Раздел\",\n InputLabelProps: {\n shrink: state.unitName ? true : false\n },\n InputProps: {\n readOnly: true,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n onClick: handleClearUnitClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, \"clear\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n onClick: handleSelectUnitClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, \"list\")))\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n type: \"text\",\n variant: \"standard\",\n value: state.showMethodName,\n label: \"Метод вызова\",\n InputLabelProps: {\n shrink: state.showMethodName ? true : false\n },\n InputProps: {\n readOnly: true\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n type: \"text\",\n variant: \"standard\",\n value: state.parameter,\n label: \"Параметр\",\n InputLabelProps: {\n shrink: state.parameter ? true : false\n },\n InputProps: {\n readOnly: true,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n onClick: handleSelectUnitParameterClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, \"list\")))\n }\n })));\n};\n\n//Контроль свойств - редактор элемента\nItemEditor.propTypes = {\n item: _common__WEBPACK_IMPORTED_MODULE_3__.ITEM_SHAPE,\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Форма (редактор настроек)\nconst FormEditor = ({\n id,\n title = \"\",\n orientation = _common__WEBPACK_IMPORTED_MODULE_3__.ORIENTATION.V,\n autoApply = false,\n items = _common__WEBPACK_IMPORTED_MODULE_3__.ITEMS_INITIAL,\n onSettingsChange = null\n} = {}) => {\n //Собственное состояние - текущие настройки\n const [settings, setSettings] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Собственное состояние - предоставляемые в панель значения\n const [providedValues, setProvidedValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n //Собственное состояние - редактор элементов формы\n const [itemEditor, setItemEditor] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n display: false,\n index: null\n });\n\n //При изменении значения настройки\n const handleChange = e => setSettings({\n ...settings,\n [e.target.name]: e.target.type === \"checkbox\" ? e.target.checked : e.target.value\n });\n\n //При добавлении нового элемента\n const handleItemAdd = () => setItemEditor({\n display: true,\n index: null\n });\n\n //При нажатии на элемент\n const handleItemClick = i => setItemEditor({\n display: true,\n index: i\n });\n\n //При удалении элемента\n const handleItemDelete = i => {\n const items = [...settings.items];\n items.splice(i, 1);\n setSettings(pv => ({\n ...pv,\n items\n }));\n };\n\n //При сохранении изменений элемента\n const handleItemSave = item => {\n const items = [...settings.items];\n itemEditor.index == null ? items.push({\n ...item\n }) : items[itemEditor.index] = {\n ...item\n };\n setSettings(pv => ({\n ...pv,\n items\n }));\n setItemEditor({\n display: false,\n index: null\n });\n };\n\n //При отмене сохранения изменений элемента\n const handleItemCancel = () => setItemEditor({\n display: false,\n index: null\n });\n\n //При сохранении настроек\n const handleSave = (closeEditor = false) => onSettingsChange && onSettingsChange({\n id,\n settings,\n providedValues,\n closeEditor\n });\n\n //При изменении компонента\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n settings?.id != id && setSettings({\n id,\n title,\n orientation,\n autoApply,\n items\n });\n }, [settings, id, title, orientation, autoApply, items]);\n\n //При изменении состава элементов формы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n Array.isArray(settings?.items) && setProvidedValues(settings.items.map(item => item.name));\n }, [settings?.items]);\n\n //Формирование представления\n return settings && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_editors_common__WEBPACK_IMPORTED_MODULE_2__.EditorBox, {\n title: \"Параметры формы\",\n onSave: handleSave\n }, itemEditor.display && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ItemEditor, {\n item: itemEditor.index !== null ? {\n ...settings.items[itemEditor.index]\n } : null,\n onCancel: handleItemCancel,\n onOk: handleItemSave\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_editors_common__WEBPACK_IMPORTED_MODULE_2__.EditorSubHeader, {\n title: \"Общие\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n type: \"text\",\n variant: \"standard\",\n value: settings.title,\n label: \"Заголовок\",\n name: \"title\",\n onChange: handleChange\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n variant: \"standard\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n id: \"orientation-label\"\n }, \"\\u041E\\u0440\\u0438\\u0435\\u043D\\u0442\\u0430\\u0446\\u0438\\u044F\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n name: \"orientation\",\n value: settings.orientation,\n labelId: \"orientation-label\",\n label: \"Ориентация\",\n onChange: handleChange\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n value: _common__WEBPACK_IMPORTED_MODULE_3__.ORIENTATION.V\n }, \"\\u0412\\u0435\\u0440\\u0442\\u0438\\u043A\\u0430\\u043B\\u044C\\u043D\\u043E\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n value: _common__WEBPACK_IMPORTED_MODULE_3__.ORIENTATION.H\n }, \"\\u0413\\u043E\\u0440\\u0438\\u0437\\u043E\\u043D\\u0442\\u0430\\u043B\\u044C\\u043D\\u043E\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n name: \"autoApply\",\n checked: settings.autoApply,\n onChange: handleChange\n }),\n label: \"Автоподтверждение\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_editors_common__WEBPACK_IMPORTED_MODULE_2__.EditorSubHeader, {\n title: \"Элементы\"\n }), Array.isArray(settings?.items) && settings.items.length > 0 && settings.items.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n key: i,\n label: item.caption,\n variant: \"outlined\",\n onClick: () => handleItemClick(i),\n onDelete: () => handleItemDelete(i),\n sx: STYLES.CHIP_ITEM\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, \"add\"),\n onClick: handleItemAdd\n }, \"\\u0414\\u043E\\u0431\\u0430\\u0432\\u0438\\u0442\\u044C \\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\"));\n};\n\n//Контроль свойств компонента - Форма (редактор настроек)\nFormEditor.propTypes = {\n id: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string),\n orientation: prop_types__WEBPACK_IMPORTED_MODULE_9___default().oneOf(Object.values(_common__WEBPACK_IMPORTED_MODULE_3__.ORIENTATION)),\n autoApply: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().bool),\n items: prop_types__WEBPACK_IMPORTED_MODULE_9___default().arrayOf(_common__WEBPACK_IMPORTED_MODULE_3__.ITEM_SHAPE),\n onSettingsChange: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FormEditor);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/form/editor.js?"); +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 */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Select/Select.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Switch/Switch.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Chip/Chip.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _components_editors_p8p_editor_box__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../components/editors/p8p_editor_box */ \"./app/components/editors/p8p_editor_box.js\");\n/* harmony import */ var _components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../components/editors/p8p_editor_sub_header */ \"./app/components/editors/p8p_editor_sub_header.js\");\n/* harmony import */ var _components_editors_p8p_config_dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../components/editors/p8p_config_dialog */ \"./app/components/editors/p8p_config_dialog.js\");\n/* harmony import */ var _components_editors_p8p_editors_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../../components/editors/p8p_editors_common */ \"./app/components/editors/p8p_editors_common.js\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./common */ \"./app/panels/panels_editor/components/form/common.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: Форма (редактор настроек)\r\n*/\n\n//TODO: Контроль уникальности имени элемента формы\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст приложения\n //Контейнер редактора\n //Заголовок раздела редактора\n //Диалог настройки\n //Общие ресурсы редакторов\n //Общие ресурсы и константы формы\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CHIP_ITEM: {\n ..._components_editors_p8p_editors_common__WEBPACK_IMPORTED_MODULE_5__.STYLES.CHIP(true, false)\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Редактор элемента\nconst ItemEditor = ({\n item = null,\n onOk = null,\n onCancel = null\n} = {}) => {\n //Собственное состояние - параметры элемента формы\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ..._common__WEBPACK_IMPORTED_MODULE_6__.ITEM_INITIAL,\n ...item\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //При закрытии редактора с сохранением\n const handleOk = () => onOk && onOk({\n ...state\n });\n\n //При закрытии редактора с отменой\n const handleCancel = () => onCancel && onCancel();\n\n //При изменении параметра элемента\n const handleChange = e => setState(pv => ({\n ...pv,\n [e.target.id]: e.target.value\n }));\n\n //При нажатии на очистку раздела\n const handleClearUnitClick = () => setState(pv => ({\n ...pv,\n unitCode: \"\",\n unitName: \"\",\n showMethod: \"\",\n showMethodName: \"\",\n parameter: \"\",\n inputParameter: \"\",\n outputParameter: \"\"\n }));\n\n //При нажатии на выбор раздела\n const handleSelectUnitClick = () => {\n pOnlineShowDictionary({\n unitCode: \"Units\",\n showMethod: \"methods\",\n inputParameters: [{\n name: \"pos_unit_name\",\n value: state.unitName\n }, {\n name: \"pos_method_name\",\n value: state.showMethodName\n }],\n callBack: res => res.success && setState(pv => ({\n ...pv,\n unitCode: res.outParameters.unit_code,\n unitName: res.outParameters.unit_name,\n showMethod: res.outParameters.method_code,\n showMethodName: res.outParameters.method_name,\n parameter: \"\",\n inputParameter: \"\",\n outputParameter: \"\"\n }))\n });\n };\n\n //При нажатии на выбор параметра метода вызова\n const handleSelectUnitParameterClick = () => {\n state.unitCode && state.showMethod && pOnlineShowDictionary({\n unitCode: \"UnitParams\",\n showMethod: \"main\",\n inputParameters: [{\n name: \"in_UNITCODE\",\n value: state.unitCode\n }, {\n name: \"in_PARENT_METHOD_CODE\",\n value: state.showMethod\n }, {\n name: \"in_PARAMNAME\",\n value: state.parameter\n }],\n callBack: res => res.success && setState(pv => ({\n ...pv,\n parameter: res.outParameters.out_PARAMNAME,\n inputParameter: res.outParameters.out_IN_CODE,\n outputParameter: res.outParameters.out_OUT_CODE\n }))\n });\n };\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_config_dialog__WEBPACK_IMPORTED_MODULE_4__.P8PConfigDialog, {\n title: `${item ? \"Изменение\" : \"Добавление\"} элемента`,\n onOk: handleOk,\n onCancel: handleCancel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n direction: \"column\",\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n type: \"text\",\n variant: \"standard\",\n value: state.name,\n label: \"Имя\",\n id: \"name\",\n onChange: handleChange\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n type: \"text\",\n variant: \"standard\",\n value: state.caption,\n label: \"Приглашение\",\n id: \"caption\",\n onChange: handleChange\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n type: \"text\",\n variant: \"standard\",\n value: state.unitName,\n label: \"Раздел\",\n InputLabelProps: {\n shrink: state.unitName ? true : false\n },\n InputProps: {\n readOnly: true,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n onClick: handleClearUnitClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"clear\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n onClick: handleSelectUnitClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\")))\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n type: \"text\",\n variant: \"standard\",\n value: state.showMethodName,\n label: \"Метод вызова\",\n InputLabelProps: {\n shrink: state.showMethodName ? true : false\n },\n InputProps: {\n readOnly: true\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n type: \"text\",\n variant: \"standard\",\n value: state.parameter,\n label: \"Параметр\",\n InputLabelProps: {\n shrink: state.parameter ? true : false\n },\n InputProps: {\n readOnly: true,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n onClick: handleSelectUnitParameterClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\")))\n }\n })));\n};\n\n//Контроль свойств - редактор элемента\nItemEditor.propTypes = {\n item: _common__WEBPACK_IMPORTED_MODULE_6__.ITEM_SHAPE,\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Форма (редактор настроек)\nconst FormEditor = ({\n id,\n title = \"\",\n orientation = _common__WEBPACK_IMPORTED_MODULE_6__.ORIENTATION.V,\n autoApply = false,\n items = _common__WEBPACK_IMPORTED_MODULE_6__.ITEMS_INITIAL,\n onSettingsChange = null\n} = {}) => {\n //Собственное состояние - текущие настройки\n const [settings, setSettings] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Собственное состояние - предоставляемые в панель значения\n const [providedValues, setProvidedValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n //Собственное состояние - редактор элементов формы\n const [itemEditor, setItemEditor] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n display: false,\n index: null\n });\n\n //При изменении значения настройки\n const handleChange = e => setSettings({\n ...settings,\n [e.target.name]: e.target.type === \"checkbox\" ? e.target.checked : e.target.value\n });\n\n //При добавлении нового элемента\n const handleItemAdd = () => setItemEditor({\n display: true,\n index: null\n });\n\n //При нажатии на элемент\n const handleItemClick = i => setItemEditor({\n display: true,\n index: i\n });\n\n //При удалении элемента\n const handleItemDelete = i => {\n const items = [...settings.items];\n items.splice(i, 1);\n setSettings(pv => ({\n ...pv,\n items\n }));\n };\n\n //При сохранении изменений элемента\n const handleItemSave = item => {\n const items = [...settings.items];\n itemEditor.index == null ? items.push({\n ...item\n }) : items[itemEditor.index] = {\n ...item\n };\n setSettings(pv => ({\n ...pv,\n items\n }));\n setItemEditor({\n display: false,\n index: null\n });\n };\n\n //При отмене сохранения изменений элемента\n const handleItemCancel = () => setItemEditor({\n display: false,\n index: null\n });\n\n //При сохранении настроек\n const handleSave = (closeEditor = false) => onSettingsChange && onSettingsChange({\n id,\n settings,\n providedValues,\n closeEditor\n });\n\n //При изменении компонента\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n settings?.id != id && setSettings({\n id,\n title,\n orientation,\n autoApply,\n items\n });\n }, [settings, id, title, orientation, autoApply, items]);\n\n //При изменении состава элементов формы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n Array.isArray(settings?.items) && setProvidedValues(settings.items.map(item => item.name));\n }, [settings?.items]);\n\n //Формирование представления\n return settings && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_box__WEBPACK_IMPORTED_MODULE_2__.P8PEditorBox, {\n title: \"Параметры формы\",\n onSave: handleSave\n }, itemEditor.display && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ItemEditor, {\n item: itemEditor.index !== null ? {\n ...settings.items[itemEditor.index]\n } : null,\n onCancel: handleItemCancel,\n onOk: handleItemSave\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_3__.P8PEditorSubHeader, {\n title: \"Общие\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n type: \"text\",\n variant: \"standard\",\n value: settings.title,\n label: \"Заголовок\",\n name: \"title\",\n onChange: handleChange\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n variant: \"standard\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n id: \"orientation-label\"\n }, \"\\u041E\\u0440\\u0438\\u0435\\u043D\\u0442\\u0430\\u0446\\u0438\\u044F\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n name: \"orientation\",\n value: settings.orientation,\n labelId: \"orientation-label\",\n label: \"Ориентация\",\n onChange: handleChange\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n value: _common__WEBPACK_IMPORTED_MODULE_6__.ORIENTATION.V\n }, \"\\u0412\\u0435\\u0440\\u0442\\u0438\\u043A\\u0430\\u043B\\u044C\\u043D\\u043E\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n value: _common__WEBPACK_IMPORTED_MODULE_6__.ORIENTATION.H\n }, \"\\u0413\\u043E\\u0440\\u0438\\u0437\\u043E\\u043D\\u0442\\u0430\\u043B\\u044C\\u043D\\u043E\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n name: \"autoApply\",\n checked: settings.autoApply,\n onChange: handleChange\n }),\n label: \"Автоподтверждение\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_3__.P8PEditorSubHeader, {\n title: \"Элементы\"\n }), Array.isArray(settings?.items) && settings.items.length > 0 && settings.items.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n key: i,\n label: item.caption,\n variant: \"outlined\",\n onClick: () => handleItemClick(i),\n onDelete: () => handleItemDelete(i),\n sx: STYLES.CHIP_ITEM\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"add\"),\n onClick: handleItemAdd\n }, \"\\u0414\\u043E\\u0431\\u0430\\u0432\\u0438\\u0442\\u044C \\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\"));\n};\n\n//Контроль свойств компонента - Форма (редактор настроек)\nFormEditor.propTypes = {\n id: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().string),\n orientation: prop_types__WEBPACK_IMPORTED_MODULE_12___default().oneOf(Object.values(_common__WEBPACK_IMPORTED_MODULE_6__.ORIENTATION)),\n autoApply: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().bool),\n items: prop_types__WEBPACK_IMPORTED_MODULE_12___default().arrayOf(_common__WEBPACK_IMPORTED_MODULE_6__.ITEM_SHAPE),\n onSettingsChange: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FormEditor);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/form/editor.js?"); /***/ }), @@ -2500,7 +2621,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -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 */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _views_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../views_common */ \"./app/panels/panels_editor/components/views_common.js\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./common */ \"./app/panels/panels_editor/components/form/common.js\");\n/* harmony import */ var _panels_editor_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../panels_editor.css */ \"./app/panels/panels_editor/panels_editor.css\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: Форма (представление)\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст приложения\n //Общие компоненты представлений\n //Общие ресурсы и константы формы\n //Стили редактора\n\n//---------\n//Константы\n//---------\n\n//Иконка компонента\nconst COMPONENT_ICON = \"fact_check\";\n\n//Наименование компонента\nconst COMPONENT_NAME = \"Форма\";\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Элемент формы\nconst FormItem = ({\n item = null,\n fullWidth = false,\n value = \"\",\n onChange = null\n} = {}) => {\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //При изменении значения элемента\n const handleChange = e => onChange && onChange(e.target.id, e.target.value);\n\n //При очистке значения элемента\n const handleClear = () => onChange(item.name, \"\");\n\n //При выборе значения из словаря\n const handleDictionary = () => item.unitCode && item.showMethod && pOnlineShowDictionary({\n unitCode: item.unitCode,\n showMethod: item.showMethod,\n inputParameters: [{\n name: item.inputParameter,\n value\n }],\n callBack: res => res.success && onChange && onChange(item.name, res.outParameters[item.outputParameter])\n });\n //Формирование представления\n return item && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], _extends({\n fullWidth: fullWidth,\n type: \"text\",\n variant: \"standard\",\n value: value,\n label: item.caption,\n id: item.name,\n onChange: handleChange\n }, item.unitCode && {\n InputLabelProps: {\n shrink: true\n },\n InputProps: {\n readOnly: true,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n onClick: handleClear\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, \"clear\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n onClick: handleDictionary\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, \"list\")))\n }\n }));\n};\n\n//Контроль свойств - элемент формы\nFormItem.propTypes = {\n item: _common__WEBPACK_IMPORTED_MODULE_3__.ITEM_SHAPE,\n fullWidth: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().bool),\n value: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().any),\n onChange: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Форма (представление)\nconst Form = ({\n title = null,\n orientation = _common__WEBPACK_IMPORTED_MODULE_3__.ORIENTATION.V,\n autoApply = false,\n items = _common__WEBPACK_IMPORTED_MODULE_3__.ITEMS_INITIAL,\n values = {},\n onValuesChange = null\n} = {}) => {\n //Собственное состояние - значения элементов\n const [selfValues, setSelfValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //При изменении состава элементов или значений\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => setSelfValues(items.reduce((sV, item) => ({\n ...sV,\n [item.name]: values[item.name]\n }), {})), [items, values]);\n\n //При изменении значения элемента формы\n const handleItemChange = (name, value) => {\n setSelfValues(pv => ({\n ...pv,\n [name]: value\n }));\n autoApply && onValuesChange && onValuesChange({\n ...selfValues,\n [name]: value\n });\n };\n\n //При подтверждении изменений формы\n const handleOkClick = () => onValuesChange && onValuesChange({\n ...selfValues\n });\n\n //Флаг настроенности формы\n const haveConfing = items && Array.isArray(items) && items.length > 0;\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: `component-view__container ${!haveConfing && \"component-view__container__empty\"}`,\n elevation: 6\n }, haveConfing ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n direction: \"column\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n direction: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"center\"\n }, title && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n align: \"left\",\n color: \"text.primary\",\n variant: \"subtitle2\",\n noWrap: true\n }, title), !autoApply && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n onClick: handleOkClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, \"done\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n direction: orientation == _common__WEBPACK_IMPORTED_MODULE_3__.ORIENTATION.V ? \"column\" : \"row\",\n spacing: 1,\n pt: 1,\n pb: 1\n }, items.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(FormItem, {\n key: i,\n item: item,\n value: selfValues?.[item.name] || \"\",\n onChange: handleItemChange,\n fullWidth: orientation == _common__WEBPACK_IMPORTED_MODULE_3__.ORIENTATION.V\n })))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_views_common__WEBPACK_IMPORTED_MODULE_2__.ComponentInlineMessage, {\n icon: COMPONENT_ICON,\n name: COMPONENT_NAME,\n message: _views_common__WEBPACK_IMPORTED_MODULE_2__.COMPONENT_MESSAGES.NO_SETTINGS\n }));\n};\n\n//Контроль свойств компонента - Форма (представление)\nForm.propTypes = {\n id: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string),\n orientation: prop_types__WEBPACK_IMPORTED_MODULE_9___default().oneOf(Object.values(_common__WEBPACK_IMPORTED_MODULE_3__.ORIENTATION)),\n autoApply: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().bool),\n items: prop_types__WEBPACK_IMPORTED_MODULE_9___default().arrayOf(_common__WEBPACK_IMPORTED_MODULE_3__.ITEM_SHAPE),\n values: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().object),\n onValuesChange: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Form);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/form/view.js?"); +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 */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../components/editors/p8p_component_inline_message */ \"./app/components/editors/p8p_component_inline_message.js\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./common */ \"./app/panels/panels_editor/components/form/common.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: Форма (представление)\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст приложения\n //Информационное сообщение внутри компонента\n //Общие ресурсы и константы формы\n\n//---------\n//Константы\n//---------\n\n//Иконка компонента\nconst COMPONENT_ICON = \"fact_check\";\n\n//Наименование компонента\nconst COMPONENT_NAME = \"Форма\";\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Элемент формы\nconst FormItem = ({\n item = null,\n fullWidth = false,\n value = \"\",\n onChange = null\n} = {}) => {\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //При изменении значения элемента\n const handleChange = e => onChange && onChange(e.target.id, e.target.value);\n\n //При очистке значения элемента\n const handleClear = () => onChange(item.name, \"\");\n\n //При выборе значения из словаря\n const handleDictionary = () => item.unitCode && item.showMethod && pOnlineShowDictionary({\n unitCode: item.unitCode,\n showMethod: item.showMethod,\n inputParameters: [{\n name: item.inputParameter,\n value\n }],\n callBack: res => res.success && onChange && onChange(item.name, res.outParameters[item.outputParameter])\n });\n\n //Формирование представления\n return item && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], _extends({\n fullWidth: fullWidth,\n type: \"text\",\n variant: \"standard\",\n value: value,\n label: item.caption,\n id: item.name,\n onChange: handleChange\n }, item.unitCode && {\n InputLabelProps: {\n shrink: true\n },\n InputProps: {\n readOnly: true,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n onClick: handleClear\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, \"clear\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n onClick: handleDictionary\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, \"list\")))\n }\n }));\n};\n\n//Контроль свойств - элемент формы\nFormItem.propTypes = {\n item: _common__WEBPACK_IMPORTED_MODULE_3__.ITEM_SHAPE,\n fullWidth: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n value: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().any),\n onChange: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Форма (представление)\nconst Form = ({\n title = null,\n orientation = _common__WEBPACK_IMPORTED_MODULE_3__.ORIENTATION.V,\n autoApply = false,\n items = _common__WEBPACK_IMPORTED_MODULE_3__.ITEMS_INITIAL,\n values = {},\n onValuesChange = null\n} = {}) => {\n //Собственное состояние - значения элементов\n const [selfValues, setSelfValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //При изменении состава элементов или значений\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => setSelfValues(items.reduce((sV, item) => ({\n ...sV,\n [item.name]: values[item.name]\n }), {})), [items, values]);\n\n //При изменении значения элемента формы\n const handleItemChange = (name, value) => {\n setSelfValues(pv => ({\n ...pv,\n [name]: value\n }));\n autoApply && onValuesChange && onValuesChange({\n ...selfValues,\n [name]: value\n });\n };\n\n //При подтверждении изменений формы\n const handleOkClick = () => onValuesChange && onValuesChange({\n ...selfValues\n });\n\n //Флаг настроенности формы\n const haveConfing = items && Array.isArray(items) && items.length > 0;\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: `component-view__container ${!haveConfing && \"component-view__container__empty\"}`,\n elevation: 6\n }, haveConfing ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n direction: \"column\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n direction: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"center\"\n }, title && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n align: \"left\",\n color: \"text.primary\",\n variant: \"subtitle2\",\n noWrap: true\n }, title), !autoApply && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n onClick: handleOkClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, \"done\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n direction: orientation == _common__WEBPACK_IMPORTED_MODULE_3__.ORIENTATION.V ? \"column\" : \"row\",\n spacing: 1,\n pt: 1,\n pb: 1\n }, items.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(FormItem, {\n key: i,\n item: item,\n value: selfValues?.[item.name] || \"\",\n onChange: handleItemChange,\n fullWidth: orientation == _common__WEBPACK_IMPORTED_MODULE_3__.ORIENTATION.V\n })))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_2__.P8PComponentInlineMessage, {\n icon: COMPONENT_ICON,\n name: COMPONENT_NAME,\n message: _components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_2__.P8P_COMPONENT_INLINE_MESSAGE.NO_SETTINGS\n }));\n};\n\n//Контроль свойств компонента - Форма (представление)\nForm.propTypes = {\n id: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string),\n orientation: prop_types__WEBPACK_IMPORTED_MODULE_8___default().oneOf(Object.values(_common__WEBPACK_IMPORTED_MODULE_3__.ORIENTATION)),\n autoApply: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n items: prop_types__WEBPACK_IMPORTED_MODULE_8___default().arrayOf(_common__WEBPACK_IMPORTED_MODULE_3__.ITEM_SHAPE),\n values: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object),\n onValuesChange: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Form);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/form/view.js?"); /***/ }), @@ -2511,7 +2632,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -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 */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _editors_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../editors_common */ \"./app/panels/panels_editor/components/editors_common.js\");\n/* harmony import */ var _panels_editor_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../panels_editor.css */ \"./app/panels/panels_editor/panels_editor.css\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: Индикатор (редактор настроек)\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Общие компоненты редакторов\n //Стили редактора\n\n//-----------\n//Тело модуля\n//-----------\n\n//Индикатор (редактор настроек)\nconst IndicatorEditor = ({\n id,\n dataSource = null,\n valueProviders = {},\n onSettingsChange = null\n} = {}) => {\n //Собственное состояние - текущие настройки\n const [settings, setSettings] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //При изменении компонента\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n settings?.id != id && setSettings({\n id,\n dataSource\n });\n }, [settings, id, dataSource]);\n\n //При сохранении изменений элемента\n const handleDataSourceChange = dataSource => setSettings(pv => ({\n ...pv,\n dataSource: {\n ...dataSource\n }\n }));\n\n //При сохранении настроек\n const handleSave = (closeEditor = false) => onSettingsChange && onSettingsChange({\n id,\n settings,\n closeEditor\n });\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_editors_common__WEBPACK_IMPORTED_MODULE_1__.EditorBox, {\n title: \"Параметры индикатора\",\n onSave: handleSave\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_editors_common__WEBPACK_IMPORTED_MODULE_1__.EditorSubHeader, {\n title: \"Источник данных\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_editors_common__WEBPACK_IMPORTED_MODULE_1__.DataSource, {\n dataSource: settings?.dataSource,\n valueProviders: valueProviders,\n onChange: handleDataSourceChange\n }));\n};\n\n//Контроль свойств компонента - Индикатор (редактор настроек)\nIndicatorEditor.propTypes = {\n id: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n dataSource: _editors_common__WEBPACK_IMPORTED_MODULE_1__.DATA_SOURCE_SHAPE,\n valueProviders: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object),\n onSettingsChange: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (IndicatorEditor);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/indicator/editor.js?"); +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 */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _components_editors_p8p_editor_box__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../components/editors/p8p_editor_box */ \"./app/components/editors/p8p_editor_box.js\");\n/* harmony import */ var _components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../components/editors/p8p_editor_sub_header */ \"./app/components/editors/p8p_editor_sub_header.js\");\n/* harmony import */ var _components_editors_p8p_data_source_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../components/editors/p8p_data_source_common */ \"./app/components/editors/p8p_data_source_common.js\");\n/* harmony import */ var _components_editors_p8p_data_source__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../components/editors/p8p_data_source */ \"./app/components/editors/p8p_data_source.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: Индикатор (редактор настроек)\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Контейнер редактора\n //Заголовок раздела редактора\n //Общие ресурсы источника данных\n //Источник данных\n\n//-----------\n//Тело модуля\n//-----------\n\n//Индикатор (редактор настроек)\nconst IndicatorEditor = ({\n id,\n dataSource = null,\n valueProviders = {},\n onSettingsChange = null\n} = {}) => {\n //Собственное состояние - текущие настройки\n const [settings, setSettings] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //При изменении компонента\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n settings?.id != id && setSettings({\n id,\n dataSource\n });\n }, [settings, id, dataSource]);\n\n //При сохранении изменений элемента\n const handleDataSourceChange = dataSource => setSettings(pv => ({\n ...pv,\n dataSource: {\n ...dataSource\n }\n }));\n\n //При сохранении настроек\n const handleSave = (closeEditor = false) => onSettingsChange && onSettingsChange({\n id,\n settings,\n closeEditor\n });\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_box__WEBPACK_IMPORTED_MODULE_1__.P8PEditorBox, {\n title: \"Параметры индикатора\",\n onSave: handleSave\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_2__.P8PEditorSubHeader, {\n title: \"Источник данных\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_data_source__WEBPACK_IMPORTED_MODULE_4__.P8PDataSource, {\n dataSource: settings?.dataSource,\n valueProviders: valueProviders,\n onChange: handleDataSourceChange\n }));\n};\n\n//Контроль свойств компонента - Индикатор (редактор настроек)\nIndicatorEditor.propTypes = {\n id: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().string).isRequired,\n dataSource: _components_editors_p8p_data_source_common__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_SOURCE_SHAPE,\n valueProviders: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().object),\n onSettingsChange: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (IndicatorEditor);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/indicator/editor.js?"); /***/ }), @@ -2522,7 +2643,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -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 */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _components_p8p_indicator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../components/p8p_indicator */ \"./app/components/p8p_indicator.js\");\n/* harmony import */ var _components_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components_hooks */ \"./app/panels/panels_editor/components/components_hooks.js\");\n/* harmony import */ var _editors_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../editors_common */ \"./app/panels/panels_editor/components/editors_common.js\");\n/* harmony import */ var _views_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../views_common */ \"./app/panels/panels_editor/components/views_common.js\");\n/* harmony import */ var _panels_editor_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../panels_editor.css */ \"./app/panels/panels_editor/panels_editor.css\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: Индикатор (представление)\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Компонент индикатора\n //Хуки для данных\n //Общие объекты компонентов\n //Общие компоненты представлений\n //Стили редактора\n\n//---------\n//Константы\n//---------\n\n//Иконка компонента\nconst COMPONENT_ICON = \"speed\";\n\n//Наименование компонента\nconst COMPONENT_NAME = \"Индикатор\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n height: \"100%\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Индикатор (представление)\nconst Indicator = ({\n dataSource = null,\n values = {}\n} = {}) => {\n //Собственное состояние - данные\n const [data, error] = (0,_components_hooks__WEBPACK_IMPORTED_MODULE_2__.useComponentDataSource)({\n dataSource,\n values\n });\n\n //Флаг настроенности индикатора\n const haveConfing = dataSource?.stored ? true : false;\n\n //Флаг наличия данных\n const haveData = data?.init === true && !error ? true : false;\n\n //Данные индикатора\n const indicator = data?.XINDICATOR || {};\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], _extends({}, haveConfing && haveData ? {\n sx: {\n ...STYLES.CONTAINER\n }\n } : {\n className: \"component-view__container component-view__container__empty\"\n }, {\n elevation: 6\n }), haveConfing && haveData ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_indicator__WEBPACK_IMPORTED_MODULE_1__.P8PIndicator, _extends({}, indicator, {\n elevation: 0\n })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_views_common__WEBPACK_IMPORTED_MODULE_4__.ComponentInlineMessage, {\n icon: COMPONENT_ICON,\n name: COMPONENT_NAME,\n message: !haveConfing ? _views_common__WEBPACK_IMPORTED_MODULE_4__.COMPONENT_MESSAGES.NO_SETTINGS : error ? error : _views_common__WEBPACK_IMPORTED_MODULE_4__.COMPONENT_MESSAGES.NO_DATA_FOUND,\n type: error ? _views_common__WEBPACK_IMPORTED_MODULE_4__.COMPONENT_MESSAGE_TYPE.ERROR : _views_common__WEBPACK_IMPORTED_MODULE_4__.COMPONENT_MESSAGE_TYPE.COMMON\n }));\n};\n\n//Контроль свойств компонента - Индикатор (представление)\nIndicator.propTypes = {\n dataSource: _editors_common__WEBPACK_IMPORTED_MODULE_3__.DATA_SOURCE_SHAPE,\n values: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Indicator);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/indicator/view.js?"); +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 */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _components_p8p_indicator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../components/p8p_indicator */ \"./app/components/p8p_indicator.js\");\n/* harmony import */ var _components_editors_p8p_data_source_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../components/editors/p8p_data_source_hooks */ \"./app/components/editors/p8p_data_source_hooks.js\");\n/* harmony import */ var _components_editors_p8p_data_source_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../components/editors/p8p_data_source_common */ \"./app/components/editors/p8p_data_source_common.js\");\n/* harmony import */ var _components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../components/editors/p8p_component_inline_message */ \"./app/components/editors/p8p_component_inline_message.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: Индикатор (представление)\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Компонент индикатора\n //Хуки для данных\n //Общие ресурсы источника данных\n //Информационное сообщение внутри компонента\n\n//---------\n//Константы\n//---------\n\n//Иконка компонента\nconst COMPONENT_ICON = \"speed\";\n\n//Наименование компонента\nconst COMPONENT_NAME = \"Индикатор\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n height: \"100%\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Индикатор (представление)\nconst Indicator = ({\n dataSource = null,\n values = {}\n} = {}) => {\n //Собственное состояние - данные\n const [data, error] = (0,_components_editors_p8p_data_source_hooks__WEBPACK_IMPORTED_MODULE_2__.useDataSource)({\n dataSource,\n values\n });\n\n //Флаг настроенности индикатора\n const haveConfing = dataSource?.stored ? true : false;\n\n //Флаг наличия данных\n const haveData = data?.init === true && !error ? true : false;\n\n //Данные индикатора\n const indicator = data?.XINDICATOR || {};\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], _extends({}, haveConfing && haveData ? {\n sx: {\n ...STYLES.CONTAINER\n }\n } : {\n className: \"component-view__container component-view__container__empty\"\n }, {\n elevation: 6\n }), haveConfing && haveData ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_indicator__WEBPACK_IMPORTED_MODULE_1__.P8PIndicator, _extends({}, indicator, {\n elevation: 0\n })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_4__.P8PComponentInlineMessage, {\n icon: COMPONENT_ICON,\n name: COMPONENT_NAME,\n message: !haveConfing ? _components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_4__.P8P_COMPONENT_INLINE_MESSAGE.NO_SETTINGS : error ? error : _components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_4__.P8P_COMPONENT_INLINE_MESSAGE.NO_DATA_FOUND,\n type: error ? _components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_4__.P8P_COMPONENT_INLINE_MESSAGE_TYPE.ERROR : _components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_4__.P8P_COMPONENT_INLINE_MESSAGE_TYPE.COMMON\n }));\n};\n\n//Контроль свойств компонента - Индикатор (представление)\nIndicator.propTypes = {\n dataSource: _components_editors_p8p_data_source_common__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_SOURCE_SHAPE,\n values: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Indicator);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/indicator/view.js?"); /***/ }), @@ -2533,7 +2654,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -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 */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _editors_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../editors_common */ \"./app/panels/panels_editor/components/editors_common.js\");\n/* harmony import */ var _panels_editor_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../panels_editor.css */ \"./app/panels/panels_editor/panels_editor.css\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: Таблица (редактор настроек)\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Общие компоненты редакторов\n //Стили редактора\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица (редактор настроек)\nconst TableEditor = ({\n id,\n dataSource = null,\n valueProviders = {},\n onSettingsChange = null\n} = {}) => {\n //Собственное состояние - текущие настройки\n const [settings, setSettings] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //При изменении компонента\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n settings?.id != id && setSettings({\n id,\n dataSource\n });\n }, [settings, id, dataSource]);\n\n //При сохранении изменений элемента\n const handleDataSourceChange = dataSource => setSettings(pv => ({\n ...pv,\n dataSource: {\n ...dataSource\n }\n }));\n\n //При сохранении настроек\n const handleSave = (closeEditor = false) => onSettingsChange && onSettingsChange({\n id,\n settings,\n closeEditor\n });\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_editors_common__WEBPACK_IMPORTED_MODULE_1__.EditorBox, {\n title: \"Параметры таблицы\",\n onSave: handleSave\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_editors_common__WEBPACK_IMPORTED_MODULE_1__.EditorSubHeader, {\n title: \"Источник данных\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_editors_common__WEBPACK_IMPORTED_MODULE_1__.DataSource, {\n dataSource: settings?.dataSource,\n valueProviders: valueProviders,\n onChange: handleDataSourceChange\n }));\n};\n\n//Контроль свойств компонента - Таблица (редактор настроек)\nTableEditor.propTypes = {\n id: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n dataSource: _editors_common__WEBPACK_IMPORTED_MODULE_1__.DATA_SOURCE_SHAPE,\n valueProviders: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object),\n onSettingsChange: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TableEditor);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/table/editor.js?"); +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 */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _components_editors_p8p_editor_box__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../components/editors/p8p_editor_box */ \"./app/components/editors/p8p_editor_box.js\");\n/* harmony import */ var _components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../components/editors/p8p_editor_sub_header */ \"./app/components/editors/p8p_editor_sub_header.js\");\n/* harmony import */ var _components_editors_p8p_data_source_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../components/editors/p8p_data_source_common */ \"./app/components/editors/p8p_data_source_common.js\");\n/* harmony import */ var _components_editors_p8p_data_source__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../components/editors/p8p_data_source */ \"./app/components/editors/p8p_data_source.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: Таблица (редактор настроек)\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Контейнер редактора\n //Заголовок раздела редактора\n //Общие ресурсы источника данных\n //Источник данных\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица (редактор настроек)\nconst TableEditor = ({\n id,\n dataSource = null,\n valueProviders = {},\n onSettingsChange = null\n} = {}) => {\n //Собственное состояние - текущие настройки\n const [settings, setSettings] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //При изменении компонента\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n settings?.id != id && setSettings({\n id,\n dataSource\n });\n }, [settings, id, dataSource]);\n\n //При сохранении изменений элемента\n const handleDataSourceChange = dataSource => setSettings(pv => ({\n ...pv,\n dataSource: {\n ...dataSource\n }\n }));\n\n //При сохранении настроек\n const handleSave = (closeEditor = false) => onSettingsChange && onSettingsChange({\n id,\n settings,\n closeEditor\n });\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_box__WEBPACK_IMPORTED_MODULE_1__.P8PEditorBox, {\n title: \"Параметры таблицы\",\n onSave: handleSave\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_2__.P8PEditorSubHeader, {\n title: \"Источник данных\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_data_source__WEBPACK_IMPORTED_MODULE_4__.P8PDataSource, {\n dataSource: settings?.dataSource,\n valueProviders: valueProviders,\n onChange: handleDataSourceChange\n }));\n};\n\n//Контроль свойств компонента - Таблица (редактор настроек)\nTableEditor.propTypes = {\n id: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().string).isRequired,\n dataSource: _components_editors_p8p_data_source_common__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_SOURCE_SHAPE,\n valueProviders: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().object),\n onSettingsChange: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TableEditor);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/table/editor.js?"); /***/ }), @@ -2544,18 +2665,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -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 */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components_hooks */ \"./app/panels/panels_editor/components/components_hooks.js\");\n/* harmony import */ var _editors_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../editors_common */ \"./app/panels/panels_editor/components/editors_common.js\");\n/* harmony import */ var _views_common__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../views_common */ \"./app/panels/panels_editor/components/views_common.js\");\n/* harmony import */ var _panels_editor_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../panels_editor.css */ \"./app/panels/panels_editor/panels_editor.css\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: Таблица (представление)\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Типовые стили\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Хуки для данных\n //Общие объекты компонентов\n //Общие компоненты представлений\n //Стили редактора\n\n//---------\n//Константы\n//---------\n\n//Иконка компонента\nconst COMPONENT_ICON = \"table_view\";\n\n//Наименование компонента\nconst COMPONENT_NAME = \"Таблица\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n display: \"flex\",\n height: \"100%\",\n overflow: \"hidden\"\n },\n DATA_GRID: {\n width: \"100%\"\n },\n DATA_GRID_CONTAINER: {\n height: `calc(100%)`,\n ..._app_styles__WEBPACK_IMPORTED_MODULE_1__.APP_STYLES.SCROLL\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица (представление)\nconst Table = ({\n dataSource = null,\n values = {}\n} = {}) => {\n //Собственное состояние - данные\n const [data, error] = (0,_components_hooks__WEBPACK_IMPORTED_MODULE_4__.useComponentDataSource)({\n dataSource,\n values\n });\n\n //Флаг настроенности таблицы\n const haveConfing = dataSource?.stored ? true : false;\n\n //Флаг наличия данных\n const haveData = data?.init === true && !error ? true : false;\n\n //Данные таблицы\n const dataGrid = data?.XDATA_GRID || {};\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], _extends({}, haveConfing && haveData ? {\n sx: {\n ...STYLES.CONTAINER\n }\n } : {\n className: \"component-view__container component-view__container__empty\"\n }, {\n elevation: 6\n }), haveConfing && haveData ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, dataGrid, {\n style: STYLES.DATA_GRID,\n containerComponentProps: {\n sx: STYLES.DATA_GRID_CONTAINER,\n elevation: 0\n }\n })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_views_common__WEBPACK_IMPORTED_MODULE_6__.ComponentInlineMessage, {\n icon: COMPONENT_ICON,\n name: COMPONENT_NAME,\n message: !haveConfing ? _views_common__WEBPACK_IMPORTED_MODULE_6__.COMPONENT_MESSAGES.NO_SETTINGS : error ? error : _views_common__WEBPACK_IMPORTED_MODULE_6__.COMPONENT_MESSAGES.NO_DATA_FOUND,\n type: error ? _views_common__WEBPACK_IMPORTED_MODULE_6__.COMPONENT_MESSAGE_TYPE.ERROR : _views_common__WEBPACK_IMPORTED_MODULE_6__.COMPONENT_MESSAGE_TYPE.COMMON\n }));\n};\n\n//Контроль свойств компонента - Таблица (представление)\nTable.propTypes = {\n dataSource: _editors_common__WEBPACK_IMPORTED_MODULE_5__.DATA_SOURCE_SHAPE,\n values: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Table);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/table/view.js?"); - -/***/ }), - -/***/ "./app/panels/panels_editor/components/views_common.js": -/*!*************************************************************!*\ - !*** ./app/panels/panels_editor/components/views_common.js ***! - \*************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ COMPONENT_MESSAGES: () => (/* binding */ COMPONENT_MESSAGES),\n/* harmony export */ COMPONENT_MESSAGE_TYPE: () => (/* binding */ COMPONENT_MESSAGE_TYPE),\n/* harmony export */ ComponentInlineMessage: () => (/* binding */ ComponentInlineMessage)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../app.text */ \"./app.text.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Общие компоненты представлений элементов панели\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Общие текстовые ресурсы\n\n//---------\n//Константы\n//---------\n\n//Типы сообщений\nconst COMPONENT_MESSAGE_TYPE = {\n COMMON: \"COMMON\",\n ERROR: \"ERROR\"\n};\n\n//Типовые сообщения\nconst COMPONENT_MESSAGES = {\n NO_DATA_FOUND: _app_text__WEBPACK_IMPORTED_MODULE_1__.TEXTS.NO_DATA_FOUND,\n NO_SETTINGS: \"Настройте компонент\"\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Информационное сообщение внутри компонента\nconst ComponentInlineMessage = ({\n icon,\n name,\n message,\n type = COMPONENT_MESSAGE_TYPE.COMMON\n}) => {\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"column\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }, icon && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n color: \"disabled\"\n }, icon), name && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n align: \"center\",\n color: \"text.secondary\",\n variant: \"button\"\n }, name)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n align: \"center\",\n color: type != COMPONENT_MESSAGE_TYPE.ERROR ? \"text.secondary\" : \"error.dark\",\n variant: \"caption\"\n }, message));\n};\n\n//Контроль свойств - Информационное сообщение внутри компонента\nComponentInlineMessage.propTypes = {\n icon: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().string),\n name: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().string),\n message: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().string).isRequired,\n type: prop_types__WEBPACK_IMPORTED_MODULE_5___default().oneOf(Object.values(COMPONENT_MESSAGE_TYPE))\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/views_common.js?"); +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 */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_editors_p8p_data_source_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../components/editors/p8p_data_source_hooks */ \"./app/components/editors/p8p_data_source_hooks.js\");\n/* harmony import */ var _components_editors_p8p_data_source_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../../components/editors/p8p_data_source_common */ \"./app/components/editors/p8p_data_source_common.js\");\n/* harmony import */ var _components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../../components/editors/p8p_component_inline_message */ \"./app/components/editors/p8p_component_inline_message.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Компоненты: Таблица (представление)\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Типовые стили\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Хуки для данных\n //Общие ресурсы источника данных\n //Информационное сообщение внутри компонента\n\n//---------\n//Константы\n//---------\n\n//Иконка компонента\nconst COMPONENT_ICON = \"table_view\";\n\n//Наименование компонента\nconst COMPONENT_NAME = \"Таблица\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n display: \"flex\",\n height: \"100%\",\n overflow: \"hidden\"\n },\n DATA_GRID: {\n width: \"100%\"\n },\n DATA_GRID_CONTAINER: {\n height: `calc(100%)`,\n ..._app_styles__WEBPACK_IMPORTED_MODULE_1__.APP_STYLES.SCROLL\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица (представление)\nconst Table = ({\n dataSource = null,\n values = {}\n} = {}) => {\n //Собственное состояние - данные\n const [data, error] = (0,_components_editors_p8p_data_source_hooks__WEBPACK_IMPORTED_MODULE_4__.useDataSource)({\n dataSource,\n values\n });\n\n //Флаг настроенности таблицы\n const haveConfing = dataSource?.stored ? true : false;\n\n //Флаг наличия данных\n const haveData = data?.init === true && !error ? true : false;\n\n //Данные таблицы\n const dataGrid = data?.XDATA_GRID || {};\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], _extends({}, haveConfing && haveData ? {\n sx: {\n ...STYLES.CONTAINER\n }\n } : {\n className: \"component-view__container component-view__container__empty\"\n }, {\n elevation: 6\n }), haveConfing && haveData ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, dataGrid, {\n style: STYLES.DATA_GRID,\n containerComponentProps: {\n sx: STYLES.DATA_GRID_CONTAINER,\n elevation: 0\n }\n })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_6__.P8PComponentInlineMessage, {\n icon: COMPONENT_ICON,\n name: COMPONENT_NAME,\n message: !haveConfing ? _components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_6__.P8P_COMPONENT_INLINE_MESSAGE.NO_SETTINGS : error ? error : _components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_6__.P8P_COMPONENT_INLINE_MESSAGE.NO_DATA_FOUND,\n type: error ? _components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_6__.P8P_COMPONENT_INLINE_MESSAGE_TYPE.ERROR : _components_editors_p8p_component_inline_message__WEBPACK_IMPORTED_MODULE_6__.P8P_COMPONENT_INLINE_MESSAGE_TYPE.COMMON\n }));\n};\n\n//Контроль свойств компонента - Таблица (представление)\nTable.propTypes = {\n dataSource: _components_editors_p8p_data_source_common__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_SOURCE_SHAPE,\n values: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Table);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/components/table/view.js?"); /***/ }), @@ -2577,7 +2687,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LayoutItem: () => (/* binding */ LayoutItem)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _panels_editor_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./panels_editor.css */ \"./app/panels/panels_editor/panels_editor.css\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Элемент макета\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Кастомные стили\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CONTAINER: selected => ({\n zIndex: 1100,\n ...(selected ? {\n border: \"2px dotted green\"\n } : {})\n }),\n STACK_TOOLS: {\n position: \"absolute\",\n zIndex: 1200,\n height: \"100%\",\n backgroundColor: \"#c0c0c07f\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Элемент макета\n// eslint-disable-next-line react/display-name\nconst LayoutItem = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().forwardRef(({\n style,\n className,\n onMouseDown,\n onMouseUp,\n onTouchEnd,\n children,\n onSettingsClick,\n onDeleteClick,\n item,\n editMode = false,\n selected = false\n}, ref) => {\n //При нажатии на настройки\n const handleSettingsClick = () => onSettingsClick && onSettingsClick(item.i);\n\n //При нажатии на удаление\n const handleDeleteClick = () => onDeleteClick && onDeleteClick(item.i);\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n ...style,\n ...STYLES.CONTAINER(selected)\n },\n className: `${className} layout-item__container`,\n ref: ref,\n onMouseDown: onMouseDown,\n onMouseUp: onMouseUp,\n onTouchEnd: onTouchEnd\n }, editMode && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"column\",\n sx: STYLES.STACK_TOOLS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onClick: handleSettingsClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"settings\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onClick: handleDeleteClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"delete\"))), children);\n});\n\n//Контроль свойств компонента - элемент макета\nLayoutItem.propTypes = {\n style: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().object),\n className: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().string),\n onMouseDown: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().func),\n onMouseUp: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().func),\n onTouchEnd: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().func),\n children: prop_types__WEBPACK_IMPORTED_MODULE_5___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_5___default().node), prop_types__WEBPACK_IMPORTED_MODULE_5___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_5___default().node))]),\n onSettingsClick: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().func),\n onDeleteClick: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().func),\n item: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().object).isRequired,\n editMode: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().bool),\n selected: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().bool)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/layout_item.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LayoutItem: () => (/* binding */ LayoutItem)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Элемент макета\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CONTAINER: selected => ({\n zIndex: 1100,\n ...(selected ? {\n border: \"2px dotted green\"\n } : {})\n }),\n STACK_TOOLS: {\n position: \"absolute\",\n zIndex: 1200,\n height: \"100%\",\n backgroundColor: \"#c0c0c07f\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Элемент макета\n// eslint-disable-next-line react/display-name\nconst LayoutItem = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().forwardRef(({\n style,\n className,\n onMouseDown,\n onMouseUp,\n onTouchEnd,\n children,\n onSettingsClick,\n onDeleteClick,\n item,\n editMode = false,\n selected = false\n}, ref) => {\n //При нажатии на настройки\n const handleSettingsClick = () => onSettingsClick && onSettingsClick(item.i);\n\n //При нажатии на удаление\n const handleDeleteClick = () => onDeleteClick && onDeleteClick(item.i);\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n ...style,\n ...STYLES.CONTAINER(selected)\n },\n className: `${className} layout-item__container`,\n ref: ref,\n onMouseDown: onMouseDown,\n onMouseUp: onMouseUp,\n onTouchEnd: onTouchEnd\n }, editMode && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n direction: \"column\",\n sx: STYLES.STACK_TOOLS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onClick: handleSettingsClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, \"settings\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onClick: handleDeleteClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, \"delete\"))), children);\n});\n\n//Контроль свойств компонента - элемент макета\nLayoutItem.propTypes = {\n style: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().object),\n className: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string),\n onMouseDown: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func),\n onMouseUp: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func),\n onTouchEnd: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func),\n children: prop_types__WEBPACK_IMPORTED_MODULE_4___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_4___default().node), prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().node))]),\n onSettingsClick: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func),\n onDeleteClick: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func),\n item: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().object).isRequired,\n editMode: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().bool),\n selected: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().bool)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/layout_item.js?"); /***/ }), @@ -2599,7 +2709,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PanelsEditor: () => (/* binding */ PanelsEditor)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_grid_layout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-grid-layout */ \"./node_modules/react-grid-layout/index.js\");\n/* harmony import */ var react_grid_layout__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_grid_layout__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Menu/Menu.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _layout_item__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./layout_item */ \"./app/panels/panels_editor/layout_item.js\");\n/* harmony import */ var _component_view__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./component_view */ \"./app/panels/panels_editor/component_view.js\");\n/* harmony import */ var _component_editor__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./component_editor */ \"./app/panels/panels_editor/component_editor.js\");\n/* harmony import */ var _components_components__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/components */ \"./app/panels/panels_editor/components/components.js\");\n/* harmony import */ var react_grid_layout_css_styles_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-grid-layout/css/styles.css */ \"./node_modules/react-grid-layout/css/styles.css\");\n/* harmony import */ var react_resizable_css_styles_css__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react-resizable/css/styles.css */ \"./node_modules/react-resizable/css/styles.css\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Корневой компонент\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Адаптивный макет\n //Интерфейсные элементы\n //Контекст приложения\n //Рабочая область приложения\n //Общие вспомогательные функции\n //Элемент макета\n //Представление компонента панели\n //Редактор свойств компонента панели\n //Описание доступных компонентов\n //Стили для адаптивного макета\n //Стили для адаптивного макета\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n display: \"flex\"\n },\n GRID_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_3__.APP_BAR_HEIGHT})`\n },\n GRID_ITEM_INSPECTOR: {\n backgroundColor: \"#e9ecef\"\n },\n FAB_EDIT: {\n position: \"absolute\",\n top: 12,\n right: 12,\n zIndex: 2000\n }\n};\n\n//Заголовоки по умолчанию\nconst PANEL_CAPTION_EDIT_MODE = \"Редактор панелей\";\nconst PANEL_CAPTION_EXECUTE_MODE = \"Исполнение панели\";\n\n//Начальное состояние размера макета\nconst INITIAL_BREAKPOINT = \"lg\";\n\n//Начальное состояние макета\nconst INITIAL_LAYOUTS = {\n [INITIAL_BREAKPOINT]: []\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Обёрдка для динамического макета\nconst ResponsiveGridLayout = (0,react_grid_layout__WEBPACK_IMPORTED_MODULE_1__.WidthProvider)(react_grid_layout__WEBPACK_IMPORTED_MODULE_1__.Responsive);\n\n//Корневой компонент редактора панелей\nconst PanelsEditor = () => {\n //Собственное состояние\n const [components, setComponents] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n const [valueProviders, setValueProviders] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n const [layouts, setLayouts] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(INITIAL_LAYOUTS);\n const [breakpoint, setBreakpoint] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(INITIAL_BREAKPOINT);\n const [editMode, setEditMode] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n const [editComponent, setEditComponent] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [addMenuAnchorEl, setAddMenuAnchorEl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Подключение к контексту приложения\n const {\n setAppBarTitle\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Добвление компонента в макет\n const addComponent = component => {\n const id = (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.genGUID)();\n setLayouts(pv => ({\n ...pv,\n [breakpoint]: [...pv[breakpoint], {\n i: id,\n x: 0,\n y: 0,\n w: 4,\n h: 10\n }]\n }));\n setComponents(pv => ({\n ...pv,\n [id]: {\n ...component\n }\n }));\n };\n\n //Удаление компонента из макета\n const deleteComponent = id => {\n setLayouts(pv => ({\n ...pv,\n [breakpoint]: layouts[breakpoint].filter(item => item.i !== id)\n }));\n setComponents(pv => ({\n ...pv,\n [id]: {\n ...pv[id],\n deleted: true\n }\n }));\n if (valueProviders[id]) {\n const vPTmp = {\n ...valueProviders\n };\n delete vPTmp[id];\n setValueProviders(vPTmp);\n }\n editComponent === id && closeComponentSettingsEditor();\n };\n\n //Включение/выключение режима редиктирования\n const toggleEditMode = () => {\n if (!editMode) setAppBarTitle(PANEL_CAPTION_EDIT_MODE);else setAppBarTitle(PANEL_CAPTION_EXECUTE_MODE);\n setEditMode(!editMode);\n };\n\n //Открытие редактора настроек компонента\n const openComponentSettingsEditor = id => setEditComponent(id);\n\n //Закрытие реактора настроек компонента\n const closeComponentSettingsEditor = () => setEditComponent(null);\n\n //Открытие/сокрытие меню добавления\n const toggleAddMenu = target => setAddMenuAnchorEl(target instanceof Element ? target : null);\n\n //При изменении размера холста\n const handleBreakpointChange = breakpoint => setBreakpoint(breakpoint);\n\n //При изменении состояния макета\n const handleLayoutChange = (currentLayout, layouts) => setLayouts(layouts);\n\n //При нажатии на кнопку добалвения\n const handleAddClick = e => toggleAddMenu(e.currentTarget);\n\n //При выборе элемента меню добавления\n const handleAddMenuItemClick = component => {\n toggleAddMenu();\n addComponent(component);\n };\n\n //При изменении значений в компоненте\n const handleComponentValuesChange = (id, values) => setValueProviders(pv => ({\n ...pv,\n [id]: {\n ...values\n }\n }));\n\n //При нажатии на настройки компонента\n const handleComponentSettingsClick = id => editComponent === id ? closeComponentSettingsEditor() : openComponentSettingsEditor(id);\n\n //При изменении настроек компонента\n const handleComponentSettingsChange = ({\n id = null,\n settings = {},\n providedValues = [],\n closeEditor = false\n } = {}) => {\n if (id && components[id]) {\n const providedValuesInit = providedValues.reduce((res, providedValue) => ({\n ...res,\n [providedValue]: undefined\n }), {});\n if (valueProviders[id]) {\n const vPTmp = {\n ...valueProviders[id]\n };\n Object.keys(valueProviders[id]).forEach(key => !providedValues.includes(key) && delete vPTmp[key]);\n setValueProviders(pv => ({\n ...pv,\n [id]: {\n ...providedValuesInit,\n ...vPTmp\n }\n }));\n } else setValueProviders(pv => ({\n ...pv,\n [id]: providedValuesInit\n }));\n setComponents(pv => ({\n ...pv,\n [editComponent]: {\n ...pv[editComponent],\n settings: {\n ...settings\n }\n }\n }));\n if (closeEditor === true) closeComponentSettingsEditor();\n }\n };\n\n //При удалении компоненета\n const handleComponentDeleteClick = id => deleteComponent(id);\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n addComponent(_components_components__WEBPACK_IMPORTED_MODULE_8__.COMPONETNS[0]);\n addComponent(_components_components__WEBPACK_IMPORTED_MODULE_8__.COMPONETNS[3]);\n addComponent(_components_components__WEBPACK_IMPORTED_MODULE_8__.COMPONETNS[4]);\n //addComponent(COMPONETNS[1]);\n //addComponent(COMPONETNS[2]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Текущие значения панели\n const values = Object.keys(valueProviders).reduce((res, key) => ({\n ...res,\n ...valueProviders[key]\n }), {});\n\n //Меню добавления\n const addMenu = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n anchorEl: addMenuAnchorEl,\n open: Boolean(addMenuAnchorEl),\n onClose: toggleAddMenu\n }, _components_components__WEBPACK_IMPORTED_MODULE_8__.COMPONETNS.map((comp, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n key: i,\n onClick: () => handleAddMenuItemClick(comp)\n }, comp.name)));\n\n //Кнопка редактирования\n const editButton = !editMode && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: STYLES.FAB_EDIT,\n size: \"small\",\n color: \"grey.700\",\n title: \"Редактировать\",\n onClick: toggleEditMode\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"edit\"));\n\n //Панель инструмментов\n const toolBar = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n onClick: toggleEditMode,\n title: \"Запустить\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"play_arrow\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n onClick: handleAddClick,\n title: \"Добавить элемент\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"add\")));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n sx: STYLES.CONTAINER\n }, editButton, addMenu, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n container: true,\n sx: STYLES.GRID_CONTAINER,\n columns: 25\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n item: true,\n xs: editMode ? 20 : 25\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ResponsiveGridLayout, {\n rowHeight: 5,\n className: \"layout\",\n layouts: layouts,\n breakpoints: {\n lg: 1200\n },\n cols: {\n lg: 12\n },\n onBreakpointChange: handleBreakpointChange,\n onLayoutChange: handleLayoutChange,\n useCSSTransforms: true,\n compactType: \"vertical\",\n isDraggable: editMode,\n isResizable: editMode\n }, layouts[breakpoint].map(item => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_layout_item__WEBPACK_IMPORTED_MODULE_5__.LayoutItem, {\n key: item.i,\n onSettingsClick: handleComponentSettingsClick,\n onDeleteClick: handleComponentDeleteClick,\n item: item,\n editMode: editMode,\n selected: editMode && editComponent === item.i\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_component_view__WEBPACK_IMPORTED_MODULE_6__.ComponentView, {\n id: item.i,\n path: components[item.i]?.path,\n settings: components[item.i]?.settings,\n values: values,\n onValuesChange: handleComponentValuesChange\n }))))), editMode && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n item: true,\n xs: 5,\n sx: STYLES.GRID_ITEM_INSPECTOR\n }, toolBar, editComponent && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_component_editor__WEBPACK_IMPORTED_MODULE_7__.ComponentEditor, {\n id: editComponent,\n path: components[editComponent].path,\n settings: components[editComponent].settings,\n valueProviders: valueProviders,\n onSettingsChange: handleComponentSettingsChange\n })))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/panels_editor.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PanelsEditor: () => (/* binding */ PanelsEditor)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_grid_layout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-grid-layout */ \"./node_modules/react-grid-layout/index.js\");\n/* harmony import */ var react_grid_layout__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_grid_layout__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Menu/Menu.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_editors_p8p_editor_toolbar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/editors/p8p_editor_toolbar */ \"./app/components/editors/p8p_editor_toolbar.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _layout_item__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./layout_item */ \"./app/panels/panels_editor/layout_item.js\");\n/* harmony import */ var _component_view__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./component_view */ \"./app/panels/panels_editor/component_view.js\");\n/* harmony import */ var _component_editor__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./component_editor */ \"./app/panels/panels_editor/component_editor.js\");\n/* harmony import */ var _components_components__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./components/components */ \"./app/panels/panels_editor/components/components.js\");\n/* harmony import */ var react_grid_layout_css_styles_css__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react-grid-layout/css/styles.css */ \"./node_modules/react-grid-layout/css/styles.css\");\n/* harmony import */ var react_resizable_css_styles_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react-resizable/css/styles.css */ \"./node_modules/react-resizable/css/styles.css\");\n/* harmony import */ var _panels_editor_css__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./panels_editor.css */ \"./app/panels/panels_editor/panels_editor.css\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор панелей\r\n Корневой компонент\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Адаптивный макет\n //Интерфейсные элементы\n //Контекст приложения\n //Рабочая область приложения\n //Панель инструментов редактора\n //Общие вспомогательные функции\n //Элемент макета\n //Представление компонента панели\n //Редактор свойств компонента панели\n //Описание доступных компонентов\n //Стили для адаптивного макета\n //Стили для адаптивного макета\n //Стили редактора панелей\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n display: \"flex\"\n },\n GRID_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_3__.APP_BAR_HEIGHT})`\n },\n GRID_ITEM_INSPECTOR: {\n backgroundColor: \"#e9ecef\"\n },\n FAB_EDIT: {\n position: \"absolute\",\n top: 12,\n right: 12,\n zIndex: 2000\n }\n};\n\n//Заголовоки по умолчанию\nconst PANEL_CAPTION_EDIT_MODE = \"Редактор панелей\";\nconst PANEL_CAPTION_EXECUTE_MODE = \"Исполнение панели\";\n\n//Начальное состояние размера макета\nconst INITIAL_BREAKPOINT = \"lg\";\n\n//Начальное состояние макета\nconst INITIAL_LAYOUTS = {\n [INITIAL_BREAKPOINT]: []\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Обёрдка для динамического макета\nconst ResponsiveGridLayout = (0,react_grid_layout__WEBPACK_IMPORTED_MODULE_1__.WidthProvider)(react_grid_layout__WEBPACK_IMPORTED_MODULE_1__.Responsive);\n\n//Корневой компонент редактора панелей\nconst PanelsEditor = () => {\n //Собственное состояние\n const [components, setComponents] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n const [valueProviders, setValueProviders] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n const [layouts, setLayouts] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(INITIAL_LAYOUTS);\n const [breakpoint, setBreakpoint] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(INITIAL_BREAKPOINT);\n const [editMode, setEditMode] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n const [editComponent, setEditComponent] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [addMenuAnchorEl, setAddMenuAnchorEl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Подключение к контексту приложения\n const {\n setAppBarTitle\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Добвление компонента в макет\n const addComponent = component => {\n const id = (0,_core_utils__WEBPACK_IMPORTED_MODULE_5__.genGUID)();\n setLayouts(pv => ({\n ...pv,\n [breakpoint]: [...pv[breakpoint], {\n i: id,\n x: 0,\n y: 0,\n w: 4,\n h: 10\n }]\n }));\n setComponents(pv => ({\n ...pv,\n [id]: {\n ...component\n }\n }));\n };\n\n //Удаление компонента из макета\n const deleteComponent = id => {\n setLayouts(pv => ({\n ...pv,\n [breakpoint]: layouts[breakpoint].filter(item => item.i !== id)\n }));\n setComponents(pv => ({\n ...pv,\n [id]: {\n ...pv[id],\n deleted: true\n }\n }));\n if (valueProviders[id]) {\n const vPTmp = {\n ...valueProviders\n };\n delete vPTmp[id];\n setValueProviders(vPTmp);\n }\n editComponent === id && closeComponentSettingsEditor();\n };\n\n //Включение/выключение режима редиктирования\n const toggleEditMode = () => {\n if (!editMode) setAppBarTitle(PANEL_CAPTION_EDIT_MODE);else setAppBarTitle(PANEL_CAPTION_EXECUTE_MODE);\n setEditMode(!editMode);\n };\n\n //Открытие редактора настроек компонента\n const openComponentSettingsEditor = id => setEditComponent(id);\n\n //Закрытие реактора настроек компонента\n const closeComponentSettingsEditor = () => setEditComponent(null);\n\n //Открытие/сокрытие меню добавления\n const toggleAddMenu = target => setAddMenuAnchorEl(target instanceof Element ? target : null);\n\n //При изменении размера холста\n const handleBreakpointChange = breakpoint => setBreakpoint(breakpoint);\n\n //При изменении состояния макета\n const handleLayoutChange = (currentLayout, layouts) => setLayouts(layouts);\n\n //При нажатии на кнопку добалвения\n const handleAddClick = e => toggleAddMenu(e.currentTarget);\n\n //При выборе элемента меню добавления\n const handleAddMenuItemClick = component => {\n toggleAddMenu();\n addComponent(component);\n };\n\n //При изменении значений в компоненте\n const handleComponentValuesChange = (id, values) => setValueProviders(pv => ({\n ...pv,\n [id]: {\n ...values\n }\n }));\n\n //При нажатии на настройки компонента\n const handleComponentSettingsClick = id => editComponent === id ? closeComponentSettingsEditor() : openComponentSettingsEditor(id);\n\n //При изменении настроек компонента\n const handleComponentSettingsChange = ({\n id = null,\n settings = {},\n providedValues = [],\n closeEditor = false\n } = {}) => {\n if (id && components[id]) {\n const providedValuesInit = providedValues.reduce((res, providedValue) => ({\n ...res,\n [providedValue]: undefined\n }), {});\n if (valueProviders[id]) {\n const vPTmp = {\n ...valueProviders[id]\n };\n Object.keys(valueProviders[id]).forEach(key => !providedValues.includes(key) && delete vPTmp[key]);\n setValueProviders(pv => ({\n ...pv,\n [id]: {\n ...providedValuesInit,\n ...vPTmp\n }\n }));\n } else setValueProviders(pv => ({\n ...pv,\n [id]: providedValuesInit\n }));\n setComponents(pv => ({\n ...pv,\n [editComponent]: {\n ...pv[editComponent],\n settings: {\n ...settings\n }\n }\n }));\n if (closeEditor === true) closeComponentSettingsEditor();\n }\n };\n\n //При удалении компоненета\n const handleComponentDeleteClick = id => deleteComponent(id);\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //addComponent(COMPONETNS[0]);\n //addComponent(COMPONETNS[3]);\n //addComponent(COMPONETNS[4]);\n //addComponent(COMPONETNS[1]);\n //addComponent(COMPONETNS[2]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Текущие значения панели\n const values = Object.keys(valueProviders).reduce((res, key) => ({\n ...res,\n ...valueProviders[key]\n }), {});\n\n //Меню добавления\n const addMenu = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n anchorEl: addMenuAnchorEl,\n open: Boolean(addMenuAnchorEl),\n onClose: toggleAddMenu\n }, _components_components__WEBPACK_IMPORTED_MODULE_9__.COMPONETNS.map((comp, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n key: i,\n onClick: () => handleAddMenuItemClick(comp)\n }, comp.name)));\n\n //Кнопка редактирования\n const editButton = !editMode && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n sx: STYLES.FAB_EDIT,\n size: \"small\",\n color: \"grey.700\",\n title: \"Редактировать\",\n onClick: toggleEditMode\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], null, \"edit\"));\n\n //Панель инструмментов\n const toolBar = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_toolbar__WEBPACK_IMPORTED_MODULE_4__.P8PEditorToolBar, {\n items: [{\n icon: \"play_arrow\",\n title: \"Запустить\",\n onClick: toggleEditMode\n }, {\n icon: \"add\",\n title: \"Добавить элемент\",\n onClick: handleAddClick\n }]\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n sx: STYLES.CONTAINER\n }, editButton, addMenu, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n container: true,\n sx: STYLES.GRID_CONTAINER,\n columns: 25\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n item: true,\n xs: editMode ? 20 : 25\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ResponsiveGridLayout, {\n rowHeight: 5,\n className: \"layout\",\n layouts: layouts,\n breakpoints: {\n lg: 1200\n },\n cols: {\n lg: 12\n },\n onBreakpointChange: handleBreakpointChange,\n onLayoutChange: handleLayoutChange,\n useCSSTransforms: true,\n compactType: \"vertical\",\n isDraggable: editMode,\n isResizable: editMode\n }, layouts[breakpoint].map(item => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_layout_item__WEBPACK_IMPORTED_MODULE_6__.LayoutItem, {\n key: item.i,\n onSettingsClick: handleComponentSettingsClick,\n onDeleteClick: handleComponentDeleteClick,\n item: item,\n editMode: editMode,\n selected: editMode && editComponent === item.i\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_component_view__WEBPACK_IMPORTED_MODULE_7__.ComponentView, {\n id: item.i,\n path: components[item.i]?.path,\n settings: components[item.i]?.settings,\n values: values,\n onValuesChange: handleComponentValuesChange\n }))))), editMode && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n item: true,\n xs: 5,\n sx: STYLES.GRID_ITEM_INSPECTOR\n }, toolBar, editComponent && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_component_editor__WEBPACK_IMPORTED_MODULE_8__.ComponentEditor, {\n id: editComponent,\n path: components[editComponent].path,\n settings: components[editComponent].settings,\n valueProviders: valueProviders,\n onSettingsChange: handleComponentSettingsChange\n })))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/panels_editor.js?"); /***/ }), @@ -3417,6 +3527,149 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./app/panels/query_editor/common.js": +/*!*******************************************!*\ + !*** ./app/panels/query_editor/common.js ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DATA_TYPE: () => (/* binding */ DATA_TYPE),\n/* harmony export */ NODE_TYPE: () => (/* binding */ NODE_TYPE)\n/* harmony export */ });\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Обще ресурсы и константы\r\n*/\n\n//---------\n//Константы\n//---------\n\n//Типы данных\nconst DATA_TYPE = {\n STR: 0,\n NUMB: 1,\n DATE: 2\n};\n\n//Типы элементов диаграммы\nconst NODE_TYPE = {\n ENTITY: \"entity\",\n ATTRIBUTE: \"attribute\"\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/common.js?"); + +/***/ }), + +/***/ "./app/panels/query_editor/components/attribute/attribute.js": +/*!*******************************************************************!*\ + !*** ./app/panels/query_editor/components/attribute/attribute.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Attribute: () => (/* binding */ Attribute)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var reactflow__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! reactflow */ \"./node_modules/@reactflow/core/dist/esm/index.mjs\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../common */ \"./app/panels/query_editor/common.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Компоненты: Атрибут сущности\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Библиотека редактора диаграмм\n //Компоненты UI\n //Общие ресурсы и константы редактора\n\n//---------\n//Константы\n//---------\n\n//Типовые цвета точек привязки\nconst HANDLE_BORDER_COLOR = \"#69db7c\";\nconst HANDLE_BORDER_COLOR_DISABLED = \"#adb5bd\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n display: \"flex\",\n width: \"100%\",\n height: \"100%\"\n },\n HANDLE_SOURCE: isConnecting => ({\n width: 14,\n height: 14,\n right: -10,\n border: `2px solid ${isConnecting ? HANDLE_BORDER_COLOR_DISABLED : HANDLE_BORDER_COLOR}`,\n borderRadius: 7,\n background: \"white\"\n }),\n HANDLE_TARGET: isConnecting => ({\n width: isConnecting ? 14 : 0,\n height: 14,\n left: isConnecting ? -7 : 0,\n border: `2px solid ${HANDLE_BORDER_COLOR}`,\n borderRadius: 7,\n background: \"white\",\n visibility: isConnecting ? \"visible\" : \"hidden\"\n }),\n CONTENT_STACK: {\n width: \"100%\"\n },\n TITLE_NAME_STACK: {\n width: \"100%\",\n containerType: \"inline-size\"\n }\n};\n\n//Иконки\nconst ICONS = {\n [_common__WEBPACK_IMPORTED_MODULE_1__.DATA_TYPE.STR]: \"format_align_left\",\n [_common__WEBPACK_IMPORTED_MODULE_1__.DATA_TYPE.NUMB]: \"pin\",\n [_common__WEBPACK_IMPORTED_MODULE_1__.DATA_TYPE.DATE]: \"calendar_month\",\n DEFAULT: \"category\"\n};\n\n//Структура данных об атрибуте сущности\nconst ATTRIBUTE_DATA_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n dataType: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number).isRequired\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Атрибут сущности\nconst Attribute = ({\n data\n}) => {\n //Поиск идентификатора соединяемого элемента\n const connectionNodeId = (0,reactflow__WEBPACK_IMPORTED_MODULE_3__.useStore)(state => state.connectionNodeId);\n\n //Флаг выполнения соединения сущностей\n const isConnecting = Boolean(connectionNodeId);\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n p: 1,\n sx: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(reactflow__WEBPACK_IMPORTED_MODULE_3__.Handle, {\n type: \"source\",\n position: reactflow__WEBPACK_IMPORTED_MODULE_3__.Position.Right,\n style: STYLES.HANDLE_SOURCE(isConnecting)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(reactflow__WEBPACK_IMPORTED_MODULE_3__.Handle, {\n type: \"target\",\n position: reactflow__WEBPACK_IMPORTED_MODULE_3__.Position.Left,\n isConnectableStart: false,\n style: STYLES.HANDLE_TARGET(isConnecting)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n direction: \"row\",\n alignItems: \"center\",\n spacing: 1,\n sx: STYLES.CONTENT_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n color: \"action\"\n }, ICONS[data.dataType] || ICONS.DEFAULT), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n direction: \"column\",\n alignItems: \"left\",\n sx: STYLES.TITLE_NAME_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"body2\",\n noWrap: true,\n title: data.title\n }, data.title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"caption\",\n color: \"text.secondary\",\n noWrap: true,\n title: data.name\n }, data.name))));\n};\n\n//Контроль свойств компонента - Атрибут сущности\nAttribute.propTypes = {\n data: ATTRIBUTE_DATA_SHAPE\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/attribute/attribute.js?"); + +/***/ }), + +/***/ "./app/panels/query_editor/components/entity/entity.css": +/*!**************************************************************!*\ + !*** ./app/panels/query_editor/components/entity/entity.css ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +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 _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ \"./node_modules/style-loader/dist/runtime/styleDomAPI.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ \"./node_modules/style-loader/dist/runtime/insertBySelector.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ \"./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ \"./node_modules/style-loader/dist/runtime/insertStyleElement.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ \"./node_modules/style-loader/dist/runtime/styleTagTransform.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _node_modules_css_loader_dist_cjs_js_entity_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../../node_modules/css-loader/dist/cjs.js!./entity.css */ \"./node_modules/css-loader/dist/cjs.js!./app/panels/query_editor/components/entity/entity.css\");\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());\noptions.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());\noptions.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, \"head\");\noptions.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());\noptions.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());\n\nvar update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_entity_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"], options);\n\n\n\n\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_entity_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"] && _node_modules_css_loader_dist_cjs_js_entity_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals ? _node_modules_css_loader_dist_cjs_js_entity_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals : undefined);\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/entity/entity.css?"); + +/***/ }), + +/***/ "./app/panels/query_editor/components/entity/entity.js": +/*!*************************************************************!*\ + !*** ./app/panels/query_editor/components/entity/entity.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Entity: () => (/* binding */ Entity)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _entity_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./entity.css */ \"./app/panels/query_editor/components/entity/entity.css\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Компоненты: Сущность запроса\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Стили компомнента\n\n//---------\n//Константы\n//---------\n\n//Структура данных о сущности запроса\nconst ENTITY_DATA_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Сущность запроса\nconst Entity = ({\n data,\n selected\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"entity__wrapper\",\n \"data-selected\": selected\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"entity__title\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, data.title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"entity__name\"\n }, data.name)));\n};\n\n//Контроль свойств компонента - Сущность запроса\nEntity.propTypes = {\n data: ENTITY_DATA_SHAPE,\n selected: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/entity/entity.js?"); + +/***/ }), + +/***/ "./app/panels/query_editor/components/entity_add_dialog/entity_add_dialog.js": +/*!***********************************************************************************!*\ + !*** ./app/panels/query_editor/components/entity_add_dialog/entity_add_dialog.js ***! + \***********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EntityAddDialog: () => (/* binding */ EntityAddDialog)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _components_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../components/p8p_dialog */ \"./app/components/p8p_dialog.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../app.text */ \"./app.text.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Компонент: Диалог добавления сущности запроса\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Типовой диалог\n //Общие текстовые ресурсы приложения\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог добавления сущности запроса\nconst EntityAddDialog = ({\n onOk,\n onCancel\n}) => {\n //Нажатие на кнопку \"Ok\"\n const handleOk = values => onOk && onOk({\n ...values\n });\n\n //Нажатие на кнопку \"Отмена\"\n const handleCancel = () => onCancel && onCancel();\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__.P8PDialog, {\n title: `${_app_text__WEBPACK_IMPORTED_MODULE_2__.TITLES.INSERT} сущности`,\n inputs: [{\n name: \"name\",\n value: \"\",\n label: \"Имя\"\n }],\n onOk: handleOk,\n onCancel: handleCancel\n });\n};\n\n//Контроль свойств - Диалог добавления сущности запроса\nEntityAddDialog.propTypes = {\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/entity_add_dialog/entity_add_dialog.js?"); + +/***/ }), + +/***/ "./app/panels/query_editor/components/queries_manager/queries_list.js": +/*!****************************************************************************!*\ + !*** ./app/panels/query_editor/components/queries_manager/queries_list.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ QueriesList: () => (/* binding */ QueriesList)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../../app.text */ \"./app.text.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Компонент: Список запросов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты MUI\n //Общие текстовые ресурсы приложения\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n SMALL_TOOL_ICON: {\n fontSize: 20\n }\n};\n\n//---------\n//Константы\n//---------\n\n//Структура данных о сущности запроса\nconst QUERIES_LIST_ITEM_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n rn: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number).isRequired,\n code: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n author: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n chDate: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n modify: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOf([0, 1]).isRequired,\n pbl: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOf([0, 1]).isRequired,\n ready: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOf([0, 1]).isRequired\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог открытия запроса\nconst QueriesList = ({\n queries = [],\n current = null,\n onSelect = null,\n onPbl = null,\n onReady = null,\n onEdit = null,\n onDelete = null\n} = {}) => {\n //При выборе элемента списка\n const handleSelectClick = query => {\n onSelect && onSelect(query);\n };\n\n //При нажатии на общедоступность\n const handlePblClick = (e, query) => {\n e.stopPropagation();\n onPbl && onPbl(query);\n };\n\n //При нажатии на готовность\n const handleReadyClick = (e, query) => {\n e.stopPropagation();\n onReady && onReady(query);\n };\n\n //При нажатии на исправлении\n const handleEditClick = (e, query) => {\n e.stopPropagation();\n onEdit && onEdit(query);\n };\n\n //При нажатии на удаление\n const handleDeleteClick = (e, query) => {\n e.stopPropagation();\n onDelete && onDelete(query);\n };\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sx: {\n height: \"500px\",\n width: \"360px\",\n bgcolor: \"background.paper\",\n overflowY: \"auto\"\n }\n }, queries.map((query, i) => {\n const selected = query.rn === current;\n const disabled = !query.modify;\n const pblTitle = `${query.pbl === 1 ? \"Общедоступный\" : \"Приватный\"}${!disabled ? \" - нажмите, чтобы изменить\" : \"\"}`;\n const pblIcon = query.pbl === 1 ? \"groups\" : \"lock_person\";\n const readyTitle = `${query.ready === 1 ? \"Готов\" : \"Не готов\"}${!disabled ? \" - нажмите, чтобы изменить\" : \"\"}`;\n const readyIcon = query.ready === 1 ? \"touch_app\" : \"do_not_touch\";\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n key: i\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n onClick: () => handleSelectClick(query),\n selected: selected\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n primary: query.name,\n secondaryTypographyProps: {\n component: \"div\"\n },\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n direction: \"column\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n variant: \"caption\"\n }, `${query.code}, ${query.author}, ${query.chDate}`), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n title: pblTitle\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n disabled: disabled,\n onClick: e => handlePblClick(e, query)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: STYLES.SMALL_TOOL_ICON\n }, pblIcon))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n title: readyTitle\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n disabled: disabled,\n onClick: e => handleReadyClick(e, query)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: STYLES.SMALL_TOOL_ICON\n }, readyIcon)))))\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: e => handleEditClick(e, query),\n disabled: disabled,\n title: _app_text__WEBPACK_IMPORTED_MODULE_1__.BUTTONS.UPDATE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, \"edit\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: e => handleDeleteClick(e, query),\n disabled: disabled,\n title: _app_text__WEBPACK_IMPORTED_MODULE_1__.BUTTONS.DELETE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, \"delete\")))));\n }));\n};\n\n//Контроль свойств компонента - Список запросов\nQueriesList.propTypes = {\n queries: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(QUERIES_LIST_ITEM_SHAPE),\n current: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),\n onSelect: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onPbl: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onReady: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onEdit: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onDelete: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/queries_manager/queries_list.js?"); + +/***/ }), + +/***/ "./app/panels/query_editor/components/queries_manager/queries_manager.js": +/*!*******************************************************************************!*\ + !*** ./app/panels/query_editor/components/queries_manager/queries_manager.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ QueriesManager: () => (/* binding */ QueriesManager)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_editors_p8p_config_dialog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../components/editors/p8p_config_dialog */ \"./app/components/editors/p8p_config_dialog.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../hooks */ \"./app/panels/query_editor/hooks.js\");\n/* harmony import */ var _queries_list__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./queries_list */ \"./app/panels/query_editor/components/queries_manager/queries_list.js\");\n/* harmony import */ var _query_iu_dialog__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./query_iu_dialog */ \"./app/panels/query_editor/components/queries_manager/query_iu_dialog.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Компонент: Менеджер запросов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты MUI\n //Контекст сообщений\n //Общие текстовые ресурсы приложения\n //Типовой диалог настройки\n //Пользовательские хуки\n //Список запросов\n //Диалог добавления/исправления запроса\n\n//-----------\n//Тело модуля\n//-----------\n\n//Менеджер запросов\nconst QueriesManager = ({\n current = null,\n onQuerySelect = null,\n onCancel = null\n} = {}) => {\n //Собственное состояние - изменяемый запрос\n const [modQuery, setModQuery] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Работа со списком запросов\n const [queries, insertQuery, updateQuery, deleteQuery, setQueryReady, setQueryPbl] = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useQuery)();\n\n //Подключение к контексту сообщений\n const {\n showMsgWarn\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_1__[\"MessagingСtx\"]);\n\n //При добавлении запроса\n const handleQueryAdd = () => setModQuery(true);\n\n //При выборе запроса\n const handleQuerySelect = query => onQuerySelect && onQuerySelect(query.rn);\n\n //При установке признака публичности\n const handleQueryPblSet = query => setQueryPbl(query.rn, query.pbl === 1 ? 0 : 1);\n\n //При установке признака готовности\n const handleQueryReadySet = query => setQueryReady(query.rn, query.ready === 1 ? 0 : 1);\n\n //При исправлении запроса\n const handleQueryEdit = query => setModQuery({\n ...query\n });\n\n //При удалении запроса\n const handleQueryDelete = query => showMsgWarn(\"Удалить запрос?\", () => deleteQuery(query.rn));\n\n //При закрытии диалога добавления/исправления по \"ОК\"\n const handleIUDialogOk = async values => {\n if (modQuery === true) await insertQuery(values.code, values.name);else await updateQuery(modQuery.rn, values.code, values.name);\n setModQuery(null);\n };\n\n //При закрытии диалога добавления/исправления по \"Отмена\"\n const handleIUDialogCancel = () => setModQuery(null);\n\n //При закртии менеджера отменой\n const handleCancel = () => onCancel && onCancel();\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_config_dialog__WEBPACK_IMPORTED_MODULE_3__.P8PConfigDialog, {\n title: \"Запросы\",\n onCancel: handleCancel\n }, modQuery && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_query_iu_dialog__WEBPACK_IMPORTED_MODULE_6__.QueryIUDialog, {\n code: modQuery?.code,\n name: modQuery?.name,\n insert: modQuery === true,\n onOk: handleIUDialogOk,\n onCancel: handleIUDialogCancel\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, \"add\"),\n onClick: handleQueryAdd\n }, _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.INSERT), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_queries_list__WEBPACK_IMPORTED_MODULE_5__.QueriesList, {\n queries: queries || [],\n current: current,\n onSelect: handleQuerySelect,\n onPbl: handleQueryPblSet,\n onReady: handleQueryReadySet,\n onEdit: handleQueryEdit,\n onDelete: handleQueryDelete\n }));\n};\n\n//Контроль свойств компонента - Менеджер запросов\nQueriesManager.propTypes = {\n current: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().number),\n onQuerySelect: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/queries_manager/queries_manager.js?"); + +/***/ }), + +/***/ "./app/panels/query_editor/components/queries_manager/query_iu_dialog.js": +/*!*******************************************************************************!*\ + !*** ./app/panels/query_editor/components/queries_manager/query_iu_dialog.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ QueryIUDialog: () => (/* binding */ QueryIUDialog)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _components_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../components/p8p_dialog */ \"./app/components/p8p_dialog.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../app.text */ \"./app.text.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Компонент: Диалог добавления/исправления запроса\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Типовой диалог\n //Общие текстовые ресурсы приложения\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог добавления/исправления запроса\nconst QueryIUDialog = ({\n code = \"\",\n name = \"\",\n insert = true,\n onOk,\n onCancel\n}) => {\n //Нажатие на кнопку \"Ok\"\n const handleOk = values => onOk && onOk({\n ...values\n });\n\n //Нажатие на кнопку \"Отмена\"\n const handleCancel = () => onCancel && onCancel();\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__.P8PDialog, {\n title: `${insert === true ? _app_text__WEBPACK_IMPORTED_MODULE_2__.TITLES.INSERT : _app_text__WEBPACK_IMPORTED_MODULE_2__.TITLES.UPDATE} запроса`,\n inputs: [{\n name: \"code\",\n value: code,\n label: \"Мнемокод\"\n }, {\n name: \"name\",\n value: name,\n label: \"Наименование\"\n }],\n onOk: handleOk,\n onCancel: handleCancel\n });\n};\n\n//Контроль свойств - Диалог добавления/исправления запроса\nQueryIUDialog.propTypes = {\n code: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n insert: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/queries_manager/query_iu_dialog.js?"); + +/***/ }), + +/***/ "./app/panels/query_editor/components/query_diagram/query_diagram.css": +/*!****************************************************************************!*\ + !*** ./app/panels/query_editor/components/query_diagram/query_diagram.css ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +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 _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ \"./node_modules/style-loader/dist/runtime/styleDomAPI.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ \"./node_modules/style-loader/dist/runtime/insertBySelector.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ \"./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ \"./node_modules/style-loader/dist/runtime/insertStyleElement.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ \"./node_modules/style-loader/dist/runtime/styleTagTransform.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _node_modules_css_loader_dist_cjs_js_query_diagram_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../../node_modules/css-loader/dist/cjs.js!./query_diagram.css */ \"./node_modules/css-loader/dist/cjs.js!./app/panels/query_editor/components/query_diagram/query_diagram.css\");\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());\noptions.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());\noptions.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, \"head\");\noptions.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());\noptions.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());\n\nvar update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_query_diagram_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"], options);\n\n\n\n\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_query_diagram_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"] && _node_modules_css_loader_dist_cjs_js_query_diagram_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals ? _node_modules_css_loader_dist_cjs_js_query_diagram_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals : undefined);\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/query_diagram/query_diagram.css?"); + +/***/ }), + +/***/ "./app/panels/query_editor/components/query_diagram/query_diagram.js": +/*!***************************************************************************!*\ + !*** ./app/panels/query_editor/components/query_diagram/query_diagram.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ QueryDiagram: () => (/* binding */ QueryDiagram)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var reactflow__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! reactflow */ \"./node_modules/@reactflow/core/dist/esm/index.mjs\");\n/* harmony import */ var reactflow__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! reactflow */ \"./node_modules/@reactflow/controls/dist/esm/index.mjs\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../common */ \"./app/panels/query_editor/common.js\");\n/* harmony import */ var _entity_entity__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../entity/entity */ \"./app/panels/query_editor/components/entity/entity.js\");\n/* harmony import */ var _attribute_attribute__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../attribute/attribute */ \"./app/panels/query_editor/components/attribute/attribute.js\");\n/* harmony import */ var reactflow_dist_style_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! reactflow/dist/style.css */ \"./node_modules/reactflow/dist/style.css\");\n/* harmony import */ var _query_diagram_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./query_diagram.css */ \"./app/panels/query_editor/components/query_diagram/query_diagram.css\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Диаграмма запроса\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Библиотека редактора диаграмм\n //Общие ресурсы и константы редактора\n //Сущность запроса\n //Атрибут сущности\n //Типовые стили библиотеки редактора диаграмм\n //Стили компонента\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CONNECTION_LINE: {\n strokeWidth: 2,\n stroke: \"gray\"\n },\n EDGE: {\n strokeWidth: 2\n }\n};\n\n//Привязка компонтов диаграммы к типам\nconst NODE_TYPES_COMPONENTS = {\n [_common__WEBPACK_IMPORTED_MODULE_1__.NODE_TYPE.ENTITY]: _entity_entity__WEBPACK_IMPORTED_MODULE_2__.Entity,\n [_common__WEBPACK_IMPORTED_MODULE_1__.NODE_TYPE.ATTRIBUTE]: _attribute_attribute__WEBPACK_IMPORTED_MODULE_3__.Attribute\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\nconst hasCycle = (connection, target, nodes, edges, visited = new Set()) => {\n if (visited.has(target.id)) {\n return false;\n }\n visited.add(target.id);\n for (const outgoer of (0,reactflow__WEBPACK_IMPORTED_MODULE_6__.getOutgoers)(target, nodes, edges)) {\n if (outgoer.id === connection.source || hasCycle(connection, outgoer, nodes, edges, visited)) {\n return true;\n }\n }\n return false;\n};\nconst isValidConnection = (connection, nodes, edges) => {\n if (!connection.source || !connection.target) {\n return false;\n }\n const tableId = connection.source.split(\"-\")[0];\n const isSameTable = connection.target.startsWith(tableId);\n if (isSameTable) {\n return false;\n }\n const target = nodes.find(node => node.id === connection.target);\n if (!target || target.id === connection.source) {\n return false;\n }\n return !hasCycle(connection, target, nodes, edges);\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диаграмма запроса\nconst QueryDiagram = ({\n entities,\n relations,\n onEntityPositionChange,\n onEntityRemove,\n onRelationAdd,\n onRelationRemove\n}) => {\n //Собственное состояние - элементы\n const [nodes, setNodes] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(entities);\n\n //Собственное состояние - связи\n const [edges, setEdges] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(relations);\n\n //Собственное состояние - перемещённый элемент\n const [movedNode, setMovedNode] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //При изменении элементов на диаграмме\n const handleNodesChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(changes => {\n setNodes(nodesSnapshot => (0,reactflow__WEBPACK_IMPORTED_MODULE_6__.applyNodeChanges)(changes, nodesSnapshot));\n if (changes.length == 1 && changes[0].type == \"position\" && changes[0].dragging) setMovedNode({\n id: changes[0].id,\n position: {\n ...changes[0].position\n }\n });\n if (changes.length == 1 && changes[0].type == \"position\" && !changes[0].dragging && movedNode) {\n if (onEntityPositionChange) onEntityPositionChange(movedNode.id, movedNode.position);\n setMovedNode(null);\n }\n if (changes[0].type == \"remove\" && entities.find(e => e.id == changes[0].id && e.type == _common__WEBPACK_IMPORTED_MODULE_1__.NODE_TYPE.ENTITY) && onEntityRemove) onEntityRemove(changes[0].id);\n }, [movedNode, entities, onEntityPositionChange, onEntityRemove]);\n\n //При связывании элементов на диаграмме\n const handleConnect = connection => {\n setEdges(state => (0,reactflow__WEBPACK_IMPORTED_MODULE_6__.addEdge)({\n ...connection,\n id: `${connection.source}-${connection.target}`\n }, state));\n onRelationAdd && onRelationAdd(connection.source, connection.target);\n };\n\n //При изменении связей на диаграмме\n const handleEdgesChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(changes => {\n setEdges(edgesSnapshot => (0,reactflow__WEBPACK_IMPORTED_MODULE_6__.applyEdgeChanges)(changes, edgesSnapshot));\n if (changes.length == 1 && changes[0].type == \"remove\" && onRelationRemove) onRelationRemove(changes[0].id);\n }, [onRelationRemove]);\n const validateConnection = connection => {\n return isValidConnection(connection, nodes, edges);\n };\n\n //При изменении состава сущностей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => setNodes(entities), [entities]);\n\n //При изменении состава связей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => setEdges(relations), [relations]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(reactflow__WEBPACK_IMPORTED_MODULE_6__.ReactFlow, {\n nodes: nodes,\n nodeTypes: NODE_TYPES_COMPONENTS,\n edges: edges,\n onNodesChange: handleNodesChange,\n onEdgesChange: handleEdgesChange,\n defaultEdgeOptions: {\n animated: true,\n style: STYLES.EDGE\n },\n connectionLineStyle: STYLES.CONNECTION_LINE,\n onConnect: handleConnect,\n isValidConnection: validateConnection,\n className: \"query_diagram\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(reactflow__WEBPACK_IMPORTED_MODULE_7__.Controls, null));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/query_diagram/query_diagram.js?"); + +/***/ }), + +/***/ "./app/panels/query_editor/hooks.js": +/*!******************************************!*\ + !*** ./app/panels/query_editor/hooks.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useQuery: () => (/* binding */ useQuery),\n/* harmony export */ useQueryDesc: () => (/* binding */ useQueryDesc)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./common */ \"./app/panels/query_editor/common.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Пользовательские хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Общие ресурсы и константы редактора\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Конвертация серверного описания сущностей запроса в элементы диаграммы\nconst serverEntity2QueryDiagramNodes = entity => {\n const groupWidth = 250;\n const nameColumnHeight = 50;\n const columns = entity?.XATTRS?.XATTR || [];\n const columnsCount = columns.length;\n const groupHeight = nameColumnHeight + columnsCount * 50;\n const groupNode = {\n id: entity.id,\n type: _common__WEBPACK_IMPORTED_MODULE_2__.NODE_TYPE.ENTITY,\n data: {\n ...entity\n },\n position: {\n x: entity.x,\n y: entity.y\n },\n style: {\n width: groupWidth,\n height: groupHeight\n },\n draggable: true\n };\n const columnNodes = columns.map((column, index, columns) => {\n const x = 1;\n const y = 50 * (index + 1);\n const width = groupWidth - 2;\n const height = 50;\n const isLast = index === columns.length - 1;\n const defaultColumnStyles = {\n borderBottom: \"1px solid #dee2e6\"\n };\n const lastColumnStyles = {\n borderBottom: \"none\"\n };\n const otherStyles = isLast ? lastColumnStyles : defaultColumnStyles;\n return {\n id: column.id,\n type: _common__WEBPACK_IMPORTED_MODULE_2__.NODE_TYPE.ATTRIBUTE,\n data: {\n ...column,\n included: false,\n parentEntity: entity.id\n },\n position: {\n x,\n y\n },\n parentId: entity.id,\n extent: \"parent\",\n style: {\n width,\n height,\n ...otherStyles\n },\n draggable: false,\n selectable: true\n };\n });\n return [groupNode, ...columnNodes];\n};\n\n//Конвертация серверного описания запроса в данные для редактора диаграмм\nconst serverQueryData2QueryDiagram = (entities, relations) => {\n const result = {\n entities: [],\n relations: [...relations]\n };\n entities.forEach(entity => {\n const nodes = serverEntity2QueryDiagramNodes(entity);\n result.entities = [...result.entities, ...nodes];\n });\n return result;\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Работа с запросами\nconst useQuery = () => {\n //Собственное состояние - флаг инициализированности\n const [isInit, setInit] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - флаг необходимости обновления\n const [refresh, setRefresh] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Собственное состояние - данные\n const [data, setData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Обновление данных\n const doRefresh = () => setRefresh(true);\n\n //Добавление запроса\n const insertQuery = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (code, name) => {\n await executeStored({\n stored: \"PKG_P8PANELS_QE.QUERY_INSERT\",\n args: {\n SCODE: code,\n SNAME: name\n },\n loader: false\n });\n setRefresh(true);\n }, [executeStored]);\n\n //Изменение запроса\n const updateQuery = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (query, code, name) => {\n await executeStored({\n stored: \"PKG_P8PANELS_QE.QUERY_UPDATE\",\n args: {\n NRN: query,\n SCODE: code,\n SNAME: name\n },\n loader: false\n });\n setRefresh(true);\n }, [executeStored]);\n\n //Удаление запроса\n const deleteQuery = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async query => {\n await executeStored({\n stored: \"PKG_P8PANELS_QE.QUERY_DELETE\",\n args: {\n NRN: query\n },\n loader: false\n });\n setRefresh(true);\n }, [executeStored]);\n\n //Установка флага готовности запроса\n const setQueryReady = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (query, ready) => {\n await executeStored({\n stored: \"PKG_P8PANELS_QE.QUERY_READY_SET\",\n args: {\n NRN: query,\n NREADY: ready\n },\n loader: false\n });\n setRefresh(true);\n }, [executeStored]);\n\n //Установка флага публичности запроса\n const setQueryPbl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (query, pbl) => {\n await executeStored({\n stored: \"PKG_P8PANELS_QE.QUERY_PBL_SET\",\n args: {\n NRN: query,\n NPBL: pbl\n },\n loader: false\n });\n setRefresh(true);\n }, [executeStored]);\n\n //При необходимости получить/обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Загрузка данных с сервера\n const loadData = async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored: \"PKG_P8PANELS_QE.QUERY_LIST\",\n respArg: \"COUT\",\n isArray: name => [\"XQUERY\"].includes(name),\n attributeValueProcessor: (name, val) => [\"code\", \"name\"].includes(name) ? undefined : val,\n loader: true\n });\n setData(data?.XQUERIES?.XQUERY || []);\n setInit(true);\n } finally {\n setRefresh(false);\n setLoading(false);\n }\n };\n //Если надо обновить\n if (refresh)\n //Получим данные\n loadData();\n }, [refresh, executeStored]);\n\n //Возвращаем интерфейс хука\n return [data, insertQuery, updateQuery, deleteQuery, setQueryReady, setQueryPbl, doRefresh, isLoading, isInit];\n};\n\n//Работа с содержимым запроса\nconst useQueryDesc = query => {\n //Собственное состояние - флаг инициализированности\n const [isInit, setInit] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - флаг необходимости обновления\n const [refresh, setRefresh] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Собственное состояние - данные\n const [data, setData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Обновление данных\n const doRefresh = () => setRefresh(true);\n\n //Добавление сущности в запрос\n const addEnt = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (name, type) => {\n await executeStored({\n stored: \"PKG_P8PANELS_QE.QUERY_ENT_ADD\",\n args: {\n NRN: query,\n SNAME: name,\n STYPE: type\n },\n loader: false\n });\n setRefresh(true);\n }, [query, executeStored]);\n\n //Удаление сущности из запроса\n const removeEnt = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ent => {\n await executeStored({\n stored: \"PKG_P8PANELS_QE.QUERY_ENT_REMOVE\",\n args: {\n NRN: query,\n SID: ent\n },\n loader: false\n });\n setRefresh(true);\n }, [query, executeStored]);\n\n //Сохранение координат сущности на диаграммем\n const setEntPosition = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (ent, x, y) => {\n await executeStored({\n stored: \"PKG_P8PANELS_QE.QUERY_ENT_POSITION_SET\",\n args: {\n NRN: query,\n SID: ent,\n NX: x,\n NY: y\n },\n loader: false\n });\n }, [query, executeStored]);\n\n //Добавление отношения сущностей в запрос\n const addRl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (source, target) => {\n await executeStored({\n stored: \"PKG_P8PANELS_QE.QUERY_RL_ADD\",\n args: {\n NRN: query,\n SSOURCE: source,\n STARGET: target\n },\n loader: false\n });\n setRefresh(true);\n }, [query, executeStored]);\n\n //Удаление отношения сущностей из запроса\n const removeRl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async rl => {\n await executeStored({\n stored: \"PKG_P8PANELS_QE.QUERY_RL_REMOVE\",\n args: {\n NRN: query,\n SID: rl\n },\n loader: false\n });\n setRefresh(true);\n }, [query, executeStored]);\n\n //При необходимости получить/обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Загрузка данных с сервера\n const loadData = async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored: \"PKG_P8PANELS_QE.QUERY_DESC\",\n args: {\n NRN: query\n },\n respArg: \"COUT\",\n isArray: name => [\"XENT\", \"XATTR\", \"XRL\"].includes(name),\n loader: true\n });\n setData(serverQueryData2QueryDiagram(data?.XENTS?.XENT || [], data?.XRLS?.XRL || []));\n setInit(true);\n } finally {\n setRefresh(false);\n setLoading(false);\n }\n };\n //Если надо обновить\n if (refresh) if (query)\n //Если есть для чего получать данные\n loadData();\n //Нет идентификатора запроса - нет данных\n else setData(null);\n }, [refresh, query, executeStored]);\n\n //При изменении входных свойств - поднимаем флаг обновления\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => setRefresh(true), [query]);\n\n //Возвращаем интерфейс хука\n return [data, addEnt, removeEnt, setEntPosition, addRl, removeRl, doRefresh, isLoading, isInit];\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/hooks.js?"); + +/***/ }), + +/***/ "./app/panels/query_editor/index.js": +/*!******************************************!*\ + !*** ./app/panels/query_editor/index.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RootClass: () => (/* binding */ RootClass)\n/* harmony export */ });\n/* harmony import */ var _query_editor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./query_editor */ \"./app/panels/query_editor/query_editor.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Редактор запросов: точка входа\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Корневая панель редактора\n\n//----------------\n//Интерфейс модуля\n//----------------\n\nconst RootClass = _query_editor__WEBPACK_IMPORTED_MODULE_0__.QueryEditor;\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/index.js?"); + +/***/ }), + +/***/ "./app/panels/query_editor/query_editor.js": +/*!*************************************************!*\ + !*** ./app/panels/query_editor/query_editor.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ QueryEditor: () => (/* binding */ QueryEditor)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_editors_p8p_editor_toolbar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/editors/p8p_editor_toolbar */ \"./app/components/editors/p8p_editor_toolbar.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_query_diagram_query_diagram__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/query_diagram/query_diagram */ \"./app/panels/query_editor/components/query_diagram/query_diagram.js\");\n/* harmony import */ var _components_queries_manager_queries_manager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/queries_manager/queries_manager */ \"./app/panels/query_editor/components/queries_manager/queries_manager.js\");\n/* harmony import */ var _components_entity_add_dialog_entity_add_dialog__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/entity_add_dialog/entity_add_dialog */ \"./app/panels/query_editor/components/entity_add_dialog/entity_add_dialog.js\");\n/* harmony import */ var _components_editors_p8p_editor_box__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../components/editors/p8p_editor_box */ \"./app/components/editors/p8p_editor_box.js\");\n/* harmony import */ var _components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../components/editors/p8p_editor_sub_header */ \"./app/components/editors/p8p_editor_sub_header.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./hooks */ \"./app/panels/query_editor/hooks.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Редактор запросов\r\n Корневой компонент\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты MUI\n //Компоненты рабочего стола\n //Панель инструментов редактора\n //Общие текстовые ресурсы приложения\n //Диаграмма запроса\n //Менеджер запросов\n //Диалог добавления сущности\n //Контейнер параметров редактора\n //Подзаголовок группы параметров редактора\n //Пользовательские хуки\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n display: \"flex\"\n },\n GRID_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_1__.APP_BAR_HEIGHT})`\n },\n GRID_ITEM_INSPECTOR: {\n backgroundColor: \"#e9ecef\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневой компонент редактора запросов\nconst QueryEditor = () => {\n //Текущий запрос\n const [query, setQuery] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Отображения менеджера запросов\n const [openQueriesManager, setOpenQueriesManager] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Отображение диалога добавления сущности\n const [openEntityAddDialog, setOpenEntityAddDialog] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Получение данных запроса\n const [queryDiagram, addEnt, removeEnt, setEntPosition, addRl, removeRl] = (0,_hooks__WEBPACK_IMPORTED_MODULE_9__.useQueryDesc)(query);\n\n //Обработка изменения положения сущности на диаграмме\n const handleEntityPositionChange = (ent, position) => setEntPosition(ent, position.x, position.y);\n\n //Обработка удаления сущности из запроса\n const handleEntityRemove = ent => removeEnt(ent);\n\n //Обработка добавления отношения cущностей\n const handleRelationAdd = (source, target) => addRl(source, target);\n\n //Обработка удаления отношения cущностей\n const handleRelationRemove = rl => removeRl(rl);\n\n //Открытие менеджера запросов\n const handleOpenQueriesManager = () => setOpenQueriesManager(true);\n\n //Закрытие менеджера запросов\n const handleCancelQueriesManager = () => setOpenQueriesManager(false);\n\n //Закрытие запроса\n const handleQueryClose = () => setQuery(null);\n\n //При выборе запроса\n const handleQuerySelect = query => {\n setQuery(query);\n setOpenQueriesManager(false);\n };\n\n //При добавлении сущности в запрос\n const handleEntityAdd = () => setOpenEntityAddDialog(true);\n\n //Закрытие диалога добавления сущности по \"ОК\"\n const handleEntityAddDialogOk = async values => {\n await addEnt(values.name, \"VIEW\");\n setOpenEntityAddDialog(false);\n };\n\n //Закрытие диалога добавления сущности по \"ОК\"\n const handleEntityAddDialogCancel = () => setOpenEntityAddDialog(false);\n\n //Панель инструмментов\n const toolBar = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_toolbar__WEBPACK_IMPORTED_MODULE_2__.P8PEditorToolBar, {\n items: [{\n icon: \"file_open\",\n title: \"Менеджер запросов\",\n onClick: handleOpenQueriesManager\n }, {\n icon: \"close\",\n title: \"Закрыть запрос\",\n onClick: handleQueryClose,\n disabled: !query\n }]\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: STYLES.CONTAINER\n }, openQueriesManager && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_queries_manager_queries_manager__WEBPACK_IMPORTED_MODULE_5__.QueriesManager, {\n current: query,\n onQuerySelect: handleQuerySelect,\n onCancel: handleCancelQueriesManager\n }), openEntityAddDialog && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_entity_add_dialog_entity_add_dialog__WEBPACK_IMPORTED_MODULE_6__.EntityAddDialog, {\n onOk: handleEntityAddDialogOk,\n onCancel: handleEntityAddDialogCancel\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n container: true,\n sx: STYLES.GRID_CONTAINER,\n columns: 25\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n item: true,\n xs: 20\n }, queryDiagram && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_query_diagram_query_diagram__WEBPACK_IMPORTED_MODULE_4__.QueryDiagram, _extends({}, queryDiagram, {\n onEntityPositionChange: handleEntityPositionChange,\n onEntityRemove: handleEntityRemove,\n onRelationAdd: handleRelationAdd,\n onRelationRemove: handleRelationRemove\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n item: true,\n xs: 5,\n sx: STYLES.GRID_ITEM_INSPECTOR\n }, toolBar, query && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_box__WEBPACK_IMPORTED_MODULE_7__.P8PEditorBox, {\n title: \"Параметры запроса\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_sub_header__WEBPACK_IMPORTED_MODULE_8__.P8PEditorSubHeader, {\n title: \"Сущности\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"add\"),\n onClick: handleEntityAdd\n }, _app_text__WEBPACK_IMPORTED_MODULE_3__.BUTTONS.INSERT)))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/query_editor.js?"); + +/***/ }), + /***/ "./app/panels/rrp_conf_editor/common.js": /*!**********************************************!*\ !*** ./app/panels/rrp_conf_editor/common.js ***! @@ -3446,7 +3699,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DialogHelp: () => (/* binding */ DialogHelp)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form */ \"./app/panels/rrp_conf_editor/components/form.js\");\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Компонент панели: Диалог дополнительной информации\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Типовая форма\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n HELP_LIST_ITEM: {\n padding: \"0px 0px 0px 5px\",\n whiteSpace: \"pre\"\n },\n HELP_LIST_ITEM_NAME: {\n fontWeight: \"bold\",\n minWidth: \"45px\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Элемент списка расшифровки состава\nconst HelpListItem = ({\n name,\n desc\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.HELP_LIST_ITEM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sx: STYLES.HELP_LIST_ITEM_NAME\n }, name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, ` - ${desc}`));\n};\n\n//Контроль свойств - Элемент списка расшифровки состава\nHelpListItem.propTypes = {\n name: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired,\n desc: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог дополнительной информации\nconst DialogHelp = ({\n onClose\n}) => {\n //При закрытии диалога\n const handleClose = () => onClose && onClose();\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_form__WEBPACK_IMPORTED_MODULE_1__.Form, {\n title: \"Информация\",\n onClose: handleClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, \"\\u041A\\u0430\\u0440\\u0442\\u043E\\u0447\\u043A\\u0438 \\u043F\\u043E\\u043A\\u0430\\u0437\\u0430\\u0442\\u0435\\u043B\\u0435\\u0439 \\u0441\\u043E\\u0434\\u0435\\u0440\\u0436\\u0430\\u0442 \\u0441\\u043E\\u043A\\u0440\\u0430\\u0449\\u0435\\u043D\\u043D\\u0443\\u044E \\u0438\\u043D\\u0444\\u043E\\u0440\\u043C\\u0430\\u0446\\u0438\\u044E \\u043E \\u0442\\u0438\\u043F\\u0435 \\u0441\\u043E\\u0441\\u0442\\u0430\\u0432\\u0430 \\u043F\\u043E\\u043A\\u0430\\u0437\\u0430\\u0442\\u0435\\u043B\\u044F. \\u0421\\u043F\\u0438\\u0441\\u043E\\u043A \\u0441\\u043E\\u043A\\u0440\\u0430\\u0449\\u0435\\u043D\\u0438\\u0439:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n disablePadding: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"fx\",\n desc: \"формула\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"СЗ\",\n desc: \"статическое значение\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"ХП\",\n desc: \"хранимая процедура\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"РП\",\n desc: \"расчетный показатель\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"ХО\",\n desc: \"хозяйственные операции\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"РСДК\",\n desc: \"расчёты с дебиторами/кредиторами\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"ОС\",\n desc: \"остатки средств по счетам\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"ТМЦ\",\n desc: \"остатки товарно-материальных ценностей\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"ДКЗ\",\n desc: \"дебиторская/кредиторская задолженность\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"ИК\",\n desc: \"инвентарная картотека\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"МБП\",\n desc: \"картотека МБП\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"КОБП\",\n desc: \"картотека операций будущих периодов\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"ДПНП\",\n desc: \"декларация по налогу на прибыль\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"РО\",\n desc: \"регламентированный отчет\"\n })));\n};\n\n//Контроль свойств - Диалог дополнительной информации\nDialogHelp.propTypes = {\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/components/dialog_help.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DialogHelp: () => (/* binding */ DialogHelp)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _components_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../components/p8p_dialog */ \"./app/components/p8p_dialog.js\");\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Компонент панели: Диалог дополнительной информации\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Типовой диалог\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n HELP_LIST_ITEM: {\n padding: \"0px 0px 0px 5px\",\n whiteSpace: \"pre\"\n },\n HELP_LIST_ITEM_NAME: {\n fontWeight: \"bold\",\n minWidth: \"45px\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Элемент списка расшифровки состава\nconst HelpListItem = ({\n name,\n desc\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.HELP_LIST_ITEM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sx: STYLES.HELP_LIST_ITEM_NAME\n }, name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, ` - ${desc}`));\n};\n\n//Контроль свойств - Элемент списка расшифровки состава\nHelpListItem.propTypes = {\n name: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired,\n desc: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог дополнительной информации\nconst DialogHelp = ({\n onClose\n}) => {\n //При закрытии диалога\n const handleClose = () => onClose && onClose();\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__.P8PDialog, {\n title: \"Информация\",\n onClose: handleClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, \"\\u041A\\u0430\\u0440\\u0442\\u043E\\u0447\\u043A\\u0438 \\u043F\\u043E\\u043A\\u0430\\u0437\\u0430\\u0442\\u0435\\u043B\\u0435\\u0439 \\u0441\\u043E\\u0434\\u0435\\u0440\\u0436\\u0430\\u0442 \\u0441\\u043E\\u043A\\u0440\\u0430\\u0449\\u0435\\u043D\\u043D\\u0443\\u044E \\u0438\\u043D\\u0444\\u043E\\u0440\\u043C\\u0430\\u0446\\u0438\\u044E \\u043E \\u0442\\u0438\\u043F\\u0435 \\u0441\\u043E\\u0441\\u0442\\u0430\\u0432\\u0430 \\u043F\\u043E\\u043A\\u0430\\u0437\\u0430\\u0442\\u0435\\u043B\\u044F. \\u0421\\u043F\\u0438\\u0441\\u043E\\u043A \\u0441\\u043E\\u043A\\u0440\\u0430\\u0449\\u0435\\u043D\\u0438\\u0439:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n disablePadding: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"fx\",\n desc: \"формула\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"СЗ\",\n desc: \"статическое значение\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"ХП\",\n desc: \"хранимая процедура\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"РП\",\n desc: \"расчетный показатель\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"ХО\",\n desc: \"хозяйственные операции\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"РСДК\",\n desc: \"расчёты с дебиторами/кредиторами\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"ОС\",\n desc: \"остатки средств по счетам\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"ТМЦ\",\n desc: \"остатки товарно-материальных ценностей\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"ДКЗ\",\n desc: \"дебиторская/кредиторская задолженность\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"ИК\",\n desc: \"инвентарная картотека\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"МБП\",\n desc: \"картотека МБП\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"КОБП\",\n desc: \"картотека операций будущих периодов\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"ДПНП\",\n desc: \"декларация по налогу на прибыль\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HelpListItem, {\n name: \"РО\",\n desc: \"регламентированный отчет\"\n })));\n};\n\n//Контроль свойств - Диалог дополнительной информации\nDialogHelp.propTypes = {\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/components/dialog_help.js?"); /***/ }), @@ -3457,7 +3710,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DialogMarkIU: () => (/* binding */ DialogMarkIU)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../hooks */ \"./app/panels/rrp_conf_editor/hooks.js\");\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./form */ \"./app/panels/rrp_conf_editor/components/form.js\");\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Компонент панели: Диалог добавления/исправления показателя\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Кастомные хуки\n //Типовая форма\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог добавления/исправления показателя\nconst DialogMarkIU = ({\n code = \"\",\n name = \"\",\n rowCode = \"\",\n rowVersion = \"\",\n columnCode = \"\",\n columnVersion = \"\",\n insert = true,\n onOk,\n onCancel\n}) => {\n //Нажатие на кнопку \"Ok\"\n const handleOk = values => onOk && onOk({\n ...values\n });\n\n //Нажатие на кнопку \"Отмена\"\n const handleCancel = () => onCancel && onCancel();\n\n //Хуки для работы со словарями\n const {\n selectRRPRow,\n selectRRPColumn\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_1__.useDictionary)();\n\n //Выбор строки из словаря\n const selectRow = (currentFormValues, setFormValues) => {\n selectRRPRow(currentFormValues.rowCode, currentFormValues.rowVersion, selectResult => selectResult && setFormValues([{\n name: \"rowCode\",\n value: selectResult.code\n }, {\n name: \"rowVersion\",\n value: selectResult.version\n }]));\n };\n\n //Выбор графы из словаря\n const selectColumn = (currentFormValues, setFormValues) => {\n selectRRPColumn(currentFormValues.columnCode, currentFormValues.columnVersion, selectResult => selectResult && setFormValues([{\n name: \"columnCode\",\n value: selectResult.code\n }, {\n name: \"columnVersion\",\n value: selectResult.version\n }]));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_form__WEBPACK_IMPORTED_MODULE_2__.Form, {\n title: `${insert === true ? \"Добавление\" : \"Исправление\"} показателя`,\n fields: [{\n elementCode: \"code\",\n elementValue: code,\n labelText: \"Мнемокод\"\n }, {\n elementCode: \"name\",\n elementValue: name,\n labelText: \"Наименование\"\n }, {\n elementCode: \"rowCode\",\n elementValue: rowCode,\n labelText: \"Строка\",\n dictionary: selectRow\n }, {\n elementCode: \"rowVersion\",\n elementValue: rowVersion,\n labelText: \"Редакция строки\",\n disabled: true\n }, {\n elementCode: \"columnCode\",\n elementValue: columnCode,\n labelText: \"Графа\",\n dictionary: selectColumn\n }, {\n elementCode: \"columnVersion\",\n elementValue: columnVersion,\n labelText: \"Редакция графы\",\n disabled: true\n }],\n onOk: handleOk,\n onCancel: handleCancel\n });\n};\n\n//Контроль свойств - Диалог добавления/исправления показателя\nDialogMarkIU.propTypes = {\n code: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n rowCode: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n rowVersion: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n columnCode: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n columnVersion: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n insert: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/components/dialog_mark_iu.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DialogMarkIU: () => (/* binding */ DialogMarkIU)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../hooks */ \"./app/panels/rrp_conf_editor/hooks.js\");\n/* harmony import */ var _components_p8p_dialog__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../components/p8p_dialog */ \"./app/components/p8p_dialog.js\");\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Компонент панели: Диалог добавления/исправления показателя\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Кастомные хуки\n //Типовой диалог\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог добавления/исправления показателя\nconst DialogMarkIU = ({\n code = \"\",\n name = \"\",\n rowCode = \"\",\n rowVersion = \"\",\n columnCode = \"\",\n columnVersion = \"\",\n insert = true,\n onOk,\n onCancel\n}) => {\n //Нажатие на кнопку \"Ok\"\n const handleOk = values => onOk && onOk({\n ...values\n });\n\n //Нажатие на кнопку \"Отмена\"\n const handleCancel = () => onCancel && onCancel();\n\n //Хуки для работы со словарями\n const {\n selectRRPRow,\n selectRRPColumn\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_1__.useDictionary)();\n\n //Выбор строки из словаря\n const selectRow = (currentFormValues, setFormValues) => {\n selectRRPRow(currentFormValues.rowCode, currentFormValues.rowVersion, selectResult => selectResult && setFormValues([{\n name: \"rowCode\",\n value: selectResult.code\n }, {\n name: \"rowVersion\",\n value: selectResult.version\n }]));\n };\n\n //Выбор графы из словаря\n const selectColumn = (currentFormValues, setFormValues) => {\n selectRRPColumn(currentFormValues.columnCode, currentFormValues.columnVersion, selectResult => selectResult && setFormValues([{\n name: \"columnCode\",\n value: selectResult.code\n }, {\n name: \"columnVersion\",\n value: selectResult.version\n }]));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_dialog__WEBPACK_IMPORTED_MODULE_2__.P8PDialog, {\n title: `${insert === true ? \"Добавление\" : \"Исправление\"} показателя`,\n inputs: [{\n name: \"code\",\n value: code,\n label: \"Мнемокод\"\n }, {\n name: \"name\",\n value: name,\n label: \"Наименование\"\n }, {\n name: \"rowCode\",\n value: rowCode,\n label: \"Строка\",\n dictionary: selectRow\n }, {\n name: \"rowVersion\",\n value: rowVersion,\n label: \"Редакция строки\",\n disabled: true\n }, {\n name: \"columnCode\",\n value: columnCode,\n label: \"Графа\",\n dictionary: selectColumn\n }, {\n name: \"columnVersion\",\n value: columnVersion,\n label: \"Редакция графы\",\n disabled: true\n }],\n onOk: handleOk,\n onCancel: handleCancel\n });\n};\n\n//Контроль свойств - Диалог добавления/исправления показателя\nDialogMarkIU.propTypes = {\n code: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n rowCode: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n rowVersion: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n columnCode: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n columnVersion: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n insert: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/components/dialog_mark_iu.js?"); /***/ }), @@ -3468,7 +3721,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DialogOrder: () => (/* binding */ DialogOrder)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form */ \"./app/panels/rrp_conf_editor/components/form.js\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../common */ \"./app/panels/rrp_conf_editor/common.js\");\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Компонент панели: Диалог сортировки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Типовая форма\n //Обще стили и константы\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог сортировки\nconst DialogOrder = ({\n rowOrder = 0,\n columnOrder = 0,\n onOk,\n onCancel\n}) => {\n //Нажатие на кнопку \"Ok\"\n const handleOk = values => onOk && onOk({\n ...values\n });\n\n //Нажатие на кнопку \"Отмена\"\n const handleCancel = () => onCancel && onCancel();\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_form__WEBPACK_IMPORTED_MODULE_1__.Form, {\n title: \"Сортировка\",\n fields: [{\n elementCode: \"rowOrder\",\n elementValue: rowOrder,\n labelText: \"Строки\",\n list: _common__WEBPACK_IMPORTED_MODULE_2__.COL_ROW_ORDER\n }, {\n elementCode: \"columnOrder\",\n elementValue: columnOrder,\n labelText: \"Графы\",\n list: _common__WEBPACK_IMPORTED_MODULE_2__.COL_ROW_ORDER\n }],\n onOk: handleOk,\n onCancel: handleCancel\n });\n};\n\n//Контроль свойств - Диалог сортировки\nDialogOrder.propTypes = {\n rowOrder: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number),\n columnOrder: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/components/dialog_order.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DialogOrder: () => (/* binding */ DialogOrder)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _components_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../components/p8p_dialog */ \"./app/components/p8p_dialog.js\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../common */ \"./app/panels/rrp_conf_editor/common.js\");\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Компонент панели: Диалог сортировки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Типовой диалог\n //Обще стили и константы\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог сортировки\nconst DialogOrder = ({\n rowOrder = 0,\n columnOrder = 0,\n onOk,\n onCancel\n}) => {\n //Нажатие на кнопку \"Ok\"\n const handleOk = values => onOk && onOk({\n ...values\n });\n\n //Нажатие на кнопку \"Отмена\"\n const handleCancel = () => onCancel && onCancel();\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__.P8PDialog, {\n title: \"Сортировка\",\n inputs: [{\n name: \"rowOrder\",\n value: rowOrder,\n label: \"Строки\",\n list: _common__WEBPACK_IMPORTED_MODULE_2__.COL_ROW_ORDER\n }, {\n name: \"columnOrder\",\n value: columnOrder,\n label: \"Графы\",\n list: _common__WEBPACK_IMPORTED_MODULE_2__.COL_ROW_ORDER\n }],\n onOk: handleOk,\n onCancel: handleCancel\n });\n};\n\n//Контроль свойств - Диалог сортировки\nDialogOrder.propTypes = {\n rowOrder: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number),\n columnOrder: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/components/dialog_order.js?"); /***/ }), @@ -3479,29 +3732,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DialogSectionIU: () => (/* binding */ DialogSectionIU)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form */ \"./app/panels/rrp_conf_editor/components/form.js\");\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Компонент панели: Диалог добавления/исправления раздела\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Типовая форма\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог добавления/исправления раздела\nconst DialogSectionIU = ({\n code = \"\",\n name = \"\",\n insert = true,\n onOk,\n onCancel\n}) => {\n //Нажатие на кнопку \"Ok\"\n const handleOk = values => onOk && onOk({\n ...values\n });\n\n //Нажатие на кнопку \"Отмена\"\n const handleCancel = () => onCancel && onCancel();\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_form__WEBPACK_IMPORTED_MODULE_1__.Form, {\n title: `${insert === true ? \"Добавление\" : \"Исправление\"} раздела`,\n fields: [{\n elementCode: \"code\",\n elementValue: code,\n labelText: \"Мнемокод\"\n }, {\n elementCode: \"name\",\n elementValue: name,\n labelText: \"Наименование\"\n }],\n onOk: handleOk,\n onCancel: handleCancel\n });\n};\n\n//Контроль свойств - Диалог добавления/исправления раздела\nDialogSectionIU.propTypes = {\n code: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n insert: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/components/dialog_section_iu.js?"); - -/***/ }), - -/***/ "./app/panels/rrp_conf_editor/components/form.js": -/*!*******************************************************!*\ - !*** ./app/panels/rrp_conf_editor/components/form.js ***! - \*******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Form: () => (/* binding */ Form)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _form_field__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./form_field */ \"./app/panels/rrp_conf_editor/components/form_field.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Компонент панели: Форма\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Общие текстовые ресурсы\n //Элемент формы\n\n//-----------\n//Тело модуля\n//-----------\n\n//Форма\nconst Form = ({\n title,\n fields = [],\n children,\n onOk,\n onCancel,\n onClose\n}) => {\n //Состояние формы\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //При изменении элемента формы\n const handleFieldChange = (name, value) => setState(pv => ({\n ...pv,\n [name]: value\n }));\n\n //При нажатии на \"ОК\" формы\n const handleOk = () => onOk && onOk(state);\n\n //При нажатии на \"Отмена\" формы\n const handleCancel = () => onCancel && onCancel();\n\n //При нажатии на \"Закрыть\" формы\n const handleClose = () => onClose ? onClose() : onCancel ? onCancel() : null;\n\n //При подключении к старнице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setState(fields.reduce((res, f) => ({\n ...res,\n [f.elementCode]: f.elementValue == undefined ? null : f.elementValue\n }), {}));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onClose: handleClose,\n open: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, fields.map((f, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_form_field__WEBPACK_IMPORTED_MODULE_2__.FormField, _extends({\n key: i\n }, f, {\n elementValue: state[f.elementCode],\n formValues: state,\n onChange: handleFieldChange\n }))), children), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, onOk && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n onClick: handleOk\n }, _app_text__WEBPACK_IMPORTED_MODULE_1__.BUTTONS.OK), onCancel && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n onClick: handleCancel\n }, _app_text__WEBPACK_IMPORTED_MODULE_1__.BUTTONS.CANCEL), onClose && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n onClick: handleClose\n }, _app_text__WEBPACK_IMPORTED_MODULE_1__.BUTTONS.CLOSE)));\n};\n\n//Контроль свойств - Форма\nForm.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n fields: prop_types__WEBPACK_IMPORTED_MODULE_8___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_8___default().shape(_form_field__WEBPACK_IMPORTED_MODULE_2__.FORM_FILED)),\n children: prop_types__WEBPACK_IMPORTED_MODULE_8___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_8___default().node), prop_types__WEBPACK_IMPORTED_MODULE_8___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_8___default().node))]),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/components/form.js?"); - -/***/ }), - -/***/ "./app/panels/rrp_conf_editor/components/form_field.js": -/*!*************************************************************!*\ - !*** ./app/panels/rrp_conf_editor/components/form_field.js ***! - \*************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ FORM_FILED: () => (/* binding */ FORM_FILED),\n/* harmony export */ FormField: () => (/* binding */ FormField)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Autocomplete/Autocomplete.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Select/Select.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Input/Input.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Компонент панели: Поле ввода формы\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n\n//---------\n//Константы\n//---------\n\n//Формат свойств поля формы\nconst FORM_FILED = {\n elementCode: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n elementValue: prop_types__WEBPACK_IMPORTED_MODULE_1___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_1___default().number), (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), prop_types__WEBPACK_IMPORTED_MODULE_1___default().instanceOf(Date)]),\n labelText: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n onChange: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n dictionary: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n list: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().array),\n type: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),\n freeSolo: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool),\n disabled: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool),\n formValues: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().object)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Поле ввода формы\nconst FormField = ({\n elementCode,\n elementValue,\n labelText,\n onChange,\n dictionary,\n list,\n type,\n freeSolo = false,\n disabled = false,\n formValues,\n ...other\n}) => {\n //Значение элемента\n const [value, setValue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(elementValue);\n\n //При получении нового значения из вне\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setValue(elementValue);\n }, [elementValue]);\n\n //Выбор значения из словаря\n const handleDictionaryClick = () => dictionary && dictionary(formValues, res => res ? res.map(i => handleChangeByName(i.name, i.value)) : null);\n\n //Изменение значения элемента (по событию)\n const handleChange = e => {\n setValue(e.target.value);\n if (onChange) onChange(e.target.name, e.target.value);\n };\n\n //Изменение значения элемента (по имени и значению)\n const handleChangeByName = (name, value) => {\n if (name === elementCode) setValue(value);\n if (onChange) onChange(name, value);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], _extends({\n variant: \"standard\",\n fullWidth: true\n }, other), list ? freeSolo ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n id: elementCode,\n name: elementCode,\n freeSolo: true,\n disabled: disabled,\n inputValue: value ? value : \"\",\n onChange: (event, newValue) => handleChangeByName(elementCode, newValue),\n onInputChange: (event, newInputValue) => handleChangeByName(elementCode, newInputValue),\n options: list,\n renderInput: params => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], _extends({}, params, {\n label: labelText,\n name: elementCode,\n variant: \"standard\"\n }))\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n id: `${elementCode}Lable`,\n shrink: true\n }, labelText), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n labelId: `${elementCode}Lable`,\n id: elementCode,\n name: elementCode,\n label: labelText,\n value: [undefined, null].includes(value) ? \"\" : value,\n onChange: handleChange,\n disabled: disabled,\n displayEmpty: true\n }, list.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n key: i,\n value: [undefined, null].includes(item.value) ? \"\" : item.value\n }, item.name)))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], _extends({}, type == \"date\" ? {\n shrink: true\n } : {}, {\n htmlFor: elementCode\n }), labelText), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], _extends({\n id: elementCode,\n name: elementCode,\n value: value ? value : \"\",\n endAdornment: dictionary ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n \"aria-label\": `${elementCode} select`,\n onClick: handleDictionaryClick,\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, \"list\"))) : null\n }, type ? {\n type\n } : {}, {\n onChange: handleChange,\n disabled: disabled\n })))));\n};\n\n//Контроль свойств - Поле ввода формы\nFormField.propTypes = FORM_FILED;\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/components/form_field.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DialogSectionIU: () => (/* binding */ DialogSectionIU)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../components/p8p_dialog */ \"./app/components/p8p_dialog.js\");\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Компонент панели: Диалог добавления/исправления раздела\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Типовой диалог\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог добавления/исправления раздела\nconst DialogSectionIU = ({\n code = \"\",\n name = \"\",\n insert = true,\n onOk,\n onCancel\n}) => {\n //Нажатие на кнопку \"Ok\"\n const handleOk = values => onOk && onOk({\n ...values\n });\n\n //Нажатие на кнопку \"Отмена\"\n const handleCancel = () => onCancel && onCancel();\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_dialog__WEBPACK_IMPORTED_MODULE_1__.P8PDialog, {\n title: `${insert === true ? \"Добавление\" : \"Исправление\"} раздела`,\n inputs: [{\n name: \"code\",\n value: code,\n label: \"Мнемокод\"\n }, {\n name: \"name\",\n value: name,\n label: \"Наименование\"\n }],\n onOk: handleOk,\n onCancel: handleCancel\n });\n};\n\n//Контроль свойств - Диалог добавления/исправления раздела\nDialogSectionIU.propTypes = {\n code: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n insert: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/components/dialog_section_iu.js?"); /***/ }), @@ -3545,7 +3776,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Marks: () => (/* binding */ Marks)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../layouts */ \"./app/panels/rrp_conf_editor/layouts.js\");\n/* harmony import */ var _action_message__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./action_message */ \"./app/panels/rrp_conf_editor/components/action_message.js\");\n/* harmony import */ var _dialog_mark_iu__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./dialog_mark_iu */ \"./app/panels/rrp_conf_editor/components/dialog_mark_iu.js\");\n/* harmony import */ var _dialog_help__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./dialog_help */ \"./app/panels/rrp_conf_editor/components/dialog_help.js\");\n/* harmony import */ var _dialog_order__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./dialog_order */ \"./app/panels/rrp_conf_editor/components/dialog_order.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../hooks */ \"./app/panels/rrp_conf_editor/hooks.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Компонент панели: Показатели раздела\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст сообщений\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Типовые стили\n //Дополнительная разметка и вёрстка клиентских элементов\n //Сообщение с действиями\n //Диалог добавления/исправления показателя\n //Диалог помощи\n //Диалог сортировки\n //Кастомные хуки\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n MARKS_DG_CONTAINER: {\n position: \"absolute\",\n top: 0,\n bottom: 0,\n width: \"100%\",\n height: \"100%\",\n overflow: \"auto\",\n border: \"unset\",\n ..._app_styles__WEBPACK_IMPORTED_MODULE_4__.APP_STYLES.SCROLL\n },\n MARKS_DG_TABLE: {\n tableLayout: \"fixed\",\n width: \"auto\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Показатели раздела\nconst Marks = ({\n marks,\n order,\n marksLoading,\n marksInit,\n onRefresh,\n onMarkInsert,\n onMarkUpdate,\n onMarkDelete,\n onOrderChange\n}) => {\n //Состояние - диалог сортировки\n const [dialogOrder, setDialogOrder] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Состояние - диалог помощи\n const [dialogHelp, setDialogHelp] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Состояние - Редактируемый показатель\n const [modMark, setModMark] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Подключение к контексту сообщений\n const {\n showMsgWarn\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_1__[\"MessagingСtx\"]);\n\n //Подключение к словарям\n const {\n showMark,\n showMarkCn,\n showMarkCnAdd\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_10__.useDictionary)();\n\n //Изменение состояния диалога информации\n const toggleHelpDialog = () => setDialogHelp(pv => !pv);\n\n //Изменение состояния диалога сортировки\n const toggleOrderDialog = () => setDialogOrder(pv => !pv);\n\n //При необходимости обновления\n const handleRefresh = () => onRefresh && onRefresh();\n\n //При вызове сортировки\n const handleOrder = () => toggleOrderDialog();\n\n //При вызове помощи\n const handleHelp = () => toggleHelpDialog();\n\n //Изменение состояния сортировки строк и граф\n const handleOrderChange = order => {\n onOrderChange && onOrderChange(order);\n toggleOrderDialog();\n };\n\n //При добавлении показателя\n const handleMarkAdd = () => setModMark(true);\n\n //При добавлении показателя по указанным строке/графе\n const handleMarkAddByRowCol = (row, column) => onMarkInsert({\n row,\n column\n });\n\n //При исправлении показателя\n const handleMarkUpdate = markDesc => setModMark({\n ...markDesc\n });\n\n //При удалении показателя\n const handleMarkDelete = mark => showMsgWarn(\"Удалить показатель?\", () => onMarkDelete && onMarkDelete(mark));\n\n //При переходе к показателю\n const handleMarkOpen = mark => showMark(mark, res => res.success && handleRefresh());\n\n //При добавлении состава показателя\n const handleMarkCnAdd = mark => showMarkCnAdd(mark, res => res.success && handleRefresh());\n\n //При переходе к составу показателя\n const handleMarkCnOpen = (mark, constitution) => showMarkCn(mark, constitution, res => res.success && handleRefresh());\n\n //При закрытии формы добавления/исправления по \"ОК\"\n const handleIUFormOk = values => {\n if (modMark === true) onMarkInsert && onMarkInsert(values, res => res && setModMark(null));else onMarkUpdate && onMarkUpdate({\n ...modMark,\n ...values\n }, res => res && setModMark(null));\n };\n\n //При закрытии формы добавления/исправления по \"Отмена\"\n const handleIUFormCancel = () => setModMark(null);\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, dialogOrder && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_dialog_order__WEBPACK_IMPORTED_MODULE_9__.DialogOrder, _extends({}, order, {\n onOk: handleOrderChange,\n onCancel: toggleOrderDialog\n })), dialogHelp && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_dialog_help__WEBPACK_IMPORTED_MODULE_8__.DialogHelp, {\n onClose: toggleHelpDialog\n }), modMark && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_dialog_mark_iu__WEBPACK_IMPORTED_MODULE_7__.DialogMarkIU, _extends({}, modMark === true ? {} : modMark, {\n insert: modMark === true,\n onOk: handleIUFormOk,\n onCancel: handleIUFormCancel\n })), marksInit && (marks ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, marks, {\n tableStyle: STYLES.MARKS_DG_TABLE,\n containerComponentProps: {\n elevation: 0,\n square: true,\n variant: \"outlined\",\n sx: STYLES.MARKS_DG_CONTAINER\n },\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_SIZE.SMALL,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.confSctnMrkCellRender)({\n ...prms,\n onMarkAdd: handleMarkAddByRowCol,\n onMarkUpdate: handleMarkUpdate,\n onMarkDelete: handleMarkDelete,\n onMarkOpen: handleMarkOpen,\n onMarkCnOpen: handleMarkCnOpen,\n onMarkCnAdd: handleMarkCnAdd\n }),\n headCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.confSctnMrkHeadCellRender)({\n ...prms,\n onAdd: handleMarkAdd,\n onRefresh: handleRefresh,\n onOrder: handleOrder,\n onHelp: handleHelp\n })\n })) : !marksLoading && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_action_message__WEBPACK_IMPORTED_MODULE_6__.ActionMessage, {\n icon: \"info\",\n title: \"В разделе нет показателей\",\n desc: \"Добавьте новый\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, \"add\"),\n onClick: handleMarkAdd\n }, \"\\u041F\\u043E\\u043A\\u0430\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\"))));\n};\n\n//Контроль свойств - Показатели раздела\nMarks.propTypes = {\n marks: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().object),\n order: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().object).isRequired,\n marksLoading: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().bool).isRequired,\n marksInit: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().bool).isRequired,\n onRefresh: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func),\n onMarkInsert: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func),\n onMarkUpdate: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func),\n onMarkDelete: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func),\n onOrderChange: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/components/marks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Marks: () => (/* binding */ Marks)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../layouts */ \"./app/panels/rrp_conf_editor/layouts.js\");\n/* harmony import */ var _action_message__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./action_message */ \"./app/panels/rrp_conf_editor/components/action_message.js\");\n/* harmony import */ var _dialog_mark_iu__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./dialog_mark_iu */ \"./app/panels/rrp_conf_editor/components/dialog_mark_iu.js\");\n/* harmony import */ var _dialog_help__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./dialog_help */ \"./app/panels/rrp_conf_editor/components/dialog_help.js\");\n/* harmony import */ var _dialog_order__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./dialog_order */ \"./app/panels/rrp_conf_editor/components/dialog_order.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../hooks */ \"./app/panels/rrp_conf_editor/hooks.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Компонент панели: Показатели раздела\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст сообщений\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Типовые стили\n //Дополнительная разметка и вёрстка клиентских элементов\n //Сообщение с действиями\n //Диалог добавления/исправления показателя\n //Диалог помощи\n //Диалог сортировки\n //Кастомные хуки\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n MARKS_DG_CONTAINER: {\n position: \"absolute\",\n top: 0,\n bottom: 0,\n width: \"100%\",\n height: \"100%\",\n overflow: \"auto\",\n border: \"unset\",\n ..._app_styles__WEBPACK_IMPORTED_MODULE_4__.APP_STYLES.SCROLL\n },\n MARKS_DG_TABLE: {\n tableLayout: \"fixed\",\n width: \"auto\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Показатели раздела\nconst Marks = ({\n marks,\n order,\n marksLoading,\n marksInit,\n onRefresh,\n onMarkInsert,\n onMarkUpdate,\n onMarkDelete,\n onOrderChange\n}) => {\n //Состояние - диалог сортировки\n const [dialogOrder, setDialogOrder] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Состояние - диалог помощи\n const [dialogHelp, setDialogHelp] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Состояние - Редактируемый показатель\n const [modMark, setModMark] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Подключение к контексту сообщений\n const {\n showMsgWarn\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_1__[\"MessagingСtx\"]);\n\n //Подключение к словарям\n const {\n showMark,\n showMarkCn,\n showMarkCnAdd\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_10__.useDictionary)();\n\n //Изменение состояния диалога информации\n const toggleHelpDialog = () => setDialogHelp(pv => !pv);\n\n //Изменение состояния диалога сортировки\n const toggleOrderDialog = () => setDialogOrder(pv => !pv);\n\n //При необходимости обновления\n const handleRefresh = () => onRefresh && onRefresh();\n\n //При вызове сортировки\n const handleOrder = () => toggleOrderDialog();\n\n //При вызове помощи\n const handleHelp = () => toggleHelpDialog();\n\n //Изменение состояния сортировки строк и граф\n const handleOrderChange = order => {\n onOrderChange && onOrderChange(order);\n toggleOrderDialog();\n };\n\n //При добавлении показателя\n const handleMarkAdd = () => setModMark(true);\n\n //При добавлении показателя по указанным строке/графе\n const handleMarkAddByRowCol = (row, column) => onMarkInsert({\n row,\n column\n });\n\n //При исправлении показателя\n const handleMarkUpdate = markDesc => setModMark({\n ...markDesc\n });\n\n //При удалении показателя\n const handleMarkDelete = mark => showMsgWarn(\"Удалить показатель?\", () => onMarkDelete && onMarkDelete(mark));\n\n //При переходе к показателю\n const handleMarkOpen = mark => showMark(mark, res => res.success && handleRefresh());\n\n //При добавлении состава показателя\n const handleMarkCnAdd = mark => showMarkCnAdd(mark, res => res.success && handleRefresh());\n\n //При переходе к составу показателя\n const handleMarkCnOpen = (mark, constitution) => showMarkCn(mark, constitution, res => res.success && handleRefresh());\n\n //При закрытии диалога добавления/исправления по \"ОК\"\n const handleIUDialogOk = values => {\n if (modMark === true) onMarkInsert && onMarkInsert(values, res => res && setModMark(null));else onMarkUpdate && onMarkUpdate({\n ...modMark,\n ...values\n }, res => res && setModMark(null));\n };\n\n //При закрытии диалога добавления/исправления по \"Отмена\"\n const handleIUDialogCancel = () => setModMark(null);\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, dialogOrder && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_dialog_order__WEBPACK_IMPORTED_MODULE_9__.DialogOrder, _extends({}, order, {\n onOk: handleOrderChange,\n onCancel: toggleOrderDialog\n })), dialogHelp && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_dialog_help__WEBPACK_IMPORTED_MODULE_8__.DialogHelp, {\n onClose: toggleHelpDialog\n }), modMark && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_dialog_mark_iu__WEBPACK_IMPORTED_MODULE_7__.DialogMarkIU, _extends({}, modMark === true ? {} : modMark, {\n insert: modMark === true,\n onOk: handleIUDialogOk,\n onCancel: handleIUDialogCancel\n })), marksInit && (marks ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, marks, {\n tableStyle: STYLES.MARKS_DG_TABLE,\n containerComponentProps: {\n elevation: 0,\n square: true,\n variant: \"outlined\",\n sx: STYLES.MARKS_DG_CONTAINER\n },\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_SIZE.SMALL,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.confSctnMrkCellRender)({\n ...prms,\n onMarkAdd: handleMarkAddByRowCol,\n onMarkUpdate: handleMarkUpdate,\n onMarkDelete: handleMarkDelete,\n onMarkOpen: handleMarkOpen,\n onMarkCnOpen: handleMarkCnOpen,\n onMarkCnAdd: handleMarkCnAdd\n }),\n headCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.confSctnMrkHeadCellRender)({\n ...prms,\n onAdd: handleMarkAdd,\n onRefresh: handleRefresh,\n onOrder: handleOrder,\n onHelp: handleHelp\n })\n })) : !marksLoading && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_action_message__WEBPACK_IMPORTED_MODULE_6__.ActionMessage, {\n icon: \"info\",\n title: \"В разделе нет показателей\",\n desc: \"Добавьте новый\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, \"add\"),\n onClick: handleMarkAdd\n }, \"\\u041F\\u043E\\u043A\\u0430\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\"))));\n};\n\n//Контроль свойств - Показатели раздела\nMarks.propTypes = {\n marks: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().object),\n order: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().object).isRequired,\n marksLoading: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().bool).isRequired,\n marksInit: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().bool).isRequired,\n onRefresh: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func),\n onMarkInsert: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func),\n onMarkUpdate: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func),\n onMarkDelete: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func),\n onOrderChange: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/components/marks.js?"); /***/ }), @@ -3589,7 +3820,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Sections: () => (/* binding */ Sections)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tabs/Tabs.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material_Tabs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material/Tabs */ \"./node_modules/@mui/material/Tabs/tabsClasses.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../hooks */ \"./app/panels/rrp_conf_editor/hooks.js\");\n/* harmony import */ var _action_message__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./action_message */ \"./app/panels/rrp_conf_editor/components/action_message.js\");\n/* harmony import */ var _section_tab__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./section_tab */ \"./app/panels/rrp_conf_editor/components/section_tab.js\");\n/* harmony import */ var _dialog_section_iu__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./dialog_section_iu */ \"./app/panels/rrp_conf_editor/components/dialog_section_iu.js\");\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Компонент панели: Разделы настройки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Классы закладок\n //Контекст взаимодействия с приложением\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Кастомные хуки\n //Сообщение с действиями\n //Закладка раздела\n //Диалог добавления/исправления раздела\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n borderBottom: 1,\n borderColor: \"divider\",\n width: \"100%\",\n height: \"100%\"\n },\n TABS_SECTIONS: {\n width: \"100%\",\n [`& .${_mui_material_Tabs__WEBPACK_IMPORTED_MODULE_8__[\"default\"].scrollButtons}`]: {\n \"&.Mui-disabled\": {\n opacity: 0.3\n }\n }\n }\n};\n\n//-----------------------\n//Вспомогательные функции\n//-----------------------\n\n//Поиск активного раздела после удаления текущего\nconst getNextSectionAfterDelete = (sections, deletedSection) => {\n //Находим индекс удаляемого раздела\n const delInd = sections.findIndex(s => s.NRN === deletedSection);\n //Возвращаем рег. номер либо предыдущего раздела, либо следующего, либо ничего\n return delInd === -1 ? null : sections[delInd - 1]?.NRN || sections[delInd + 1]?.NRN || null;\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Разделы настройки\nconst Sections = ({\n conf,\n onSectionChange,\n onSectionCountChange\n}) => {\n //Текущий раздел настройки\n const [section, setSection] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(-1);\n\n //Редактируемый раздел настройки\n const [modSection, setModSection] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Список разделов и просто описание настройки\n const [confDesc, sections, refreshSections, sectionsLoading, sectionsInit] = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useConfSections)(conf);\n\n //Подключение к контексту приложения\n const {\n setAppBarTitle\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_2__[\"BackEndСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgWarn\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_3__[\"MessagingСtx\"]);\n\n //Выбор раздела\n const selectSection = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(section => {\n if (onSectionChange) onSectionChange(section);\n setSection(section);\n }, [onSectionChange]);\n\n //Добавление раздела\n const insertSection = async ({\n conf,\n code,\n name\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_INSERT\",\n args: {\n NPRN: conf,\n SCODE: code,\n SNAME: name\n },\n loader: false\n });\n selectSection(data.NRN);\n refreshSections();\n };\n\n //Исправление раздела\n const updateSection = async ({\n rn,\n code,\n name\n }) => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_UPDATE\",\n args: {\n NRN: rn,\n SCODE: code,\n SNAME: name\n },\n loader: false\n });\n refreshSections();\n };\n\n //Удаление раздела\n const deleteSection = async section => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_DELETE\",\n args: {\n NRN: section\n },\n loader: false\n });\n selectSection(getNextSectionAfterDelete(sections, section));\n refreshSections();\n };\n\n //При измении закладки текущего раздела\n const handleSectionTabChange = (event, section) => selectSection(section);\n\n //При добавлении раздела настройки\n const handleSectionAdd = () => setModSection(true);\n\n //При редактировании раздела настройки\n const handleSectionEdit = section => setModSection(sections.find(s => s.NRN === section) || null);\n\n //При удалении раздела настройки\n const handleSectionDelete = section => showMsgWarn(\"Удалить раздел?\", () => deleteSection(section));\n\n //При закрытии формы добавления/исправления по \"ОК\"\n const handleIUFormOk = async values => {\n if (modSection === true) await insertSection({\n conf,\n ...values\n });else await updateSection({\n rn: modSection.NRN,\n ...values\n });\n setModSection(null);\n };\n\n //При закрытии формы добавления/исправления по \"Отмена\"\n const handleIUFormCancel = () => setModSection(null);\n\n //При изменении состава разделов\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если ещё не инициализировали выбранный раздел и есть чем\n if (section === -1 && sections.length > 0) selectSection(sections[0].NRN);\n }, [section, sections, selectSection]);\n\n //При изменении количества разделов\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n onSectionCountChange && onSectionCountChange(sections.length);\n }, [sections.length, onSectionCountChange]);\n\n //При изменении описания раздела\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (confDesc?.SNAME) setAppBarTitle(confDesc.SNAME);\n }, [confDesc, setAppBarTitle]);\n\n //Вычисление подсвеченной закладки раздела\n const hlSection = sections.find(s => s.NRN === section)?.NRN || false;\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n direction: \"row\",\n sx: STYLES.CONTAINER\n }, modSection && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_dialog_section_iu__WEBPACK_IMPORTED_MODULE_7__.DialogSectionIU, {\n code: modSection?.SCODE,\n name: modSection?.SNAME,\n insert: modSection === true,\n onOk: handleIUFormOk,\n onCancel: handleIUFormCancel\n }), sections.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n sx: STYLES.PANELS_MAIN_COLOR,\n title: \"Добавить раздел\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: handleSectionAdd\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, \"add\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n value: hlSection,\n onChange: handleSectionTabChange,\n variant: \"scrollable\",\n scrollButtons: true,\n sx: STYLES.TABS_SECTIONS\n }, sections.map((s, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_section_tab__WEBPACK_IMPORTED_MODULE_6__.SectionTab, {\n key: i,\n value: s.NRN,\n section: section,\n sectionDesc: s,\n onSectionEdit: handleSectionEdit,\n onSectionDelete: handleSectionDelete\n })))) : sectionsInit && !sectionsLoading && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_action_message__WEBPACK_IMPORTED_MODULE_5__.ActionMessage, {\n icon: \"info\",\n title: \"В настройке нет разделов\",\n desc: \"Добавьте первый...\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, \"add\"),\n onClick: handleSectionAdd\n }, \"\\u0420\\u0430\\u0437\\u0434\\u0435\\u043B\")));\n};\n\n//Контроль свойств - Разделы настройки\nSections.propTypes = {\n conf: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number),\n onSectionChange: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func),\n onSectionCountChange: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/components/sections.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Sections: () => (/* binding */ Sections)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tabs/Tabs.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material_Tabs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material/Tabs */ \"./node_modules/@mui/material/Tabs/tabsClasses.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../hooks */ \"./app/panels/rrp_conf_editor/hooks.js\");\n/* harmony import */ var _action_message__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./action_message */ \"./app/panels/rrp_conf_editor/components/action_message.js\");\n/* harmony import */ var _section_tab__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./section_tab */ \"./app/panels/rrp_conf_editor/components/section_tab.js\");\n/* harmony import */ var _dialog_section_iu__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./dialog_section_iu */ \"./app/panels/rrp_conf_editor/components/dialog_section_iu.js\");\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Компонент панели: Разделы настройки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Классы закладок\n //Контекст взаимодействия с приложением\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Кастомные хуки\n //Сообщение с действиями\n //Закладка раздела\n //Диалог добавления/исправления раздела\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n borderBottom: 1,\n borderColor: \"divider\",\n width: \"100%\",\n height: \"100%\"\n },\n TABS_SECTIONS: {\n width: \"100%\",\n [`& .${_mui_material_Tabs__WEBPACK_IMPORTED_MODULE_8__[\"default\"].scrollButtons}`]: {\n \"&.Mui-disabled\": {\n opacity: 0.3\n }\n }\n }\n};\n\n//-----------------------\n//Вспомогательные функции\n//-----------------------\n\n//Поиск активного раздела после удаления текущего\nconst getNextSectionAfterDelete = (sections, deletedSection) => {\n //Находим индекс удаляемого раздела\n const delInd = sections.findIndex(s => s.NRN === deletedSection);\n //Возвращаем рег. номер либо предыдущего раздела, либо следующего, либо ничего\n return delInd === -1 ? null : sections[delInd - 1]?.NRN || sections[delInd + 1]?.NRN || null;\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Разделы настройки\nconst Sections = ({\n conf,\n onSectionChange,\n onSectionCountChange\n}) => {\n //Текущий раздел настройки\n const [section, setSection] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(-1);\n\n //Редактируемый раздел настройки\n const [modSection, setModSection] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Список разделов и просто описание настройки\n const [confDesc, sections, refreshSections, sectionsLoading, sectionsInit] = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useConfSections)(conf);\n\n //Подключение к контексту приложения\n const {\n setAppBarTitle\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_2__[\"BackEndСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgWarn\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_3__[\"MessagingСtx\"]);\n\n //Выбор раздела\n const selectSection = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(section => {\n if (onSectionChange) onSectionChange(section);\n setSection(section);\n }, [onSectionChange]);\n\n //Добавление раздела\n const insertSection = async ({\n conf,\n code,\n name\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_INSERT\",\n args: {\n NPRN: conf,\n SCODE: code,\n SNAME: name\n },\n loader: false\n });\n selectSection(data.NRN);\n refreshSections();\n };\n\n //Исправление раздела\n const updateSection = async ({\n rn,\n code,\n name\n }) => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_UPDATE\",\n args: {\n NRN: rn,\n SCODE: code,\n SNAME: name\n },\n loader: false\n });\n refreshSections();\n };\n\n //Удаление раздела\n const deleteSection = async section => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_DELETE\",\n args: {\n NRN: section\n },\n loader: false\n });\n selectSection(getNextSectionAfterDelete(sections, section));\n refreshSections();\n };\n\n //При измении закладки текущего раздела\n const handleSectionTabChange = (event, section) => selectSection(section);\n\n //При добавлении раздела настройки\n const handleSectionAdd = () => setModSection(true);\n\n //При редактировании раздела настройки\n const handleSectionEdit = section => setModSection(sections.find(s => s.NRN === section) || null);\n\n //При удалении раздела настройки\n const handleSectionDelete = section => showMsgWarn(\"Удалить раздел?\", () => deleteSection(section));\n\n //При закрытии диалога добавления/исправления по \"ОК\"\n const handleIUDialogOk = async values => {\n if (modSection === true) await insertSection({\n conf,\n ...values\n });else await updateSection({\n rn: modSection.NRN,\n ...values\n });\n setModSection(null);\n };\n\n //При закрытии диалога добавления/исправления по \"Отмена\"\n const handleIUDialogCancel = () => setModSection(null);\n\n //При изменении состава разделов\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если ещё не инициализировали выбранный раздел и есть чем\n if (section === -1 && sections.length > 0) selectSection(sections[0].NRN);\n }, [section, sections, selectSection]);\n\n //При изменении количества разделов\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n onSectionCountChange && onSectionCountChange(sections.length);\n }, [sections.length, onSectionCountChange]);\n\n //При изменении описания раздела\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (confDesc?.SNAME) setAppBarTitle(confDesc.SNAME);\n }, [confDesc, setAppBarTitle]);\n\n //Вычисление подсвеченной закладки раздела\n const hlSection = sections.find(s => s.NRN === section)?.NRN || false;\n\n //Формирование представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n direction: \"row\",\n sx: STYLES.CONTAINER\n }, modSection && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_dialog_section_iu__WEBPACK_IMPORTED_MODULE_7__.DialogSectionIU, {\n code: modSection?.SCODE,\n name: modSection?.SNAME,\n insert: modSection === true,\n onOk: handleIUDialogOk,\n onCancel: handleIUDialogCancel\n }), sections.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n sx: STYLES.PANELS_MAIN_COLOR,\n title: \"Добавить раздел\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: handleSectionAdd\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, \"add\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n value: hlSection,\n onChange: handleSectionTabChange,\n variant: \"scrollable\",\n scrollButtons: true,\n sx: STYLES.TABS_SECTIONS\n }, sections.map((s, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_section_tab__WEBPACK_IMPORTED_MODULE_6__.SectionTab, {\n key: i,\n value: s.NRN,\n section: section,\n sectionDesc: s,\n onSectionEdit: handleSectionEdit,\n onSectionDelete: handleSectionDelete\n })))) : sectionsInit && !sectionsLoading && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_action_message__WEBPACK_IMPORTED_MODULE_5__.ActionMessage, {\n icon: \"info\",\n title: \"В настройке нет разделов\",\n desc: \"Добавьте первый...\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, \"add\"),\n onClick: handleSectionAdd\n }, \"\\u0420\\u0430\\u0437\\u0434\\u0435\\u043B\")));\n};\n\n//Контроль свойств - Разделы настройки\nSections.propTypes = {\n conf: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number),\n onSectionChange: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func),\n onSectionCountChange: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/components/sections.js?"); /***/ }), @@ -3820,7 +4051,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _objectWithoutPropertiesLoose)\n/* harmony export */ });\nfunction _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (e.includes(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _objectWithoutPropertiesLoose)\n/* harmony export */ });\nfunction _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js?"); /***/ }), @@ -3841,7 +4072,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac \********************************************************/ /***/ ((module) => { -eval("function _extends() {\n return (module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _extends.apply(null, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@babel/runtime/helpers/extends.js?"); +eval("function _extends() {\n return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _extends.apply(null, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@babel/runtime/helpers/extends.js?"); /***/ }), @@ -3861,7 +4092,7 @@ eval("function _interopRequireDefault(e) {\n return e && e.__esModule ? e : {\n \*****************************************************************************/ /***/ ((module) => { -eval("function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (e.includes(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js?"); +eval("function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js?"); /***/ }), @@ -8408,6 +8639,28 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/@reactflow/controls/dist/esm/index.mjs": +/*!*************************************************************!*\ + !*** ./node_modules/@reactflow/controls/dist/esm/index.mjs ***! + \*************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ControlButton: () => (/* binding */ ControlButton),\n/* harmony export */ Controls: () => (/* binding */ Controls$1)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var classcat__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classcat */ \"./node_modules/classcat/index.js\");\n/* harmony import */ var zustand_shallow__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! zustand/shallow */ \"./node_modules/zustand/esm/shallow.mjs\");\n/* harmony import */ var _reactflow_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @reactflow/core */ \"./node_modules/@reactflow/core/dist/esm/index.mjs\");\n\n\n\n\n\nfunction PlusIcon() {\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 32 32\" },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", { d: \"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z\" })));\n}\n\nfunction MinusIcon() {\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 32 5\" },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", { d: \"M0 0h32v4.2H0z\" })));\n}\n\nfunction FitViewIcon() {\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 32 30\" },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", { d: \"M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0027.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94c-.531 0-.939-.4-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z\" })));\n}\n\nfunction LockIcon() {\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 25 32\" },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", { d: \"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0 8 0 4.571 3.429 4.571 7.619v3.048H3.048A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047zm4.724-13.866H7.467V7.619c0-2.59 2.133-4.724 4.723-4.724 2.591 0 4.724 2.133 4.724 4.724v3.048z\" })));\n}\n\nfunction UnlockIcon() {\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 25 32\" },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", { d: \"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0c-4.114 1.828-1.37 2.133.305 2.438 1.676.305 4.42 2.59 4.42 5.181v3.048H3.047A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047z\" })));\n}\n\nconst ControlButton = ({ children, className, ...rest }) => (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", { type: \"button\", className: (0,classcat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(['react-flow__controls-button', className]), ...rest }, children));\nControlButton.displayName = 'ControlButton';\n\nconst selector = (s) => ({\n isInteractive: s.nodesDraggable || s.nodesConnectable || s.elementsSelectable,\n minZoomReached: s.transform[2] <= s.minZoom,\n maxZoomReached: s.transform[2] >= s.maxZoom,\n});\nconst Controls = ({ style, showZoom = true, showFitView = true, showInteractive = true, fitViewOptions, onZoomIn, onZoomOut, onFitView, onInteractiveChange, className, children, position = 'bottom-left', }) => {\n const store = (0,_reactflow_core__WEBPACK_IMPORTED_MODULE_2__.useStoreApi)();\n const [isVisible, setIsVisible] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n const { isInteractive, minZoomReached, maxZoomReached } = (0,_reactflow_core__WEBPACK_IMPORTED_MODULE_2__.useStore)(selector, zustand_shallow__WEBPACK_IMPORTED_MODULE_3__.shallow);\n const { zoomIn, zoomOut, fitView } = (0,_reactflow_core__WEBPACK_IMPORTED_MODULE_2__.useReactFlow)();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setIsVisible(true);\n }, []);\n if (!isVisible) {\n return null;\n }\n const onZoomInHandler = () => {\n zoomIn();\n onZoomIn?.();\n };\n const onZoomOutHandler = () => {\n zoomOut();\n onZoomOut?.();\n };\n const onFitViewHandler = () => {\n fitView(fitViewOptions);\n onFitView?.();\n };\n const onToggleInteractivity = () => {\n store.setState({\n nodesDraggable: !isInteractive,\n nodesConnectable: !isInteractive,\n elementsSelectable: !isInteractive,\n });\n onInteractiveChange?.(!isInteractive);\n };\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(_reactflow_core__WEBPACK_IMPORTED_MODULE_2__.Panel, { className: (0,classcat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(['react-flow__controls', className]), position: position, style: style, \"data-testid\": \"rf__controls\" },\n showZoom && (react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null,\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(ControlButton, { onClick: onZoomInHandler, className: \"react-flow__controls-zoomin\", title: \"zoom in\", \"aria-label\": \"zoom in\", disabled: maxZoomReached },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(PlusIcon, null)),\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(ControlButton, { onClick: onZoomOutHandler, className: \"react-flow__controls-zoomout\", title: \"zoom out\", \"aria-label\": \"zoom out\", disabled: minZoomReached },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(MinusIcon, null)))),\n showFitView && (react__WEBPACK_IMPORTED_MODULE_0__.createElement(ControlButton, { className: \"react-flow__controls-fitview\", onClick: onFitViewHandler, title: \"fit view\", \"aria-label\": \"fit view\" },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(FitViewIcon, null))),\n showInteractive && (react__WEBPACK_IMPORTED_MODULE_0__.createElement(ControlButton, { className: \"react-flow__controls-interactive\", onClick: onToggleInteractivity, title: \"toggle interactivity\", \"aria-label\": \"toggle interactivity\" }, isInteractive ? react__WEBPACK_IMPORTED_MODULE_0__.createElement(UnlockIcon, null) : react__WEBPACK_IMPORTED_MODULE_0__.createElement(LockIcon, null))),\n children));\n};\nControls.displayName = 'Controls';\nvar Controls$1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(Controls);\n\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@reactflow/controls/dist/esm/index.mjs?"); + +/***/ }), + +/***/ "./node_modules/@reactflow/core/dist/esm/index.mjs": +/*!*********************************************************!*\ + !*** ./node_modules/@reactflow/core/dist/esm/index.mjs ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BaseEdge: () => (/* binding */ BaseEdge),\n/* harmony export */ BezierEdge: () => (/* binding */ BezierEdge),\n/* harmony export */ ConnectionLineType: () => (/* binding */ ConnectionLineType),\n/* harmony export */ ConnectionMode: () => (/* binding */ ConnectionMode),\n/* harmony export */ EdgeLabelRenderer: () => (/* binding */ EdgeLabelRenderer),\n/* harmony export */ EdgeText: () => (/* binding */ EdgeText$1),\n/* harmony export */ Handle: () => (/* binding */ Handle$1),\n/* harmony export */ MarkerType: () => (/* binding */ MarkerType),\n/* harmony export */ PanOnScrollMode: () => (/* binding */ PanOnScrollMode),\n/* harmony export */ Panel: () => (/* binding */ Panel),\n/* harmony export */ Position: () => (/* binding */ Position),\n/* harmony export */ ReactFlow: () => (/* binding */ ReactFlow),\n/* harmony export */ ReactFlowProvider: () => (/* binding */ ReactFlowProvider),\n/* harmony export */ SelectionMode: () => (/* binding */ SelectionMode),\n/* harmony export */ SimpleBezierEdge: () => (/* binding */ SimpleBezierEdge),\n/* harmony export */ SmoothStepEdge: () => (/* binding */ SmoothStepEdge),\n/* harmony export */ StepEdge: () => (/* binding */ StepEdge),\n/* harmony export */ StraightEdge: () => (/* binding */ StraightEdge),\n/* harmony export */ addEdge: () => (/* binding */ addEdge),\n/* harmony export */ applyEdgeChanges: () => (/* binding */ applyEdgeChanges),\n/* harmony export */ applyNodeChanges: () => (/* binding */ applyNodeChanges),\n/* harmony export */ boxToRect: () => (/* binding */ boxToRect),\n/* harmony export */ clamp: () => (/* binding */ clamp),\n/* harmony export */ getBezierPath: () => (/* binding */ getBezierPath),\n/* harmony export */ getBoundsOfRects: () => (/* binding */ getBoundsOfRects),\n/* harmony export */ getConnectedEdges: () => (/* binding */ getConnectedEdges),\n/* harmony export */ getIncomers: () => (/* binding */ getIncomers),\n/* harmony export */ getMarkerEnd: () => (/* binding */ getMarkerEnd),\n/* harmony export */ getNodePositionWithOrigin: () => (/* binding */ getNodePositionWithOrigin),\n/* harmony export */ getNodesBounds: () => (/* binding */ getNodesBounds),\n/* harmony export */ getOutgoers: () => (/* binding */ getOutgoers),\n/* harmony export */ getRectOfNodes: () => (/* binding */ getRectOfNodes),\n/* harmony export */ getSimpleBezierPath: () => (/* binding */ getSimpleBezierPath),\n/* harmony export */ getSmoothStepPath: () => (/* binding */ getSmoothStepPath),\n/* harmony export */ getStraightPath: () => (/* binding */ getStraightPath),\n/* harmony export */ getTransformForBounds: () => (/* binding */ getTransformForBounds),\n/* harmony export */ getViewportForBounds: () => (/* binding */ getViewportForBounds),\n/* harmony export */ handleParentExpand: () => (/* binding */ handleParentExpand),\n/* harmony export */ internalsSymbol: () => (/* binding */ internalsSymbol),\n/* harmony export */ isEdge: () => (/* binding */ isEdge),\n/* harmony export */ isNode: () => (/* binding */ isNode),\n/* harmony export */ reconnectEdge: () => (/* binding */ reconnectEdge),\n/* harmony export */ rectToBox: () => (/* binding */ rectToBox),\n/* harmony export */ updateEdge: () => (/* binding */ updateEdge),\n/* harmony export */ useEdges: () => (/* binding */ useEdges),\n/* harmony export */ useEdgesState: () => (/* binding */ useEdgesState),\n/* harmony export */ useGetPointerPosition: () => (/* binding */ useGetPointerPosition),\n/* harmony export */ useKeyPress: () => (/* binding */ useKeyPress),\n/* harmony export */ useNodeId: () => (/* binding */ useNodeId),\n/* harmony export */ useNodes: () => (/* binding */ useNodes),\n/* harmony export */ useNodesInitialized: () => (/* binding */ useNodesInitialized),\n/* harmony export */ useNodesState: () => (/* binding */ useNodesState),\n/* harmony export */ useOnSelectionChange: () => (/* binding */ useOnSelectionChange),\n/* harmony export */ useOnViewportChange: () => (/* binding */ useOnViewportChange),\n/* harmony export */ useReactFlow: () => (/* binding */ useReactFlow),\n/* harmony export */ useStore: () => (/* binding */ useStore),\n/* harmony export */ useStoreApi: () => (/* binding */ useStoreApi),\n/* harmony export */ useUpdateNodeInternals: () => (/* binding */ useUpdateNodeInternals),\n/* harmony export */ useViewport: () => (/* binding */ useViewport)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var classcat__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classcat */ \"./node_modules/classcat/index.js\");\n/* harmony import */ var zustand_traditional__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! zustand/traditional */ \"./node_modules/zustand/esm/traditional.mjs\");\n/* harmony import */ var zustand_shallow__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! zustand/shallow */ \"./node_modules/zustand/esm/shallow.mjs\");\n/* harmony import */ var d3_zoom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-zoom */ \"./node_modules/d3-zoom/src/index.js\");\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-selection */ \"./node_modules/d3-selection/src/select.js\");\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! d3-selection */ \"./node_modules/d3-selection/src/pointer.js\");\n/* harmony import */ var d3_drag__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! d3-drag */ \"./node_modules/d3-drag/src/drag.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\");\n\n\n\n\n\n\n\n\n\nconst StoreContext = (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);\nconst Provider$1 = StoreContext.Provider;\n\nconst errorMessages = {\n error001: () => '[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.dev/error#001',\n error002: () => \"It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.\",\n error003: (nodeType) => `Node type \"${nodeType}\" not found. Using fallback type \"default\".`,\n error004: () => 'The React Flow parent container needs a width and a height to render the graph.',\n error005: () => 'Only child nodes can use a parent extent.',\n error006: () => \"Can't create edge. An edge needs a source and a target.\",\n error007: (id) => `The old edge with id=${id} does not exist.`,\n error009: (type) => `Marker type \"${type}\" doesn't exist.`,\n error008: (sourceHandle, edge) => `Couldn't create edge for ${!sourceHandle ? 'source' : 'target'} handle id: \"${!sourceHandle ? edge.sourceHandle : edge.targetHandle}\", edge id: ${edge.id}.`,\n error010: () => 'Handle: No node id found. Make sure to only use a Handle inside a custom Node.',\n error011: (edgeType) => `Edge type \"${edgeType}\" not found. Using fallback type \"default\".`,\n error012: (id) => `Node with id \"${id}\" does not exist, it may have been removed. This can happen when a node is deleted before the \"onNodeClick\" handler is called.`,\n};\n\nconst zustandErrorMessage = errorMessages['error001']();\nfunction useStore(selector, equalityFn) {\n const store = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(StoreContext);\n if (store === null) {\n throw new Error(zustandErrorMessage);\n }\n return (0,zustand_traditional__WEBPACK_IMPORTED_MODULE_4__.useStoreWithEqualityFn)(store, selector, equalityFn);\n}\nconst useStoreApi = () => {\n const store = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(StoreContext);\n if (store === null) {\n throw new Error(zustandErrorMessage);\n }\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({\n getState: store.getState,\n setState: store.setState,\n subscribe: store.subscribe,\n destroy: store.destroy,\n }), [store]);\n};\n\nconst selector$g = (s) => (s.userSelectionActive ? 'none' : 'all');\nfunction Panel({ position, children, className, style, ...rest }) {\n const pointerEvents = useStore(selector$g);\n const positionClasses = `${position}`.split('-');\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", { className: (0,classcat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(['react-flow__panel', className, ...positionClasses]), style: { ...style, pointerEvents }, ...rest }, children));\n}\n\nfunction Attribution({ proOptions, position = 'bottom-right' }) {\n if (proOptions?.hideAttribution) {\n return null;\n }\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(Panel, { position: position, className: \"react-flow__attribution\", \"data-message\": \"Please only hide this attribution when you are subscribed to React Flow Pro: https://reactflow.dev/pro\" },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"a\", { href: \"https://reactflow.dev\", target: \"_blank\", rel: \"noopener noreferrer\", \"aria-label\": \"React Flow attribution\" }, \"React Flow\")));\n}\n\nconst EdgeText = ({ x, y, label, labelStyle = {}, labelShowBg = true, labelBgStyle = {}, labelBgPadding = [2, 4], labelBgBorderRadius = 2, children, className, ...rest }) => {\n const edgeRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const [edgeTextBbox, setEdgeTextBbox] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({ x: 0, y: 0, width: 0, height: 0 });\n const edgeTextClasses = (0,classcat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(['react-flow__edge-textwrapper', className]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (edgeRef.current) {\n const textBbox = edgeRef.current.getBBox();\n setEdgeTextBbox({\n x: textBbox.x,\n y: textBbox.y,\n width: textBbox.width,\n height: textBbox.height,\n });\n }\n }, [label]);\n if (typeof label === 'undefined' || !label) {\n return null;\n }\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"g\", { transform: `translate(${x - edgeTextBbox.width / 2} ${y - edgeTextBbox.height / 2})`, className: edgeTextClasses, visibility: edgeTextBbox.width ? 'visible' : 'hidden', ...rest },\n labelShowBg && (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"rect\", { width: edgeTextBbox.width + 2 * labelBgPadding[0], x: -labelBgPadding[0], y: -labelBgPadding[1], height: edgeTextBbox.height + 2 * labelBgPadding[1], className: \"react-flow__edge-textbg\", style: labelBgStyle, rx: labelBgBorderRadius, ry: labelBgBorderRadius })),\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"text\", { className: \"react-flow__edge-text\", y: edgeTextBbox.height / 2, dy: \"0.3em\", ref: edgeRef, style: labelStyle }, label),\n children));\n};\nvar EdgeText$1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(EdgeText);\n\nconst getDimensions = (node) => ({\n width: node.offsetWidth,\n height: node.offsetHeight,\n});\nconst clamp = (val, min = 0, max = 1) => Math.min(Math.max(val, min), max);\nconst clampPosition = (position = { x: 0, y: 0 }, extent) => ({\n x: clamp(position.x, extent[0][0], extent[1][0]),\n y: clamp(position.y, extent[0][1], extent[1][1]),\n});\n// returns a number between 0 and 1 that represents the velocity of the movement\n// when the mouse is close to the edge of the canvas\nconst calcAutoPanVelocity = (value, min, max) => {\n if (value < min) {\n return clamp(Math.abs(value - min), 1, 50) / 50;\n }\n else if (value > max) {\n return -clamp(Math.abs(value - max), 1, 50) / 50;\n }\n return 0;\n};\nconst calcAutoPan = (pos, bounds) => {\n const xMovement = calcAutoPanVelocity(pos.x, 35, bounds.width - 35) * 20;\n const yMovement = calcAutoPanVelocity(pos.y, 35, bounds.height - 35) * 20;\n return [xMovement, yMovement];\n};\nconst getHostForElement = (element) => element.getRootNode?.() || window?.document;\nconst getBoundsOfBoxes = (box1, box2) => ({\n x: Math.min(box1.x, box2.x),\n y: Math.min(box1.y, box2.y),\n x2: Math.max(box1.x2, box2.x2),\n y2: Math.max(box1.y2, box2.y2),\n});\nconst rectToBox = ({ x, y, width, height }) => ({\n x,\n y,\n x2: x + width,\n y2: y + height,\n});\nconst boxToRect = ({ x, y, x2, y2 }) => ({\n x,\n y,\n width: x2 - x,\n height: y2 - y,\n});\nconst nodeToRect = (node) => ({\n ...(node.positionAbsolute || { x: 0, y: 0 }),\n width: node.width || 0,\n height: node.height || 0,\n});\nconst getBoundsOfRects = (rect1, rect2) => boxToRect(getBoundsOfBoxes(rectToBox(rect1), rectToBox(rect2)));\nconst getOverlappingArea = (rectA, rectB) => {\n const xOverlap = Math.max(0, Math.min(rectA.x + rectA.width, rectB.x + rectB.width) - Math.max(rectA.x, rectB.x));\n const yOverlap = Math.max(0, Math.min(rectA.y + rectA.height, rectB.y + rectB.height) - Math.max(rectA.y, rectB.y));\n return Math.ceil(xOverlap * yOverlap);\n};\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isRectObject = (obj) => isNumeric(obj.width) && isNumeric(obj.height) && isNumeric(obj.x) && isNumeric(obj.y);\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nconst isNumeric = (n) => !isNaN(n) && isFinite(n);\nconst internalsSymbol = Symbol.for('internals');\n// used for a11y key board controls for nodes and edges\nconst elementSelectionKeys = ['Enter', ' ', 'Escape'];\nconst devWarn = (id, message) => {\n if (true) {\n console.warn(`[React Flow]: ${message} Help: https://reactflow.dev/error#${id}`);\n }\n};\nconst isReactKeyboardEvent = (event) => 'nativeEvent' in event;\nfunction isInputDOMNode(event) {\n const kbEvent = isReactKeyboardEvent(event) ? event.nativeEvent : event;\n // using composed path for handling shadow dom\n const target = (kbEvent.composedPath?.()?.[0] || event.target);\n const isInput = ['INPUT', 'SELECT', 'TEXTAREA'].includes(target?.nodeName) || target?.hasAttribute('contenteditable');\n // when an input field is focused we don't want to trigger deletion or movement of nodes\n return isInput || !!target?.closest('.nokey');\n}\nconst isMouseEvent = (event) => 'clientX' in event;\nconst getEventPosition = (event, bounds) => {\n const isMouseTriggered = isMouseEvent(event);\n const evtX = isMouseTriggered ? event.clientX : event.touches?.[0].clientX;\n const evtY = isMouseTriggered ? event.clientY : event.touches?.[0].clientY;\n return {\n x: evtX - (bounds?.left ?? 0),\n y: evtY - (bounds?.top ?? 0),\n };\n};\nconst isMacOs = () => typeof navigator !== 'undefined' && navigator?.userAgent?.indexOf('Mac') >= 0;\n\nconst BaseEdge = ({ id, path, labelX, labelY, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, markerEnd, markerStart, interactionWidth = 20, }) => {\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null,\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", { id: id, style: style, d: path, fill: \"none\", className: \"react-flow__edge-path\", markerEnd: markerEnd, markerStart: markerStart }),\n interactionWidth && (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", { d: path, fill: \"none\", strokeOpacity: 0, strokeWidth: interactionWidth, className: \"react-flow__edge-interaction\" })),\n label && isNumeric(labelX) && isNumeric(labelY) ? (react__WEBPACK_IMPORTED_MODULE_0__.createElement(EdgeText$1, { x: labelX, y: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius })) : null));\n};\nBaseEdge.displayName = 'BaseEdge';\n\nconst getMarkerEnd = (markerType, markerEndId) => {\n if (typeof markerEndId !== 'undefined' && markerEndId) {\n return `url(#${markerEndId})`;\n }\n return typeof markerType !== 'undefined' ? `url(#react-flow__${markerType})` : 'none';\n};\nfunction getMouseHandler$1(id, getState, handler) {\n return handler === undefined\n ? handler\n : (event) => {\n const edge = getState().edges.find((e) => e.id === id);\n if (edge) {\n handler(event, { ...edge });\n }\n };\n}\n// this is used for straight edges and simple smoothstep edges (LTR, RTL, BTT, TTB)\nfunction getEdgeCenter({ sourceX, sourceY, targetX, targetY, }) {\n const xOffset = Math.abs(targetX - sourceX) / 2;\n const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n const yOffset = Math.abs(targetY - sourceY) / 2;\n const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n return [centerX, centerY, xOffset, yOffset];\n}\nfunction getBezierEdgeCenter({ sourceX, sourceY, targetX, targetY, sourceControlX, sourceControlY, targetControlX, targetControlY, }) {\n // cubic bezier t=0.5 mid point, not the actual mid point, but easy to calculate\n // https://stackoverflow.com/questions/67516101/how-to-find-distance-mid-point-of-bezier-curve\n const centerX = sourceX * 0.125 + sourceControlX * 0.375 + targetControlX * 0.375 + targetX * 0.125;\n const centerY = sourceY * 0.125 + sourceControlY * 0.375 + targetControlY * 0.375 + targetY * 0.125;\n const offsetX = Math.abs(centerX - sourceX);\n const offsetY = Math.abs(centerY - sourceY);\n return [centerX, centerY, offsetX, offsetY];\n}\n\nvar ConnectionMode;\n(function (ConnectionMode) {\n ConnectionMode[\"Strict\"] = \"strict\";\n ConnectionMode[\"Loose\"] = \"loose\";\n})(ConnectionMode || (ConnectionMode = {}));\nvar PanOnScrollMode;\n(function (PanOnScrollMode) {\n PanOnScrollMode[\"Free\"] = \"free\";\n PanOnScrollMode[\"Vertical\"] = \"vertical\";\n PanOnScrollMode[\"Horizontal\"] = \"horizontal\";\n})(PanOnScrollMode || (PanOnScrollMode = {}));\nvar SelectionMode;\n(function (SelectionMode) {\n SelectionMode[\"Partial\"] = \"partial\";\n SelectionMode[\"Full\"] = \"full\";\n})(SelectionMode || (SelectionMode = {}));\n\nvar ConnectionLineType;\n(function (ConnectionLineType) {\n ConnectionLineType[\"Bezier\"] = \"default\";\n ConnectionLineType[\"Straight\"] = \"straight\";\n ConnectionLineType[\"Step\"] = \"step\";\n ConnectionLineType[\"SmoothStep\"] = \"smoothstep\";\n ConnectionLineType[\"SimpleBezier\"] = \"simplebezier\";\n})(ConnectionLineType || (ConnectionLineType = {}));\nvar MarkerType;\n(function (MarkerType) {\n MarkerType[\"Arrow\"] = \"arrow\";\n MarkerType[\"ArrowClosed\"] = \"arrowclosed\";\n})(MarkerType || (MarkerType = {}));\n\nvar Position;\n(function (Position) {\n Position[\"Left\"] = \"left\";\n Position[\"Top\"] = \"top\";\n Position[\"Right\"] = \"right\";\n Position[\"Bottom\"] = \"bottom\";\n})(Position || (Position = {}));\n\nfunction getControl({ pos, x1, y1, x2, y2 }) {\n if (pos === Position.Left || pos === Position.Right) {\n return [0.5 * (x1 + x2), y1];\n }\n return [x1, 0.5 * (y1 + y2)];\n}\nfunction getSimpleBezierPath({ sourceX, sourceY, sourcePosition = Position.Bottom, targetX, targetY, targetPosition = Position.Top, }) {\n const [sourceControlX, sourceControlY] = getControl({\n pos: sourcePosition,\n x1: sourceX,\n y1: sourceY,\n x2: targetX,\n y2: targetY,\n });\n const [targetControlX, targetControlY] = getControl({\n pos: targetPosition,\n x1: targetX,\n y1: targetY,\n x2: sourceX,\n y2: sourceY,\n });\n const [labelX, labelY, offsetX, offsetY] = getBezierEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourceControlX,\n sourceControlY,\n targetControlX,\n targetControlY,\n });\n return [\n `M${sourceX},${sourceY} C${sourceControlX},${sourceControlY} ${targetControlX},${targetControlY} ${targetX},${targetY}`,\n labelX,\n labelY,\n offsetX,\n offsetY,\n ];\n}\nconst SimpleBezierEdge = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(({ sourceX, sourceY, targetX, targetY, sourcePosition = Position.Bottom, targetPosition = Position.Top, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, markerEnd, markerStart, interactionWidth, }) => {\n const [path, labelX, labelY] = getSimpleBezierPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n });\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(BaseEdge, { path: path, labelX: labelX, labelY: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, style: style, markerEnd: markerEnd, markerStart: markerStart, interactionWidth: interactionWidth }));\n});\nSimpleBezierEdge.displayName = 'SimpleBezierEdge';\n\nconst handleDirections = {\n [Position.Left]: { x: -1, y: 0 },\n [Position.Right]: { x: 1, y: 0 },\n [Position.Top]: { x: 0, y: -1 },\n [Position.Bottom]: { x: 0, y: 1 },\n};\nconst getDirection = ({ source, sourcePosition = Position.Bottom, target, }) => {\n if (sourcePosition === Position.Left || sourcePosition === Position.Right) {\n return source.x < target.x ? { x: 1, y: 0 } : { x: -1, y: 0 };\n }\n return source.y < target.y ? { x: 0, y: 1 } : { x: 0, y: -1 };\n};\nconst distance = (a, b) => Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2));\n// ith this function we try to mimic a orthogonal edge routing behaviour\n// It's not as good as a real orthogonal edge routing but it's faster and good enough as a default for step and smooth step edges\nfunction getPoints({ source, sourcePosition = Position.Bottom, target, targetPosition = Position.Top, center, offset, }) {\n const sourceDir = handleDirections[sourcePosition];\n const targetDir = handleDirections[targetPosition];\n const sourceGapped = { x: source.x + sourceDir.x * offset, y: source.y + sourceDir.y * offset };\n const targetGapped = { x: target.x + targetDir.x * offset, y: target.y + targetDir.y * offset };\n const dir = getDirection({\n source: sourceGapped,\n sourcePosition,\n target: targetGapped,\n });\n const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n const currDir = dir[dirAccessor];\n let points = [];\n let centerX, centerY;\n const sourceGapOffset = { x: 0, y: 0 };\n const targetGapOffset = { x: 0, y: 0 };\n const [defaultCenterX, defaultCenterY, defaultOffsetX, defaultOffsetY] = getEdgeCenter({\n sourceX: source.x,\n sourceY: source.y,\n targetX: target.x,\n targetY: target.y,\n });\n // opposite handle positions, default case\n if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) {\n centerX = center.x ?? defaultCenterX;\n centerY = center.y ?? defaultCenterY;\n // --->\n // |\n // >---\n const verticalSplit = [\n { x: centerX, y: sourceGapped.y },\n { x: centerX, y: targetGapped.y },\n ];\n // |\n // ---\n // |\n const horizontalSplit = [\n { x: sourceGapped.x, y: centerY },\n { x: targetGapped.x, y: centerY },\n ];\n if (sourceDir[dirAccessor] === currDir) {\n points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n }\n else {\n points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n }\n else {\n // sourceTarget means we take x from source and y from target, targetSource is the opposite\n const sourceTarget = [{ x: sourceGapped.x, y: targetGapped.y }];\n const targetSource = [{ x: targetGapped.x, y: sourceGapped.y }];\n // this handles edges with same handle positions\n if (dirAccessor === 'x') {\n points = sourceDir.x === currDir ? targetSource : sourceTarget;\n }\n else {\n points = sourceDir.y === currDir ? sourceTarget : targetSource;\n }\n if (sourcePosition === targetPosition) {\n const diff = Math.abs(source[dirAccessor] - target[dirAccessor]);\n // if an edge goes from right to right for example (sourcePosition === targetPosition) and the distance between source.x and target.x is less than the offset, the added point and the gapped source/target will overlap. This leads to a weird edge path. To avoid this we add a gapOffset to the source/target\n if (diff <= offset) {\n const gapOffset = Math.min(offset - 1, offset - diff);\n if (sourceDir[dirAccessor] === currDir) {\n sourceGapOffset[dirAccessor] = (sourceGapped[dirAccessor] > source[dirAccessor] ? -1 : 1) * gapOffset;\n }\n else {\n targetGapOffset[dirAccessor] = (targetGapped[dirAccessor] > target[dirAccessor] ? -1 : 1) * gapOffset;\n }\n }\n }\n // these are conditions for handling mixed handle positions like Right -> Bottom for example\n if (sourcePosition !== targetPosition) {\n const dirAccessorOpposite = dirAccessor === 'x' ? 'y' : 'x';\n const isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessorOpposite];\n const sourceGtTargetOppo = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n const sourceLtTargetOppo = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n const flipSourceTarget = (sourceDir[dirAccessor] === 1 && ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) ||\n (sourceDir[dirAccessor] !== 1 && ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo)));\n if (flipSourceTarget) {\n points = dirAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n const sourceGapPoint = { x: sourceGapped.x + sourceGapOffset.x, y: sourceGapped.y + sourceGapOffset.y };\n const targetGapPoint = { x: targetGapped.x + targetGapOffset.x, y: targetGapped.y + targetGapOffset.y };\n const maxXDistance = Math.max(Math.abs(sourceGapPoint.x - points[0].x), Math.abs(targetGapPoint.x - points[0].x));\n const maxYDistance = Math.max(Math.abs(sourceGapPoint.y - points[0].y), Math.abs(targetGapPoint.y - points[0].y));\n // we want to place the label on the longest segment of the edge\n if (maxXDistance >= maxYDistance) {\n centerX = (sourceGapPoint.x + targetGapPoint.x) / 2;\n centerY = points[0].y;\n }\n else {\n centerX = points[0].x;\n centerY = (sourceGapPoint.y + targetGapPoint.y) / 2;\n }\n }\n const pathPoints = [\n source,\n { x: sourceGapped.x + sourceGapOffset.x, y: sourceGapped.y + sourceGapOffset.y },\n ...points,\n { x: targetGapped.x + targetGapOffset.x, y: targetGapped.y + targetGapOffset.y },\n target,\n ];\n return [pathPoints, centerX, centerY, defaultOffsetX, defaultOffsetY];\n}\nfunction getBend(a, b, c, size) {\n const bendSize = Math.min(distance(a, b) / 2, distance(b, c) / 2, size);\n const { x, y } = b;\n // no bend\n if ((a.x === x && x === c.x) || (a.y === y && y === c.y)) {\n return `L${x} ${y}`;\n }\n // first segment is horizontal\n if (a.y === y) {\n const xDir = a.x < c.x ? -1 : 1;\n const yDir = a.y < c.y ? 1 : -1;\n return `L ${x + bendSize * xDir},${y}Q ${x},${y} ${x},${y + bendSize * yDir}`;\n }\n const xDir = a.x < c.x ? 1 : -1;\n const yDir = a.y < c.y ? -1 : 1;\n return `L ${x},${y + bendSize * yDir}Q ${x},${y} ${x + bendSize * xDir},${y}`;\n}\nfunction getSmoothStepPath({ sourceX, sourceY, sourcePosition = Position.Bottom, targetX, targetY, targetPosition = Position.Top, borderRadius = 5, centerX, centerY, offset = 20, }) {\n const [points, labelX, labelY, offsetX, offsetY] = getPoints({\n source: { x: sourceX, y: sourceY },\n sourcePosition,\n target: { x: targetX, y: targetY },\n targetPosition,\n center: { x: centerX, y: centerY },\n offset,\n });\n const path = points.reduce((res, p, i) => {\n let segment = '';\n if (i > 0 && i < points.length - 1) {\n segment = getBend(points[i - 1], p, points[i + 1], borderRadius);\n }\n else {\n segment = `${i === 0 ? 'M' : 'L'}${p.x} ${p.y}`;\n }\n res += segment;\n return res;\n }, '');\n return [path, labelX, labelY, offsetX, offsetY];\n}\nconst SmoothStepEdge = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(({ sourceX, sourceY, targetX, targetY, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, sourcePosition = Position.Bottom, targetPosition = Position.Top, markerEnd, markerStart, pathOptions, interactionWidth, }) => {\n const [path, labelX, labelY] = getSmoothStepPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n borderRadius: pathOptions?.borderRadius,\n offset: pathOptions?.offset,\n });\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(BaseEdge, { path: path, labelX: labelX, labelY: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, style: style, markerEnd: markerEnd, markerStart: markerStart, interactionWidth: interactionWidth }));\n});\nSmoothStepEdge.displayName = 'SmoothStepEdge';\n\nconst StepEdge = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)((props) => (react__WEBPACK_IMPORTED_MODULE_0__.createElement(SmoothStepEdge, { ...props, pathOptions: (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({ borderRadius: 0, offset: props.pathOptions?.offset }), [props.pathOptions?.offset]) })));\nStepEdge.displayName = 'StepEdge';\n\nfunction getStraightPath({ sourceX, sourceY, targetX, targetY, }) {\n const [labelX, labelY, offsetX, offsetY] = getEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY,\n });\n return [`M ${sourceX},${sourceY}L ${targetX},${targetY}`, labelX, labelY, offsetX, offsetY];\n}\nconst StraightEdge = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(({ sourceX, sourceY, targetX, targetY, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, markerEnd, markerStart, interactionWidth, }) => {\n const [path, labelX, labelY] = getStraightPath({ sourceX, sourceY, targetX, targetY });\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(BaseEdge, { path: path, labelX: labelX, labelY: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, style: style, markerEnd: markerEnd, markerStart: markerStart, interactionWidth: interactionWidth }));\n});\nStraightEdge.displayName = 'StraightEdge';\n\nfunction calculateControlOffset(distance, curvature) {\n if (distance >= 0) {\n return 0.5 * distance;\n }\n return curvature * 25 * Math.sqrt(-distance);\n}\nfunction getControlWithCurvature({ pos, x1, y1, x2, y2, c }) {\n switch (pos) {\n case Position.Left:\n return [x1 - calculateControlOffset(x1 - x2, c), y1];\n case Position.Right:\n return [x1 + calculateControlOffset(x2 - x1, c), y1];\n case Position.Top:\n return [x1, y1 - calculateControlOffset(y1 - y2, c)];\n case Position.Bottom:\n return [x1, y1 + calculateControlOffset(y2 - y1, c)];\n }\n}\nfunction getBezierPath({ sourceX, sourceY, sourcePosition = Position.Bottom, targetX, targetY, targetPosition = Position.Top, curvature = 0.25, }) {\n const [sourceControlX, sourceControlY] = getControlWithCurvature({\n pos: sourcePosition,\n x1: sourceX,\n y1: sourceY,\n x2: targetX,\n y2: targetY,\n c: curvature,\n });\n const [targetControlX, targetControlY] = getControlWithCurvature({\n pos: targetPosition,\n x1: targetX,\n y1: targetY,\n x2: sourceX,\n y2: sourceY,\n c: curvature,\n });\n const [labelX, labelY, offsetX, offsetY] = getBezierEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourceControlX,\n sourceControlY,\n targetControlX,\n targetControlY,\n });\n return [\n `M${sourceX},${sourceY} C${sourceControlX},${sourceControlY} ${targetControlX},${targetControlY} ${targetX},${targetY}`,\n labelX,\n labelY,\n offsetX,\n offsetY,\n ];\n}\nconst BezierEdge = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(({ sourceX, sourceY, targetX, targetY, sourcePosition = Position.Bottom, targetPosition = Position.Top, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, markerEnd, markerStart, pathOptions, interactionWidth, }) => {\n const [path, labelX, labelY] = getBezierPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n curvature: pathOptions?.curvature,\n });\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(BaseEdge, { path: path, labelX: labelX, labelY: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, style: style, markerEnd: markerEnd, markerStart: markerStart, interactionWidth: interactionWidth }));\n});\nBezierEdge.displayName = 'BezierEdge';\n\nconst NodeIdContext = (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);\nconst Provider = NodeIdContext.Provider;\nNodeIdContext.Consumer;\nconst useNodeId = () => {\n const nodeId = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(NodeIdContext);\n return nodeId;\n};\n\nconst isEdge = (element) => 'id' in element && 'source' in element && 'target' in element;\nconst isNode = (element) => 'id' in element && !('source' in element) && !('target' in element);\nconst getOutgoers = (node, nodes, edges) => {\n if (!isNode(node)) {\n return [];\n }\n const outgoerIds = edges.filter((e) => e.source === node.id).map((e) => e.target);\n return nodes.filter((n) => outgoerIds.includes(n.id));\n};\nconst getIncomers = (node, nodes, edges) => {\n if (!isNode(node)) {\n return [];\n }\n const incomersIds = edges.filter((e) => e.target === node.id).map((e) => e.source);\n return nodes.filter((n) => incomersIds.includes(n.id));\n};\nconst getEdgeId = ({ source, sourceHandle, target, targetHandle }) => `reactflow__edge-${source}${sourceHandle || ''}-${target}${targetHandle || ''}`;\nconst getMarkerId = (marker, rfId) => {\n if (typeof marker === 'undefined') {\n return '';\n }\n if (typeof marker === 'string') {\n return marker;\n }\n const idPrefix = rfId ? `${rfId}__` : '';\n return `${idPrefix}${Object.keys(marker)\n .sort()\n .map((key) => `${key}=${marker[key]}`)\n .join('&')}`;\n};\nconst connectionExists = (edge, edges) => {\n return edges.some((el) => el.source === edge.source &&\n el.target === edge.target &&\n (el.sourceHandle === edge.sourceHandle || (!el.sourceHandle && !edge.sourceHandle)) &&\n (el.targetHandle === edge.targetHandle || (!el.targetHandle && !edge.targetHandle)));\n};\nconst addEdge = (edgeParams, edges) => {\n if (!edgeParams.source || !edgeParams.target) {\n devWarn('006', errorMessages['error006']());\n return edges;\n }\n let edge;\n if (isEdge(edgeParams)) {\n edge = { ...edgeParams };\n }\n else {\n edge = {\n ...edgeParams,\n id: getEdgeId(edgeParams),\n };\n }\n if (connectionExists(edge, edges)) {\n return edges;\n }\n return edges.concat(edge);\n};\nconst reconnectEdge = (oldEdge, newConnection, edges, options = { shouldReplaceId: true }) => {\n const { id: oldEdgeId, ...rest } = oldEdge;\n if (!newConnection.source || !newConnection.target) {\n devWarn('006', errorMessages['error006']());\n return edges;\n }\n const foundEdge = edges.find((e) => e.id === oldEdgeId);\n if (!foundEdge) {\n devWarn('007', errorMessages['error007'](oldEdgeId));\n return edges;\n }\n // Remove old edge and create the new edge with parameters of old edge.\n const edge = {\n ...rest,\n id: options.shouldReplaceId ? getEdgeId(newConnection) : oldEdgeId,\n source: newConnection.source,\n target: newConnection.target,\n sourceHandle: newConnection.sourceHandle,\n targetHandle: newConnection.targetHandle,\n };\n return edges.filter((e) => e.id !== oldEdgeId).concat(edge);\n};\n/**\n *\n * @deprecated Use `reconnectEdge` instead.\n */\nconst updateEdge = (oldEdge, newConnection, edges, options = { shouldReplaceId: true }) => {\n console.warn('[DEPRECATED] `updateEdge` is deprecated. Instead use `reconnectEdge` https://reactflow.dev/api-reference/utils/reconnect-edge');\n return reconnectEdge(oldEdge, newConnection, edges, options);\n};\nconst pointToRendererPoint = ({ x, y }, [tx, ty, tScale], snapToGrid, [snapX, snapY]) => {\n const position = {\n x: (x - tx) / tScale,\n y: (y - ty) / tScale,\n };\n if (snapToGrid) {\n return {\n x: snapX * Math.round(position.x / snapX),\n y: snapY * Math.round(position.y / snapY),\n };\n }\n return position;\n};\nconst rendererPointToPoint = ({ x, y }, [tx, ty, tScale]) => {\n return {\n x: x * tScale + tx,\n y: y * tScale + ty,\n };\n};\nconst getNodePositionWithOrigin = (node, nodeOrigin = [0, 0]) => {\n if (!node) {\n return {\n x: 0,\n y: 0,\n positionAbsolute: {\n x: 0,\n y: 0,\n },\n };\n }\n const offsetX = (node.width ?? 0) * nodeOrigin[0];\n const offsetY = (node.height ?? 0) * nodeOrigin[1];\n const position = {\n x: node.position.x - offsetX,\n y: node.position.y - offsetY,\n };\n return {\n ...position,\n positionAbsolute: node.positionAbsolute\n ? {\n x: node.positionAbsolute.x - offsetX,\n y: node.positionAbsolute.y - offsetY,\n }\n : position,\n };\n};\nconst getNodesBounds = (nodes, nodeOrigin = [0, 0]) => {\n if (nodes.length === 0) {\n return { x: 0, y: 0, width: 0, height: 0 };\n }\n const box = nodes.reduce((currBox, node) => {\n const { x, y } = getNodePositionWithOrigin(node, nodeOrigin).positionAbsolute;\n return getBoundsOfBoxes(currBox, rectToBox({\n x,\n y,\n width: node.width || 0,\n height: node.height || 0,\n }));\n }, { x: Infinity, y: Infinity, x2: -Infinity, y2: -Infinity });\n return boxToRect(box);\n};\n// @deprecated Use `getNodesBounds`.\nconst getRectOfNodes = (nodes, nodeOrigin = [0, 0]) => {\n console.warn('[DEPRECATED] `getRectOfNodes` is deprecated. Instead use `getNodesBounds` https://reactflow.dev/api-reference/utils/get-nodes-bounds.');\n return getNodesBounds(nodes, nodeOrigin);\n};\nconst getNodesInside = (nodeInternals, rect, [tx, ty, tScale] = [0, 0, 1], partially = false, \n// set excludeNonSelectableNodes if you want to pay attention to the nodes \"selectable\" attribute\nexcludeNonSelectableNodes = false, nodeOrigin = [0, 0]) => {\n const paneRect = {\n x: (rect.x - tx) / tScale,\n y: (rect.y - ty) / tScale,\n width: rect.width / tScale,\n height: rect.height / tScale,\n };\n const visibleNodes = [];\n nodeInternals.forEach((node) => {\n const { width, height, selectable = true, hidden = false } = node;\n if ((excludeNonSelectableNodes && !selectable) || hidden) {\n return false;\n }\n const { positionAbsolute } = getNodePositionWithOrigin(node, nodeOrigin);\n const nodeRect = {\n x: positionAbsolute.x,\n y: positionAbsolute.y,\n width: width || 0,\n height: height || 0,\n };\n const overlappingArea = getOverlappingArea(paneRect, nodeRect);\n const notInitialized = typeof width === 'undefined' || typeof height === 'undefined' || width === null || height === null;\n const partiallyVisible = partially && overlappingArea > 0;\n const area = (width || 0) * (height || 0);\n const isVisible = notInitialized || partiallyVisible || overlappingArea >= area;\n if (isVisible || node.dragging) {\n visibleNodes.push(node);\n }\n });\n return visibleNodes;\n};\nconst getConnectedEdges = (nodes, edges) => {\n const nodeIds = nodes.map((node) => node.id);\n return edges.filter((edge) => nodeIds.includes(edge.source) || nodeIds.includes(edge.target));\n};\n// @deprecated Use `getViewportForBounds`.\nconst getTransformForBounds = (bounds, width, height, minZoom, maxZoom, padding = 0.1) => {\n const { x, y, zoom } = getViewportForBounds(bounds, width, height, minZoom, maxZoom, padding);\n console.warn('[DEPRECATED] `getTransformForBounds` is deprecated. Instead use `getViewportForBounds`. Beware that the return value is type Viewport (`{ x: number, y: number, zoom: number }`) instead of Transform (`[number, number, number]`). https://reactflow.dev/api-reference/utils/get-viewport-for-bounds');\n return [x, y, zoom];\n};\nconst getViewportForBounds = (bounds, width, height, minZoom, maxZoom, padding = 0.1) => {\n const xZoom = width / (bounds.width * (1 + padding));\n const yZoom = height / (bounds.height * (1 + padding));\n const zoom = Math.min(xZoom, yZoom);\n const clampedZoom = clamp(zoom, minZoom, maxZoom);\n const boundsCenterX = bounds.x + bounds.width / 2;\n const boundsCenterY = bounds.y + bounds.height / 2;\n const x = width / 2 - boundsCenterX * clampedZoom;\n const y = height / 2 - boundsCenterY * clampedZoom;\n return { x, y, zoom: clampedZoom };\n};\nconst getD3Transition = (selection, duration = 0) => {\n return selection.transition().duration(duration);\n};\n\n// this functions collects all handles and adds an absolute position\n// so that we can later find the closest handle to the mouse position\nfunction getHandles(node, handleBounds, type, currentHandle) {\n return (handleBounds[type] || []).reduce((res, h) => {\n if (`${node.id}-${h.id}-${type}` !== currentHandle) {\n res.push({\n id: h.id || null,\n type,\n nodeId: node.id,\n x: (node.positionAbsolute?.x ?? 0) + h.x + h.width / 2,\n y: (node.positionAbsolute?.y ?? 0) + h.y + h.height / 2,\n });\n }\n return res;\n }, []);\n}\nfunction getClosestHandle(event, doc, pos, connectionRadius, handles, validator) {\n // we always want to prioritize the handle below the mouse cursor over the closest distance handle,\n // because it could be that the center of another handle is closer to the mouse pointer than the handle below the cursor\n const { x, y } = getEventPosition(event);\n const domNodes = doc.elementsFromPoint(x, y);\n const handleBelow = domNodes.find((el) => el.classList.contains('react-flow__handle'));\n if (handleBelow) {\n const handleNodeId = handleBelow.getAttribute('data-nodeid');\n if (handleNodeId) {\n const handleType = getHandleType(undefined, handleBelow);\n const handleId = handleBelow.getAttribute('data-handleid');\n const validHandleResult = validator({ nodeId: handleNodeId, id: handleId, type: handleType });\n if (validHandleResult) {\n const handle = handles.find((h) => h.nodeId === handleNodeId && h.type === handleType && h.id === handleId);\n return {\n handle: {\n id: handleId,\n type: handleType,\n nodeId: handleNodeId,\n x: handle?.x || pos.x,\n y: handle?.y || pos.y,\n },\n validHandleResult,\n };\n }\n }\n }\n // if we couldn't find a handle below the mouse cursor we look for the closest distance based on the connectionRadius\n let closestHandles = [];\n let minDistance = Infinity;\n handles.forEach((handle) => {\n const distance = Math.sqrt((handle.x - pos.x) ** 2 + (handle.y - pos.y) ** 2);\n if (distance <= connectionRadius) {\n const validHandleResult = validator(handle);\n if (distance <= minDistance) {\n if (distance < minDistance) {\n closestHandles = [{ handle, validHandleResult }];\n }\n else if (distance === minDistance) {\n // when multiple handles are on the same distance we collect all of them\n closestHandles.push({\n handle,\n validHandleResult,\n });\n }\n minDistance = distance;\n }\n }\n });\n if (!closestHandles.length) {\n return { handle: null, validHandleResult: defaultResult() };\n }\n if (closestHandles.length === 1) {\n return closestHandles[0];\n }\n const hasValidHandle = closestHandles.some(({ validHandleResult }) => validHandleResult.isValid);\n const hasTargetHandle = closestHandles.some(({ handle }) => handle.type === 'target');\n // if multiple handles are layouted on top of each other we prefer the one with type = target and the one that is valid\n return (closestHandles.find(({ handle, validHandleResult }) => hasTargetHandle ? handle.type === 'target' : (hasValidHandle ? validHandleResult.isValid : true)) || closestHandles[0]);\n}\nconst nullConnection = { source: null, target: null, sourceHandle: null, targetHandle: null };\nconst defaultResult = () => ({\n handleDomNode: null,\n isValid: false,\n connection: nullConnection,\n endHandle: null,\n});\n// checks if and returns connection in fom of an object { source: 123, target: 312 }\nfunction isValidHandle(handle, connectionMode, fromNodeId, fromHandleId, fromType, isValidConnection, doc) {\n const isTarget = fromType === 'target';\n const handleToCheck = doc.querySelector(`.react-flow__handle[data-id=\"${handle?.nodeId}-${handle?.id}-${handle?.type}\"]`);\n const result = {\n ...defaultResult(),\n handleDomNode: handleToCheck,\n };\n if (handleToCheck) {\n const handleType = getHandleType(undefined, handleToCheck);\n const handleNodeId = handleToCheck.getAttribute('data-nodeid');\n const handleId = handleToCheck.getAttribute('data-handleid');\n const connectable = handleToCheck.classList.contains('connectable');\n const connectableEnd = handleToCheck.classList.contains('connectableend');\n const connection = {\n source: isTarget ? handleNodeId : fromNodeId,\n sourceHandle: isTarget ? handleId : fromHandleId,\n target: isTarget ? fromNodeId : handleNodeId,\n targetHandle: isTarget ? fromHandleId : handleId,\n };\n result.connection = connection;\n const isConnectable = connectable && connectableEnd;\n // in strict mode we don't allow target to target or source to source connections\n const isValid = isConnectable &&\n (connectionMode === ConnectionMode.Strict\n ? (isTarget && handleType === 'source') || (!isTarget && handleType === 'target')\n : handleNodeId !== fromNodeId || handleId !== fromHandleId);\n if (isValid) {\n result.endHandle = {\n nodeId: handleNodeId,\n handleId,\n type: handleType,\n };\n result.isValid = isValidConnection(connection);\n }\n }\n return result;\n}\nfunction getHandleLookup({ nodes, nodeId, handleId, handleType }) {\n return nodes.reduce((res, node) => {\n if (node[internalsSymbol]) {\n const { handleBounds } = node[internalsSymbol];\n let sourceHandles = [];\n let targetHandles = [];\n if (handleBounds) {\n sourceHandles = getHandles(node, handleBounds, 'source', `${nodeId}-${handleId}-${handleType}`);\n targetHandles = getHandles(node, handleBounds, 'target', `${nodeId}-${handleId}-${handleType}`);\n }\n res.push(...sourceHandles, ...targetHandles);\n }\n return res;\n }, []);\n}\nfunction getHandleType(edgeUpdaterType, handleDomNode) {\n if (edgeUpdaterType) {\n return edgeUpdaterType;\n }\n else if (handleDomNode?.classList.contains('target')) {\n return 'target';\n }\n else if (handleDomNode?.classList.contains('source')) {\n return 'source';\n }\n return null;\n}\nfunction resetRecentHandle(handleDomNode) {\n handleDomNode?.classList.remove('valid', 'connecting', 'react-flow__handle-valid', 'react-flow__handle-connecting');\n}\nfunction getConnectionStatus(isInsideConnectionRadius, isHandleValid) {\n let connectionStatus = null;\n if (isHandleValid) {\n connectionStatus = 'valid';\n }\n else if (isInsideConnectionRadius && !isHandleValid) {\n connectionStatus = 'invalid';\n }\n return connectionStatus;\n}\n\nfunction handlePointerDown({ event, handleId, nodeId, onConnect, isTarget, getState, setState, isValidConnection, edgeUpdaterType, onReconnectEnd, }) {\n // when react-flow is used inside a shadow root we can't use document\n const doc = getHostForElement(event.target);\n const { connectionMode, domNode, autoPanOnConnect, connectionRadius, onConnectStart, panBy, getNodes, cancelConnection, } = getState();\n let autoPanId = 0;\n let closestHandle;\n const { x, y } = getEventPosition(event);\n const clickedHandle = doc?.elementFromPoint(x, y);\n const handleType = getHandleType(edgeUpdaterType, clickedHandle);\n const containerBounds = domNode?.getBoundingClientRect();\n if (!containerBounds || !handleType) {\n return;\n }\n let prevActiveHandle;\n let connectionPosition = getEventPosition(event, containerBounds);\n let autoPanStarted = false;\n let connection = null;\n let isValid = false;\n let handleDomNode = null;\n const handleLookup = getHandleLookup({\n nodes: getNodes(),\n nodeId,\n handleId,\n handleType,\n });\n // when the user is moving the mouse close to the edge of the canvas while connecting we move the canvas\n const autoPan = () => {\n if (!autoPanOnConnect) {\n return;\n }\n const [xMovement, yMovement] = calcAutoPan(connectionPosition, containerBounds);\n panBy({ x: xMovement, y: yMovement });\n autoPanId = requestAnimationFrame(autoPan);\n };\n setState({\n connectionPosition,\n connectionStatus: null,\n // connectionNodeId etc will be removed in the next major in favor of connectionStartHandle\n connectionNodeId: nodeId,\n connectionHandleId: handleId,\n connectionHandleType: handleType,\n connectionStartHandle: {\n nodeId,\n handleId,\n type: handleType,\n },\n connectionEndHandle: null,\n });\n onConnectStart?.(event, { nodeId, handleId, handleType });\n function onPointerMove(event) {\n const { transform } = getState();\n connectionPosition = getEventPosition(event, containerBounds);\n const { handle, validHandleResult } = getClosestHandle(event, doc, pointToRendererPoint(connectionPosition, transform, false, [1, 1]), connectionRadius, handleLookup, (handle) => isValidHandle(handle, connectionMode, nodeId, handleId, isTarget ? 'target' : 'source', isValidConnection, doc));\n closestHandle = handle;\n if (!autoPanStarted) {\n autoPan();\n autoPanStarted = true;\n }\n handleDomNode = validHandleResult.handleDomNode;\n connection = validHandleResult.connection;\n isValid = validHandleResult.isValid;\n setState({\n connectionPosition: closestHandle && isValid\n ? rendererPointToPoint({\n x: closestHandle.x,\n y: closestHandle.y,\n }, transform)\n : connectionPosition,\n connectionStatus: getConnectionStatus(!!closestHandle, isValid),\n connectionEndHandle: validHandleResult.endHandle,\n });\n if (!closestHandle && !isValid && !handleDomNode) {\n return resetRecentHandle(prevActiveHandle);\n }\n if (connection.source !== connection.target && handleDomNode) {\n resetRecentHandle(prevActiveHandle);\n prevActiveHandle = handleDomNode;\n // @todo: remove the old class names \"react-flow__handle-\" in the next major version\n handleDomNode.classList.add('connecting', 'react-flow__handle-connecting');\n handleDomNode.classList.toggle('valid', isValid);\n handleDomNode.classList.toggle('react-flow__handle-valid', isValid);\n }\n }\n function onPointerUp(event) {\n if ((closestHandle || handleDomNode) && connection && isValid) {\n onConnect?.(connection);\n }\n // it's important to get a fresh reference from the store here\n // in order to get the latest state of onConnectEnd\n getState().onConnectEnd?.(event);\n if (edgeUpdaterType) {\n onReconnectEnd?.(event);\n }\n resetRecentHandle(prevActiveHandle);\n cancelConnection();\n cancelAnimationFrame(autoPanId);\n autoPanStarted = false;\n isValid = false;\n connection = null;\n handleDomNode = null;\n doc.removeEventListener('mousemove', onPointerMove);\n doc.removeEventListener('mouseup', onPointerUp);\n doc.removeEventListener('touchmove', onPointerMove);\n doc.removeEventListener('touchend', onPointerUp);\n }\n doc.addEventListener('mousemove', onPointerMove);\n doc.addEventListener('mouseup', onPointerUp);\n doc.addEventListener('touchmove', onPointerMove);\n doc.addEventListener('touchend', onPointerUp);\n}\n\nconst alwaysValid = () => true;\nconst selector$f = (s) => ({\n connectionStartHandle: s.connectionStartHandle,\n connectOnClick: s.connectOnClick,\n noPanClassName: s.noPanClassName,\n});\nconst connectingSelector = (nodeId, handleId, type) => (state) => {\n const { connectionStartHandle: startHandle, connectionEndHandle: endHandle, connectionClickStartHandle: clickHandle, } = state;\n return {\n connecting: (startHandle?.nodeId === nodeId && startHandle?.handleId === handleId && startHandle?.type === type) ||\n (endHandle?.nodeId === nodeId && endHandle?.handleId === handleId && endHandle?.type === type),\n clickConnecting: clickHandle?.nodeId === nodeId && clickHandle?.handleId === handleId && clickHandle?.type === type,\n };\n};\nconst Handle = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(({ type = 'source', position = Position.Top, isValidConnection, isConnectable = true, isConnectableStart = true, isConnectableEnd = true, id, onConnect, children, className, onMouseDown, onTouchStart, ...rest }, ref) => {\n const handleId = id || null;\n const isTarget = type === 'target';\n const store = useStoreApi();\n const nodeId = useNodeId();\n const { connectOnClick, noPanClassName } = useStore(selector$f, zustand_shallow__WEBPACK_IMPORTED_MODULE_5__.shallow);\n const { connecting, clickConnecting } = useStore(connectingSelector(nodeId, handleId, type), zustand_shallow__WEBPACK_IMPORTED_MODULE_5__.shallow);\n if (!nodeId) {\n store.getState().onError?.('010', errorMessages['error010']());\n }\n const onConnectExtended = (params) => {\n const { defaultEdgeOptions, onConnect: onConnectAction, hasDefaultEdges } = store.getState();\n const edgeParams = {\n ...defaultEdgeOptions,\n ...params,\n };\n if (hasDefaultEdges) {\n const { edges, setEdges } = store.getState();\n setEdges(addEdge(edgeParams, edges));\n }\n onConnectAction?.(edgeParams);\n onConnect?.(edgeParams);\n };\n const onPointerDown = (event) => {\n if (!nodeId) {\n return;\n }\n const isMouseTriggered = isMouseEvent(event);\n if (isConnectableStart && ((isMouseTriggered && event.button === 0) || !isMouseTriggered)) {\n handlePointerDown({\n event,\n handleId,\n nodeId,\n onConnect: onConnectExtended,\n isTarget,\n getState: store.getState,\n setState: store.setState,\n isValidConnection: isValidConnection || store.getState().isValidConnection || alwaysValid,\n });\n }\n if (isMouseTriggered) {\n onMouseDown?.(event);\n }\n else {\n onTouchStart?.(event);\n }\n };\n const onClick = (event) => {\n const { onClickConnectStart, onClickConnectEnd, connectionClickStartHandle, connectionMode, isValidConnection: isValidConnectionStore, } = store.getState();\n if (!nodeId || (!connectionClickStartHandle && !isConnectableStart)) {\n return;\n }\n if (!connectionClickStartHandle) {\n onClickConnectStart?.(event, { nodeId, handleId, handleType: type });\n store.setState({ connectionClickStartHandle: { nodeId, type, handleId } });\n return;\n }\n const doc = getHostForElement(event.target);\n const isValidConnectionHandler = isValidConnection || isValidConnectionStore || alwaysValid;\n const { connection, isValid } = isValidHandle({\n nodeId,\n id: handleId,\n type,\n }, connectionMode, connectionClickStartHandle.nodeId, connectionClickStartHandle.handleId || null, connectionClickStartHandle.type, isValidConnectionHandler, doc);\n if (isValid) {\n onConnectExtended(connection);\n }\n onClickConnectEnd?.(event);\n store.setState({ connectionClickStartHandle: null });\n };\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", { \"data-handleid\": handleId, \"data-nodeid\": nodeId, \"data-handlepos\": position, \"data-id\": `${nodeId}-${handleId}-${type}`, className: (0,classcat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])([\n 'react-flow__handle',\n `react-flow__handle-${position}`,\n 'nodrag',\n noPanClassName,\n className,\n {\n source: !isTarget,\n target: isTarget,\n connectable: isConnectable,\n connectablestart: isConnectableStart,\n connectableend: isConnectableEnd,\n connecting: clickConnecting,\n // this class is used to style the handle when the user is connecting\n connectionindicator: isConnectable && ((isConnectableStart && !connecting) || (isConnectableEnd && connecting)),\n },\n ]), onMouseDown: onPointerDown, onTouchStart: onPointerDown, onClick: connectOnClick ? onClick : undefined, ref: ref, ...rest }, children));\n});\nHandle.displayName = 'Handle';\nvar Handle$1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(Handle);\n\nconst DefaultNode = ({ data, isConnectable, targetPosition = Position.Top, sourcePosition = Position.Bottom, }) => {\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null,\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(Handle$1, { type: \"target\", position: targetPosition, isConnectable: isConnectable }),\n data?.label,\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(Handle$1, { type: \"source\", position: sourcePosition, isConnectable: isConnectable })));\n};\nDefaultNode.displayName = 'DefaultNode';\nvar DefaultNode$1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(DefaultNode);\n\nconst InputNode = ({ data, isConnectable, sourcePosition = Position.Bottom }) => (react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null,\n data?.label,\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(Handle$1, { type: \"source\", position: sourcePosition, isConnectable: isConnectable })));\nInputNode.displayName = 'InputNode';\nvar InputNode$1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(InputNode);\n\nconst OutputNode = ({ data, isConnectable, targetPosition = Position.Top }) => (react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null,\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(Handle$1, { type: \"target\", position: targetPosition, isConnectable: isConnectable }),\n data?.label));\nOutputNode.displayName = 'OutputNode';\nvar OutputNode$1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(OutputNode);\n\nconst GroupNode = () => null;\nGroupNode.displayName = 'GroupNode';\n\nconst selector$e = (s) => ({\n selectedNodes: s.getNodes().filter((n) => n.selected),\n selectedEdges: s.edges.filter((e) => e.selected).map((e) => ({ ...e })),\n});\nconst selectId = (obj) => obj.id;\nfunction areEqual(a, b) {\n return ((0,zustand_shallow__WEBPACK_IMPORTED_MODULE_5__.shallow)(a.selectedNodes.map(selectId), b.selectedNodes.map(selectId)) &&\n (0,zustand_shallow__WEBPACK_IMPORTED_MODULE_5__.shallow)(a.selectedEdges.map(selectId), b.selectedEdges.map(selectId)));\n}\n// This is just a helper component for calling the onSelectionChange listener.\n// @TODO: Now that we have the onNodesChange and on EdgesChange listeners, do we still need this component?\nconst SelectionListener = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(({ onSelectionChange }) => {\n const store = useStoreApi();\n const { selectedNodes, selectedEdges } = useStore(selector$e, areEqual);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const params = { nodes: selectedNodes, edges: selectedEdges };\n onSelectionChange?.(params);\n store.getState().onSelectionChange.forEach((fn) => fn(params));\n }, [selectedNodes, selectedEdges, onSelectionChange]);\n return null;\n});\nSelectionListener.displayName = 'SelectionListener';\nconst changeSelector = (s) => !!s.onSelectionChange;\nfunction Wrapper$1({ onSelectionChange }) {\n const storeHasSelectionChange = useStore(changeSelector);\n if (onSelectionChange || storeHasSelectionChange) {\n return react__WEBPACK_IMPORTED_MODULE_0__.createElement(SelectionListener, { onSelectionChange: onSelectionChange });\n }\n return null;\n}\n\nconst selector$d = (s) => ({\n setNodes: s.setNodes,\n setEdges: s.setEdges,\n setDefaultNodesAndEdges: s.setDefaultNodesAndEdges,\n setMinZoom: s.setMinZoom,\n setMaxZoom: s.setMaxZoom,\n setTranslateExtent: s.setTranslateExtent,\n setNodeExtent: s.setNodeExtent,\n reset: s.reset,\n});\nfunction useStoreUpdater(value, setStoreState) {\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (typeof value !== 'undefined') {\n setStoreState(value);\n }\n }, [value]);\n}\n// updates with values in store that don't have a dedicated setter function\nfunction useDirectStoreUpdater(key, value, setState) {\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (typeof value !== 'undefined') {\n setState({ [key]: value });\n }\n }, [value]);\n}\nconst StoreUpdater = ({ nodes, edges, defaultNodes, defaultEdges, onConnect, onConnectStart, onConnectEnd, onClickConnectStart, onClickConnectEnd, nodesDraggable, nodesConnectable, nodesFocusable, edgesFocusable, edgesUpdatable, elevateNodesOnSelect, minZoom, maxZoom, nodeExtent, onNodesChange, onEdgesChange, elementsSelectable, connectionMode, snapGrid, snapToGrid, translateExtent, connectOnClick, defaultEdgeOptions, fitView, fitViewOptions, onNodesDelete, onEdgesDelete, onNodeDrag, onNodeDragStart, onNodeDragStop, onSelectionDrag, onSelectionDragStart, onSelectionDragStop, noPanClassName, nodeOrigin, rfId, autoPanOnConnect, autoPanOnNodeDrag, onError, connectionRadius, isValidConnection, nodeDragThreshold, }) => {\n const { setNodes, setEdges, setDefaultNodesAndEdges, setMinZoom, setMaxZoom, setTranslateExtent, setNodeExtent, reset, } = useStore(selector$d, zustand_shallow__WEBPACK_IMPORTED_MODULE_5__.shallow);\n const store = useStoreApi();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const edgesWithDefaults = defaultEdges?.map((e) => ({ ...e, ...defaultEdgeOptions }));\n setDefaultNodesAndEdges(defaultNodes, edgesWithDefaults);\n return () => {\n reset();\n };\n }, []);\n useDirectStoreUpdater('defaultEdgeOptions', defaultEdgeOptions, store.setState);\n useDirectStoreUpdater('connectionMode', connectionMode, store.setState);\n useDirectStoreUpdater('onConnect', onConnect, store.setState);\n useDirectStoreUpdater('onConnectStart', onConnectStart, store.setState);\n useDirectStoreUpdater('onConnectEnd', onConnectEnd, store.setState);\n useDirectStoreUpdater('onClickConnectStart', onClickConnectStart, store.setState);\n useDirectStoreUpdater('onClickConnectEnd', onClickConnectEnd, store.setState);\n useDirectStoreUpdater('nodesDraggable', nodesDraggable, store.setState);\n useDirectStoreUpdater('nodesConnectable', nodesConnectable, store.setState);\n useDirectStoreUpdater('nodesFocusable', nodesFocusable, store.setState);\n useDirectStoreUpdater('edgesFocusable', edgesFocusable, store.setState);\n useDirectStoreUpdater('edgesUpdatable', edgesUpdatable, store.setState);\n useDirectStoreUpdater('elementsSelectable', elementsSelectable, store.setState);\n useDirectStoreUpdater('elevateNodesOnSelect', elevateNodesOnSelect, store.setState);\n useDirectStoreUpdater('snapToGrid', snapToGrid, store.setState);\n useDirectStoreUpdater('snapGrid', snapGrid, store.setState);\n useDirectStoreUpdater('onNodesChange', onNodesChange, store.setState);\n useDirectStoreUpdater('onEdgesChange', onEdgesChange, store.setState);\n useDirectStoreUpdater('connectOnClick', connectOnClick, store.setState);\n useDirectStoreUpdater('fitViewOnInit', fitView, store.setState);\n useDirectStoreUpdater('fitViewOnInitOptions', fitViewOptions, store.setState);\n useDirectStoreUpdater('onNodesDelete', onNodesDelete, store.setState);\n useDirectStoreUpdater('onEdgesDelete', onEdgesDelete, store.setState);\n useDirectStoreUpdater('onNodeDrag', onNodeDrag, store.setState);\n useDirectStoreUpdater('onNodeDragStart', onNodeDragStart, store.setState);\n useDirectStoreUpdater('onNodeDragStop', onNodeDragStop, store.setState);\n useDirectStoreUpdater('onSelectionDrag', onSelectionDrag, store.setState);\n useDirectStoreUpdater('onSelectionDragStart', onSelectionDragStart, store.setState);\n useDirectStoreUpdater('onSelectionDragStop', onSelectionDragStop, store.setState);\n useDirectStoreUpdater('noPanClassName', noPanClassName, store.setState);\n useDirectStoreUpdater('nodeOrigin', nodeOrigin, store.setState);\n useDirectStoreUpdater('rfId', rfId, store.setState);\n useDirectStoreUpdater('autoPanOnConnect', autoPanOnConnect, store.setState);\n useDirectStoreUpdater('autoPanOnNodeDrag', autoPanOnNodeDrag, store.setState);\n useDirectStoreUpdater('onError', onError, store.setState);\n useDirectStoreUpdater('connectionRadius', connectionRadius, store.setState);\n useDirectStoreUpdater('isValidConnection', isValidConnection, store.setState);\n useDirectStoreUpdater('nodeDragThreshold', nodeDragThreshold, store.setState);\n useStoreUpdater(nodes, setNodes);\n useStoreUpdater(edges, setEdges);\n useStoreUpdater(minZoom, setMinZoom);\n useStoreUpdater(maxZoom, setMaxZoom);\n useStoreUpdater(translateExtent, setTranslateExtent);\n useStoreUpdater(nodeExtent, setNodeExtent);\n return null;\n};\n\nconst style = { display: 'none' };\nconst ariaLiveStyle = {\n position: 'absolute',\n width: 1,\n height: 1,\n margin: -1,\n border: 0,\n padding: 0,\n overflow: 'hidden',\n clip: 'rect(0px, 0px, 0px, 0px)',\n clipPath: 'inset(100%)',\n};\nconst ARIA_NODE_DESC_KEY = 'react-flow__node-desc';\nconst ARIA_EDGE_DESC_KEY = 'react-flow__edge-desc';\nconst ARIA_LIVE_MESSAGE = 'react-flow__aria-live';\nconst selector$c = (s) => s.ariaLiveMessage;\nfunction AriaLiveMessage({ rfId }) {\n const ariaLiveMessage = useStore(selector$c);\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", { id: `${ARIA_LIVE_MESSAGE}-${rfId}`, \"aria-live\": \"assertive\", \"aria-atomic\": \"true\", style: ariaLiveStyle }, ariaLiveMessage));\n}\nfunction A11yDescriptions({ rfId, disableKeyboardA11y }) {\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null,\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", { id: `${ARIA_NODE_DESC_KEY}-${rfId}`, style: style },\n \"Press enter or space to select a node.\",\n !disableKeyboardA11y && 'You can then use the arrow keys to move the node around.',\n \" Press delete to remove it and escape to cancel.\",\n ' '),\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", { id: `${ARIA_EDGE_DESC_KEY}-${rfId}`, style: style }, \"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.\"),\n !disableKeyboardA11y && react__WEBPACK_IMPORTED_MODULE_0__.createElement(AriaLiveMessage, { rfId: rfId })));\n}\n\n// the keycode can be a string 'a' or an array of strings ['a', 'a+d']\n// a string means a single key 'a' or a combination when '+' is used 'a+d'\n// an array means different possibilities. Explainer: ['a', 'd+s'] here the\n// user can use the single key 'a' or the combination 'd' + 's'\nvar useKeyPress = (keyCode = null, options = { actInsideInputWithModifier: true }) => {\n const [keyPressed, setKeyPressed] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n // we need to remember if a modifier key is pressed in order to track it\n const modifierPressed = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n // we need to remember the pressed keys in order to support combinations\n const pressedKeys = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(new Set([]));\n // keyCodes = array with single keys [['a']] or key combinations [['a', 's']]\n // keysToWatch = array with all keys flattened ['a', 'd', 'ShiftLeft']\n // used to check if we store event.code or event.key. When the code is in the list of keysToWatch\n // we use the code otherwise the key. Explainer: When you press the left \"command\" key, the code is \"MetaLeft\"\n // and the key is \"Meta\". We want users to be able to pass keys and codes so we assume that the key is meant when\n // we can't find it in the list of keysToWatch.\n const [keyCodes, keysToWatch] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n if (keyCode !== null) {\n const keyCodeArr = Array.isArray(keyCode) ? keyCode : [keyCode];\n const keys = keyCodeArr.filter((kc) => typeof kc === 'string').map((kc) => kc.split('+'));\n const keysFlat = keys.reduce((res, item) => res.concat(...item), []);\n return [keys, keysFlat];\n }\n return [[], []];\n }, [keyCode]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const doc = typeof document !== 'undefined' ? document : null;\n const target = options?.target || doc;\n if (keyCode !== null) {\n const downHandler = (event) => {\n modifierPressed.current = event.ctrlKey || event.metaKey || event.shiftKey;\n const preventAction = (!modifierPressed.current || (modifierPressed.current && !options.actInsideInputWithModifier)) &&\n isInputDOMNode(event);\n if (preventAction) {\n return false;\n }\n const keyOrCode = useKeyOrCode(event.code, keysToWatch);\n pressedKeys.current.add(event[keyOrCode]);\n if (isMatchingKey(keyCodes, pressedKeys.current, false)) {\n event.preventDefault();\n setKeyPressed(true);\n }\n };\n const upHandler = (event) => {\n const preventAction = (!modifierPressed.current || (modifierPressed.current && !options.actInsideInputWithModifier)) &&\n isInputDOMNode(event);\n if (preventAction) {\n return false;\n }\n const keyOrCode = useKeyOrCode(event.code, keysToWatch);\n if (isMatchingKey(keyCodes, pressedKeys.current, true)) {\n setKeyPressed(false);\n pressedKeys.current.clear();\n }\n else {\n pressedKeys.current.delete(event[keyOrCode]);\n }\n // fix for Mac: when cmd key is pressed, keyup is not triggered for any other key, see: https://stackoverflow.com/questions/27380018/when-cmd-key-is-kept-pressed-keyup-is-not-triggered-for-any-other-key\n if (event.key === 'Meta') {\n pressedKeys.current.clear();\n }\n modifierPressed.current = false;\n };\n const resetHandler = () => {\n pressedKeys.current.clear();\n setKeyPressed(false);\n };\n target?.addEventListener('keydown', downHandler);\n target?.addEventListener('keyup', upHandler);\n window.addEventListener('blur', resetHandler);\n return () => {\n target?.removeEventListener('keydown', downHandler);\n target?.removeEventListener('keyup', upHandler);\n window.removeEventListener('blur', resetHandler);\n };\n }\n }, [keyCode, setKeyPressed]);\n return keyPressed;\n};\n// utils\nfunction isMatchingKey(keyCodes, pressedKeys, isUp) {\n return (keyCodes\n // we only want to compare same sizes of keyCode definitions\n // and pressed keys. When the user specified 'Meta' as a key somewhere\n // this would also be truthy without this filter when user presses 'Meta' + 'r'\n .filter((keys) => isUp || keys.length === pressedKeys.size)\n // since we want to support multiple possibilities only one of the\n // combinations need to be part of the pressed keys\n .some((keys) => keys.every((k) => pressedKeys.has(k))));\n}\nfunction useKeyOrCode(eventCode, keysToWatch) {\n return keysToWatch.includes(eventCode) ? 'code' : 'key';\n}\n\nfunction calculateXYZPosition(node, nodeInternals, result, nodeOrigin) {\n const parentId = node.parentNode || node.parentId;\n if (!parentId) {\n return result;\n }\n const parentNode = nodeInternals.get(parentId);\n const parentNodePosition = getNodePositionWithOrigin(parentNode, nodeOrigin);\n return calculateXYZPosition(parentNode, nodeInternals, {\n x: (result.x ?? 0) + parentNodePosition.x,\n y: (result.y ?? 0) + parentNodePosition.y,\n z: (parentNode[internalsSymbol]?.z ?? 0) > (result.z ?? 0) ? parentNode[internalsSymbol]?.z ?? 0 : result.z ?? 0,\n }, nodeOrigin);\n}\nfunction updateAbsoluteNodePositions(nodeInternals, nodeOrigin, parentNodes) {\n nodeInternals.forEach((node) => {\n const parentId = node.parentNode || node.parentId;\n if (parentId && !nodeInternals.has(parentId)) {\n throw new Error(`Parent node ${parentId} not found`);\n }\n if (parentId || parentNodes?.[node.id]) {\n const { x, y, z } = calculateXYZPosition(node, nodeInternals, {\n ...node.position,\n z: node[internalsSymbol]?.z ?? 0,\n }, nodeOrigin);\n node.positionAbsolute = {\n x,\n y,\n };\n node[internalsSymbol].z = z;\n if (parentNodes?.[node.id]) {\n node[internalsSymbol].isParent = true;\n }\n }\n });\n}\nfunction createNodeInternals(nodes, nodeInternals, nodeOrigin, elevateNodesOnSelect) {\n const nextNodeInternals = new Map();\n const parentNodes = {};\n const selectedNodeZ = elevateNodesOnSelect ? 1000 : 0;\n nodes.forEach((node) => {\n const z = (isNumeric(node.zIndex) ? node.zIndex : 0) + (node.selected ? selectedNodeZ : 0);\n const currInternals = nodeInternals.get(node.id);\n const internals = {\n ...node,\n positionAbsolute: {\n x: node.position.x,\n y: node.position.y,\n },\n };\n const parentId = node.parentNode || node.parentId;\n if (parentId) {\n parentNodes[parentId] = true;\n }\n const resetHandleBounds = currInternals?.type && currInternals?.type !== node.type;\n Object.defineProperty(internals, internalsSymbol, {\n enumerable: false,\n value: {\n handleBounds: resetHandleBounds ? undefined : currInternals?.[internalsSymbol]?.handleBounds,\n z,\n },\n });\n nextNodeInternals.set(node.id, internals);\n });\n updateAbsoluteNodePositions(nextNodeInternals, nodeOrigin, parentNodes);\n return nextNodeInternals;\n}\nfunction fitView(get, options = {}) {\n const { getNodes, width, height, minZoom, maxZoom, d3Zoom, d3Selection, fitViewOnInitDone, fitViewOnInit, nodeOrigin, } = get();\n const isInitialFitView = options.initial && !fitViewOnInitDone && fitViewOnInit;\n const d3initialized = d3Zoom && d3Selection;\n if (d3initialized && (isInitialFitView || !options.initial)) {\n const nodes = getNodes().filter((n) => {\n const isVisible = options.includeHiddenNodes ? n.width && n.height : !n.hidden;\n if (options.nodes?.length) {\n return isVisible && options.nodes.some((optionNode) => optionNode.id === n.id);\n }\n return isVisible;\n });\n const nodesInitialized = nodes.every((n) => n.width && n.height);\n if (nodes.length > 0 && nodesInitialized) {\n const bounds = getNodesBounds(nodes, nodeOrigin);\n const { x, y, zoom } = getViewportForBounds(bounds, width, height, options.minZoom ?? minZoom, options.maxZoom ?? maxZoom, options.padding ?? 0.1);\n const nextTransform = d3_zoom__WEBPACK_IMPORTED_MODULE_2__.zoomIdentity.translate(x, y).scale(zoom);\n if (typeof options.duration === 'number' && options.duration > 0) {\n d3Zoom.transform(getD3Transition(d3Selection, options.duration), nextTransform);\n }\n else {\n d3Zoom.transform(d3Selection, nextTransform);\n }\n return true;\n }\n }\n return false;\n}\nfunction handleControlledNodeSelectionChange(nodeChanges, nodeInternals) {\n nodeChanges.forEach((change) => {\n const node = nodeInternals.get(change.id);\n if (node) {\n nodeInternals.set(node.id, {\n ...node,\n [internalsSymbol]: node[internalsSymbol],\n selected: change.selected,\n });\n }\n });\n return new Map(nodeInternals);\n}\nfunction handleControlledEdgeSelectionChange(edgeChanges, edges) {\n return edges.map((e) => {\n const change = edgeChanges.find((change) => change.id === e.id);\n if (change) {\n e.selected = change.selected;\n }\n return e;\n });\n}\nfunction updateNodesAndEdgesSelections({ changedNodes, changedEdges, get, set }) {\n const { nodeInternals, edges, onNodesChange, onEdgesChange, hasDefaultNodes, hasDefaultEdges } = get();\n if (changedNodes?.length) {\n if (hasDefaultNodes) {\n set({ nodeInternals: handleControlledNodeSelectionChange(changedNodes, nodeInternals) });\n }\n onNodesChange?.(changedNodes);\n }\n if (changedEdges?.length) {\n if (hasDefaultEdges) {\n set({ edges: handleControlledEdgeSelectionChange(changedEdges, edges) });\n }\n onEdgesChange?.(changedEdges);\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => { };\nconst initialViewportHelper = {\n zoomIn: noop,\n zoomOut: noop,\n zoomTo: noop,\n getZoom: () => 1,\n setViewport: noop,\n getViewport: () => ({ x: 0, y: 0, zoom: 1 }),\n fitView: () => false,\n setCenter: noop,\n fitBounds: noop,\n project: (position) => position,\n screenToFlowPosition: (position) => position,\n flowToScreenPosition: (position) => position,\n viewportInitialized: false,\n};\nconst selector$b = (s) => ({\n d3Zoom: s.d3Zoom,\n d3Selection: s.d3Selection,\n});\nconst useViewportHelper = () => {\n const store = useStoreApi();\n const { d3Zoom, d3Selection } = useStore(selector$b, zustand_shallow__WEBPACK_IMPORTED_MODULE_5__.shallow);\n const viewportHelperFunctions = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n if (d3Selection && d3Zoom) {\n return {\n zoomIn: (options) => d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), 1.2),\n zoomOut: (options) => d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), 1 / 1.2),\n zoomTo: (zoomLevel, options) => d3Zoom.scaleTo(getD3Transition(d3Selection, options?.duration), zoomLevel),\n getZoom: () => store.getState().transform[2],\n setViewport: (transform, options) => {\n const [x, y, zoom] = store.getState().transform;\n const nextTransform = d3_zoom__WEBPACK_IMPORTED_MODULE_2__.zoomIdentity\n .translate(transform.x ?? x, transform.y ?? y)\n .scale(transform.zoom ?? zoom);\n d3Zoom.transform(getD3Transition(d3Selection, options?.duration), nextTransform);\n },\n getViewport: () => {\n const [x, y, zoom] = store.getState().transform;\n return { x, y, zoom };\n },\n fitView: (options) => fitView(store.getState, options),\n setCenter: (x, y, options) => {\n const { width, height, maxZoom } = store.getState();\n const nextZoom = typeof options?.zoom !== 'undefined' ? options.zoom : maxZoom;\n const centerX = width / 2 - x * nextZoom;\n const centerY = height / 2 - y * nextZoom;\n const transform = d3_zoom__WEBPACK_IMPORTED_MODULE_2__.zoomIdentity.translate(centerX, centerY).scale(nextZoom);\n d3Zoom.transform(getD3Transition(d3Selection, options?.duration), transform);\n },\n fitBounds: (bounds, options) => {\n const { width, height, minZoom, maxZoom } = store.getState();\n const { x, y, zoom } = getViewportForBounds(bounds, width, height, minZoom, maxZoom, options?.padding ?? 0.1);\n const transform = d3_zoom__WEBPACK_IMPORTED_MODULE_2__.zoomIdentity.translate(x, y).scale(zoom);\n d3Zoom.transform(getD3Transition(d3Selection, options?.duration), transform);\n },\n // @deprecated Use `screenToFlowPosition`.\n project: (position) => {\n const { transform, snapToGrid, snapGrid } = store.getState();\n console.warn('[DEPRECATED] `project` is deprecated. Instead use `screenToFlowPosition`. There is no need to subtract the react flow bounds anymore! https://reactflow.dev/api-reference/types/react-flow-instance#screen-to-flow-position');\n return pointToRendererPoint(position, transform, snapToGrid, snapGrid);\n },\n screenToFlowPosition: (position) => {\n const { transform, snapToGrid, snapGrid, domNode } = store.getState();\n if (!domNode) {\n return position;\n }\n const { x: domX, y: domY } = domNode.getBoundingClientRect();\n const relativePosition = {\n x: position.x - domX,\n y: position.y - domY,\n };\n return pointToRendererPoint(relativePosition, transform, snapToGrid, snapGrid);\n },\n flowToScreenPosition: (position) => {\n const { transform, domNode } = store.getState();\n if (!domNode) {\n return position;\n }\n const { x: domX, y: domY } = domNode.getBoundingClientRect();\n const rendererPosition = rendererPointToPoint(position, transform);\n return {\n x: rendererPosition.x + domX,\n y: rendererPosition.y + domY,\n };\n },\n viewportInitialized: true,\n };\n }\n return initialViewportHelper;\n }, [d3Zoom, d3Selection]);\n return viewportHelperFunctions;\n};\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nfunction useReactFlow() {\n const viewportHelper = useViewportHelper();\n const store = useStoreApi();\n const getNodes = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n return store\n .getState()\n .getNodes()\n .map((n) => ({ ...n }));\n }, []);\n const getNode = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((id) => {\n return store.getState().nodeInternals.get(id);\n }, []);\n const getEdges = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n const { edges = [] } = store.getState();\n return edges.map((e) => ({ ...e }));\n }, []);\n const getEdge = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((id) => {\n const { edges = [] } = store.getState();\n return edges.find((e) => e.id === id);\n }, []);\n const setNodes = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((payload) => {\n const { getNodes, setNodes, hasDefaultNodes, onNodesChange } = store.getState();\n const nodes = getNodes();\n const nextNodes = typeof payload === 'function' ? payload(nodes) : payload;\n if (hasDefaultNodes) {\n setNodes(nextNodes);\n }\n else if (onNodesChange) {\n const changes = nextNodes.length === 0\n ? nodes.map((node) => ({ type: 'remove', id: node.id }))\n : nextNodes.map((node) => ({ item: node, type: 'reset' }));\n onNodesChange(changes);\n }\n }, []);\n const setEdges = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((payload) => {\n const { edges = [], setEdges, hasDefaultEdges, onEdgesChange } = store.getState();\n const nextEdges = typeof payload === 'function' ? payload(edges) : payload;\n if (hasDefaultEdges) {\n setEdges(nextEdges);\n }\n else if (onEdgesChange) {\n const changes = nextEdges.length === 0\n ? edges.map((edge) => ({ type: 'remove', id: edge.id }))\n : nextEdges.map((edge) => ({ item: edge, type: 'reset' }));\n onEdgesChange(changes);\n }\n }, []);\n const addNodes = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((payload) => {\n const nodes = Array.isArray(payload) ? payload : [payload];\n const { getNodes, setNodes, hasDefaultNodes, onNodesChange } = store.getState();\n if (hasDefaultNodes) {\n const currentNodes = getNodes();\n const nextNodes = [...currentNodes, ...nodes];\n setNodes(nextNodes);\n }\n else if (onNodesChange) {\n const changes = nodes.map((node) => ({ item: node, type: 'add' }));\n onNodesChange(changes);\n }\n }, []);\n const addEdges = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((payload) => {\n const nextEdges = Array.isArray(payload) ? payload : [payload];\n const { edges = [], setEdges, hasDefaultEdges, onEdgesChange } = store.getState();\n if (hasDefaultEdges) {\n setEdges([...edges, ...nextEdges]);\n }\n else if (onEdgesChange) {\n const changes = nextEdges.map((edge) => ({ item: edge, type: 'add' }));\n onEdgesChange(changes);\n }\n }, []);\n const toObject = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n const { getNodes, edges = [], transform } = store.getState();\n const [x, y, zoom] = transform;\n return {\n nodes: getNodes().map((n) => ({ ...n })),\n edges: edges.map((e) => ({ ...e })),\n viewport: {\n x,\n y,\n zoom,\n },\n };\n }, []);\n const deleteElements = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({ nodes: nodesDeleted, edges: edgesDeleted }) => {\n const { nodeInternals, getNodes, edges, hasDefaultNodes, hasDefaultEdges, onNodesDelete, onEdgesDelete, onNodesChange, onEdgesChange, } = store.getState();\n const nodeIds = (nodesDeleted || []).map((node) => node.id);\n const edgeIds = (edgesDeleted || []).map((edge) => edge.id);\n const nodesToRemove = getNodes().reduce((res, node) => {\n const parentId = node.parentNode || node.parentId;\n const parentHit = !nodeIds.includes(node.id) && parentId && res.find((n) => n.id === parentId);\n const deletable = typeof node.deletable === 'boolean' ? node.deletable : true;\n if (deletable && (nodeIds.includes(node.id) || parentHit)) {\n res.push(node);\n }\n return res;\n }, []);\n const deletableEdges = edges.filter((e) => (typeof e.deletable === 'boolean' ? e.deletable : true));\n const initialHitEdges = deletableEdges.filter((e) => edgeIds.includes(e.id));\n if (nodesToRemove || initialHitEdges) {\n const connectedEdges = getConnectedEdges(nodesToRemove, deletableEdges);\n const edgesToRemove = [...initialHitEdges, ...connectedEdges];\n const edgeIdsToRemove = edgesToRemove.reduce((res, edge) => {\n if (!res.includes(edge.id)) {\n res.push(edge.id);\n }\n return res;\n }, []);\n if (hasDefaultEdges || hasDefaultNodes) {\n if (hasDefaultEdges) {\n store.setState({\n edges: edges.filter((e) => !edgeIdsToRemove.includes(e.id)),\n });\n }\n if (hasDefaultNodes) {\n nodesToRemove.forEach((node) => {\n nodeInternals.delete(node.id);\n });\n store.setState({\n nodeInternals: new Map(nodeInternals),\n });\n }\n }\n if (edgeIdsToRemove.length > 0) {\n onEdgesDelete?.(edgesToRemove);\n if (onEdgesChange) {\n onEdgesChange(edgeIdsToRemove.map((id) => ({\n id,\n type: 'remove',\n })));\n }\n }\n if (nodesToRemove.length > 0) {\n onNodesDelete?.(nodesToRemove);\n if (onNodesChange) {\n const nodeChanges = nodesToRemove.map((n) => ({ id: n.id, type: 'remove' }));\n onNodesChange(nodeChanges);\n }\n }\n }\n }, []);\n const getNodeRect = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((nodeOrRect) => {\n const isRect = isRectObject(nodeOrRect);\n const node = isRect ? null : store.getState().nodeInternals.get(nodeOrRect.id);\n if (!isRect && !node) {\n return [null, null, isRect];\n }\n const nodeRect = isRect ? nodeOrRect : nodeToRect(node);\n return [nodeRect, node, isRect];\n }, []);\n const getIntersectingNodes = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((nodeOrRect, partially = true, nodes) => {\n const [nodeRect, node, isRect] = getNodeRect(nodeOrRect);\n if (!nodeRect) {\n return [];\n }\n return (nodes || store.getState().getNodes()).filter((n) => {\n if (!isRect && (n.id === node.id || !n.positionAbsolute)) {\n return false;\n }\n const currNodeRect = nodeToRect(n);\n const overlappingArea = getOverlappingArea(currNodeRect, nodeRect);\n const partiallyVisible = partially && overlappingArea > 0;\n return partiallyVisible || overlappingArea >= nodeRect.width * nodeRect.height;\n });\n }, []);\n const isNodeIntersecting = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((nodeOrRect, area, partially = true) => {\n const [nodeRect] = getNodeRect(nodeOrRect);\n if (!nodeRect) {\n return false;\n }\n const overlappingArea = getOverlappingArea(nodeRect, area);\n const partiallyVisible = partially && overlappingArea > 0;\n return partiallyVisible || overlappingArea >= nodeRect.width * nodeRect.height;\n }, []);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return {\n ...viewportHelper,\n getNodes,\n getNode,\n getEdges,\n getEdge,\n setNodes,\n setEdges,\n addNodes,\n addEdges,\n toObject,\n deleteElements,\n getIntersectingNodes,\n isNodeIntersecting,\n };\n }, [\n viewportHelper,\n getNodes,\n getNode,\n getEdges,\n getEdge,\n setNodes,\n setEdges,\n addNodes,\n addEdges,\n toObject,\n deleteElements,\n getIntersectingNodes,\n isNodeIntersecting,\n ]);\n}\n\nconst deleteKeyOptions = { actInsideInputWithModifier: false };\nvar useGlobalKeyHandler = ({ deleteKeyCode, multiSelectionKeyCode }) => {\n const store = useStoreApi();\n const { deleteElements } = useReactFlow();\n const deleteKeyPressed = useKeyPress(deleteKeyCode, deleteKeyOptions);\n const multiSelectionKeyPressed = useKeyPress(multiSelectionKeyCode);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (deleteKeyPressed) {\n const { edges, getNodes } = store.getState();\n const selectedNodes = getNodes().filter((node) => node.selected);\n const selectedEdges = edges.filter((edge) => edge.selected);\n deleteElements({ nodes: selectedNodes, edges: selectedEdges });\n store.setState({ nodesSelectionActive: false });\n }\n }, [deleteKeyPressed]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n store.setState({ multiSelectionActive: multiSelectionKeyPressed });\n }, [multiSelectionKeyPressed]);\n};\n\nfunction useResizeHandler(rendererNode) {\n const store = useStoreApi();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n let resizeObserver;\n const updateDimensions = () => {\n if (!rendererNode.current) {\n return;\n }\n const size = getDimensions(rendererNode.current);\n if (size.height === 0 || size.width === 0) {\n store.getState().onError?.('004', errorMessages['error004']());\n }\n store.setState({ width: size.width || 500, height: size.height || 500 });\n };\n updateDimensions();\n window.addEventListener('resize', updateDimensions);\n if (rendererNode.current) {\n resizeObserver = new ResizeObserver(() => updateDimensions());\n resizeObserver.observe(rendererNode.current);\n }\n return () => {\n window.removeEventListener('resize', updateDimensions);\n if (resizeObserver && rendererNode.current) {\n resizeObserver.unobserve(rendererNode.current);\n }\n };\n }, []);\n}\n\nconst containerStyle = {\n position: 'absolute',\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n};\n\n/* eslint-disable @typescript-eslint/ban-ts-comment */\nconst viewChanged = (prevViewport, eventTransform) => prevViewport.x !== eventTransform.x || prevViewport.y !== eventTransform.y || prevViewport.zoom !== eventTransform.k;\nconst eventToFlowTransform = (eventTransform) => ({\n x: eventTransform.x,\n y: eventTransform.y,\n zoom: eventTransform.k,\n});\nconst isWrappedWithClass = (event, className) => event.target.closest(`.${className}`);\nconst isRightClickPan = (panOnDrag, usedButton) => usedButton === 2 && Array.isArray(panOnDrag) && panOnDrag.includes(2);\nconst wheelDelta = (event) => {\n const factor = event.ctrlKey && isMacOs() ? 10 : 1;\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * factor;\n};\nconst selector$a = (s) => ({\n d3Zoom: s.d3Zoom,\n d3Selection: s.d3Selection,\n d3ZoomHandler: s.d3ZoomHandler,\n userSelectionActive: s.userSelectionActive,\n});\nconst ZoomPane = ({ onMove, onMoveStart, onMoveEnd, onPaneContextMenu, zoomOnScroll = true, zoomOnPinch = true, panOnScroll = false, panOnScrollSpeed = 0.5, panOnScrollMode = PanOnScrollMode.Free, zoomOnDoubleClick = true, elementsSelectable, panOnDrag = true, defaultViewport, translateExtent, minZoom, maxZoom, zoomActivationKeyCode, preventScrolling = true, children, noWheelClassName, noPanClassName, }) => {\n const timerId = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const store = useStoreApi();\n const isZoomingOrPanning = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n const zoomedWithRightMouseButton = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n const zoomPane = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const prevTransform = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({ x: 0, y: 0, zoom: 0 });\n const { d3Zoom, d3Selection, d3ZoomHandler, userSelectionActive } = useStore(selector$a, zustand_shallow__WEBPACK_IMPORTED_MODULE_5__.shallow);\n const zoomActivationKeyPressed = useKeyPress(zoomActivationKeyCode);\n const mouseButton = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0);\n const isPanScrolling = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n const panScrollTimeout = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n useResizeHandler(zoomPane);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (zoomPane.current) {\n const bbox = zoomPane.current.getBoundingClientRect();\n const d3ZoomInstance = (0,d3_zoom__WEBPACK_IMPORTED_MODULE_2__.zoom)().scaleExtent([minZoom, maxZoom]).translateExtent(translateExtent);\n const selection = (0,d3_selection__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(zoomPane.current).call(d3ZoomInstance);\n const updatedTransform = d3_zoom__WEBPACK_IMPORTED_MODULE_2__.zoomIdentity\n .translate(defaultViewport.x, defaultViewport.y)\n .scale(clamp(defaultViewport.zoom, minZoom, maxZoom));\n const extent = [\n [0, 0],\n [bbox.width, bbox.height],\n ];\n const constrainedTransform = d3ZoomInstance.constrain()(updatedTransform, extent, translateExtent);\n d3ZoomInstance.transform(selection, constrainedTransform);\n d3ZoomInstance.wheelDelta(wheelDelta);\n store.setState({\n d3Zoom: d3ZoomInstance,\n d3Selection: selection,\n d3ZoomHandler: selection.on('wheel.zoom'),\n // we need to pass transform because zoom handler is not registered when we set the initial transform\n transform: [constrainedTransform.x, constrainedTransform.y, constrainedTransform.k],\n domNode: zoomPane.current.closest('.react-flow'),\n });\n }\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (d3Selection && d3Zoom) {\n if (panOnScroll && !zoomActivationKeyPressed && !userSelectionActive) {\n d3Selection.on('wheel.zoom', (event) => {\n if (isWrappedWithClass(event, noWheelClassName)) {\n return false;\n }\n event.preventDefault();\n event.stopImmediatePropagation();\n const currentZoom = d3Selection.property('__zoom').k || 1;\n // macos and win set ctrlKey=true for pinch gesture on a trackpad\n if (event.ctrlKey && zoomOnPinch) {\n const point = (0,d3_selection__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(event);\n const pinchDelta = wheelDelta(event);\n const zoom = currentZoom * Math.pow(2, pinchDelta);\n // @ts-ignore\n d3Zoom.scaleTo(d3Selection, zoom, point, event);\n return;\n }\n // increase scroll speed in firefox\n // firefox: deltaMode === 1; chrome: deltaMode === 0\n const deltaNormalize = event.deltaMode === 1 ? 20 : 1;\n let deltaX = panOnScrollMode === PanOnScrollMode.Vertical ? 0 : event.deltaX * deltaNormalize;\n let deltaY = panOnScrollMode === PanOnScrollMode.Horizontal ? 0 : event.deltaY * deltaNormalize;\n // this enables vertical scrolling with shift + scroll on windows\n if (!isMacOs() && event.shiftKey && panOnScrollMode !== PanOnScrollMode.Vertical) {\n deltaX = event.deltaY * deltaNormalize;\n deltaY = 0;\n }\n d3Zoom.translateBy(d3Selection, -(deltaX / currentZoom) * panOnScrollSpeed, -(deltaY / currentZoom) * panOnScrollSpeed, \n // @ts-ignore\n { internal: true });\n const nextViewport = eventToFlowTransform(d3Selection.property('__zoom'));\n const { onViewportChangeStart, onViewportChange, onViewportChangeEnd } = store.getState();\n clearTimeout(panScrollTimeout.current);\n // for pan on scroll we need to handle the event calls on our own\n // we can't use the start, zoom and end events from d3-zoom\n // because start and move gets called on every scroll event and not once at the beginning\n if (!isPanScrolling.current) {\n isPanScrolling.current = true;\n onMoveStart?.(event, nextViewport);\n onViewportChangeStart?.(nextViewport);\n }\n if (isPanScrolling.current) {\n onMove?.(event, nextViewport);\n onViewportChange?.(nextViewport);\n panScrollTimeout.current = setTimeout(() => {\n onMoveEnd?.(event, nextViewport);\n onViewportChangeEnd?.(nextViewport);\n isPanScrolling.current = false;\n }, 150);\n }\n }, { passive: false });\n }\n else if (typeof d3ZoomHandler !== 'undefined') {\n d3Selection.on('wheel.zoom', function (event, d) {\n // we still want to enable pinch zooming even if preventScrolling is set to false\n const invalidEvent = !preventScrolling && event.type === 'wheel' && !event.ctrlKey;\n if (invalidEvent || isWrappedWithClass(event, noWheelClassName)) {\n return null;\n }\n event.preventDefault();\n d3ZoomHandler.call(this, event, d);\n }, { passive: false });\n }\n }\n }, [\n userSelectionActive,\n panOnScroll,\n panOnScrollMode,\n d3Selection,\n d3Zoom,\n d3ZoomHandler,\n zoomActivationKeyPressed,\n zoomOnPinch,\n preventScrolling,\n noWheelClassName,\n onMoveStart,\n onMove,\n onMoveEnd,\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (d3Zoom) {\n d3Zoom.on('start', (event) => {\n if (!event.sourceEvent || event.sourceEvent.internal) {\n return null;\n }\n // we need to remember it here, because it's always 0 in the \"zoom\" event\n mouseButton.current = event.sourceEvent?.button;\n const { onViewportChangeStart } = store.getState();\n const flowTransform = eventToFlowTransform(event.transform);\n isZoomingOrPanning.current = true;\n prevTransform.current = flowTransform;\n if (event.sourceEvent?.type === 'mousedown') {\n store.setState({ paneDragging: true });\n }\n onViewportChangeStart?.(flowTransform);\n onMoveStart?.(event.sourceEvent, flowTransform);\n });\n }\n }, [d3Zoom, onMoveStart]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (d3Zoom) {\n if (userSelectionActive && !isZoomingOrPanning.current) {\n d3Zoom.on('zoom', null);\n }\n else if (!userSelectionActive) {\n d3Zoom.on('zoom', (event) => {\n const { onViewportChange } = store.getState();\n store.setState({ transform: [event.transform.x, event.transform.y, event.transform.k] });\n zoomedWithRightMouseButton.current = !!(onPaneContextMenu && isRightClickPan(panOnDrag, mouseButton.current ?? 0));\n if ((onMove || onViewportChange) && !event.sourceEvent?.internal) {\n const flowTransform = eventToFlowTransform(event.transform);\n onViewportChange?.(flowTransform);\n onMove?.(event.sourceEvent, flowTransform);\n }\n });\n }\n }\n }, [userSelectionActive, d3Zoom, onMove, panOnDrag, onPaneContextMenu]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (d3Zoom) {\n d3Zoom.on('end', (event) => {\n if (!event.sourceEvent || event.sourceEvent.internal) {\n return null;\n }\n const { onViewportChangeEnd } = store.getState();\n isZoomingOrPanning.current = false;\n store.setState({ paneDragging: false });\n if (onPaneContextMenu &&\n isRightClickPan(panOnDrag, mouseButton.current ?? 0) &&\n !zoomedWithRightMouseButton.current) {\n onPaneContextMenu(event.sourceEvent);\n }\n zoomedWithRightMouseButton.current = false;\n if ((onMoveEnd || onViewportChangeEnd) && viewChanged(prevTransform.current, event.transform)) {\n const flowTransform = eventToFlowTransform(event.transform);\n prevTransform.current = flowTransform;\n clearTimeout(timerId.current);\n timerId.current = setTimeout(() => {\n onViewportChangeEnd?.(flowTransform);\n onMoveEnd?.(event.sourceEvent, flowTransform);\n }, panOnScroll ? 150 : 0);\n }\n });\n }\n }, [d3Zoom, panOnScroll, panOnDrag, onMoveEnd, onPaneContextMenu]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (d3Zoom) {\n d3Zoom.filter((event) => {\n const zoomScroll = zoomActivationKeyPressed || zoomOnScroll;\n const pinchZoom = zoomOnPinch && event.ctrlKey;\n if ((panOnDrag === true || (Array.isArray(panOnDrag) && panOnDrag.includes(1))) &&\n event.button === 1 &&\n event.type === 'mousedown' &&\n (isWrappedWithClass(event, 'react-flow__node') || isWrappedWithClass(event, 'react-flow__edge'))) {\n return true;\n }\n // if all interactions are disabled, we prevent all zoom events\n if (!panOnDrag && !zoomScroll && !panOnScroll && !zoomOnDoubleClick && !zoomOnPinch) {\n return false;\n }\n // during a selection we prevent all other interactions\n if (userSelectionActive) {\n return false;\n }\n // if zoom on double click is disabled, we prevent the double click event\n if (!zoomOnDoubleClick && event.type === 'dblclick') {\n return false;\n }\n // if the target element is inside an element with the nowheel class, we prevent zooming\n if (isWrappedWithClass(event, noWheelClassName) && event.type === 'wheel') {\n return false;\n }\n // if the target element is inside an element with the nopan class, we prevent panning\n if (isWrappedWithClass(event, noPanClassName) &&\n (event.type !== 'wheel' || (panOnScroll && event.type === 'wheel' && !zoomActivationKeyPressed))) {\n return false;\n }\n if (!zoomOnPinch && event.ctrlKey && event.type === 'wheel') {\n return false;\n }\n // when there is no scroll handling enabled, we prevent all wheel events\n if (!zoomScroll && !panOnScroll && !pinchZoom && event.type === 'wheel') {\n return false;\n }\n // if the pane is not movable, we prevent dragging it with mousestart or touchstart\n if (!panOnDrag && (event.type === 'mousedown' || event.type === 'touchstart')) {\n return false;\n }\n // if the pane is only movable using allowed clicks\n if (Array.isArray(panOnDrag) && !panOnDrag.includes(event.button) && event.type === 'mousedown') {\n return false;\n }\n // We only allow right clicks if pan on drag is set to right click\n const buttonAllowed = (Array.isArray(panOnDrag) && panOnDrag.includes(event.button)) || !event.button || event.button <= 1;\n // default filter for d3-zoom\n return (!event.ctrlKey || event.type === 'wheel') && buttonAllowed;\n });\n }\n }, [\n userSelectionActive,\n d3Zoom,\n zoomOnScroll,\n zoomOnPinch,\n panOnScroll,\n zoomOnDoubleClick,\n panOnDrag,\n elementsSelectable,\n zoomActivationKeyPressed,\n ]);\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", { className: \"react-flow__renderer\", ref: zoomPane, style: containerStyle }, children));\n};\n\nconst selector$9 = (s) => ({\n userSelectionActive: s.userSelectionActive,\n userSelectionRect: s.userSelectionRect,\n});\nfunction UserSelection() {\n const { userSelectionActive, userSelectionRect } = useStore(selector$9, zustand_shallow__WEBPACK_IMPORTED_MODULE_5__.shallow);\n const isActive = userSelectionActive && userSelectionRect;\n if (!isActive) {\n return null;\n }\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", { className: \"react-flow__selection react-flow__container\", style: {\n width: userSelectionRect.width,\n height: userSelectionRect.height,\n transform: `translate(${userSelectionRect.x}px, ${userSelectionRect.y}px)`,\n } }));\n}\n\nfunction handleParentExpand(res, updateItem) {\n const parentId = updateItem.parentNode || updateItem.parentId;\n const parent = res.find((e) => e.id === parentId);\n if (parent) {\n const extendWidth = updateItem.position.x + updateItem.width - parent.width;\n const extendHeight = updateItem.position.y + updateItem.height - parent.height;\n if (extendWidth > 0 || extendHeight > 0 || updateItem.position.x < 0 || updateItem.position.y < 0) {\n parent.style = { ...parent.style } || {};\n parent.style.width = parent.style.width ?? parent.width;\n parent.style.height = parent.style.height ?? parent.height;\n if (extendWidth > 0) {\n parent.style.width += extendWidth;\n }\n if (extendHeight > 0) {\n parent.style.height += extendHeight;\n }\n if (updateItem.position.x < 0) {\n const xDiff = Math.abs(updateItem.position.x);\n parent.position.x = parent.position.x - xDiff;\n parent.style.width += xDiff;\n updateItem.position.x = 0;\n }\n if (updateItem.position.y < 0) {\n const yDiff = Math.abs(updateItem.position.y);\n parent.position.y = parent.position.y - yDiff;\n parent.style.height += yDiff;\n updateItem.position.y = 0;\n }\n parent.width = parent.style.width;\n parent.height = parent.style.height;\n }\n }\n}\nfunction applyChanges(changes, elements) {\n // we need this hack to handle the setNodes and setEdges function of the useReactFlow hook for controlled flows\n if (changes.some((c) => c.type === 'reset')) {\n return changes.filter((c) => c.type === 'reset').map((c) => c.item);\n }\n const initElements = changes.filter((c) => c.type === 'add').map((c) => c.item);\n return elements.reduce((res, item) => {\n const currentChanges = changes.filter((c) => c.id === item.id);\n if (currentChanges.length === 0) {\n res.push(item);\n return res;\n }\n const updateItem = { ...item };\n for (const currentChange of currentChanges) {\n if (currentChange) {\n switch (currentChange.type) {\n case 'select': {\n updateItem.selected = currentChange.selected;\n break;\n }\n case 'position': {\n if (typeof currentChange.position !== 'undefined') {\n updateItem.position = currentChange.position;\n }\n if (typeof currentChange.positionAbsolute !== 'undefined') {\n updateItem.positionAbsolute = currentChange.positionAbsolute;\n }\n if (typeof currentChange.dragging !== 'undefined') {\n updateItem.dragging = currentChange.dragging;\n }\n if (updateItem.expandParent) {\n handleParentExpand(res, updateItem);\n }\n break;\n }\n case 'dimensions': {\n if (typeof currentChange.dimensions !== 'undefined') {\n updateItem.width = currentChange.dimensions.width;\n updateItem.height = currentChange.dimensions.height;\n }\n if (typeof currentChange.updateStyle !== 'undefined') {\n updateItem.style = { ...(updateItem.style || {}), ...currentChange.dimensions };\n }\n if (typeof currentChange.resizing === 'boolean') {\n updateItem.resizing = currentChange.resizing;\n }\n if (updateItem.expandParent) {\n handleParentExpand(res, updateItem);\n }\n break;\n }\n case 'remove': {\n return res;\n }\n }\n }\n }\n res.push(updateItem);\n return res;\n }, initElements);\n}\nfunction applyNodeChanges(changes, nodes) {\n return applyChanges(changes, nodes);\n}\nfunction applyEdgeChanges(changes, edges) {\n return applyChanges(changes, edges);\n}\nconst createSelectionChange = (id, selected) => ({\n id,\n type: 'select',\n selected,\n});\nfunction getSelectionChanges(items, selectedIds) {\n return items.reduce((res, item) => {\n const willBeSelected = selectedIds.includes(item.id);\n if (!item.selected && willBeSelected) {\n item.selected = true;\n res.push(createSelectionChange(item.id, true));\n }\n else if (item.selected && !willBeSelected) {\n item.selected = false;\n res.push(createSelectionChange(item.id, false));\n }\n return res;\n }, []);\n}\n\n/**\n * The user selection rectangle gets displayed when a user drags the mouse while pressing shift\n */\nconst wrapHandler = (handler, containerRef) => {\n return (event) => {\n if (event.target !== containerRef.current) {\n return;\n }\n handler?.(event);\n };\n};\nconst selector$8 = (s) => ({\n userSelectionActive: s.userSelectionActive,\n elementsSelectable: s.elementsSelectable,\n dragging: s.paneDragging,\n});\nconst Pane = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(({ isSelecting, selectionMode = SelectionMode.Full, panOnDrag, onSelectionStart, onSelectionEnd, onPaneClick, onPaneContextMenu, onPaneScroll, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, children, }) => {\n const container = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const store = useStoreApi();\n const prevSelectedNodesCount = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0);\n const prevSelectedEdgesCount = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0);\n const containerBounds = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const { userSelectionActive, elementsSelectable, dragging } = useStore(selector$8, zustand_shallow__WEBPACK_IMPORTED_MODULE_5__.shallow);\n const resetUserSelection = () => {\n store.setState({ userSelectionActive: false, userSelectionRect: null });\n prevSelectedNodesCount.current = 0;\n prevSelectedEdgesCount.current = 0;\n };\n const onClick = (event) => {\n onPaneClick?.(event);\n store.getState().resetSelectedElements();\n store.setState({ nodesSelectionActive: false });\n };\n const onContextMenu = (event) => {\n if (Array.isArray(panOnDrag) && panOnDrag?.includes(2)) {\n event.preventDefault();\n return;\n }\n onPaneContextMenu?.(event);\n };\n const onWheel = onPaneScroll ? (event) => onPaneScroll(event) : undefined;\n const onMouseDown = (event) => {\n const { resetSelectedElements, domNode } = store.getState();\n containerBounds.current = domNode?.getBoundingClientRect();\n if (!elementsSelectable ||\n !isSelecting ||\n event.button !== 0 ||\n event.target !== container.current ||\n !containerBounds.current) {\n return;\n }\n const { x, y } = getEventPosition(event, containerBounds.current);\n resetSelectedElements();\n store.setState({\n userSelectionRect: {\n width: 0,\n height: 0,\n startX: x,\n startY: y,\n x,\n y,\n },\n });\n onSelectionStart?.(event);\n };\n const onMouseMove = (event) => {\n const { userSelectionRect, nodeInternals, edges, transform, onNodesChange, onEdgesChange, nodeOrigin, getNodes } = store.getState();\n if (!isSelecting || !containerBounds.current || !userSelectionRect) {\n return;\n }\n store.setState({ userSelectionActive: true, nodesSelectionActive: false });\n const mousePos = getEventPosition(event, containerBounds.current);\n const startX = userSelectionRect.startX ?? 0;\n const startY = userSelectionRect.startY ?? 0;\n const nextUserSelectRect = {\n ...userSelectionRect,\n x: mousePos.x < startX ? mousePos.x : startX,\n y: mousePos.y < startY ? mousePos.y : startY,\n width: Math.abs(mousePos.x - startX),\n height: Math.abs(mousePos.y - startY),\n };\n const nodes = getNodes();\n const selectedNodes = getNodesInside(nodeInternals, nextUserSelectRect, transform, selectionMode === SelectionMode.Partial, true, nodeOrigin);\n const selectedEdgeIds = getConnectedEdges(selectedNodes, edges).map((e) => e.id);\n const selectedNodeIds = selectedNodes.map((n) => n.id);\n if (prevSelectedNodesCount.current !== selectedNodeIds.length) {\n prevSelectedNodesCount.current = selectedNodeIds.length;\n const changes = getSelectionChanges(nodes, selectedNodeIds);\n if (changes.length) {\n onNodesChange?.(changes);\n }\n }\n if (prevSelectedEdgesCount.current !== selectedEdgeIds.length) {\n prevSelectedEdgesCount.current = selectedEdgeIds.length;\n const changes = getSelectionChanges(edges, selectedEdgeIds);\n if (changes.length) {\n onEdgesChange?.(changes);\n }\n }\n store.setState({\n userSelectionRect: nextUserSelectRect,\n });\n };\n const onMouseUp = (event) => {\n if (event.button !== 0) {\n return;\n }\n const { userSelectionRect } = store.getState();\n // We only want to trigger click functions when in selection mode if\n // the user did not move the mouse.\n if (!userSelectionActive && userSelectionRect && event.target === container.current) {\n onClick?.(event);\n }\n store.setState({ nodesSelectionActive: prevSelectedNodesCount.current > 0 });\n resetUserSelection();\n onSelectionEnd?.(event);\n };\n const onMouseLeave = (event) => {\n if (userSelectionActive) {\n store.setState({ nodesSelectionActive: prevSelectedNodesCount.current > 0 });\n onSelectionEnd?.(event);\n }\n resetUserSelection();\n };\n const hasActiveSelection = elementsSelectable && (isSelecting || userSelectionActive);\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", { className: (0,classcat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(['react-flow__pane', { dragging, selection: isSelecting }]), onClick: hasActiveSelection ? undefined : wrapHandler(onClick, container), onContextMenu: wrapHandler(onContextMenu, container), onWheel: wrapHandler(onWheel, container), onMouseEnter: hasActiveSelection ? undefined : onPaneMouseEnter, onMouseDown: hasActiveSelection ? onMouseDown : undefined, onMouseMove: hasActiveSelection ? onMouseMove : onPaneMouseMove, onMouseUp: hasActiveSelection ? onMouseUp : undefined, onMouseLeave: hasActiveSelection ? onMouseLeave : onPaneMouseLeave, ref: container, style: containerStyle },\n children,\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(UserSelection, null)));\n});\nPane.displayName = 'Pane';\n\nfunction isParentSelected(node, nodeInternals) {\n const parentId = node.parentNode || node.parentId;\n if (!parentId) {\n return false;\n }\n const parentNode = nodeInternals.get(parentId);\n if (!parentNode) {\n return false;\n }\n if (parentNode.selected) {\n return true;\n }\n return isParentSelected(parentNode, nodeInternals);\n}\nfunction hasSelector(target, selector, nodeRef) {\n let current = target;\n do {\n if (current?.matches(selector))\n return true;\n if (current === nodeRef.current)\n return false;\n current = current.parentElement;\n } while (current);\n return false;\n}\n// looks for all selected nodes and created a NodeDragItem for each of them\nfunction getDragItems(nodeInternals, nodesDraggable, mousePos, nodeId) {\n return Array.from(nodeInternals.values())\n .filter((n) => (n.selected || n.id === nodeId) &&\n (!n.parentNode || n.parentId || !isParentSelected(n, nodeInternals)) &&\n (n.draggable || (nodesDraggable && typeof n.draggable === 'undefined')))\n .map((n) => ({\n id: n.id,\n position: n.position || { x: 0, y: 0 },\n positionAbsolute: n.positionAbsolute || { x: 0, y: 0 },\n distance: {\n x: mousePos.x - (n.positionAbsolute?.x ?? 0),\n y: mousePos.y - (n.positionAbsolute?.y ?? 0),\n },\n delta: {\n x: 0,\n y: 0,\n },\n extent: n.extent,\n parentNode: n.parentNode || n.parentId,\n parentId: n.parentNode || n.parentId,\n width: n.width,\n height: n.height,\n expandParent: n.expandParent,\n }));\n}\nfunction clampNodeExtent(node, extent) {\n if (!extent || extent === 'parent') {\n return extent;\n }\n return [extent[0], [extent[1][0] - (node.width || 0), extent[1][1] - (node.height || 0)]];\n}\nfunction calcNextPosition(node, nextPosition, nodeInternals, nodeExtent, nodeOrigin = [0, 0], onError) {\n const clampedNodeExtent = clampNodeExtent(node, node.extent || nodeExtent);\n let currentExtent = clampedNodeExtent;\n const parentId = node.parentNode || node.parentId;\n if (node.extent === 'parent' && !node.expandParent) {\n if (parentId && node.width && node.height) {\n const parent = nodeInternals.get(parentId);\n const { x: parentX, y: parentY } = getNodePositionWithOrigin(parent, nodeOrigin).positionAbsolute;\n currentExtent =\n parent && isNumeric(parentX) && isNumeric(parentY) && isNumeric(parent.width) && isNumeric(parent.height)\n ? [\n [parentX + node.width * nodeOrigin[0], parentY + node.height * nodeOrigin[1]],\n [\n parentX + parent.width - node.width + node.width * nodeOrigin[0],\n parentY + parent.height - node.height + node.height * nodeOrigin[1],\n ],\n ]\n : currentExtent;\n }\n else {\n onError?.('005', errorMessages['error005']());\n currentExtent = clampedNodeExtent;\n }\n }\n else if (node.extent && parentId && node.extent !== 'parent') {\n const parent = nodeInternals.get(parentId);\n const { x: parentX, y: parentY } = getNodePositionWithOrigin(parent, nodeOrigin).positionAbsolute;\n currentExtent = [\n [node.extent[0][0] + parentX, node.extent[0][1] + parentY],\n [node.extent[1][0] + parentX, node.extent[1][1] + parentY],\n ];\n }\n let parentPosition = { x: 0, y: 0 };\n if (parentId) {\n const parentNode = nodeInternals.get(parentId);\n parentPosition = getNodePositionWithOrigin(parentNode, nodeOrigin).positionAbsolute;\n }\n const positionAbsolute = currentExtent && currentExtent !== 'parent'\n ? clampPosition(nextPosition, currentExtent)\n : nextPosition;\n return {\n position: {\n x: positionAbsolute.x - parentPosition.x,\n y: positionAbsolute.y - parentPosition.y,\n },\n positionAbsolute,\n };\n}\n// returns two params:\n// 1. the dragged node (or the first of the list, if we are dragging a node selection)\n// 2. array of selected nodes (for multi selections)\nfunction getEventHandlerParams({ nodeId, dragItems, nodeInternals, }) {\n const extentedDragItems = dragItems.map((n) => {\n const node = nodeInternals.get(n.id);\n return {\n ...node,\n position: n.position,\n positionAbsolute: n.positionAbsolute,\n };\n });\n return [nodeId ? extentedDragItems.find((n) => n.id === nodeId) : extentedDragItems[0], extentedDragItems];\n}\n\nconst getHandleBounds = (selector, nodeElement, zoom, nodeOrigin) => {\n const handles = nodeElement.querySelectorAll(selector);\n if (!handles || !handles.length) {\n return null;\n }\n const handlesArray = Array.from(handles);\n const nodeBounds = nodeElement.getBoundingClientRect();\n const nodeOffset = {\n x: nodeBounds.width * nodeOrigin[0],\n y: nodeBounds.height * nodeOrigin[1],\n };\n return handlesArray.map((handle) => {\n const handleBounds = handle.getBoundingClientRect();\n return {\n id: handle.getAttribute('data-handleid'),\n position: handle.getAttribute('data-handlepos'),\n x: (handleBounds.left - nodeBounds.left - nodeOffset.x) / zoom,\n y: (handleBounds.top - nodeBounds.top - nodeOffset.y) / zoom,\n ...getDimensions(handle),\n };\n });\n};\nfunction getMouseHandler(id, getState, handler) {\n return handler === undefined\n ? handler\n : (event) => {\n const node = getState().nodeInternals.get(id);\n if (node) {\n handler(event, { ...node });\n }\n };\n}\n// this handler is called by\n// 1. the click handler when node is not draggable or selectNodesOnDrag = false\n// or\n// 2. the on drag start handler when node is draggable and selectNodesOnDrag = true\nfunction handleNodeClick({ id, store, unselect = false, nodeRef, }) {\n const { addSelectedNodes, unselectNodesAndEdges, multiSelectionActive, nodeInternals, onError } = store.getState();\n const node = nodeInternals.get(id);\n if (!node) {\n onError?.('012', errorMessages['error012'](id));\n return;\n }\n store.setState({ nodesSelectionActive: false });\n if (!node.selected) {\n addSelectedNodes([id]);\n }\n else if (unselect || (node.selected && multiSelectionActive)) {\n unselectNodesAndEdges({ nodes: [node], edges: [] });\n requestAnimationFrame(() => nodeRef?.current?.blur());\n }\n}\n\nfunction useGetPointerPosition() {\n const store = useStoreApi();\n // returns the pointer position projected to the RF coordinate system\n const getPointerPosition = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({ sourceEvent }) => {\n const { transform, snapGrid, snapToGrid } = store.getState();\n const x = sourceEvent.touches ? sourceEvent.touches[0].clientX : sourceEvent.clientX;\n const y = sourceEvent.touches ? sourceEvent.touches[0].clientY : sourceEvent.clientY;\n const pointerPos = {\n x: (x - transform[0]) / transform[2],\n y: (y - transform[1]) / transform[2],\n };\n // we need the snapped position in order to be able to skip unnecessary drag events\n return {\n xSnapped: snapToGrid ? snapGrid[0] * Math.round(pointerPos.x / snapGrid[0]) : pointerPos.x,\n ySnapped: snapToGrid ? snapGrid[1] * Math.round(pointerPos.y / snapGrid[1]) : pointerPos.y,\n ...pointerPos,\n };\n }, []);\n return getPointerPosition;\n}\n\nfunction wrapSelectionDragFunc(selectionFunc) {\n return (event, _, nodes) => selectionFunc?.(event, nodes);\n}\nfunction useDrag({ nodeRef, disabled = false, noDragClassName, handleSelector, nodeId, isSelectable, selectNodesOnDrag, }) {\n const store = useStoreApi();\n const [dragging, setDragging] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n const dragItems = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)([]);\n const lastPos = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({ x: null, y: null });\n const autoPanId = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0);\n const containerBounds = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const mousePosition = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({ x: 0, y: 0 });\n const dragEvent = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const autoPanStarted = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n const dragStarted = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n const abortDrag = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n const getPointerPosition = useGetPointerPosition();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (nodeRef?.current) {\n const selection = (0,d3_selection__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(nodeRef.current);\n const updateNodes = ({ x, y }) => {\n const { nodeInternals, onNodeDrag, onSelectionDrag, updateNodePositions, nodeExtent, snapGrid, snapToGrid, nodeOrigin, onError, } = store.getState();\n lastPos.current = { x, y };\n let hasChange = false;\n let nodesBox = { x: 0, y: 0, x2: 0, y2: 0 };\n if (dragItems.current.length > 1 && nodeExtent) {\n const rect = getNodesBounds(dragItems.current, nodeOrigin);\n nodesBox = rectToBox(rect);\n }\n dragItems.current = dragItems.current.map((n) => {\n const nextPosition = { x: x - n.distance.x, y: y - n.distance.y };\n if (snapToGrid) {\n nextPosition.x = snapGrid[0] * Math.round(nextPosition.x / snapGrid[0]);\n nextPosition.y = snapGrid[1] * Math.round(nextPosition.y / snapGrid[1]);\n }\n // if there is selection with multiple nodes and a node extent is set, we need to adjust the node extent for each node\n // based on its position so that the node stays at it's position relative to the selection.\n const adjustedNodeExtent = [\n [nodeExtent[0][0], nodeExtent[0][1]],\n [nodeExtent[1][0], nodeExtent[1][1]],\n ];\n if (dragItems.current.length > 1 && nodeExtent && !n.extent) {\n adjustedNodeExtent[0][0] = n.positionAbsolute.x - nodesBox.x + nodeExtent[0][0];\n adjustedNodeExtent[1][0] = n.positionAbsolute.x + (n.width ?? 0) - nodesBox.x2 + nodeExtent[1][0];\n adjustedNodeExtent[0][1] = n.positionAbsolute.y - nodesBox.y + nodeExtent[0][1];\n adjustedNodeExtent[1][1] = n.positionAbsolute.y + (n.height ?? 0) - nodesBox.y2 + nodeExtent[1][1];\n }\n const updatedPos = calcNextPosition(n, nextPosition, nodeInternals, adjustedNodeExtent, nodeOrigin, onError);\n // we want to make sure that we only fire a change event when there is a change\n hasChange = hasChange || n.position.x !== updatedPos.position.x || n.position.y !== updatedPos.position.y;\n n.position = updatedPos.position;\n n.positionAbsolute = updatedPos.positionAbsolute;\n return n;\n });\n if (!hasChange) {\n return;\n }\n updateNodePositions(dragItems.current, true, true);\n setDragging(true);\n const onDrag = nodeId ? onNodeDrag : wrapSelectionDragFunc(onSelectionDrag);\n if (onDrag && dragEvent.current) {\n const [currentNode, nodes] = getEventHandlerParams({\n nodeId,\n dragItems: dragItems.current,\n nodeInternals,\n });\n onDrag(dragEvent.current, currentNode, nodes);\n }\n };\n const autoPan = () => {\n if (!containerBounds.current) {\n return;\n }\n const [xMovement, yMovement] = calcAutoPan(mousePosition.current, containerBounds.current);\n if (xMovement !== 0 || yMovement !== 0) {\n const { transform, panBy } = store.getState();\n lastPos.current.x = (lastPos.current.x ?? 0) - xMovement / transform[2];\n lastPos.current.y = (lastPos.current.y ?? 0) - yMovement / transform[2];\n if (panBy({ x: xMovement, y: yMovement })) {\n updateNodes(lastPos.current);\n }\n }\n autoPanId.current = requestAnimationFrame(autoPan);\n };\n const startDrag = (event) => {\n const { nodeInternals, multiSelectionActive, nodesDraggable, unselectNodesAndEdges, onNodeDragStart, onSelectionDragStart, } = store.getState();\n dragStarted.current = true;\n const onStart = nodeId ? onNodeDragStart : wrapSelectionDragFunc(onSelectionDragStart);\n if ((!selectNodesOnDrag || !isSelectable) && !multiSelectionActive && nodeId) {\n if (!nodeInternals.get(nodeId)?.selected) {\n // we need to reset selected nodes when selectNodesOnDrag=false\n unselectNodesAndEdges();\n }\n }\n if (nodeId && isSelectable && selectNodesOnDrag) {\n handleNodeClick({\n id: nodeId,\n store,\n nodeRef: nodeRef,\n });\n }\n const pointerPos = getPointerPosition(event);\n lastPos.current = pointerPos;\n dragItems.current = getDragItems(nodeInternals, nodesDraggable, pointerPos, nodeId);\n if (onStart && dragItems.current) {\n const [currentNode, nodes] = getEventHandlerParams({\n nodeId,\n dragItems: dragItems.current,\n nodeInternals,\n });\n onStart(event.sourceEvent, currentNode, nodes);\n }\n };\n if (disabled) {\n selection.on('.drag', null);\n }\n else {\n const dragHandler = (0,d3_drag__WEBPACK_IMPORTED_MODULE_8__[\"default\"])()\n .on('start', (event) => {\n const { domNode, nodeDragThreshold } = store.getState();\n if (nodeDragThreshold === 0) {\n startDrag(event);\n }\n abortDrag.current = false;\n const pointerPos = getPointerPosition(event);\n lastPos.current = pointerPos;\n containerBounds.current = domNode?.getBoundingClientRect() || null;\n mousePosition.current = getEventPosition(event.sourceEvent, containerBounds.current);\n })\n .on('drag', (event) => {\n const pointerPos = getPointerPosition(event);\n const { autoPanOnNodeDrag, nodeDragThreshold } = store.getState();\n if (event.sourceEvent.type === 'touchmove' && event.sourceEvent.touches.length > 1) {\n abortDrag.current = true;\n }\n if (abortDrag.current) {\n return;\n }\n if (!autoPanStarted.current && dragStarted.current && autoPanOnNodeDrag) {\n autoPanStarted.current = true;\n autoPan();\n }\n if (!dragStarted.current) {\n const x = pointerPos.xSnapped - (lastPos?.current?.x ?? 0);\n const y = pointerPos.ySnapped - (lastPos?.current?.y ?? 0);\n const distance = Math.sqrt(x * x + y * y);\n if (distance > nodeDragThreshold) {\n startDrag(event);\n }\n }\n // skip events without movement\n if ((lastPos.current.x !== pointerPos.xSnapped || lastPos.current.y !== pointerPos.ySnapped) &&\n dragItems.current &&\n dragStarted.current) {\n dragEvent.current = event.sourceEvent;\n mousePosition.current = getEventPosition(event.sourceEvent, containerBounds.current);\n updateNodes(pointerPos);\n }\n })\n .on('end', (event) => {\n if (!dragStarted.current || abortDrag.current) {\n return;\n }\n setDragging(false);\n autoPanStarted.current = false;\n dragStarted.current = false;\n cancelAnimationFrame(autoPanId.current);\n if (dragItems.current) {\n const { updateNodePositions, nodeInternals, onNodeDragStop, onSelectionDragStop } = store.getState();\n const onStop = nodeId ? onNodeDragStop : wrapSelectionDragFunc(onSelectionDragStop);\n updateNodePositions(dragItems.current, false, false);\n if (onStop) {\n const [currentNode, nodes] = getEventHandlerParams({\n nodeId,\n dragItems: dragItems.current,\n nodeInternals,\n });\n onStop(event.sourceEvent, currentNode, nodes);\n }\n }\n })\n .filter((event) => {\n const target = event.target;\n const isDraggable = !event.button &&\n (!noDragClassName || !hasSelector(target, `.${noDragClassName}`, nodeRef)) &&\n (!handleSelector || hasSelector(target, handleSelector, nodeRef));\n return isDraggable;\n });\n selection.call(dragHandler);\n return () => {\n selection.on('.drag', null);\n };\n }\n }\n }, [\n nodeRef,\n disabled,\n noDragClassName,\n handleSelector,\n isSelectable,\n store,\n nodeId,\n selectNodesOnDrag,\n getPointerPosition,\n ]);\n return dragging;\n}\n\nfunction useUpdateNodePositions() {\n const store = useStoreApi();\n const updatePositions = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((params) => {\n const { nodeInternals, nodeExtent, updateNodePositions, getNodes, snapToGrid, snapGrid, onError, nodesDraggable } = store.getState();\n const selectedNodes = getNodes().filter((n) => n.selected && (n.draggable || (nodesDraggable && typeof n.draggable === 'undefined')));\n // by default a node moves 5px on each key press, or 20px if shift is pressed\n // if snap grid is enabled, we use that for the velocity.\n const xVelo = snapToGrid ? snapGrid[0] : 5;\n const yVelo = snapToGrid ? snapGrid[1] : 5;\n const factor = params.isShiftPressed ? 4 : 1;\n const positionDiffX = params.x * xVelo * factor;\n const positionDiffY = params.y * yVelo * factor;\n const nodeUpdates = selectedNodes.map((n) => {\n if (n.positionAbsolute) {\n const nextPosition = { x: n.positionAbsolute.x + positionDiffX, y: n.positionAbsolute.y + positionDiffY };\n if (snapToGrid) {\n nextPosition.x = snapGrid[0] * Math.round(nextPosition.x / snapGrid[0]);\n nextPosition.y = snapGrid[1] * Math.round(nextPosition.y / snapGrid[1]);\n }\n const { positionAbsolute, position } = calcNextPosition(n, nextPosition, nodeInternals, nodeExtent, undefined, onError);\n n.position = position;\n n.positionAbsolute = positionAbsolute;\n }\n return n;\n });\n updateNodePositions(nodeUpdates, true, false);\n }, []);\n return updatePositions;\n}\n\nconst arrowKeyDiffs = {\n ArrowUp: { x: 0, y: -1 },\n ArrowDown: { x: 0, y: 1 },\n ArrowLeft: { x: -1, y: 0 },\n ArrowRight: { x: 1, y: 0 },\n};\nvar wrapNode = (NodeComponent) => {\n const NodeWrapper = ({ id, type, data, xPos, yPos, xPosOrigin, yPosOrigin, selected, onClick, onMouseEnter, onMouseMove, onMouseLeave, onContextMenu, onDoubleClick, style, className, isDraggable, isSelectable, isConnectable, isFocusable, selectNodesOnDrag, sourcePosition, targetPosition, hidden, resizeObserver, dragHandle, zIndex, isParent, noDragClassName, noPanClassName, initialized, disableKeyboardA11y, ariaLabel, rfId, hasHandleBounds, }) => {\n const store = useStoreApi();\n const nodeRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const prevNodeRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const prevSourcePosition = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(sourcePosition);\n const prevTargetPosition = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(targetPosition);\n const prevType = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(type);\n const hasPointerEvents = isSelectable || isDraggable || onClick || onMouseEnter || onMouseMove || onMouseLeave;\n const updatePositions = useUpdateNodePositions();\n const onMouseEnterHandler = getMouseHandler(id, store.getState, onMouseEnter);\n const onMouseMoveHandler = getMouseHandler(id, store.getState, onMouseMove);\n const onMouseLeaveHandler = getMouseHandler(id, store.getState, onMouseLeave);\n const onContextMenuHandler = getMouseHandler(id, store.getState, onContextMenu);\n const onDoubleClickHandler = getMouseHandler(id, store.getState, onDoubleClick);\n const onSelectNodeHandler = (event) => {\n const { nodeDragThreshold } = store.getState();\n if (isSelectable && (!selectNodesOnDrag || !isDraggable || nodeDragThreshold > 0)) {\n // this handler gets called within the drag start event when selectNodesOnDrag=true\n handleNodeClick({\n id,\n store,\n nodeRef,\n });\n }\n if (onClick) {\n const node = store.getState().nodeInternals.get(id);\n if (node) {\n onClick(event, { ...node });\n }\n }\n };\n const onKeyDown = (event) => {\n if (isInputDOMNode(event)) {\n return;\n }\n if (disableKeyboardA11y) {\n return;\n }\n if (elementSelectionKeys.includes(event.key) && isSelectable) {\n const unselect = event.key === 'Escape';\n handleNodeClick({\n id,\n store,\n unselect,\n nodeRef,\n });\n }\n else if (isDraggable && selected && Object.prototype.hasOwnProperty.call(arrowKeyDiffs, event.key)) {\n store.setState({\n ariaLiveMessage: `Moved selected node ${event.key\n .replace('Arrow', '')\n .toLowerCase()}. New position, x: ${~~xPos}, y: ${~~yPos}`,\n });\n updatePositions({\n x: arrowKeyDiffs[event.key].x,\n y: arrowKeyDiffs[event.key].y,\n isShiftPressed: event.shiftKey,\n });\n }\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n return () => {\n if (prevNodeRef.current) {\n resizeObserver?.unobserve(prevNodeRef.current);\n prevNodeRef.current = null;\n }\n };\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (nodeRef.current && !hidden) {\n const currNode = nodeRef.current;\n if (!initialized || !hasHandleBounds || prevNodeRef.current !== currNode) {\n // At this point we always want to make sure that the node gets re-measured / re-initialized.\n // We need to unobserve it first in case it is still observed\n if (prevNodeRef.current) {\n resizeObserver?.unobserve(prevNodeRef.current);\n }\n resizeObserver?.observe(currNode);\n prevNodeRef.current = currNode;\n }\n }\n }, [hidden, initialized, hasHandleBounds]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n // when the user programmatically changes the source or handle position, we re-initialize the node\n const typeChanged = prevType.current !== type;\n const sourcePosChanged = prevSourcePosition.current !== sourcePosition;\n const targetPosChanged = prevTargetPosition.current !== targetPosition;\n if (nodeRef.current && (typeChanged || sourcePosChanged || targetPosChanged)) {\n if (typeChanged) {\n prevType.current = type;\n }\n if (sourcePosChanged) {\n prevSourcePosition.current = sourcePosition;\n }\n if (targetPosChanged) {\n prevTargetPosition.current = targetPosition;\n }\n store.getState().updateNodeDimensions([{ id, nodeElement: nodeRef.current, forceUpdate: true }]);\n }\n }, [id, type, sourcePosition, targetPosition]);\n const dragging = useDrag({\n nodeRef,\n disabled: hidden || !isDraggable,\n noDragClassName,\n handleSelector: dragHandle,\n nodeId: id,\n isSelectable,\n selectNodesOnDrag,\n });\n if (hidden) {\n return null;\n }\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", { className: (0,classcat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])([\n 'react-flow__node',\n `react-flow__node-${type}`,\n {\n // this is overwritable by passing `nopan` as a class name\n [noPanClassName]: isDraggable,\n },\n className,\n {\n selected,\n selectable: isSelectable,\n parent: isParent,\n dragging,\n },\n ]), ref: nodeRef, style: {\n zIndex,\n transform: `translate(${xPosOrigin}px,${yPosOrigin}px)`,\n pointerEvents: hasPointerEvents ? 'all' : 'none',\n visibility: initialized ? 'visible' : 'hidden',\n ...style,\n }, \"data-id\": id, \"data-testid\": `rf__node-${id}`, onMouseEnter: onMouseEnterHandler, onMouseMove: onMouseMoveHandler, onMouseLeave: onMouseLeaveHandler, onContextMenu: onContextMenuHandler, onClick: onSelectNodeHandler, onDoubleClick: onDoubleClickHandler, onKeyDown: isFocusable ? onKeyDown : undefined, tabIndex: isFocusable ? 0 : undefined, role: isFocusable ? 'button' : undefined, \"aria-describedby\": disableKeyboardA11y ? undefined : `${ARIA_NODE_DESC_KEY}-${rfId}`, \"aria-label\": ariaLabel },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(Provider, { value: id },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(NodeComponent, { id: id, data: data, type: type, xPos: xPos, yPos: yPos, selected: selected, isConnectable: isConnectable, sourcePosition: sourcePosition, targetPosition: targetPosition, dragging: dragging, dragHandle: dragHandle, zIndex: zIndex }))));\n };\n NodeWrapper.displayName = 'NodeWrapper';\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(NodeWrapper);\n};\n\n/**\n * The nodes selection rectangle gets displayed when a user\n * made a selection with on or several nodes\n */\nconst selector$7 = (s) => {\n const selectedNodes = s.getNodes().filter((n) => n.selected);\n return {\n ...getNodesBounds(selectedNodes, s.nodeOrigin),\n transformString: `translate(${s.transform[0]}px,${s.transform[1]}px) scale(${s.transform[2]})`,\n userSelectionActive: s.userSelectionActive,\n };\n};\nfunction NodesSelection({ onSelectionContextMenu, noPanClassName, disableKeyboardA11y }) {\n const store = useStoreApi();\n const { width, height, x: left, y: top, transformString, userSelectionActive } = useStore(selector$7, zustand_shallow__WEBPACK_IMPORTED_MODULE_5__.shallow);\n const updatePositions = useUpdateNodePositions();\n const nodeRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!disableKeyboardA11y) {\n nodeRef.current?.focus({\n preventScroll: true,\n });\n }\n }, [disableKeyboardA11y]);\n useDrag({\n nodeRef,\n });\n if (userSelectionActive || !width || !height) {\n return null;\n }\n const onContextMenu = onSelectionContextMenu\n ? (event) => {\n const selectedNodes = store\n .getState()\n .getNodes()\n .filter((n) => n.selected);\n onSelectionContextMenu(event, selectedNodes);\n }\n : undefined;\n const onKeyDown = (event) => {\n if (Object.prototype.hasOwnProperty.call(arrowKeyDiffs, event.key)) {\n updatePositions({\n x: arrowKeyDiffs[event.key].x,\n y: arrowKeyDiffs[event.key].y,\n isShiftPressed: event.shiftKey,\n });\n }\n };\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", { className: (0,classcat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(['react-flow__nodesselection', 'react-flow__container', noPanClassName]), style: {\n transform: transformString,\n } },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", { ref: nodeRef, className: \"react-flow__nodesselection-rect\", onContextMenu: onContextMenu, tabIndex: disableKeyboardA11y ? undefined : -1, onKeyDown: disableKeyboardA11y ? undefined : onKeyDown, style: {\n width,\n height,\n top,\n left,\n } })));\n}\nvar NodesSelection$1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(NodesSelection);\n\nconst selector$6 = (s) => s.nodesSelectionActive;\nconst FlowRenderer = ({ children, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneContextMenu, onPaneScroll, deleteKeyCode, onMove, onMoveStart, onMoveEnd, selectionKeyCode, selectionOnDrag, selectionMode, onSelectionStart, onSelectionEnd, multiSelectionKeyCode, panActivationKeyCode, zoomActivationKeyCode, elementsSelectable, zoomOnScroll, zoomOnPinch, panOnScroll: _panOnScroll, panOnScrollSpeed, panOnScrollMode, zoomOnDoubleClick, panOnDrag: _panOnDrag, defaultViewport, translateExtent, minZoom, maxZoom, preventScrolling, onSelectionContextMenu, noWheelClassName, noPanClassName, disableKeyboardA11y, }) => {\n const nodesSelectionActive = useStore(selector$6);\n const selectionKeyPressed = useKeyPress(selectionKeyCode);\n const panActivationKeyPressed = useKeyPress(panActivationKeyCode);\n const panOnDrag = panActivationKeyPressed || _panOnDrag;\n const panOnScroll = panActivationKeyPressed || _panOnScroll;\n const isSelecting = selectionKeyPressed || (selectionOnDrag && panOnDrag !== true);\n useGlobalKeyHandler({ deleteKeyCode, multiSelectionKeyCode });\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(ZoomPane, { onMove: onMove, onMoveStart: onMoveStart, onMoveEnd: onMoveEnd, onPaneContextMenu: onPaneContextMenu, elementsSelectable: elementsSelectable, zoomOnScroll: zoomOnScroll, zoomOnPinch: zoomOnPinch, panOnScroll: panOnScroll, panOnScrollSpeed: panOnScrollSpeed, panOnScrollMode: panOnScrollMode, zoomOnDoubleClick: zoomOnDoubleClick, panOnDrag: !selectionKeyPressed && panOnDrag, defaultViewport: defaultViewport, translateExtent: translateExtent, minZoom: minZoom, maxZoom: maxZoom, zoomActivationKeyCode: zoomActivationKeyCode, preventScrolling: preventScrolling, noWheelClassName: noWheelClassName, noPanClassName: noPanClassName },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(Pane, { onSelectionStart: onSelectionStart, onSelectionEnd: onSelectionEnd, onPaneClick: onPaneClick, onPaneMouseEnter: onPaneMouseEnter, onPaneMouseMove: onPaneMouseMove, onPaneMouseLeave: onPaneMouseLeave, onPaneContextMenu: onPaneContextMenu, onPaneScroll: onPaneScroll, panOnDrag: panOnDrag, isSelecting: !!isSelecting, selectionMode: selectionMode },\n children,\n nodesSelectionActive && (react__WEBPACK_IMPORTED_MODULE_0__.createElement(NodesSelection$1, { onSelectionContextMenu: onSelectionContextMenu, noPanClassName: noPanClassName, disableKeyboardA11y: disableKeyboardA11y })))));\n};\nFlowRenderer.displayName = 'FlowRenderer';\nvar FlowRenderer$1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(FlowRenderer);\n\nfunction useVisibleNodes(onlyRenderVisible) {\n const nodes = useStore((0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((s) => onlyRenderVisible\n ? getNodesInside(s.nodeInternals, { x: 0, y: 0, width: s.width, height: s.height }, s.transform, true)\n : s.getNodes(), [onlyRenderVisible]));\n return nodes;\n}\n\nfunction createNodeTypes(nodeTypes) {\n const standardTypes = {\n input: wrapNode((nodeTypes.input || InputNode$1)),\n default: wrapNode((nodeTypes.default || DefaultNode$1)),\n output: wrapNode((nodeTypes.output || OutputNode$1)),\n group: wrapNode((nodeTypes.group || GroupNode)),\n };\n const wrappedTypes = {};\n const specialTypes = Object.keys(nodeTypes)\n .filter((k) => !['input', 'default', 'output', 'group'].includes(k))\n .reduce((res, key) => {\n res[key] = wrapNode((nodeTypes[key] || DefaultNode$1));\n return res;\n }, wrappedTypes);\n return {\n ...standardTypes,\n ...specialTypes,\n };\n}\nconst getPositionWithOrigin = ({ x, y, width, height, origin, }) => {\n if (!width || !height) {\n return { x, y };\n }\n if (origin[0] < 0 || origin[1] < 0 || origin[0] > 1 || origin[1] > 1) {\n return { x, y };\n }\n return {\n x: x - width * origin[0],\n y: y - height * origin[1],\n };\n};\n\nconst selector$5 = (s) => ({\n nodesDraggable: s.nodesDraggable,\n nodesConnectable: s.nodesConnectable,\n nodesFocusable: s.nodesFocusable,\n elementsSelectable: s.elementsSelectable,\n updateNodeDimensions: s.updateNodeDimensions,\n onError: s.onError,\n});\nconst NodeRenderer = (props) => {\n const { nodesDraggable, nodesConnectable, nodesFocusable, elementsSelectable, updateNodeDimensions, onError } = useStore(selector$5, zustand_shallow__WEBPACK_IMPORTED_MODULE_5__.shallow);\n const nodes = useVisibleNodes(props.onlyRenderVisibleElements);\n const resizeObserverRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const resizeObserver = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n if (typeof ResizeObserver === 'undefined') {\n return null;\n }\n const observer = new ResizeObserver((entries) => {\n const updates = entries.map((entry) => ({\n id: entry.target.getAttribute('data-id'),\n nodeElement: entry.target,\n forceUpdate: true,\n }));\n updateNodeDimensions(updates);\n });\n resizeObserverRef.current = observer;\n return observer;\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n return () => {\n resizeObserverRef?.current?.disconnect();\n };\n }, []);\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", { className: \"react-flow__nodes\", style: containerStyle }, nodes.map((node) => {\n let nodeType = node.type || 'default';\n if (!props.nodeTypes[nodeType]) {\n onError?.('003', errorMessages['error003'](nodeType));\n nodeType = 'default';\n }\n const NodeComponent = (props.nodeTypes[nodeType] || props.nodeTypes.default);\n const isDraggable = !!(node.draggable || (nodesDraggable && typeof node.draggable === 'undefined'));\n const isSelectable = !!(node.selectable || (elementsSelectable && typeof node.selectable === 'undefined'));\n const isConnectable = !!(node.connectable || (nodesConnectable && typeof node.connectable === 'undefined'));\n const isFocusable = !!(node.focusable || (nodesFocusable && typeof node.focusable === 'undefined'));\n const clampedPosition = props.nodeExtent\n ? clampPosition(node.positionAbsolute, props.nodeExtent)\n : node.positionAbsolute;\n const posX = clampedPosition?.x ?? 0;\n const posY = clampedPosition?.y ?? 0;\n const posOrigin = getPositionWithOrigin({\n x: posX,\n y: posY,\n width: node.width ?? 0,\n height: node.height ?? 0,\n origin: props.nodeOrigin,\n });\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(NodeComponent, { key: node.id, id: node.id, className: node.className, style: node.style, type: nodeType, data: node.data, sourcePosition: node.sourcePosition || Position.Bottom, targetPosition: node.targetPosition || Position.Top, hidden: node.hidden, xPos: posX, yPos: posY, xPosOrigin: posOrigin.x, yPosOrigin: posOrigin.y, selectNodesOnDrag: props.selectNodesOnDrag, onClick: props.onNodeClick, onMouseEnter: props.onNodeMouseEnter, onMouseMove: props.onNodeMouseMove, onMouseLeave: props.onNodeMouseLeave, onContextMenu: props.onNodeContextMenu, onDoubleClick: props.onNodeDoubleClick, selected: !!node.selected, isDraggable: isDraggable, isSelectable: isSelectable, isConnectable: isConnectable, isFocusable: isFocusable, resizeObserver: resizeObserver, dragHandle: node.dragHandle, zIndex: node[internalsSymbol]?.z ?? 0, isParent: !!node[internalsSymbol]?.isParent, noDragClassName: props.noDragClassName, noPanClassName: props.noPanClassName, initialized: !!node.width && !!node.height, rfId: props.rfId, disableKeyboardA11y: props.disableKeyboardA11y, ariaLabel: node.ariaLabel, hasHandleBounds: !!node[internalsSymbol]?.handleBounds }));\n })));\n};\nNodeRenderer.displayName = 'NodeRenderer';\nvar NodeRenderer$1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(NodeRenderer);\n\nconst shiftX = (x, shift, position) => {\n if (position === Position.Left)\n return x - shift;\n if (position === Position.Right)\n return x + shift;\n return x;\n};\nconst shiftY = (y, shift, position) => {\n if (position === Position.Top)\n return y - shift;\n if (position === Position.Bottom)\n return y + shift;\n return y;\n};\nconst EdgeUpdaterClassName = 'react-flow__edgeupdater';\nconst EdgeAnchor = ({ position, centerX, centerY, radius = 10, onMouseDown, onMouseEnter, onMouseOut, type, }) => (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"circle\", { onMouseDown: onMouseDown, onMouseEnter: onMouseEnter, onMouseOut: onMouseOut, className: (0,classcat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])([EdgeUpdaterClassName, `${EdgeUpdaterClassName}-${type}`]), cx: shiftX(centerX, radius, position), cy: shiftY(centerY, radius, position), r: radius, stroke: \"transparent\", fill: \"transparent\" }));\n\nconst alwaysValidConnection = () => true;\nvar wrapEdge = (EdgeComponent) => {\n const EdgeWrapper = ({ id, className, type, data, onClick, onEdgeDoubleClick, selected, animated, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, source, target, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, elementsSelectable, hidden, sourceHandleId, targetHandleId, onContextMenu, onMouseEnter, onMouseMove, onMouseLeave, reconnectRadius, onReconnect, onReconnectStart, onReconnectEnd, markerEnd, markerStart, rfId, ariaLabel, isFocusable, isReconnectable, pathOptions, interactionWidth, disableKeyboardA11y, }) => {\n const edgeRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const [updateHover, setUpdateHover] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n const [updating, setUpdating] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n const store = useStoreApi();\n const markerStartUrl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => `url('#${getMarkerId(markerStart, rfId)}')`, [markerStart, rfId]);\n const markerEndUrl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => `url('#${getMarkerId(markerEnd, rfId)}')`, [markerEnd, rfId]);\n if (hidden) {\n return null;\n }\n const onEdgeClick = (event) => {\n const { edges, addSelectedEdges, unselectNodesAndEdges, multiSelectionActive } = store.getState();\n const edge = edges.find((e) => e.id === id);\n if (!edge) {\n return;\n }\n if (elementsSelectable) {\n store.setState({ nodesSelectionActive: false });\n if (edge.selected && multiSelectionActive) {\n unselectNodesAndEdges({ nodes: [], edges: [edge] });\n edgeRef.current?.blur();\n }\n else {\n addSelectedEdges([id]);\n }\n }\n if (onClick) {\n onClick(event, edge);\n }\n };\n const onEdgeDoubleClickHandler = getMouseHandler$1(id, store.getState, onEdgeDoubleClick);\n const onEdgeContextMenu = getMouseHandler$1(id, store.getState, onContextMenu);\n const onEdgeMouseEnter = getMouseHandler$1(id, store.getState, onMouseEnter);\n const onEdgeMouseMove = getMouseHandler$1(id, store.getState, onMouseMove);\n const onEdgeMouseLeave = getMouseHandler$1(id, store.getState, onMouseLeave);\n const handleEdgeUpdater = (event, isSourceHandle) => {\n // avoid triggering edge updater if mouse btn is not left\n if (event.button !== 0) {\n return;\n }\n const { edges, isValidConnection: isValidConnectionStore } = store.getState();\n const nodeId = isSourceHandle ? target : source;\n const handleId = (isSourceHandle ? targetHandleId : sourceHandleId) || null;\n const handleType = isSourceHandle ? 'target' : 'source';\n const isValidConnection = isValidConnectionStore || alwaysValidConnection;\n const isTarget = isSourceHandle;\n const edge = edges.find((e) => e.id === id);\n setUpdating(true);\n onReconnectStart?.(event, edge, handleType);\n const _onReconnectEnd = (evt) => {\n setUpdating(false);\n onReconnectEnd?.(evt, edge, handleType);\n };\n const onConnectEdge = (connection) => onReconnect?.(edge, connection);\n handlePointerDown({\n event,\n handleId,\n nodeId,\n onConnect: onConnectEdge,\n isTarget,\n getState: store.getState,\n setState: store.setState,\n isValidConnection,\n edgeUpdaterType: handleType,\n onReconnectEnd: _onReconnectEnd,\n });\n };\n const onEdgeUpdaterSourceMouseDown = (event) => handleEdgeUpdater(event, true);\n const onEdgeUpdaterTargetMouseDown = (event) => handleEdgeUpdater(event, false);\n const onEdgeUpdaterMouseEnter = () => setUpdateHover(true);\n const onEdgeUpdaterMouseOut = () => setUpdateHover(false);\n const inactive = !elementsSelectable && !onClick;\n const onKeyDown = (event) => {\n if (!disableKeyboardA11y && elementSelectionKeys.includes(event.key) && elementsSelectable) {\n const { unselectNodesAndEdges, addSelectedEdges, edges } = store.getState();\n const unselect = event.key === 'Escape';\n if (unselect) {\n edgeRef.current?.blur();\n unselectNodesAndEdges({ edges: [edges.find((e) => e.id === id)] });\n }\n else {\n addSelectedEdges([id]);\n }\n }\n };\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"g\", { className: (0,classcat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])([\n 'react-flow__edge',\n `react-flow__edge-${type}`,\n className,\n { selected, animated, inactive, updating: updateHover },\n ]), onClick: onEdgeClick, onDoubleClick: onEdgeDoubleClickHandler, onContextMenu: onEdgeContextMenu, onMouseEnter: onEdgeMouseEnter, onMouseMove: onEdgeMouseMove, onMouseLeave: onEdgeMouseLeave, onKeyDown: isFocusable ? onKeyDown : undefined, tabIndex: isFocusable ? 0 : undefined, role: isFocusable ? 'button' : 'img', \"data-testid\": `rf__edge-${id}`, \"aria-label\": ariaLabel === null ? undefined : ariaLabel ? ariaLabel : `Edge from ${source} to ${target}`, \"aria-describedby\": isFocusable ? `${ARIA_EDGE_DESC_KEY}-${rfId}` : undefined, ref: edgeRef },\n !updating && (react__WEBPACK_IMPORTED_MODULE_0__.createElement(EdgeComponent, { id: id, source: source, target: target, selected: selected, animated: animated, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, data: data, style: style, sourceX: sourceX, sourceY: sourceY, targetX: targetX, targetY: targetY, sourcePosition: sourcePosition, targetPosition: targetPosition, sourceHandleId: sourceHandleId, targetHandleId: targetHandleId, markerStart: markerStartUrl, markerEnd: markerEndUrl, pathOptions: pathOptions, interactionWidth: interactionWidth })),\n isReconnectable && (react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null,\n (isReconnectable === 'source' || isReconnectable === true) && (react__WEBPACK_IMPORTED_MODULE_0__.createElement(EdgeAnchor, { position: sourcePosition, centerX: sourceX, centerY: sourceY, radius: reconnectRadius, onMouseDown: onEdgeUpdaterSourceMouseDown, onMouseEnter: onEdgeUpdaterMouseEnter, onMouseOut: onEdgeUpdaterMouseOut, type: \"source\" })),\n (isReconnectable === 'target' || isReconnectable === true) && (react__WEBPACK_IMPORTED_MODULE_0__.createElement(EdgeAnchor, { position: targetPosition, centerX: targetX, centerY: targetY, radius: reconnectRadius, onMouseDown: onEdgeUpdaterTargetMouseDown, onMouseEnter: onEdgeUpdaterMouseEnter, onMouseOut: onEdgeUpdaterMouseOut, type: \"target\" }))))));\n };\n EdgeWrapper.displayName = 'EdgeWrapper';\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(EdgeWrapper);\n};\n\nfunction createEdgeTypes(edgeTypes) {\n const standardTypes = {\n default: wrapEdge((edgeTypes.default || BezierEdge)),\n straight: wrapEdge((edgeTypes.bezier || StraightEdge)),\n step: wrapEdge((edgeTypes.step || StepEdge)),\n smoothstep: wrapEdge((edgeTypes.step || SmoothStepEdge)),\n simplebezier: wrapEdge((edgeTypes.simplebezier || SimpleBezierEdge)),\n };\n const wrappedTypes = {};\n const specialTypes = Object.keys(edgeTypes)\n .filter((k) => !['default', 'bezier'].includes(k))\n .reduce((res, key) => {\n res[key] = wrapEdge((edgeTypes[key] || BezierEdge));\n return res;\n }, wrappedTypes);\n return {\n ...standardTypes,\n ...specialTypes,\n };\n}\nfunction getHandlePosition(position, nodeRect, handle = null) {\n const x = (handle?.x || 0) + nodeRect.x;\n const y = (handle?.y || 0) + nodeRect.y;\n const width = handle?.width || nodeRect.width;\n const height = handle?.height || nodeRect.height;\n switch (position) {\n case Position.Top:\n return {\n x: x + width / 2,\n y,\n };\n case Position.Right:\n return {\n x: x + width,\n y: y + height / 2,\n };\n case Position.Bottom:\n return {\n x: x + width / 2,\n y: y + height,\n };\n case Position.Left:\n return {\n x,\n y: y + height / 2,\n };\n }\n}\nfunction getHandle(bounds, handleId) {\n if (!bounds) {\n return null;\n }\n if (bounds.length === 1 || !handleId) {\n return bounds[0];\n }\n else if (handleId) {\n return bounds.find((d) => d.id === handleId) || null;\n }\n return null;\n}\nconst getEdgePositions = (sourceNodeRect, sourceHandle, sourcePosition, targetNodeRect, targetHandle, targetPosition) => {\n const sourceHandlePos = getHandlePosition(sourcePosition, sourceNodeRect, sourceHandle);\n const targetHandlePos = getHandlePosition(targetPosition, targetNodeRect, targetHandle);\n return {\n sourceX: sourceHandlePos.x,\n sourceY: sourceHandlePos.y,\n targetX: targetHandlePos.x,\n targetY: targetHandlePos.y,\n };\n};\nfunction isEdgeVisible({ sourcePos, targetPos, sourceWidth, sourceHeight, targetWidth, targetHeight, width, height, transform, }) {\n const edgeBox = {\n x: Math.min(sourcePos.x, targetPos.x),\n y: Math.min(sourcePos.y, targetPos.y),\n x2: Math.max(sourcePos.x + sourceWidth, targetPos.x + targetWidth),\n y2: Math.max(sourcePos.y + sourceHeight, targetPos.y + targetHeight),\n };\n if (edgeBox.x === edgeBox.x2) {\n edgeBox.x2 += 1;\n }\n if (edgeBox.y === edgeBox.y2) {\n edgeBox.y2 += 1;\n }\n const viewBox = rectToBox({\n x: (0 - transform[0]) / transform[2],\n y: (0 - transform[1]) / transform[2],\n width: width / transform[2],\n height: height / transform[2],\n });\n const xOverlap = Math.max(0, Math.min(viewBox.x2, edgeBox.x2) - Math.max(viewBox.x, edgeBox.x));\n const yOverlap = Math.max(0, Math.min(viewBox.y2, edgeBox.y2) - Math.max(viewBox.y, edgeBox.y));\n const overlappingArea = Math.ceil(xOverlap * yOverlap);\n return overlappingArea > 0;\n}\nfunction getNodeData(node) {\n const handleBounds = node?.[internalsSymbol]?.handleBounds || null;\n const isValid = handleBounds &&\n node?.width &&\n node?.height &&\n typeof node?.positionAbsolute?.x !== 'undefined' &&\n typeof node?.positionAbsolute?.y !== 'undefined';\n return [\n {\n x: node?.positionAbsolute?.x || 0,\n y: node?.positionAbsolute?.y || 0,\n width: node?.width || 0,\n height: node?.height || 0,\n },\n handleBounds,\n !!isValid,\n ];\n}\n\nconst defaultEdgeTree = [{ level: 0, isMaxLevel: true, edges: [] }];\nfunction groupEdgesByZLevel(edges, nodeInternals, elevateEdgesOnSelect = false) {\n let maxLevel = -1;\n const levelLookup = edges.reduce((tree, edge) => {\n const hasZIndex = isNumeric(edge.zIndex);\n let z = hasZIndex ? edge.zIndex : 0;\n if (elevateEdgesOnSelect) {\n const targetNode = nodeInternals.get(edge.target);\n const sourceNode = nodeInternals.get(edge.source);\n const edgeOrConnectedNodeSelected = edge.selected || targetNode?.selected || sourceNode?.selected;\n const selectedZIndex = Math.max(sourceNode?.[internalsSymbol]?.z || 0, targetNode?.[internalsSymbol]?.z || 0, 1000);\n z = (hasZIndex ? edge.zIndex : 0) + (edgeOrConnectedNodeSelected ? selectedZIndex : 0);\n }\n if (tree[z]) {\n tree[z].push(edge);\n }\n else {\n tree[z] = [edge];\n }\n maxLevel = z > maxLevel ? z : maxLevel;\n return tree;\n }, {});\n const edgeTree = Object.entries(levelLookup).map(([key, edges]) => {\n const level = +key;\n return {\n edges,\n level,\n isMaxLevel: level === maxLevel,\n };\n });\n if (edgeTree.length === 0) {\n return defaultEdgeTree;\n }\n return edgeTree;\n}\nfunction useVisibleEdges(onlyRenderVisible, nodeInternals, elevateEdgesOnSelect) {\n const edges = useStore((0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((s) => {\n if (!onlyRenderVisible) {\n return s.edges;\n }\n return s.edges.filter((e) => {\n const sourceNode = nodeInternals.get(e.source);\n const targetNode = nodeInternals.get(e.target);\n return (sourceNode?.width &&\n sourceNode?.height &&\n targetNode?.width &&\n targetNode?.height &&\n isEdgeVisible({\n sourcePos: sourceNode.positionAbsolute || { x: 0, y: 0 },\n targetPos: targetNode.positionAbsolute || { x: 0, y: 0 },\n sourceWidth: sourceNode.width,\n sourceHeight: sourceNode.height,\n targetWidth: targetNode.width,\n targetHeight: targetNode.height,\n width: s.width,\n height: s.height,\n transform: s.transform,\n }));\n });\n }, [onlyRenderVisible, nodeInternals]));\n return groupEdgesByZLevel(edges, nodeInternals, elevateEdgesOnSelect);\n}\n\nconst ArrowSymbol = ({ color = 'none', strokeWidth = 1 }) => {\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"polyline\", { style: {\n stroke: color,\n strokeWidth,\n }, strokeLinecap: \"round\", strokeLinejoin: \"round\", fill: \"none\", points: \"-5,-4 0,0 -5,4\" }));\n};\nconst ArrowClosedSymbol = ({ color = 'none', strokeWidth = 1 }) => {\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"polyline\", { style: {\n stroke: color,\n fill: color,\n strokeWidth,\n }, strokeLinecap: \"round\", strokeLinejoin: \"round\", points: \"-5,-4 0,0 -5,4 -5,-4\" }));\n};\nconst MarkerSymbols = {\n [MarkerType.Arrow]: ArrowSymbol,\n [MarkerType.ArrowClosed]: ArrowClosedSymbol,\n};\nfunction useMarkerSymbol(type) {\n const store = useStoreApi();\n const symbol = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n const symbolExists = Object.prototype.hasOwnProperty.call(MarkerSymbols, type);\n if (!symbolExists) {\n store.getState().onError?.('009', errorMessages['error009'](type));\n return null;\n }\n return MarkerSymbols[type];\n }, [type]);\n return symbol;\n}\n\nconst Marker = ({ id, type, color, width = 12.5, height = 12.5, markerUnits = 'strokeWidth', strokeWidth, orient = 'auto-start-reverse', }) => {\n const Symbol = useMarkerSymbol(type);\n if (!Symbol) {\n return null;\n }\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"marker\", { className: \"react-flow__arrowhead\", id: id, markerWidth: `${width}`, markerHeight: `${height}`, viewBox: \"-10 -10 20 20\", markerUnits: markerUnits, orient: orient, refX: \"0\", refY: \"0\" },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(Symbol, { color: color, strokeWidth: strokeWidth })));\n};\nconst markerSelector = ({ defaultColor, rfId }) => (s) => {\n const ids = [];\n return s.edges\n .reduce((markers, edge) => {\n [edge.markerStart, edge.markerEnd].forEach((marker) => {\n if (marker && typeof marker === 'object') {\n const markerId = getMarkerId(marker, rfId);\n if (!ids.includes(markerId)) {\n markers.push({ id: markerId, color: marker.color || defaultColor, ...marker });\n ids.push(markerId);\n }\n }\n });\n return markers;\n }, [])\n .sort((a, b) => a.id.localeCompare(b.id));\n};\n// when you have multiple flows on a page and you hide the first one, the other ones have no markers anymore\n// when they do have markers with the same ids. To prevent this the user can pass a unique id to the react flow wrapper\n// that we can then use for creating our unique marker ids\nconst MarkerDefinitions = ({ defaultColor, rfId }) => {\n const markers = useStore((0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(markerSelector({ defaultColor, rfId }), [defaultColor, rfId]), \n // the id includes all marker options, so we just need to look at that part of the marker\n (a, b) => !(a.length !== b.length || a.some((m, i) => m.id !== b[i].id)));\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"defs\", null, markers.map((marker) => (react__WEBPACK_IMPORTED_MODULE_0__.createElement(Marker, { id: marker.id, key: marker.id, type: marker.type, color: marker.color, width: marker.width, height: marker.height, markerUnits: marker.markerUnits, strokeWidth: marker.strokeWidth, orient: marker.orient })))));\n};\nMarkerDefinitions.displayName = 'MarkerDefinitions';\nvar MarkerDefinitions$1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(MarkerDefinitions);\n\nconst selector$4 = (s) => ({\n nodesConnectable: s.nodesConnectable,\n edgesFocusable: s.edgesFocusable,\n edgesUpdatable: s.edgesUpdatable,\n elementsSelectable: s.elementsSelectable,\n width: s.width,\n height: s.height,\n connectionMode: s.connectionMode,\n nodeInternals: s.nodeInternals,\n onError: s.onError,\n});\nconst EdgeRenderer = ({ defaultMarkerColor, onlyRenderVisibleElements, elevateEdgesOnSelect, rfId, edgeTypes, noPanClassName, onEdgeContextMenu, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, onEdgeClick, onEdgeDoubleClick, onReconnect, onReconnectStart, onReconnectEnd, reconnectRadius, children, disableKeyboardA11y, }) => {\n const { edgesFocusable, edgesUpdatable, elementsSelectable, width, height, connectionMode, nodeInternals, onError } = useStore(selector$4, zustand_shallow__WEBPACK_IMPORTED_MODULE_5__.shallow);\n const edgeTree = useVisibleEdges(onlyRenderVisibleElements, nodeInternals, elevateEdgesOnSelect);\n if (!width) {\n return null;\n }\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null,\n edgeTree.map(({ level, edges, isMaxLevel }) => (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", { key: level, style: { zIndex: level }, width: width, height: height, className: \"react-flow__edges react-flow__container\" },\n isMaxLevel && react__WEBPACK_IMPORTED_MODULE_0__.createElement(MarkerDefinitions$1, { defaultColor: defaultMarkerColor, rfId: rfId }),\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"g\", null, edges.map((edge) => {\n const [sourceNodeRect, sourceHandleBounds, sourceIsValid] = getNodeData(nodeInternals.get(edge.source));\n const [targetNodeRect, targetHandleBounds, targetIsValid] = getNodeData(nodeInternals.get(edge.target));\n if (!sourceIsValid || !targetIsValid) {\n return null;\n }\n let edgeType = edge.type || 'default';\n if (!edgeTypes[edgeType]) {\n onError?.('011', errorMessages['error011'](edgeType));\n edgeType = 'default';\n }\n const EdgeComponent = edgeTypes[edgeType] || edgeTypes.default;\n // when connection type is loose we can define all handles as sources and connect source -> source\n const targetNodeHandles = connectionMode === ConnectionMode.Strict\n ? targetHandleBounds.target\n : (targetHandleBounds.target ?? []).concat(targetHandleBounds.source ?? []);\n const sourceHandle = getHandle(sourceHandleBounds.source, edge.sourceHandle);\n const targetHandle = getHandle(targetNodeHandles, edge.targetHandle);\n const sourcePosition = sourceHandle?.position || Position.Bottom;\n const targetPosition = targetHandle?.position || Position.Top;\n const isFocusable = !!(edge.focusable || (edgesFocusable && typeof edge.focusable === 'undefined'));\n const edgeReconnectable = edge.reconnectable || edge.updatable;\n const isReconnectable = typeof onReconnect !== 'undefined' &&\n (edgeReconnectable || (edgesUpdatable && typeof edgeReconnectable === 'undefined'));\n if (!sourceHandle || !targetHandle) {\n onError?.('008', errorMessages['error008'](sourceHandle, edge));\n return null;\n }\n const { sourceX, sourceY, targetX, targetY } = getEdgePositions(sourceNodeRect, sourceHandle, sourcePosition, targetNodeRect, targetHandle, targetPosition);\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(EdgeComponent, { key: edge.id, id: edge.id, className: (0,classcat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])([edge.className, noPanClassName]), type: edgeType, data: edge.data, selected: !!edge.selected, animated: !!edge.animated, hidden: !!edge.hidden, label: edge.label, labelStyle: edge.labelStyle, labelShowBg: edge.labelShowBg, labelBgStyle: edge.labelBgStyle, labelBgPadding: edge.labelBgPadding, labelBgBorderRadius: edge.labelBgBorderRadius, style: edge.style, source: edge.source, target: edge.target, sourceHandleId: edge.sourceHandle, targetHandleId: edge.targetHandle, markerEnd: edge.markerEnd, markerStart: edge.markerStart, sourceX: sourceX, sourceY: sourceY, targetX: targetX, targetY: targetY, sourcePosition: sourcePosition, targetPosition: targetPosition, elementsSelectable: elementsSelectable, onContextMenu: onEdgeContextMenu, onMouseEnter: onEdgeMouseEnter, onMouseMove: onEdgeMouseMove, onMouseLeave: onEdgeMouseLeave, onClick: onEdgeClick, onEdgeDoubleClick: onEdgeDoubleClick, onReconnect: onReconnect, onReconnectStart: onReconnectStart, onReconnectEnd: onReconnectEnd, reconnectRadius: reconnectRadius, rfId: rfId, ariaLabel: edge.ariaLabel, isFocusable: isFocusable, isReconnectable: isReconnectable, pathOptions: 'pathOptions' in edge ? edge.pathOptions : undefined, interactionWidth: edge.interactionWidth, disableKeyboardA11y: disableKeyboardA11y }));\n }))))),\n children));\n};\nEdgeRenderer.displayName = 'EdgeRenderer';\nvar EdgeRenderer$1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(EdgeRenderer);\n\nconst selector$3 = (s) => `translate(${s.transform[0]}px,${s.transform[1]}px) scale(${s.transform[2]})`;\nfunction Viewport({ children }) {\n const transform = useStore(selector$3);\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", { className: \"react-flow__viewport react-flow__container\", style: { transform } }, children));\n}\n\nfunction useOnInitHandler(onInit) {\n const rfInstance = useReactFlow();\n const isInitialized = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!isInitialized.current && rfInstance.viewportInitialized && onInit) {\n setTimeout(() => onInit(rfInstance), 1);\n isInitialized.current = true;\n }\n }, [onInit, rfInstance.viewportInitialized]);\n}\n\nconst oppositePosition = {\n [Position.Left]: Position.Right,\n [Position.Right]: Position.Left,\n [Position.Top]: Position.Bottom,\n [Position.Bottom]: Position.Top,\n};\nconst ConnectionLine = ({ nodeId, handleType, style, type = ConnectionLineType.Bezier, CustomComponent, connectionStatus, }) => {\n const { fromNode, handleId, toX, toY, connectionMode } = useStore((0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((s) => ({\n fromNode: s.nodeInternals.get(nodeId),\n handleId: s.connectionHandleId,\n toX: (s.connectionPosition.x - s.transform[0]) / s.transform[2],\n toY: (s.connectionPosition.y - s.transform[1]) / s.transform[2],\n connectionMode: s.connectionMode,\n }), [nodeId]), zustand_shallow__WEBPACK_IMPORTED_MODULE_5__.shallow);\n const fromHandleBounds = fromNode?.[internalsSymbol]?.handleBounds;\n let handleBounds = fromHandleBounds?.[handleType];\n if (connectionMode === ConnectionMode.Loose) {\n handleBounds = handleBounds ? handleBounds : fromHandleBounds?.[handleType === 'source' ? 'target' : 'source'];\n }\n if (!fromNode || !handleBounds) {\n return null;\n }\n const fromHandle = handleId ? handleBounds.find((d) => d.id === handleId) : handleBounds[0];\n const fromHandleX = fromHandle ? fromHandle.x + fromHandle.width / 2 : (fromNode.width ?? 0) / 2;\n const fromHandleY = fromHandle ? fromHandle.y + fromHandle.height / 2 : fromNode.height ?? 0;\n const fromX = (fromNode.positionAbsolute?.x ?? 0) + fromHandleX;\n const fromY = (fromNode.positionAbsolute?.y ?? 0) + fromHandleY;\n const fromPosition = fromHandle?.position;\n const toPosition = fromPosition ? oppositePosition[fromPosition] : null;\n if (!fromPosition || !toPosition) {\n return null;\n }\n if (CustomComponent) {\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(CustomComponent, { connectionLineType: type, connectionLineStyle: style, fromNode: fromNode, fromHandle: fromHandle, fromX: fromX, fromY: fromY, toX: toX, toY: toY, fromPosition: fromPosition, toPosition: toPosition, connectionStatus: connectionStatus }));\n }\n let dAttr = '';\n const pathParams = {\n sourceX: fromX,\n sourceY: fromY,\n sourcePosition: fromPosition,\n targetX: toX,\n targetY: toY,\n targetPosition: toPosition,\n };\n if (type === ConnectionLineType.Bezier) {\n // we assume the destination position is opposite to the source position\n [dAttr] = getBezierPath(pathParams);\n }\n else if (type === ConnectionLineType.Step) {\n [dAttr] = getSmoothStepPath({\n ...pathParams,\n borderRadius: 0,\n });\n }\n else if (type === ConnectionLineType.SmoothStep) {\n [dAttr] = getSmoothStepPath(pathParams);\n }\n else if (type === ConnectionLineType.SimpleBezier) {\n [dAttr] = getSimpleBezierPath(pathParams);\n }\n else {\n dAttr = `M${fromX},${fromY} ${toX},${toY}`;\n }\n return react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", { d: dAttr, fill: \"none\", className: \"react-flow__connection-path\", style: style });\n};\nConnectionLine.displayName = 'ConnectionLine';\nconst selector$2 = (s) => ({\n nodeId: s.connectionNodeId,\n handleType: s.connectionHandleType,\n nodesConnectable: s.nodesConnectable,\n connectionStatus: s.connectionStatus,\n width: s.width,\n height: s.height,\n});\nfunction ConnectionLineWrapper({ containerStyle, style, type, component }) {\n const { nodeId, handleType, nodesConnectable, width, height, connectionStatus } = useStore(selector$2, zustand_shallow__WEBPACK_IMPORTED_MODULE_5__.shallow);\n const isValid = !!(nodeId && handleType && width && nodesConnectable);\n if (!isValid) {\n return null;\n }\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", { style: containerStyle, width: width, height: height, className: \"react-flow__edges react-flow__connectionline react-flow__container\" },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"g\", { className: (0,classcat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(['react-flow__connection', connectionStatus]) },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(ConnectionLine, { nodeId: nodeId, handleType: handleType, style: style, type: type, CustomComponent: component, connectionStatus: connectionStatus }))));\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction useNodeOrEdgeTypes(nodeOrEdgeTypes, createTypes) {\n const typesKeysRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const store = useStoreApi();\n const typesParsed = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n if (true) {\n const typeKeys = Object.keys(nodeOrEdgeTypes);\n if ((0,zustand_shallow__WEBPACK_IMPORTED_MODULE_5__.shallow)(typesKeysRef.current, typeKeys)) {\n store.getState().onError?.('002', errorMessages['error002']());\n }\n typesKeysRef.current = typeKeys;\n }\n return createTypes(nodeOrEdgeTypes);\n }, [nodeOrEdgeTypes]);\n return typesParsed;\n}\n\nconst GraphView = ({ nodeTypes, edgeTypes, onMove, onMoveStart, onMoveEnd, onInit, onNodeClick, onEdgeClick, onNodeDoubleClick, onEdgeDoubleClick, onNodeMouseEnter, onNodeMouseMove, onNodeMouseLeave, onNodeContextMenu, onSelectionContextMenu, onSelectionStart, onSelectionEnd, connectionLineType, connectionLineStyle, connectionLineComponent, connectionLineContainerStyle, selectionKeyCode, selectionOnDrag, selectionMode, multiSelectionKeyCode, panActivationKeyCode, zoomActivationKeyCode, deleteKeyCode, onlyRenderVisibleElements, elementsSelectable, selectNodesOnDrag, defaultViewport, translateExtent, minZoom, maxZoom, preventScrolling, defaultMarkerColor, zoomOnScroll, zoomOnPinch, panOnScroll, panOnScrollSpeed, panOnScrollMode, zoomOnDoubleClick, panOnDrag, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneScroll, onPaneContextMenu, onEdgeContextMenu, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, onReconnect, onReconnectStart, onReconnectEnd, reconnectRadius, noDragClassName, noWheelClassName, noPanClassName, elevateEdgesOnSelect, disableKeyboardA11y, nodeOrigin, nodeExtent, rfId, }) => {\n const nodeTypesWrapped = useNodeOrEdgeTypes(nodeTypes, createNodeTypes);\n const edgeTypesWrapped = useNodeOrEdgeTypes(edgeTypes, createEdgeTypes);\n useOnInitHandler(onInit);\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(FlowRenderer$1, { onPaneClick: onPaneClick, onPaneMouseEnter: onPaneMouseEnter, onPaneMouseMove: onPaneMouseMove, onPaneMouseLeave: onPaneMouseLeave, onPaneContextMenu: onPaneContextMenu, onPaneScroll: onPaneScroll, deleteKeyCode: deleteKeyCode, selectionKeyCode: selectionKeyCode, selectionOnDrag: selectionOnDrag, selectionMode: selectionMode, onSelectionStart: onSelectionStart, onSelectionEnd: onSelectionEnd, multiSelectionKeyCode: multiSelectionKeyCode, panActivationKeyCode: panActivationKeyCode, zoomActivationKeyCode: zoomActivationKeyCode, elementsSelectable: elementsSelectable, onMove: onMove, onMoveStart: onMoveStart, onMoveEnd: onMoveEnd, zoomOnScroll: zoomOnScroll, zoomOnPinch: zoomOnPinch, zoomOnDoubleClick: zoomOnDoubleClick, panOnScroll: panOnScroll, panOnScrollSpeed: panOnScrollSpeed, panOnScrollMode: panOnScrollMode, panOnDrag: panOnDrag, defaultViewport: defaultViewport, translateExtent: translateExtent, minZoom: minZoom, maxZoom: maxZoom, onSelectionContextMenu: onSelectionContextMenu, preventScrolling: preventScrolling, noDragClassName: noDragClassName, noWheelClassName: noWheelClassName, noPanClassName: noPanClassName, disableKeyboardA11y: disableKeyboardA11y },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(Viewport, null,\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(EdgeRenderer$1, { edgeTypes: edgeTypesWrapped, onEdgeClick: onEdgeClick, onEdgeDoubleClick: onEdgeDoubleClick, onlyRenderVisibleElements: onlyRenderVisibleElements, onEdgeContextMenu: onEdgeContextMenu, onEdgeMouseEnter: onEdgeMouseEnter, onEdgeMouseMove: onEdgeMouseMove, onEdgeMouseLeave: onEdgeMouseLeave, onReconnect: onReconnect, onReconnectStart: onReconnectStart, onReconnectEnd: onReconnectEnd, reconnectRadius: reconnectRadius, defaultMarkerColor: defaultMarkerColor, noPanClassName: noPanClassName, elevateEdgesOnSelect: !!elevateEdgesOnSelect, disableKeyboardA11y: disableKeyboardA11y, rfId: rfId },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(ConnectionLineWrapper, { style: connectionLineStyle, type: connectionLineType, component: connectionLineComponent, containerStyle: connectionLineContainerStyle })),\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", { className: \"react-flow__edgelabel-renderer\" }),\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(NodeRenderer$1, { nodeTypes: nodeTypesWrapped, onNodeClick: onNodeClick, onNodeDoubleClick: onNodeDoubleClick, onNodeMouseEnter: onNodeMouseEnter, onNodeMouseMove: onNodeMouseMove, onNodeMouseLeave: onNodeMouseLeave, onNodeContextMenu: onNodeContextMenu, selectNodesOnDrag: selectNodesOnDrag, onlyRenderVisibleElements: onlyRenderVisibleElements, noPanClassName: noPanClassName, noDragClassName: noDragClassName, disableKeyboardA11y: disableKeyboardA11y, nodeOrigin: nodeOrigin, nodeExtent: nodeExtent, rfId: rfId }))));\n};\nGraphView.displayName = 'GraphView';\nvar GraphView$1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(GraphView);\n\nconst infiniteExtent = [\n [Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY],\n [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY],\n];\nconst initialState = {\n rfId: '1',\n width: 0,\n height: 0,\n transform: [0, 0, 1],\n nodeInternals: new Map(),\n edges: [],\n onNodesChange: null,\n onEdgesChange: null,\n hasDefaultNodes: false,\n hasDefaultEdges: false,\n d3Zoom: null,\n d3Selection: null,\n d3ZoomHandler: undefined,\n minZoom: 0.5,\n maxZoom: 2,\n translateExtent: infiniteExtent,\n nodeExtent: infiniteExtent,\n nodesSelectionActive: false,\n userSelectionActive: false,\n userSelectionRect: null,\n connectionNodeId: null,\n connectionHandleId: null,\n connectionHandleType: 'source',\n connectionPosition: { x: 0, y: 0 },\n connectionStatus: null,\n connectionMode: ConnectionMode.Strict,\n domNode: null,\n paneDragging: false,\n noPanClassName: 'nopan',\n nodeOrigin: [0, 0],\n nodeDragThreshold: 0,\n snapGrid: [15, 15],\n snapToGrid: false,\n nodesDraggable: true,\n nodesConnectable: true,\n nodesFocusable: true,\n edgesFocusable: true,\n edgesUpdatable: true,\n elementsSelectable: true,\n elevateNodesOnSelect: true,\n fitViewOnInit: false,\n fitViewOnInitDone: false,\n fitViewOnInitOptions: undefined,\n onSelectionChange: [],\n multiSelectionActive: false,\n connectionStartHandle: null,\n connectionEndHandle: null,\n connectionClickStartHandle: null,\n connectOnClick: true,\n ariaLiveMessage: '',\n autoPanOnConnect: true,\n autoPanOnNodeDrag: true,\n connectionRadius: 20,\n onError: devWarn,\n isValidConnection: undefined,\n};\n\nconst createRFStore = () => (0,zustand_traditional__WEBPACK_IMPORTED_MODULE_4__.createWithEqualityFn)((set, get) => ({\n ...initialState,\n setNodes: (nodes) => {\n const { nodeInternals, nodeOrigin, elevateNodesOnSelect } = get();\n set({ nodeInternals: createNodeInternals(nodes, nodeInternals, nodeOrigin, elevateNodesOnSelect) });\n },\n getNodes: () => {\n return Array.from(get().nodeInternals.values());\n },\n setEdges: (edges) => {\n const { defaultEdgeOptions = {} } = get();\n set({ edges: edges.map((e) => ({ ...defaultEdgeOptions, ...e })) });\n },\n setDefaultNodesAndEdges: (nodes, edges) => {\n const hasDefaultNodes = typeof nodes !== 'undefined';\n const hasDefaultEdges = typeof edges !== 'undefined';\n const nodeInternals = hasDefaultNodes\n ? createNodeInternals(nodes, new Map(), get().nodeOrigin, get().elevateNodesOnSelect)\n : new Map();\n const nextEdges = hasDefaultEdges ? edges : [];\n set({ nodeInternals, edges: nextEdges, hasDefaultNodes, hasDefaultEdges });\n },\n updateNodeDimensions: (updates) => {\n const { onNodesChange, nodeInternals, fitViewOnInit, fitViewOnInitDone, fitViewOnInitOptions, domNode, nodeOrigin, } = get();\n const viewportNode = domNode?.querySelector('.react-flow__viewport');\n if (!viewportNode) {\n return;\n }\n const style = window.getComputedStyle(viewportNode);\n const { m22: zoom } = new window.DOMMatrixReadOnly(style.transform);\n const changes = updates.reduce((res, update) => {\n const node = nodeInternals.get(update.id);\n if (node?.hidden) {\n nodeInternals.set(node.id, {\n ...node,\n [internalsSymbol]: {\n ...node[internalsSymbol],\n // we need to reset the handle bounds when the node is hidden\n // in order to force a new observation when the node is shown again\n handleBounds: undefined,\n },\n });\n }\n else if (node) {\n const dimensions = getDimensions(update.nodeElement);\n const doUpdate = !!(dimensions.width &&\n dimensions.height &&\n (node.width !== dimensions.width || node.height !== dimensions.height || update.forceUpdate));\n if (doUpdate) {\n nodeInternals.set(node.id, {\n ...node,\n [internalsSymbol]: {\n ...node[internalsSymbol],\n handleBounds: {\n source: getHandleBounds('.source', update.nodeElement, zoom, nodeOrigin),\n target: getHandleBounds('.target', update.nodeElement, zoom, nodeOrigin),\n },\n },\n ...dimensions,\n });\n res.push({\n id: node.id,\n type: 'dimensions',\n dimensions,\n });\n }\n }\n return res;\n }, []);\n updateAbsoluteNodePositions(nodeInternals, nodeOrigin);\n const nextFitViewOnInitDone = fitViewOnInitDone ||\n (fitViewOnInit && !fitViewOnInitDone && fitView(get, { initial: true, ...fitViewOnInitOptions }));\n set({ nodeInternals: new Map(nodeInternals), fitViewOnInitDone: nextFitViewOnInitDone });\n if (changes?.length > 0) {\n onNodesChange?.(changes);\n }\n },\n updateNodePositions: (nodeDragItems, positionChanged = true, dragging = false) => {\n const { triggerNodeChanges } = get();\n const changes = nodeDragItems.map((node) => {\n const change = {\n id: node.id,\n type: 'position',\n dragging,\n };\n if (positionChanged) {\n change.positionAbsolute = node.positionAbsolute;\n change.position = node.position;\n }\n return change;\n });\n triggerNodeChanges(changes);\n },\n triggerNodeChanges: (changes) => {\n const { onNodesChange, nodeInternals, hasDefaultNodes, nodeOrigin, getNodes, elevateNodesOnSelect } = get();\n if (changes?.length) {\n if (hasDefaultNodes) {\n const nodes = applyNodeChanges(changes, getNodes());\n const nextNodeInternals = createNodeInternals(nodes, nodeInternals, nodeOrigin, elevateNodesOnSelect);\n set({ nodeInternals: nextNodeInternals });\n }\n onNodesChange?.(changes);\n }\n },\n addSelectedNodes: (selectedNodeIds) => {\n const { multiSelectionActive, edges, getNodes } = get();\n let changedNodes;\n let changedEdges = null;\n if (multiSelectionActive) {\n changedNodes = selectedNodeIds.map((nodeId) => createSelectionChange(nodeId, true));\n }\n else {\n changedNodes = getSelectionChanges(getNodes(), selectedNodeIds);\n changedEdges = getSelectionChanges(edges, []);\n }\n updateNodesAndEdgesSelections({\n changedNodes,\n changedEdges,\n get,\n set,\n });\n },\n addSelectedEdges: (selectedEdgeIds) => {\n const { multiSelectionActive, edges, getNodes } = get();\n let changedEdges;\n let changedNodes = null;\n if (multiSelectionActive) {\n changedEdges = selectedEdgeIds.map((edgeId) => createSelectionChange(edgeId, true));\n }\n else {\n changedEdges = getSelectionChanges(edges, selectedEdgeIds);\n changedNodes = getSelectionChanges(getNodes(), []);\n }\n updateNodesAndEdgesSelections({\n changedNodes,\n changedEdges,\n get,\n set,\n });\n },\n unselectNodesAndEdges: ({ nodes, edges } = {}) => {\n const { edges: storeEdges, getNodes } = get();\n const nodesToUnselect = nodes ? nodes : getNodes();\n const edgesToUnselect = edges ? edges : storeEdges;\n const changedNodes = nodesToUnselect.map((n) => {\n n.selected = false;\n return createSelectionChange(n.id, false);\n });\n const changedEdges = edgesToUnselect.map((edge) => createSelectionChange(edge.id, false));\n updateNodesAndEdgesSelections({\n changedNodes,\n changedEdges,\n get,\n set,\n });\n },\n setMinZoom: (minZoom) => {\n const { d3Zoom, maxZoom } = get();\n d3Zoom?.scaleExtent([minZoom, maxZoom]);\n set({ minZoom });\n },\n setMaxZoom: (maxZoom) => {\n const { d3Zoom, minZoom } = get();\n d3Zoom?.scaleExtent([minZoom, maxZoom]);\n set({ maxZoom });\n },\n setTranslateExtent: (translateExtent) => {\n get().d3Zoom?.translateExtent(translateExtent);\n set({ translateExtent });\n },\n resetSelectedElements: () => {\n const { edges, getNodes } = get();\n const nodes = getNodes();\n const nodesToUnselect = nodes\n .filter((e) => e.selected)\n .map((n) => createSelectionChange(n.id, false));\n const edgesToUnselect = edges\n .filter((e) => e.selected)\n .map((e) => createSelectionChange(e.id, false));\n updateNodesAndEdgesSelections({\n changedNodes: nodesToUnselect,\n changedEdges: edgesToUnselect,\n get,\n set,\n });\n },\n setNodeExtent: (nodeExtent) => {\n const { nodeInternals } = get();\n nodeInternals.forEach((node) => {\n node.positionAbsolute = clampPosition(node.position, nodeExtent);\n });\n set({\n nodeExtent,\n nodeInternals: new Map(nodeInternals),\n });\n },\n panBy: (delta) => {\n const { transform, width, height, d3Zoom, d3Selection, translateExtent } = get();\n if (!d3Zoom || !d3Selection || (!delta.x && !delta.y)) {\n return false;\n }\n const nextTransform = d3_zoom__WEBPACK_IMPORTED_MODULE_2__.zoomIdentity\n .translate(transform[0] + delta.x, transform[1] + delta.y)\n .scale(transform[2]);\n const extent = [\n [0, 0],\n [width, height],\n ];\n const constrainedTransform = d3Zoom?.constrain()(nextTransform, extent, translateExtent);\n d3Zoom.transform(d3Selection, constrainedTransform);\n const transformChanged = transform[0] !== constrainedTransform.x ||\n transform[1] !== constrainedTransform.y ||\n transform[2] !== constrainedTransform.k;\n return transformChanged;\n },\n cancelConnection: () => set({\n connectionNodeId: initialState.connectionNodeId,\n connectionHandleId: initialState.connectionHandleId,\n connectionHandleType: initialState.connectionHandleType,\n connectionStatus: initialState.connectionStatus,\n connectionStartHandle: initialState.connectionStartHandle,\n connectionEndHandle: initialState.connectionEndHandle,\n }),\n reset: () => set({ ...initialState }),\n}), Object.is);\n\nconst ReactFlowProvider = ({ children }) => {\n const storeRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n if (!storeRef.current) {\n storeRef.current = createRFStore();\n }\n return react__WEBPACK_IMPORTED_MODULE_0__.createElement(Provider$1, { value: storeRef.current }, children);\n};\nReactFlowProvider.displayName = 'ReactFlowProvider';\n\nconst Wrapper = ({ children }) => {\n const isWrapped = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(StoreContext);\n if (isWrapped) {\n // we need to wrap it with a fragment because it's not allowed for children to be a ReactNode\n // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/18051\n return react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, children);\n }\n return react__WEBPACK_IMPORTED_MODULE_0__.createElement(ReactFlowProvider, null, children);\n};\nWrapper.displayName = 'ReactFlowWrapper';\n\nconst defaultNodeTypes = {\n input: InputNode$1,\n default: DefaultNode$1,\n output: OutputNode$1,\n group: GroupNode,\n};\nconst defaultEdgeTypes = {\n default: BezierEdge,\n straight: StraightEdge,\n step: StepEdge,\n smoothstep: SmoothStepEdge,\n simplebezier: SimpleBezierEdge,\n};\nconst initNodeOrigin = [0, 0];\nconst initSnapGrid = [15, 15];\nconst initDefaultViewport = { x: 0, y: 0, zoom: 1 };\nconst wrapperStyle = {\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n zIndex: 0,\n};\nconst ReactFlow = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(({ nodes, edges, defaultNodes, defaultEdges, className, nodeTypes = defaultNodeTypes, edgeTypes = defaultEdgeTypes, onNodeClick, onEdgeClick, onInit, onMove, onMoveStart, onMoveEnd, onConnect, onConnectStart, onConnectEnd, onClickConnectStart, onClickConnectEnd, onNodeMouseEnter, onNodeMouseMove, onNodeMouseLeave, onNodeContextMenu, onNodeDoubleClick, onNodeDragStart, onNodeDrag, onNodeDragStop, onNodesDelete, onEdgesDelete, onSelectionChange, onSelectionDragStart, onSelectionDrag, onSelectionDragStop, onSelectionContextMenu, onSelectionStart, onSelectionEnd, connectionMode = ConnectionMode.Strict, connectionLineType = ConnectionLineType.Bezier, connectionLineStyle, connectionLineComponent, connectionLineContainerStyle, deleteKeyCode = 'Backspace', selectionKeyCode = 'Shift', selectionOnDrag = false, selectionMode = SelectionMode.Full, panActivationKeyCode = 'Space', multiSelectionKeyCode = isMacOs() ? 'Meta' : 'Control', zoomActivationKeyCode = isMacOs() ? 'Meta' : 'Control', snapToGrid = false, snapGrid = initSnapGrid, onlyRenderVisibleElements = false, selectNodesOnDrag = true, nodesDraggable, nodesConnectable, nodesFocusable, nodeOrigin = initNodeOrigin, edgesFocusable, edgesUpdatable, elementsSelectable, defaultViewport = initDefaultViewport, minZoom = 0.5, maxZoom = 2, translateExtent = infiniteExtent, preventScrolling = true, nodeExtent, defaultMarkerColor = '#b1b1b7', zoomOnScroll = true, zoomOnPinch = true, panOnScroll = false, panOnScrollSpeed = 0.5, panOnScrollMode = PanOnScrollMode.Free, zoomOnDoubleClick = true, panOnDrag = true, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneScroll, onPaneContextMenu, children, onEdgeContextMenu, onEdgeDoubleClick, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, onEdgeUpdate, onEdgeUpdateStart, onEdgeUpdateEnd, onReconnect, onReconnectStart, onReconnectEnd, reconnectRadius = 10, edgeUpdaterRadius = 10, onNodesChange, onEdgesChange, noDragClassName = 'nodrag', noWheelClassName = 'nowheel', noPanClassName = 'nopan', fitView = false, fitViewOptions, connectOnClick = true, attributionPosition, proOptions, defaultEdgeOptions, elevateNodesOnSelect = true, elevateEdgesOnSelect = false, disableKeyboardA11y = false, autoPanOnConnect = true, autoPanOnNodeDrag = true, connectionRadius = 20, isValidConnection, onError, style, id, nodeDragThreshold, ...rest }, ref) => {\n const rfId = id || '1';\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", { ...rest, style: { ...style, ...wrapperStyle }, ref: ref, className: (0,classcat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(['react-flow', className]), \"data-testid\": \"rf__wrapper\", id: id },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(Wrapper, null,\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(GraphView$1, { onInit: onInit, onMove: onMove, onMoveStart: onMoveStart, onMoveEnd: onMoveEnd, onNodeClick: onNodeClick, onEdgeClick: onEdgeClick, onNodeMouseEnter: onNodeMouseEnter, onNodeMouseMove: onNodeMouseMove, onNodeMouseLeave: onNodeMouseLeave, onNodeContextMenu: onNodeContextMenu, onNodeDoubleClick: onNodeDoubleClick, nodeTypes: nodeTypes, edgeTypes: edgeTypes, connectionLineType: connectionLineType, connectionLineStyle: connectionLineStyle, connectionLineComponent: connectionLineComponent, connectionLineContainerStyle: connectionLineContainerStyle, selectionKeyCode: selectionKeyCode, selectionOnDrag: selectionOnDrag, selectionMode: selectionMode, deleteKeyCode: deleteKeyCode, multiSelectionKeyCode: multiSelectionKeyCode, panActivationKeyCode: panActivationKeyCode, zoomActivationKeyCode: zoomActivationKeyCode, onlyRenderVisibleElements: onlyRenderVisibleElements, selectNodesOnDrag: selectNodesOnDrag, defaultViewport: defaultViewport, translateExtent: translateExtent, minZoom: minZoom, maxZoom: maxZoom, preventScrolling: preventScrolling, zoomOnScroll: zoomOnScroll, zoomOnPinch: zoomOnPinch, zoomOnDoubleClick: zoomOnDoubleClick, panOnScroll: panOnScroll, panOnScrollSpeed: panOnScrollSpeed, panOnScrollMode: panOnScrollMode, panOnDrag: panOnDrag, onPaneClick: onPaneClick, onPaneMouseEnter: onPaneMouseEnter, onPaneMouseMove: onPaneMouseMove, onPaneMouseLeave: onPaneMouseLeave, onPaneScroll: onPaneScroll, onPaneContextMenu: onPaneContextMenu, onSelectionContextMenu: onSelectionContextMenu, onSelectionStart: onSelectionStart, onSelectionEnd: onSelectionEnd, onEdgeContextMenu: onEdgeContextMenu, onEdgeDoubleClick: onEdgeDoubleClick, onEdgeMouseEnter: onEdgeMouseEnter, onEdgeMouseMove: onEdgeMouseMove, onEdgeMouseLeave: onEdgeMouseLeave, onReconnect: onReconnect ?? onEdgeUpdate, onReconnectStart: onReconnectStart ?? onEdgeUpdateStart, onReconnectEnd: onReconnectEnd ?? onEdgeUpdateEnd, reconnectRadius: reconnectRadius ?? edgeUpdaterRadius, defaultMarkerColor: defaultMarkerColor, noDragClassName: noDragClassName, noWheelClassName: noWheelClassName, noPanClassName: noPanClassName, elevateEdgesOnSelect: elevateEdgesOnSelect, rfId: rfId, disableKeyboardA11y: disableKeyboardA11y, nodeOrigin: nodeOrigin, nodeExtent: nodeExtent }),\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(StoreUpdater, { nodes: nodes, edges: edges, defaultNodes: defaultNodes, defaultEdges: defaultEdges, onConnect: onConnect, onConnectStart: onConnectStart, onConnectEnd: onConnectEnd, onClickConnectStart: onClickConnectStart, onClickConnectEnd: onClickConnectEnd, nodesDraggable: nodesDraggable, nodesConnectable: nodesConnectable, nodesFocusable: nodesFocusable, edgesFocusable: edgesFocusable, edgesUpdatable: edgesUpdatable, elementsSelectable: elementsSelectable, elevateNodesOnSelect: elevateNodesOnSelect, minZoom: minZoom, maxZoom: maxZoom, nodeExtent: nodeExtent, onNodesChange: onNodesChange, onEdgesChange: onEdgesChange, snapToGrid: snapToGrid, snapGrid: snapGrid, connectionMode: connectionMode, translateExtent: translateExtent, connectOnClick: connectOnClick, defaultEdgeOptions: defaultEdgeOptions, fitView: fitView, fitViewOptions: fitViewOptions, onNodesDelete: onNodesDelete, onEdgesDelete: onEdgesDelete, onNodeDragStart: onNodeDragStart, onNodeDrag: onNodeDrag, onNodeDragStop: onNodeDragStop, onSelectionDrag: onSelectionDrag, onSelectionDragStart: onSelectionDragStart, onSelectionDragStop: onSelectionDragStop, noPanClassName: noPanClassName, nodeOrigin: nodeOrigin, rfId: rfId, autoPanOnConnect: autoPanOnConnect, autoPanOnNodeDrag: autoPanOnNodeDrag, onError: onError, connectionRadius: connectionRadius, isValidConnection: isValidConnection, nodeDragThreshold: nodeDragThreshold }),\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(Wrapper$1, { onSelectionChange: onSelectionChange }),\n children,\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(Attribution, { proOptions: proOptions, position: attributionPosition }),\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(A11yDescriptions, { rfId: rfId, disableKeyboardA11y: disableKeyboardA11y }))));\n});\nReactFlow.displayName = 'ReactFlow';\n\nconst selector$1 = (s) => s.domNode?.querySelector('.react-flow__edgelabel-renderer');\nfunction EdgeLabelRenderer({ children }) {\n const edgeLabelRenderer = useStore(selector$1);\n if (!edgeLabelRenderer) {\n return null;\n }\n return (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.createPortal)(children, edgeLabelRenderer);\n}\n\nfunction useUpdateNodeInternals() {\n const store = useStoreApi();\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((id) => {\n const { domNode, updateNodeDimensions } = store.getState();\n const updateIds = Array.isArray(id) ? id : [id];\n const updates = updateIds.reduce((res, updateId) => {\n const nodeElement = domNode?.querySelector(`.react-flow__node[data-id=\"${updateId}\"]`);\n if (nodeElement) {\n res.push({ id: updateId, nodeElement, forceUpdate: true });\n }\n return res;\n }, []);\n requestAnimationFrame(() => updateNodeDimensions(updates));\n }, []);\n}\n\nconst nodesSelector = (state) => state.getNodes();\nfunction useNodes() {\n const nodes = useStore(nodesSelector, zustand_shallow__WEBPACK_IMPORTED_MODULE_5__.shallow);\n return nodes;\n}\n\nconst edgesSelector = (state) => state.edges;\nfunction useEdges() {\n const edges = useStore(edgesSelector, zustand_shallow__WEBPACK_IMPORTED_MODULE_5__.shallow);\n return edges;\n}\n\nconst viewportSelector = (state) => ({\n x: state.transform[0],\n y: state.transform[1],\n zoom: state.transform[2],\n});\nfunction useViewport() {\n const viewport = useStore(viewportSelector, zustand_shallow__WEBPACK_IMPORTED_MODULE_5__.shallow);\n return viewport;\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction createUseItemsState(applyChanges) {\n return (initialItems) => {\n const [items, setItems] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initialItems);\n const onItemsChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((changes) => setItems((items) => applyChanges(changes, items)), []);\n return [items, setItems, onItemsChange];\n };\n}\nconst useNodesState = createUseItemsState(applyNodeChanges);\nconst useEdgesState = createUseItemsState(applyEdgeChanges);\n\nfunction useOnViewportChange({ onStart, onChange, onEnd }) {\n const store = useStoreApi();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n store.setState({ onViewportChangeStart: onStart });\n }, [onStart]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n store.setState({ onViewportChange: onChange });\n }, [onChange]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n store.setState({ onViewportChangeEnd: onEnd });\n }, [onEnd]);\n}\n\nfunction useOnSelectionChange({ onChange }) {\n const store = useStoreApi();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const nextSelectionChangeHandlers = [...store.getState().onSelectionChange, onChange];\n store.setState({ onSelectionChange: nextSelectionChangeHandlers });\n return () => {\n const nextHandlers = store.getState().onSelectionChange.filter((fn) => fn !== onChange);\n store.setState({ onSelectionChange: nextHandlers });\n };\n }, [onChange]);\n}\n\nconst selector = (options) => (s) => {\n if (s.nodeInternals.size === 0) {\n return false;\n }\n return s\n .getNodes()\n .filter((n) => (options.includeHiddenNodes ? true : !n.hidden))\n .every((n) => n[internalsSymbol]?.handleBounds !== undefined);\n};\nconst defaultOptions = {\n includeHiddenNodes: false,\n};\nfunction useNodesInitialized(options = defaultOptions) {\n const initialized = useStore(selector(options));\n return initialized;\n}\n\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@reactflow/core/dist/esm/index.mjs?"); + +/***/ }), + /***/ "./node_modules/@remix-run/router/dist/router.js": /*!*******************************************************!*\ !*** ./node_modules/@remix-run/router/dist/router.js ***! @@ -8452,6 +8705,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/classcat/index.js": +/*!****************************************!*\ + !*** ./node_modules/classcat/index.js ***! + \****************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ cc)\n/* harmony export */ });\nfunction cc(names) {\n if (typeof names === \"string\" || typeof names === \"number\") return \"\" + names\n\n let out = \"\"\n\n if (Array.isArray(names)) {\n for (let i = 0, tmp; i < names.length; i++) {\n if ((tmp = cc(names[i])) !== \"\") {\n out += (out && \" \") + tmp\n }\n }\n } else {\n for (let k in names) {\n if (names[k]) out += (out && \" \") + k\n }\n }\n\n return out\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/classcat/index.js?"); + +/***/ }), + /***/ "./node_modules/clsx/dist/clsx.js": /*!****************************************!*\ !*** ./node_modules/clsx/dist/clsx.js ***! @@ -8480,7 +8744,29 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -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 _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `:root {\r\n --border-color: #dee2e6;\r\n --layout-bg: #ffffff;\r\n}\r\n\r\n.layout {\r\n background-color: var(--layout-bg);\r\n}\r\n\r\n.layout-item__container {\r\n border: 1px solid var(--border-color);\r\n border-radius: 4px;\r\n}\r\n\r\n.component-editor__wrap {\r\n}\r\n\r\n.component-editor__container {\r\n padding: 10px;\r\n}\r\n\r\n.component-editor__divider {\r\n padding-top: 20px;\r\n}\r\n\r\n.component-view__wrap {\r\n height: 100%;\r\n}\r\n\r\n.component-view__container {\r\n height: 100%;\r\n overflow: auto;\r\n padding: 10px;\r\n}\r\n\r\n.component-view__container__empty {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/panels_editor.css?./node_modules/css-loader/dist/cjs.js"); +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 _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `:root {\r\n --border-color: #dee2e6;\r\n --layout-bg: #ffffff;\r\n}\r\n\r\n.layout {\r\n background-color: var(--layout-bg);\r\n}\r\n\r\n.layout-item__container {\r\n border: 1px solid var(--border-color);\r\n border-radius: 4px;\r\n}\r\n\r\n.component-view__wrap {\r\n height: 100%;\r\n}\r\n\r\n.component-view__container {\r\n height: 100%;\r\n overflow: auto;\r\n padding: 10px;\r\n}\r\n\r\n.component-view__container__empty {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/panels_editor/panels_editor.css?./node_modules/css-loader/dist/cjs.js"); + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!./app/panels/query_editor/components/entity/entity.css": +/*!****************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!./app/panels/query_editor/components/entity/entity.css ***! + \****************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +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 _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.entity__wrapper {\r\n width: 100%;\r\n height: 100%;\r\n border: 1px solid var(--border-color-dark);\r\n border-radius: 6px;\r\n box-shadow: var(--shadow-entity);\r\n overflow: hidden;\r\n background-color: white;\r\n}\r\n\r\n.entity__wrapper[data-selected=\"true\"] {\r\n outline: 1px solid var(--outline-color);\r\n border-color: var(--outline-color);\r\n}\r\n\r\n.entity__title {\r\n width: 100%;\r\n height: 50px;\r\n align-content: center;\r\n border-bottom: 1px solid var(--border-color);\r\n font-weight: 900;\r\n text-align: center;\r\n background-color: var(--entity-title-bg);\r\n cursor: move;\r\n}\r\n\r\n.entity__name {\r\n width: 100%;\r\n align-content: center;\r\n text-align: center;\r\n font-size: 0.8rem;\r\n color: gray;\r\n}\r\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/entity/entity.css?./node_modules/css-loader/dist/cjs.js"); + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!./app/panels/query_editor/components/query_diagram/query_diagram.css": +/*!******************************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!./app/panels/query_editor/components/query_diagram/query_diagram.css ***! + \******************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +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 _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.query_diagram {\r\n --border-color: #dee2e6;\r\n --border-color-dark: #adb5bd;\r\n --outline-color: #74c0fc;\r\n --entity-title-bg: #f1f3f5;\r\n --shadow-entity: 0 -2px 5px 0 hsl(220 3% 15% / calc(1% + 2%)), 0 1px 1px -2px hsl(220 3% 15% / calc(1% + 3%)),\r\n 0 2px 2px -2px hsl(220 3% 15% / calc(1% + 3%)), 0 5px 5px -2px hsl(220 3% 15% / calc(1% + 4%)), 0 9px 9px -2px hsl(220 3% 15% / calc(1% + 5%)),\r\n 0 16px 16px -2px hsl(220 3% 15% / calc(1% + 6%));\r\n}\r\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/components/query_diagram/query_diagram.css?./node_modules/css-loader/dist/cjs.js"); /***/ }), @@ -8506,6 +8792,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/reactflow/dist/style.css": +/*!*************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/reactflow/dist/style.css ***! + \*************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +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 _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* this gets exported as style.css and can be used for the default theming */\n/* these are the necessary styles for React Flow, they get used by base.css and style.css */\n.react-flow {\n direction: ltr;\n}\n.react-flow__container {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n}\n.react-flow__pane {\n z-index: 1;\n cursor: -webkit-grab;\n cursor: grab;\n}\n.react-flow__pane.selection {\n cursor: pointer;\n }\n.react-flow__pane.dragging {\n cursor: -webkit-grabbing;\n cursor: grabbing;\n }\n.react-flow__viewport {\n transform-origin: 0 0;\n z-index: 2;\n pointer-events: none;\n}\n.react-flow__renderer {\n z-index: 4;\n}\n.react-flow__selection {\n z-index: 6;\n}\n.react-flow__nodesselection-rect:focus,\n.react-flow__nodesselection-rect:focus-visible {\n outline: none;\n}\n.react-flow .react-flow__edges {\n pointer-events: none;\n overflow: visible;\n}\n.react-flow__edge-path,\n.react-flow__connection-path {\n stroke: #b1b1b7;\n stroke-width: 1;\n fill: none;\n}\n.react-flow__edge {\n pointer-events: visibleStroke;\n cursor: pointer;\n}\n.react-flow__edge.animated path {\n stroke-dasharray: 5;\n -webkit-animation: dashdraw 0.5s linear infinite;\n animation: dashdraw 0.5s linear infinite;\n }\n.react-flow__edge.animated path.react-flow__edge-interaction {\n stroke-dasharray: none;\n -webkit-animation: none;\n animation: none;\n }\n.react-flow__edge.inactive {\n pointer-events: none;\n }\n.react-flow__edge.selected,\n .react-flow__edge:focus,\n .react-flow__edge:focus-visible {\n outline: none;\n }\n.react-flow__edge.selected .react-flow__edge-path,\n .react-flow__edge:focus .react-flow__edge-path,\n .react-flow__edge:focus-visible .react-flow__edge-path {\n stroke: #555;\n }\n.react-flow__edge-textwrapper {\n pointer-events: all;\n }\n.react-flow__edge-textbg {\n fill: white;\n }\n.react-flow__edge .react-flow__edge-text {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n.react-flow__connection {\n pointer-events: none;\n}\n.react-flow__connection .animated {\n stroke-dasharray: 5;\n -webkit-animation: dashdraw 0.5s linear infinite;\n animation: dashdraw 0.5s linear infinite;\n }\n.react-flow__connectionline {\n z-index: 1001;\n}\n.react-flow__nodes {\n pointer-events: none;\n transform-origin: 0 0;\n}\n.react-flow__node {\n position: absolute;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n pointer-events: all;\n transform-origin: 0 0;\n box-sizing: border-box;\n cursor: -webkit-grab;\n cursor: grab;\n}\n.react-flow__node.dragging {\n cursor: -webkit-grabbing;\n cursor: grabbing;\n }\n.react-flow__nodesselection {\n z-index: 3;\n transform-origin: left top;\n pointer-events: none;\n}\n.react-flow__nodesselection-rect {\n position: absolute;\n pointer-events: all;\n cursor: -webkit-grab;\n cursor: grab;\n }\n.react-flow__handle {\n position: absolute;\n pointer-events: none;\n min-width: 5px;\n min-height: 5px;\n width: 6px;\n height: 6px;\n background: #1a192b;\n border: 1px solid white;\n border-radius: 100%;\n}\n.react-flow__handle.connectionindicator {\n pointer-events: all;\n cursor: crosshair;\n }\n.react-flow__handle-bottom {\n top: auto;\n left: 50%;\n bottom: -4px;\n transform: translate(-50%, 0);\n }\n.react-flow__handle-top {\n left: 50%;\n top: -4px;\n transform: translate(-50%, 0);\n }\n.react-flow__handle-left {\n top: 50%;\n left: -4px;\n transform: translate(0, -50%);\n }\n.react-flow__handle-right {\n right: -4px;\n top: 50%;\n transform: translate(0, -50%);\n }\n.react-flow__edgeupdater {\n cursor: move;\n pointer-events: all;\n}\n.react-flow__panel {\n position: absolute;\n z-index: 5;\n margin: 15px;\n}\n.react-flow__panel.top {\n top: 0;\n }\n.react-flow__panel.bottom {\n bottom: 0;\n }\n.react-flow__panel.left {\n left: 0;\n }\n.react-flow__panel.right {\n right: 0;\n }\n.react-flow__panel.center {\n left: 50%;\n transform: translateX(-50%);\n }\n.react-flow__attribution {\n font-size: 10px;\n background: rgba(255, 255, 255, 0.5);\n padding: 2px 3px;\n margin: 0;\n}\n.react-flow__attribution a {\n text-decoration: none;\n color: #999;\n }\n@-webkit-keyframes dashdraw {\n from {\n stroke-dashoffset: 10;\n }\n}\n@keyframes dashdraw {\n from {\n stroke-dashoffset: 10;\n }\n}\n.react-flow__edgelabel-renderer {\n position: absolute;\n width: 100%;\n height: 100%;\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.react-flow__edge.updating .react-flow__edge-path {\n stroke: #777;\n }\n.react-flow__edge-text {\n font-size: 10px;\n }\n.react-flow__node.selectable:focus,\n .react-flow__node.selectable:focus-visible {\n outline: none;\n }\n.react-flow__node-default,\n.react-flow__node-input,\n.react-flow__node-output,\n.react-flow__node-group {\n padding: 10px;\n border-radius: 3px;\n width: 150px;\n font-size: 12px;\n color: #222;\n text-align: center;\n border-width: 1px;\n border-style: solid;\n border-color: #1a192b;\n background-color: white;\n}\n.react-flow__node-default.selectable:hover, .react-flow__node-input.selectable:hover, .react-flow__node-output.selectable:hover, .react-flow__node-group.selectable:hover {\n box-shadow: 0 1px 4px 1px rgba(0, 0, 0, 0.08);\n }\n.react-flow__node-default.selectable.selected,\n .react-flow__node-default.selectable:focus,\n .react-flow__node-default.selectable:focus-visible,\n .react-flow__node-input.selectable.selected,\n .react-flow__node-input.selectable:focus,\n .react-flow__node-input.selectable:focus-visible,\n .react-flow__node-output.selectable.selected,\n .react-flow__node-output.selectable:focus,\n .react-flow__node-output.selectable:focus-visible,\n .react-flow__node-group.selectable.selected,\n .react-flow__node-group.selectable:focus,\n .react-flow__node-group.selectable:focus-visible {\n box-shadow: 0 0 0 0.5px #1a192b;\n }\n.react-flow__node-group {\n background-color: rgba(240, 240, 240, 0.25);\n}\n.react-flow__nodesselection-rect,\n.react-flow__selection {\n background: rgba(0, 89, 220, 0.08);\n border: 1px dotted rgba(0, 89, 220, 0.8);\n}\n.react-flow__nodesselection-rect:focus,\n .react-flow__nodesselection-rect:focus-visible,\n .react-flow__selection:focus,\n .react-flow__selection:focus-visible {\n outline: none;\n }\n.react-flow__controls {\n box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.08);\n}\n.react-flow__controls-button {\n border: none;\n background: #fefefe;\n border-bottom: 1px solid #eee;\n box-sizing: content-box;\n display: flex;\n justify-content: center;\n align-items: center;\n width: 16px;\n height: 16px;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n padding: 5px;\n }\n.react-flow__controls-button:hover {\n background: #f4f4f4;\n }\n.react-flow__controls-button svg {\n width: 100%;\n max-width: 12px;\n max-height: 12px;\n }\n.react-flow__controls-button:disabled {\n pointer-events: none;\n }\n.react-flow__controls-button:disabled svg {\n fill-opacity: 0.4;\n }\n.react-flow__minimap {\n background-color: #fff;\n}\n.react-flow__minimap svg {\n display: block;\n}\n.react-flow__resize-control {\n position: absolute;\n}\n.react-flow__resize-control.left,\n.react-flow__resize-control.right {\n cursor: ew-resize;\n}\n.react-flow__resize-control.top,\n.react-flow__resize-control.bottom {\n cursor: ns-resize;\n}\n.react-flow__resize-control.top.left,\n.react-flow__resize-control.bottom.right {\n cursor: nwse-resize;\n}\n.react-flow__resize-control.bottom.left,\n.react-flow__resize-control.top.right {\n cursor: nesw-resize;\n}\n/* handle styles */\n.react-flow__resize-control.handle {\n width: 4px;\n height: 4px;\n border: 1px solid #fff;\n border-radius: 1px;\n background-color: #3367d9;\n transform: translate(-50%, -50%);\n}\n.react-flow__resize-control.handle.left {\n left: 0;\n top: 50%;\n}\n.react-flow__resize-control.handle.right {\n left: 100%;\n top: 50%;\n}\n.react-flow__resize-control.handle.top {\n left: 50%;\n top: 0;\n}\n.react-flow__resize-control.handle.bottom {\n left: 50%;\n top: 100%;\n}\n.react-flow__resize-control.handle.top.left {\n left: 0;\n}\n.react-flow__resize-control.handle.bottom.left {\n left: 0;\n}\n.react-flow__resize-control.handle.top.right {\n left: 100%;\n}\n.react-flow__resize-control.handle.bottom.right {\n left: 100%;\n}\n/* line styles */\n.react-flow__resize-control.line {\n border-color: #3367d9;\n border-width: 0;\n border-style: solid;\n}\n.react-flow__resize-control.line.left,\n.react-flow__resize-control.line.right {\n width: 1px;\n transform: translate(-50%, 0);\n top: 0;\n height: 100%;\n}\n.react-flow__resize-control.line.left {\n left: 0;\n border-left-width: 1px;\n}\n.react-flow__resize-control.line.right {\n left: 100%;\n border-right-width: 1px;\n}\n.react-flow__resize-control.line.top,\n.react-flow__resize-control.line.bottom {\n height: 1px;\n transform: translate(0, -50%);\n left: 0;\n width: 100%;\n}\n.react-flow__resize-control.line.top {\n top: 0;\n border-top-width: 1px;\n}\n.react-flow__resize-control.line.bottom {\n border-bottom-width: 1px;\n top: 100%;\n}\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/reactflow/dist/style.css?./node_modules/css-loader/dist/cjs.js"); + +/***/ }), + /***/ "./node_modules/css-loader/dist/runtime/api.js": /*!*****************************************************!*\ !*** ./node_modules/css-loader/dist/runtime/api.js ***! @@ -8539,6 +8836,1161 @@ eval("\n\nmodule.exports = function (i) {\n return i[1];\n};\n\n//# sourceURL=w /***/ }), +/***/ "./node_modules/d3-color/src/color.js": +/*!********************************************!*\ + !*** ./node_modules/d3-color/src/color.js ***! + \********************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Color: () => (/* binding */ Color),\n/* harmony export */ Rgb: () => (/* binding */ Rgb),\n/* harmony export */ brighter: () => (/* binding */ brighter),\n/* harmony export */ darker: () => (/* binding */ darker),\n/* harmony export */ \"default\": () => (/* binding */ color),\n/* harmony export */ hsl: () => (/* binding */ hsl),\n/* harmony export */ hslConvert: () => (/* binding */ hslConvert),\n/* harmony export */ rgb: () => (/* binding */ rgb),\n/* harmony export */ rgbConvert: () => (/* binding */ rgbConvert)\n/* harmony export */ });\n/* harmony import */ var _define_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./define.js */ \"./node_modules/d3-color/src/define.js\");\n\n\nfunction Color() {}\n\nvar darker = 0.7;\nvar brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\n(0,_define_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nfunction color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nfunction rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nfunction rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nfunction Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\n(0,_define_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Rgb, rgb, (0,_define_js__WEBPACK_IMPORTED_MODULE_0__.extend)(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nfunction hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nfunction hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\n(0,_define_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Hsl, hsl, (0,_define_js__WEBPACK_IMPORTED_MODULE_0__.extend)(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-color/src/color.js?"); + +/***/ }), + +/***/ "./node_modules/d3-color/src/define.js": +/*!*********************************************!*\ + !*** ./node_modules/d3-color/src/define.js ***! + \*********************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ extend: () => (/* binding */ extend)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nfunction extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-color/src/define.js?"); + +/***/ }), + +/***/ "./node_modules/d3-dispatch/src/dispatch.js": +/*!**************************************************!*\ + !*** ./node_modules/d3-dispatch/src/dispatch.js ***! + \**************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (dispatch);\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-dispatch/src/dispatch.js?"); + +/***/ }), + +/***/ "./node_modules/d3-drag/src/constant.js": +/*!**********************************************!*\ + !*** ./node_modules/d3-drag/src/constant.js ***! + \**********************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +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 default export */ const __WEBPACK_DEFAULT_EXPORT__ = (x => () => x);\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-drag/src/constant.js?"); + +/***/ }), + +/***/ "./node_modules/d3-drag/src/drag.js": +/*!******************************************!*\ + !*** ./node_modules/d3-drag/src/drag.js ***! + \******************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-dispatch */ \"./node_modules/d3-dispatch/src/dispatch.js\");\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ \"./node_modules/d3-selection/src/select.js\");\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-selection */ \"./node_modules/d3-selection/src/pointer.js\");\n/* harmony import */ var _nodrag_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nodrag.js */ \"./node_modules/d3-drag/src/nodrag.js\");\n/* harmony import */ var _noevent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./noevent.js */ \"./node_modules/d3-drag/src/noevent.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./constant.js */ \"./node_modules/d3-drag/src/constant.js\");\n/* harmony import */ var _event_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./event.js */ \"./node_modules/d3-drag/src/event.js\");\n\n\n\n\n\n\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = (0,d3_dispatch__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved, _noevent_js__WEBPACK_IMPORTED_MODULE_1__.nonpassive)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned(event, d) {\n if (touchending || !filter.call(this, event, d)) return;\n var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n if (!gesture) return;\n (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(event.view)\n .on(\"mousemove.drag\", mousemoved, _noevent_js__WEBPACK_IMPORTED_MODULE_1__.nonpassivecapture)\n .on(\"mouseup.drag\", mouseupped, _noevent_js__WEBPACK_IMPORTED_MODULE_1__.nonpassivecapture);\n (0,_nodrag_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(event.view);\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_1__.nopropagation)(event);\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\", event);\n }\n\n function mousemoved(event) {\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(event);\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\", event);\n }\n\n function mouseupped(event) {\n (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(event.view).on(\"mousemove.drag mouseup.drag\", null);\n (0,_nodrag_js__WEBPACK_IMPORTED_MODULE_3__.yesdrag)(event.view, mousemoving);\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(event);\n gestures.mouse(\"end\", event);\n }\n\n function touchstarted(event, d) {\n if (!filter.call(this, event, d)) return;\n var touches = event.changedTouches,\n c = container.call(this, event, d),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_1__.nopropagation)(event);\n gesture(\"start\", event, touches[i]);\n }\n }\n }\n\n function touchmoved(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(event);\n gesture(\"drag\", event, touches[i]);\n }\n }\n }\n\n function touchended(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_1__.nopropagation)(event);\n gesture(\"end\", event, touches[i]);\n }\n }\n }\n\n function beforestart(that, container, event, d, identifier, touch) {\n var dispatch = listeners.copy(),\n p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(touch || event, container), dx, dy,\n s;\n\n if ((s = subject.call(that, new _event_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"](\"beforestart\", {\n sourceEvent: event,\n target: drag,\n identifier,\n active,\n x: p[0],\n y: p[1],\n dx: 0,\n dy: 0,\n dispatch\n }), d)) == null) return;\n\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n\n return function gesture(type, event, touch) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[identifier] = gesture, n = active++; break;\n case \"end\": delete gestures[identifier], --active; // falls through\n case \"drag\": p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(touch || event, container), n = active; break;\n }\n dispatch.call(\n type,\n that,\n new _event_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"](type, {\n sourceEvent: event,\n subject: s,\n target: drag,\n identifier,\n active: n,\n x: p[0] + dx,\n y: p[1] + dy,\n dx: p[0] - p0[0],\n dy: p[1] - p0[1],\n dispatch\n }),\n d\n );\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-drag/src/drag.js?"); + +/***/ }), + +/***/ "./node_modules/d3-drag/src/event.js": +/*!*******************************************!*\ + !*** ./node_modules/d3-drag/src/event.js ***! + \*******************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DragEvent)\n/* harmony export */ });\nfunction DragEvent(type, {\n sourceEvent,\n subject,\n target,\n identifier,\n active,\n x, y, dx, dy,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n subject: {value: subject, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n identifier: {value: identifier, enumerable: true, configurable: true},\n active: {value: active, enumerable: true, configurable: true},\n x: {value: x, enumerable: true, configurable: true},\n y: {value: y, enumerable: true, configurable: true},\n dx: {value: dx, enumerable: true, configurable: true},\n dy: {value: dy, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-drag/src/event.js?"); + +/***/ }), + +/***/ "./node_modules/d3-drag/src/nodrag.js": +/*!********************************************!*\ + !*** ./node_modules/d3-drag/src/nodrag.js ***! + \********************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ yesdrag: () => (/* binding */ yesdrag)\n/* harmony export */ });\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"./node_modules/d3-selection/src/select.js\");\n/* harmony import */ var _noevent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./noevent.js */ \"./node_modules/d3-drag/src/noevent.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(view) {\n var root = view.document.documentElement,\n selection = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(view).on(\"dragstart.drag\", _noevent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _noevent_js__WEBPACK_IMPORTED_MODULE_1__.nonpassivecapture);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", _noevent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _noevent_js__WEBPACK_IMPORTED_MODULE_1__.nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nfunction yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", _noevent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _noevent_js__WEBPACK_IMPORTED_MODULE_1__.nonpassivecapture);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-drag/src/nodrag.js?"); + +/***/ }), + +/***/ "./node_modules/d3-drag/src/noevent.js": +/*!*********************************************!*\ + !*** ./node_modules/d3-drag/src/noevent.js ***! + \*********************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ nonpassive: () => (/* binding */ nonpassive),\n/* harmony export */ nonpassivecapture: () => (/* binding */ nonpassivecapture),\n/* harmony export */ nopropagation: () => (/* binding */ nopropagation)\n/* harmony export */ });\n// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nconst nonpassive = {passive: false};\nconst nonpassivecapture = {capture: true, passive: false};\n\nfunction nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-drag/src/noevent.js?"); + +/***/ }), + +/***/ "./node_modules/d3-ease/src/cubic.js": +/*!*******************************************!*\ + !*** ./node_modules/d3-ease/src/cubic.js ***! + \*******************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ cubicIn: () => (/* binding */ cubicIn),\n/* harmony export */ cubicInOut: () => (/* binding */ cubicInOut),\n/* harmony export */ cubicOut: () => (/* binding */ cubicOut)\n/* harmony export */ });\nfunction cubicIn(t) {\n return t * t * t;\n}\n\nfunction cubicOut(t) {\n return --t * t * t + 1;\n}\n\nfunction cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-ease/src/cubic.js?"); + +/***/ }), + +/***/ "./node_modules/d3-interpolate/src/basis.js": +/*!**************************************************!*\ + !*** ./node_modules/d3-interpolate/src/basis.js ***! + \**************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ basis: () => (/* binding */ basis),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-interpolate/src/basis.js?"); + +/***/ }), + +/***/ "./node_modules/d3-interpolate/src/basisClosed.js": +/*!********************************************************!*\ + !*** ./node_modules/d3-interpolate/src/basisClosed.js ***! + \********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./basis.js */ \"./node_modules/d3-interpolate/src/basis.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return (0,_basis_js__WEBPACK_IMPORTED_MODULE_0__.basis)((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-interpolate/src/basisClosed.js?"); + +/***/ }), + +/***/ "./node_modules/d3-interpolate/src/color.js": +/*!**************************************************!*\ + !*** ./node_modules/d3-interpolate/src/color.js ***! + \**************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ nogamma),\n/* harmony export */ gamma: () => (/* binding */ gamma),\n/* harmony export */ hue: () => (/* binding */ hue)\n/* harmony export */ });\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ \"./node_modules/d3-interpolate/src/constant.js\");\n\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nfunction hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(isNaN(a) ? b : a);\n}\n\nfunction gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(isNaN(a) ? b : a);\n };\n}\n\nfunction nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(isNaN(a) ? b : a);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-interpolate/src/color.js?"); + +/***/ }), + +/***/ "./node_modules/d3-interpolate/src/constant.js": +/*!*****************************************************!*\ + !*** ./node_modules/d3-interpolate/src/constant.js ***! + \*****************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +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 default export */ const __WEBPACK_DEFAULT_EXPORT__ = (x => () => x);\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-interpolate/src/constant.js?"); + +/***/ }), + +/***/ "./node_modules/d3-interpolate/src/number.js": +/*!***************************************************!*\ + !*** ./node_modules/d3-interpolate/src/number.js ***! + \***************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-interpolate/src/number.js?"); + +/***/ }), + +/***/ "./node_modules/d3-interpolate/src/rgb.js": +/*!************************************************!*\ + !*** ./node_modules/d3-interpolate/src/rgb.js ***! + \************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ rgbBasis: () => (/* binding */ rgbBasis),\n/* harmony export */ rgbBasisClosed: () => (/* binding */ rgbBasisClosed)\n/* harmony export */ });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-color */ \"./node_modules/d3-color/src/color.js\");\n/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./basis.js */ \"./node_modules/d3-interpolate/src/basis.js\");\n/* harmony import */ var _basisClosed_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./basisClosed.js */ \"./node_modules/d3-interpolate/src/basisClosed.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color.js */ \"./node_modules/d3-interpolate/src/color.js\");\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function rgbGamma(y) {\n var color = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__.gamma)(y);\n\n function rgb(start, end) {\n var r = color((start = (0,d3_color__WEBPACK_IMPORTED_MODULE_1__.rgb)(start)).r, (end = (0,d3_color__WEBPACK_IMPORTED_MODULE_1__.rgb)(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1));\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = (0,d3_color__WEBPACK_IMPORTED_MODULE_1__.rgb)(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nvar rgbBasis = rgbSpline(_basis_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\nvar rgbBasisClosed = rgbSpline(_basisClosed_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]);\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-interpolate/src/rgb.js?"); + +/***/ }), + +/***/ "./node_modules/d3-interpolate/src/string.js": +/*!***************************************************!*\ + !*** ./node_modules/d3-interpolate/src/string.js ***! + \***************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number.js */ \"./node_modules/d3-interpolate/src/number.js\");\n\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: (0,_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-interpolate/src/string.js?"); + +/***/ }), + +/***/ "./node_modules/d3-interpolate/src/transform/decompose.js": +/*!****************************************************************!*\ + !*** ./node_modules/d3-interpolate/src/transform/decompose.js ***! + \****************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ identity: () => (/* binding */ identity)\n/* harmony export */ });\nvar degrees = 180 / Math.PI;\n\nvar identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-interpolate/src/transform/decompose.js?"); + +/***/ }), + +/***/ "./node_modules/d3-interpolate/src/transform/index.js": +/*!************************************************************!*\ + !*** ./node_modules/d3-interpolate/src/transform/index.js ***! + \************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ interpolateTransformCss: () => (/* binding */ interpolateTransformCss),\n/* harmony export */ interpolateTransformSvg: () => (/* binding */ interpolateTransformSvg)\n/* harmony export */ });\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../number.js */ \"./node_modules/d3-interpolate/src/number.js\");\n/* harmony import */ var _parse_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parse.js */ \"./node_modules/d3-interpolate/src/transform/parse.js\");\n\n\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: (0,_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(xa, xb)}, {i: i - 2, x: (0,_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: (0,_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: (0,_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: (0,_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(xa, xb)}, {i: i - 2, x: (0,_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nvar interpolateTransformCss = interpolateTransform(_parse_js__WEBPACK_IMPORTED_MODULE_1__.parseCss, \"px, \", \"px)\", \"deg)\");\nvar interpolateTransformSvg = interpolateTransform(_parse_js__WEBPACK_IMPORTED_MODULE_1__.parseSvg, \", \", \")\", \")\");\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-interpolate/src/transform/index.js?"); + +/***/ }), + +/***/ "./node_modules/d3-interpolate/src/transform/parse.js": +/*!************************************************************!*\ + !*** ./node_modules/d3-interpolate/src/transform/parse.js ***! + \************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ parseCss: () => (/* binding */ parseCss),\n/* harmony export */ parseSvg: () => (/* binding */ parseSvg)\n/* harmony export */ });\n/* harmony import */ var _decompose_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./decompose.js */ \"./node_modules/d3-interpolate/src/transform/decompose.js\");\n\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nfunction parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? _decompose_js__WEBPACK_IMPORTED_MODULE_0__.identity : (0,_decompose_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nfunction parseSvg(value) {\n if (value == null) return _decompose_js__WEBPACK_IMPORTED_MODULE_0__.identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return _decompose_js__WEBPACK_IMPORTED_MODULE_0__.identity;\n value = value.matrix;\n return (0,_decompose_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-interpolate/src/transform/parse.js?"); + +/***/ }), + +/***/ "./node_modules/d3-interpolate/src/zoom.js": +/*!*************************************************!*\ + !*** ./node_modules/d3-interpolate/src/zoom.js ***! + \*************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4));\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-interpolate/src/zoom.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/array.js": +/*!************************************************!*\ + !*** ./node_modules/d3-selection/src/array.js ***! + \************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ array)\n/* harmony export */ });\n// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nfunction array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/array.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/constant.js": +/*!***************************************************!*\ + !*** ./node_modules/d3-selection/src/constant.js ***! + \***************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n return function() {\n return x;\n };\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/constant.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/creator.js": +/*!**************************************************!*\ + !*** ./node_modules/d3-selection/src/creator.js ***! + \**************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _namespace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./namespace.js */ \"./node_modules/d3-selection/src/namespace.js\");\n/* harmony import */ var _namespaces_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./namespaces.js */ \"./node_modules/d3-selection/src/namespaces.js\");\n\n\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === _namespaces_js__WEBPACK_IMPORTED_MODULE_0__.xhtml && document.documentElement.namespaceURI === _namespaces_js__WEBPACK_IMPORTED_MODULE_0__.xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) {\n var fullname = (0,_namespace_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/creator.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/matcher.js": +/*!**************************************************!*\ + !*** ./node_modules/d3-selection/src/matcher.js ***! + \**************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ childMatcher: () => (/* binding */ childMatcher),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nfunction childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/matcher.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/namespace.js": +/*!****************************************************!*\ + !*** ./node_modules/d3-selection/src/namespace.js ***! + \****************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _namespaces_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./namespaces.js */ \"./node_modules/d3-selection/src/namespaces.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return _namespaces_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hasOwnProperty(prefix) ? {space: _namespaces_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"][prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/namespace.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/namespaces.js": +/*!*****************************************************!*\ + !*** ./node_modules/d3-selection/src/namespaces.js ***! + \*****************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ xhtml: () => (/* binding */ xhtml)\n/* harmony export */ });\nvar xhtml = \"http://www.w3.org/1999/xhtml\";\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n});\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/namespaces.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/pointer.js": +/*!**************************************************!*\ + !*** ./node_modules/d3-selection/src/pointer.js ***! + \**************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _sourceEvent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sourceEvent.js */ \"./node_modules/d3-selection/src/sourceEvent.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(event, node) {\n event = (0,_sourceEvent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(event);\n if (node === undefined) node = event.currentTarget;\n if (node) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n return [event.pageX, event.pageY];\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/pointer.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/select.js": +/*!*************************************************!*\ + !*** ./node_modules/d3-selection/src/select.js ***! + \*************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _selection_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/index.js */ \"./node_modules/d3-selection/src/selection/index.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selector) {\n return typeof selector === \"string\"\n ? new _selection_index_js__WEBPACK_IMPORTED_MODULE_0__.Selection([[document.querySelector(selector)]], [document.documentElement])\n : new _selection_index_js__WEBPACK_IMPORTED_MODULE_0__.Selection([[selector]], _selection_index_js__WEBPACK_IMPORTED_MODULE_0__.root);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/select.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/append.js": +/*!***********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/append.js ***! + \***********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _creator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../creator.js */ \"./node_modules/d3-selection/src/creator.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) {\n var create = typeof name === \"function\" ? name : (0,_creator_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/append.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/attr.js": +/*!*********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/attr.js ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _namespace_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../namespace.js */ \"./node_modules/d3-selection/src/namespace.js\");\n\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value) {\n var fullname = (0,_namespace_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/attr.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/call.js": +/*!*********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/call.js ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/call.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/classed.js": +/*!************************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/classed.js ***! + \************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/classed.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/clone.js": +/*!**********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/clone.js ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/clone.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/data.js": +/*!*********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/data.js ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ \"./node_modules/d3-selection/src/selection/index.js\");\n/* harmony import */ var _enter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enter.js */ \"./node_modules/d3-selection/src/selection/enter.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constant.js */ \"./node_modules/d3-selection/src/constant.js\");\n\n\n\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new _enter_js__WEBPACK_IMPORTED_MODULE_0__.EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new _enter_js__WEBPACK_IMPORTED_MODULE_0__.EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new _index_js__WEBPACK_IMPORTED_MODULE_2__.Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/data.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/datum.js": +/*!**********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/datum.js ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/datum.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/dispatch.js": +/*!*************************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/dispatch.js ***! + \*************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _window_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../window.js */ \"./node_modules/d3-selection/src/window.js\");\n\n\nfunction dispatchEvent(node, type, params) {\n var window = (0,_window_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/dispatch.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/each.js": +/*!*********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/each.js ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/each.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/empty.js": +/*!**********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/empty.js ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return !this.node();\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/empty.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/enter.js": +/*!**********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/enter.js ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EnterNode: () => (/* binding */ EnterNode),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _sparse_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sparse.js */ \"./node_modules/d3-selection/src/selection/sparse.js\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"./node_modules/d3-selection/src/selection/index.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return new _index_js__WEBPACK_IMPORTED_MODULE_0__.Selection(this._enter || this._groups.map(_sparse_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]), this._parents);\n}\n\nfunction EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/enter.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/exit.js": +/*!*********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/exit.js ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _sparse_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sparse.js */ \"./node_modules/d3-selection/src/selection/sparse.js\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"./node_modules/d3-selection/src/selection/index.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return new _index_js__WEBPACK_IMPORTED_MODULE_0__.Selection(this._exit || this._groups.map(_sparse_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]), this._parents);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/exit.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/filter.js": +/*!***********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/filter.js ***! + \***********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.js */ \"./node_modules/d3-selection/src/selection/index.js\");\n/* harmony import */ var _matcher_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../matcher.js */ \"./node_modules/d3-selection/src/matcher.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(match) {\n if (typeof match !== \"function\") match = (0,_matcher_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_1__.Selection(subgroups, this._parents);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/filter.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/html.js": +/*!*********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/html.js ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/html.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/index.js": +/*!**********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/index.js ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Selection: () => (/* binding */ Selection),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ root: () => (/* binding */ root)\n/* harmony export */ });\n/* harmony import */ var _select_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./select.js */ \"./node_modules/d3-selection/src/selection/select.js\");\n/* harmony import */ var _selectAll_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./selectAll.js */ \"./node_modules/d3-selection/src/selection/selectAll.js\");\n/* harmony import */ var _selectChild_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./selectChild.js */ \"./node_modules/d3-selection/src/selection/selectChild.js\");\n/* harmony import */ var _selectChildren_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./selectChildren.js */ \"./node_modules/d3-selection/src/selection/selectChildren.js\");\n/* harmony import */ var _filter_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./filter.js */ \"./node_modules/d3-selection/src/selection/filter.js\");\n/* harmony import */ var _data_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./data.js */ \"./node_modules/d3-selection/src/selection/data.js\");\n/* harmony import */ var _enter_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./enter.js */ \"./node_modules/d3-selection/src/selection/enter.js\");\n/* harmony import */ var _exit_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./exit.js */ \"./node_modules/d3-selection/src/selection/exit.js\");\n/* harmony import */ var _join_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./join.js */ \"./node_modules/d3-selection/src/selection/join.js\");\n/* harmony import */ var _merge_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./merge.js */ \"./node_modules/d3-selection/src/selection/merge.js\");\n/* harmony import */ var _order_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./order.js */ \"./node_modules/d3-selection/src/selection/order.js\");\n/* harmony import */ var _sort_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./sort.js */ \"./node_modules/d3-selection/src/selection/sort.js\");\n/* harmony import */ var _call_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./call.js */ \"./node_modules/d3-selection/src/selection/call.js\");\n/* harmony import */ var _nodes_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./nodes.js */ \"./node_modules/d3-selection/src/selection/nodes.js\");\n/* harmony import */ var _node_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./node.js */ \"./node_modules/d3-selection/src/selection/node.js\");\n/* harmony import */ var _size_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./size.js */ \"./node_modules/d3-selection/src/selection/size.js\");\n/* harmony import */ var _empty_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./empty.js */ \"./node_modules/d3-selection/src/selection/empty.js\");\n/* harmony import */ var _each_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./each.js */ \"./node_modules/d3-selection/src/selection/each.js\");\n/* harmony import */ var _attr_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./attr.js */ \"./node_modules/d3-selection/src/selection/attr.js\");\n/* harmony import */ var _style_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./style.js */ \"./node_modules/d3-selection/src/selection/style.js\");\n/* harmony import */ var _property_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./property.js */ \"./node_modules/d3-selection/src/selection/property.js\");\n/* harmony import */ var _classed_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./classed.js */ \"./node_modules/d3-selection/src/selection/classed.js\");\n/* harmony import */ var _text_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./text.js */ \"./node_modules/d3-selection/src/selection/text.js\");\n/* harmony import */ var _html_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./html.js */ \"./node_modules/d3-selection/src/selection/html.js\");\n/* harmony import */ var _raise_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./raise.js */ \"./node_modules/d3-selection/src/selection/raise.js\");\n/* harmony import */ var _lower_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./lower.js */ \"./node_modules/d3-selection/src/selection/lower.js\");\n/* harmony import */ var _append_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./append.js */ \"./node_modules/d3-selection/src/selection/append.js\");\n/* harmony import */ var _insert_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./insert.js */ \"./node_modules/d3-selection/src/selection/insert.js\");\n/* harmony import */ var _remove_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./remove.js */ \"./node_modules/d3-selection/src/selection/remove.js\");\n/* harmony import */ var _clone_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./clone.js */ \"./node_modules/d3-selection/src/selection/clone.js\");\n/* harmony import */ var _datum_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./datum.js */ \"./node_modules/d3-selection/src/selection/datum.js\");\n/* harmony import */ var _on_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./on.js */ \"./node_modules/d3-selection/src/selection/on.js\");\n/* harmony import */ var _dispatch_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./dispatch.js */ \"./node_modules/d3-selection/src/selection/dispatch.js\");\n/* harmony import */ var _iterator_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./iterator.js */ \"./node_modules/d3-selection/src/selection/iterator.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar root = [null];\n\nfunction Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: _select_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n selectAll: _selectAll_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n selectChild: _selectChild_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n selectChildren: _selectChildren_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n filter: _filter_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n data: _data_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n enter: _enter_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n exit: _exit_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n join: _join_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n merge: _merge_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n selection: selection_selection,\n order: _order_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n sort: _sort_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n call: _call_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"],\n nodes: _nodes_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n node: _node_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"],\n size: _size_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"],\n empty: _empty_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"],\n each: _each_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"],\n attr: _attr_js__WEBPACK_IMPORTED_MODULE_18__[\"default\"],\n style: _style_js__WEBPACK_IMPORTED_MODULE_19__[\"default\"],\n property: _property_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"],\n classed: _classed_js__WEBPACK_IMPORTED_MODULE_21__[\"default\"],\n text: _text_js__WEBPACK_IMPORTED_MODULE_22__[\"default\"],\n html: _html_js__WEBPACK_IMPORTED_MODULE_23__[\"default\"],\n raise: _raise_js__WEBPACK_IMPORTED_MODULE_24__[\"default\"],\n lower: _lower_js__WEBPACK_IMPORTED_MODULE_25__[\"default\"],\n append: _append_js__WEBPACK_IMPORTED_MODULE_26__[\"default\"],\n insert: _insert_js__WEBPACK_IMPORTED_MODULE_27__[\"default\"],\n remove: _remove_js__WEBPACK_IMPORTED_MODULE_28__[\"default\"],\n clone: _clone_js__WEBPACK_IMPORTED_MODULE_29__[\"default\"],\n datum: _datum_js__WEBPACK_IMPORTED_MODULE_30__[\"default\"],\n on: _on_js__WEBPACK_IMPORTED_MODULE_31__[\"default\"],\n dispatch: _dispatch_js__WEBPACK_IMPORTED_MODULE_32__[\"default\"],\n [Symbol.iterator]: _iterator_js__WEBPACK_IMPORTED_MODULE_33__[\"default\"]\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (selection);\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/index.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/insert.js": +/*!***********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/insert.js ***! + \***********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _creator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../creator.js */ \"./node_modules/d3-selection/src/creator.js\");\n/* harmony import */ var _selector_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../selector.js */ \"./node_modules/d3-selection/src/selector.js\");\n\n\n\nfunction constantNull() {\n return null;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, before) {\n var create = typeof name === \"function\" ? name : (0,_creator_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : (0,_selector_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/insert.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/iterator.js": +/*!*************************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/iterator.js ***! + \*************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function* __WEBPACK_DEFAULT_EXPORT__() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/iterator.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/join.js": +/*!*********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/join.js ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/join.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/lower.js": +/*!**********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/lower.js ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return this.each(lower);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/lower.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/merge.js": +/*!**********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/merge.js ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"./node_modules/d3-selection/src/selection/index.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_0__.Selection(merges, this._parents);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/merge.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/node.js": +/*!*********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/node.js ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/node.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/nodes.js": +/*!**********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/nodes.js ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return Array.from(this);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/nodes.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/on.js": +/*!*******************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/on.js ***! + \*******************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/on.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/order.js": +/*!**********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/order.js ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/order.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/property.js": +/*!*************************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/property.js ***! + \*************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/property.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/raise.js": +/*!**********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/raise.js ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return this.each(raise);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/raise.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/remove.js": +/*!***********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/remove.js ***! + \***********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return this.each(remove);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/remove.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/select.js": +/*!***********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/select.js ***! + \***********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.js */ \"./node_modules/d3-selection/src/selection/index.js\");\n/* harmony import */ var _selector_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../selector.js */ \"./node_modules/d3-selection/src/selector.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(select) {\n if (typeof select !== \"function\") select = (0,_selector_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_1__.Selection(subgroups, this._parents);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/select.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/selectAll.js": +/*!**************************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/selectAll.js ***! + \**************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ \"./node_modules/d3-selection/src/selection/index.js\");\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../array.js */ \"./node_modules/d3-selection/src/array.js\");\n/* harmony import */ var _selectorAll_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../selectorAll.js */ \"./node_modules/d3-selection/src/selectorAll.js\");\n\n\n\n\nfunction arrayAll(select) {\n return function() {\n return (0,_array_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(select.apply(this, arguments));\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = (0,_selectorAll_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_2__.Selection(subgroups, parents);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/selectAll.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/selectChild.js": +/*!****************************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/selectChild.js ***! + \****************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _matcher_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../matcher.js */ \"./node_modules/d3-selection/src/matcher.js\");\n\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : (0,_matcher_js__WEBPACK_IMPORTED_MODULE_0__.childMatcher)(match)));\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/selectChild.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/selectChildren.js": +/*!*******************************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/selectChildren.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _matcher_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../matcher.js */ \"./node_modules/d3-selection/src/matcher.js\");\n\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : (0,_matcher_js__WEBPACK_IMPORTED_MODULE_0__.childMatcher)(match)));\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/selectChildren.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/size.js": +/*!*********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/size.js ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/size.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/sort.js": +/*!*********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/sort.js ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"./node_modules/d3-selection/src/selection/index.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_0__.Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/sort.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/sparse.js": +/*!***********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/sparse.js ***! + \***********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(update) {\n return new Array(update.length);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/sparse.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/style.js": +/*!**********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/style.js ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ styleValue: () => (/* binding */ styleValue)\n/* harmony export */ });\n/* harmony import */ var _window_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../window.js */ \"./node_modules/d3-selection/src/window.js\");\n\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nfunction styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || (0,_window_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/style.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selection/text.js": +/*!*********************************************************!*\ + !*** ./node_modules/d3-selection/src/selection/text.js ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selection/text.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selector.js": +/*!***************************************************!*\ + !*** ./node_modules/d3-selection/src/selector.js ***! + \***************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction none() {}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selector.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/selectorAll.js": +/*!******************************************************!*\ + !*** ./node_modules/d3-selection/src/selectorAll.js ***! + \******************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction empty() {\n return [];\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/selectorAll.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/sourceEvent.js": +/*!******************************************************!*\ + !*** ./node_modules/d3-selection/src/sourceEvent.js ***! + \******************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(event) {\n let sourceEvent;\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n return event;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/sourceEvent.js?"); + +/***/ }), + +/***/ "./node_modules/d3-selection/src/window.js": +/*!*************************************************!*\ + !*** ./node_modules/d3-selection/src/window.js ***! + \*************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-selection/src/window.js?"); + +/***/ }), + +/***/ "./node_modules/d3-timer/src/timeout.js": +/*!**********************************************!*\ + !*** ./node_modules/d3-timer/src/timeout.js ***! + \**********************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _timer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timer.js */ \"./node_modules/d3-timer/src/timer.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback, delay, time) {\n var t = new _timer_js__WEBPACK_IMPORTED_MODULE_0__.Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-timer/src/timeout.js?"); + +/***/ }), + +/***/ "./node_modules/d3-timer/src/timer.js": +/*!********************************************!*\ + !*** ./node_modules/d3-timer/src/timer.js ***! + \********************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Timer: () => (/* binding */ Timer),\n/* harmony export */ now: () => (/* binding */ now),\n/* harmony export */ timer: () => (/* binding */ timer),\n/* harmony export */ timerFlush: () => (/* binding */ timerFlush)\n/* harmony export */ });\nvar frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nfunction now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nfunction Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nfunction timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nfunction timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-timer/src/timer.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/active.js": +/*!**************************************************!*\ + !*** ./node_modules/d3-transition/src/active.js ***! + \**************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _transition_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transition/index.js */ \"./node_modules/d3-transition/src/transition/index.js\");\n/* harmony import */ var _transition_schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transition/schedule.js */ \"./node_modules/d3-transition/src/transition/schedule.js\");\n\n\n\nvar root = [null];\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > _transition_schedule_js__WEBPACK_IMPORTED_MODULE_0__.SCHEDULED && schedule.name === name) {\n return new _transition_index_js__WEBPACK_IMPORTED_MODULE_1__.Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/active.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/index.js": +/*!*************************************************!*\ + !*** ./node_modules/d3-transition/src/index.js ***! + \*************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ active: () => (/* reexport safe */ _active_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ interrupt: () => (/* reexport safe */ _interrupt_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ transition: () => (/* reexport safe */ _transition_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _selection_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/index.js */ \"./node_modules/d3-transition/src/selection/index.js\");\n/* harmony import */ var _transition_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transition/index.js */ \"./node_modules/d3-transition/src/transition/index.js\");\n/* harmony import */ var _active_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./active.js */ \"./node_modules/d3-transition/src/active.js\");\n/* harmony import */ var _interrupt_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./interrupt.js */ \"./node_modules/d3-transition/src/interrupt.js\");\n\n\n\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/index.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/interrupt.js": +/*!*****************************************************!*\ + !*** ./node_modules/d3-transition/src/interrupt.js ***! + \*****************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _transition_schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transition/schedule.js */ \"./node_modules/d3-transition/src/transition/schedule.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > _transition_schedule_js__WEBPACK_IMPORTED_MODULE_0__.STARTING && schedule.state < _transition_schedule_js__WEBPACK_IMPORTED_MODULE_0__.ENDING;\n schedule.state = _transition_schedule_js__WEBPACK_IMPORTED_MODULE_0__.ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/interrupt.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/selection/index.js": +/*!***********************************************************!*\ + !*** ./node_modules/d3-transition/src/selection/index.js ***! + \***********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"./node_modules/d3-selection/src/selection/index.js\");\n/* harmony import */ var _interrupt_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./interrupt.js */ \"./node_modules/d3-transition/src/selection/interrupt.js\");\n/* harmony import */ var _transition_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./transition.js */ \"./node_modules/d3-transition/src/selection/transition.js\");\n\n\n\n\nd3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype.interrupt = _interrupt_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\nd3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype.transition = _transition_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/selection/index.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/selection/interrupt.js": +/*!***************************************************************!*\ + !*** ./node_modules/d3-transition/src/selection/interrupt.js ***! + \***************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _interrupt_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../interrupt.js */ \"./node_modules/d3-transition/src/interrupt.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) {\n return this.each(function() {\n (0,_interrupt_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this, name);\n });\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/selection/interrupt.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/selection/transition.js": +/*!****************************************************************!*\ + !*** ./node_modules/d3-transition/src/selection/transition.js ***! + \****************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _transition_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../transition/index.js */ \"./node_modules/d3-transition/src/transition/index.js\");\n/* harmony import */ var _transition_schedule_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../transition/schedule.js */ \"./node_modules/d3-transition/src/transition/schedule.js\");\n/* harmony import */ var d3_ease__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-ease */ \"./node_modules/d3-ease/src/cubic.js\");\n/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-timer */ \"./node_modules/d3-timer/src/timer.js\");\n\n\n\n\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: d3_ease__WEBPACK_IMPORTED_MODULE_0__.cubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) {\n var id,\n timing;\n\n if (name instanceof _transition_index_js__WEBPACK_IMPORTED_MODULE_1__.Transition) {\n id = name._id, name = name._name;\n } else {\n id = (0,_transition_index_js__WEBPACK_IMPORTED_MODULE_1__.newId)(), (timing = defaultTiming).time = (0,d3_timer__WEBPACK_IMPORTED_MODULE_2__.now)(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n (0,_transition_schedule_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new _transition_index_js__WEBPACK_IMPORTED_MODULE_1__.Transition(groups, this._parents, name, id);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/selection/transition.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/attr.js": +/*!***********************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/attr.js ***! + \***********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-interpolate */ \"./node_modules/d3-interpolate/src/transform/index.js\");\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"./node_modules/d3-selection/src/namespace.js\");\n/* harmony import */ var _tween_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tween.js */ \"./node_modules/d3-transition/src/transition/tween.js\");\n/* harmony import */ var _interpolate_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./interpolate.js */ \"./node_modules/d3-transition/src/transition/interpolate.js\");\n\n\n\n\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value) {\n var fullname = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(name), i = fullname === \"transform\" ? d3_interpolate__WEBPACK_IMPORTED_MODULE_1__.interpolateTransformSvg : _interpolate_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, (0,_tween_js__WEBPACK_IMPORTED_MODULE_3__.tweenValue)(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/attr.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/attrTween.js": +/*!****************************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/attrTween.js ***! + \****************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"./node_modules/d3-selection/src/namespace.js\");\n\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/attrTween.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/delay.js": +/*!************************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/delay.js ***! + \************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ \"./node_modules/d3-transition/src/transition/schedule.js\");\n\n\nfunction delayFunction(id, value) {\n return function() {\n (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.init)(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.init)(this, id).delay = value;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.get)(this.node(), id).delay;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/delay.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/duration.js": +/*!***************************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/duration.js ***! + \***************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ \"./node_modules/d3-transition/src/transition/schedule.js\");\n\n\nfunction durationFunction(id, value) {\n return function() {\n (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id).duration = value;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.get)(this.node(), id).duration;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/duration.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/ease.js": +/*!***********************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/ease.js ***! + \***********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ \"./node_modules/d3-transition/src/transition/schedule.js\");\n\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id).ease = value;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.get)(this.node(), id).ease;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/ease.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/easeVarying.js": +/*!******************************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/easeVarying.js ***! + \******************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ \"./node_modules/d3-transition/src/transition/schedule.js\");\n\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id).ease = v;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/easeVarying.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/end.js": +/*!**********************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/end.js ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ \"./node_modules/d3-transition/src/transition/schedule.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/end.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/filter.js": +/*!*************************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/filter.js ***! + \*************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"./node_modules/d3-selection/src/matcher.js\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.js */ \"./node_modules/d3-transition/src/transition/index.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(match) {\n if (typeof match !== \"function\") match = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_1__.Transition(subgroups, this._parents, this._name, this._id);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/filter.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/index.js": +/*!************************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/index.js ***! + \************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Transition: () => (/* binding */ Transition),\n/* harmony export */ \"default\": () => (/* binding */ transition),\n/* harmony export */ newId: () => (/* binding */ newId)\n/* harmony export */ });\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"./node_modules/d3-selection/src/selection/index.js\");\n/* harmony import */ var _attr_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./attr.js */ \"./node_modules/d3-transition/src/transition/attr.js\");\n/* harmony import */ var _attrTween_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./attrTween.js */ \"./node_modules/d3-transition/src/transition/attrTween.js\");\n/* harmony import */ var _delay_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./delay.js */ \"./node_modules/d3-transition/src/transition/delay.js\");\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./duration.js */ \"./node_modules/d3-transition/src/transition/duration.js\");\n/* harmony import */ var _ease_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./ease.js */ \"./node_modules/d3-transition/src/transition/ease.js\");\n/* harmony import */ var _easeVarying_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./easeVarying.js */ \"./node_modules/d3-transition/src/transition/easeVarying.js\");\n/* harmony import */ var _filter_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./filter.js */ \"./node_modules/d3-transition/src/transition/filter.js\");\n/* harmony import */ var _merge_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./merge.js */ \"./node_modules/d3-transition/src/transition/merge.js\");\n/* harmony import */ var _on_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./on.js */ \"./node_modules/d3-transition/src/transition/on.js\");\n/* harmony import */ var _remove_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./remove.js */ \"./node_modules/d3-transition/src/transition/remove.js\");\n/* harmony import */ var _select_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./select.js */ \"./node_modules/d3-transition/src/transition/select.js\");\n/* harmony import */ var _selectAll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./selectAll.js */ \"./node_modules/d3-transition/src/transition/selectAll.js\");\n/* harmony import */ var _selection_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./selection.js */ \"./node_modules/d3-transition/src/transition/selection.js\");\n/* harmony import */ var _style_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./style.js */ \"./node_modules/d3-transition/src/transition/style.js\");\n/* harmony import */ var _styleTween_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./styleTween.js */ \"./node_modules/d3-transition/src/transition/styleTween.js\");\n/* harmony import */ var _text_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./text.js */ \"./node_modules/d3-transition/src/transition/text.js\");\n/* harmony import */ var _textTween_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./textTween.js */ \"./node_modules/d3-transition/src/transition/textTween.js\");\n/* harmony import */ var _transition_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./transition.js */ \"./node_modules/d3-transition/src/transition/transition.js\");\n/* harmony import */ var _tween_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./tween.js */ \"./node_modules/d3-transition/src/transition/tween.js\");\n/* harmony import */ var _end_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./end.js */ \"./node_modules/d3-transition/src/transition/end.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar id = 0;\n\nfunction Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nfunction transition(name) {\n return (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"])().transition(name);\n}\n\nfunction newId() {\n return ++id;\n}\n\nvar selection_prototype = d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: _select_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n selectAll: _selectAll_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: _filter_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n merge: _merge_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n selection: _selection_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n transition: _transition_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: _on_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n attr: _attr_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n attrTween: _attrTween_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n style: _style_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n styleTween: _styleTween_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n text: _text_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"],\n textTween: _textTween_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n remove: _remove_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"],\n tween: _tween_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"],\n delay: _delay_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"],\n duration: _duration_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"],\n ease: _ease_js__WEBPACK_IMPORTED_MODULE_18__[\"default\"],\n easeVarying: _easeVarying_js__WEBPACK_IMPORTED_MODULE_19__[\"default\"],\n end: _end_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"],\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/index.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/interpolate.js": +/*!******************************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/interpolate.js ***! + \******************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-color */ \"./node_modules/d3-color/src/color.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-interpolate */ \"./node_modules/d3-interpolate/src/number.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-interpolate */ \"./node_modules/d3-interpolate/src/rgb.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-interpolate */ \"./node_modules/d3-interpolate/src/string.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n var c;\n return (typeof b === \"number\" ? d3_interpolate__WEBPACK_IMPORTED_MODULE_0__[\"default\"]\n : b instanceof d3_color__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ? d3_interpolate__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n : (c = (0,d3_color__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(b)) ? (b = c, d3_interpolate__WEBPACK_IMPORTED_MODULE_2__[\"default\"])\n : d3_interpolate__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(a, b);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/interpolate.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/merge.js": +/*!************************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/merge.js ***! + \************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"./node_modules/d3-transition/src/transition/index.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_0__.Transition(merges, this._parents, this._name, this._id);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/merge.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/on.js": +/*!*********************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/on.js ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ \"./node_modules/d3-transition/src/transition/schedule.js\");\n\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? _schedule_js__WEBPACK_IMPORTED_MODULE_0__.init : _schedule_js__WEBPACK_IMPORTED_MODULE_0__.set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.get)(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/on.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/remove.js": +/*!*************************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/remove.js ***! + \*************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/remove.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/schedule.js": +/*!***************************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/schedule.js ***! + \***************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CREATED: () => (/* binding */ CREATED),\n/* harmony export */ ENDED: () => (/* binding */ ENDED),\n/* harmony export */ ENDING: () => (/* binding */ ENDING),\n/* harmony export */ RUNNING: () => (/* binding */ RUNNING),\n/* harmony export */ SCHEDULED: () => (/* binding */ SCHEDULED),\n/* harmony export */ STARTED: () => (/* binding */ STARTED),\n/* harmony export */ STARTING: () => (/* binding */ STARTING),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ get: () => (/* binding */ get),\n/* harmony export */ init: () => (/* binding */ init),\n/* harmony export */ set: () => (/* binding */ set)\n/* harmony export */ });\n/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-dispatch */ \"./node_modules/d3-dispatch/src/dispatch.js\");\n/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-timer */ \"./node_modules/d3-timer/src/timer.js\");\n/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-timer */ \"./node_modules/d3-timer/src/timeout.js\");\n\n\n\nvar emptyOn = (0,d3_dispatch__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nvar CREATED = 0;\nvar SCHEDULED = 1;\nvar STARTING = 2;\nvar STARTED = 3;\nvar RUNNING = 4;\nvar ENDING = 5;\nvar ENDED = 6;\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nfunction init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nfunction set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nfunction get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = (0,d3_timer__WEBPACK_IMPORTED_MODULE_1__.timer)(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return (0,d3_timer__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n (0,d3_timer__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/schedule.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/select.js": +/*!*************************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/select.js ***! + \*************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"./node_modules/d3-selection/src/selector.js\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ \"./node_modules/d3-transition/src/transition/index.js\");\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./schedule.js */ \"./node_modules/d3-transition/src/transition/schedule.js\");\n\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(subgroup[i], name, id, i, subgroup, (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__.get)(node, id));\n }\n }\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_2__.Transition(subgroups, this._parents, name, id);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/select.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/selectAll.js": +/*!****************************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/selectAll.js ***! + \****************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"./node_modules/d3-selection/src/selectorAll.js\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ \"./node_modules/d3-transition/src/transition/index.js\");\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./schedule.js */ \"./node_modules/d3-transition/src/transition/schedule.js\");\n\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__.get)(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_2__.Transition(subgroups, parents, name, id);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/selectAll.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/selection.js": +/*!****************************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/selection.js ***! + \****************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"./node_modules/d3-selection/src/selection/index.js\");\n\n\nvar Selection = d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype.constructor;\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return new Selection(this._groups, this._parents);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/selection.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/style.js": +/*!************************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/style.js ***! + \************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-interpolate */ \"./node_modules/d3-interpolate/src/transform/index.js\");\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"./node_modules/d3-selection/src/selection/style.js\");\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./schedule.js */ \"./node_modules/d3-transition/src/transition/schedule.js\");\n/* harmony import */ var _tween_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tween.js */ \"./node_modules/d3-transition/src/transition/tween.js\");\n/* harmony import */ var _interpolate_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./interpolate.js */ \"./node_modules/d3-transition/src/transition/interpolate.js\");\n\n\n\n\n\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__.styleValue)(this, name),\n string1 = (this.style.removeProperty(name), (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__.styleValue)(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__.styleValue)(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__.styleValue)(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__.styleValue)(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__.set)(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? d3_interpolate__WEBPACK_IMPORTED_MODULE_2__.interpolateTransformCss : _interpolate_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, (0,_tween_js__WEBPACK_IMPORTED_MODULE_4__.tweenValue)(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/style.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/styleTween.js": +/*!*****************************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/styleTween.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/styleTween.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/text.js": +/*!***********************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/text.js ***! + \***********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _tween_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tween.js */ \"./node_modules/d3-transition/src/transition/tween.js\");\n\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction((0,_tween_js__WEBPACK_IMPORTED_MODULE_0__.tweenValue)(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/text.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/textTween.js": +/*!****************************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/textTween.js ***! + \****************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/textTween.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/transition.js": +/*!*****************************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/transition.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"./node_modules/d3-transition/src/transition/index.js\");\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./schedule.js */ \"./node_modules/d3-transition/src/transition/schedule.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var name = this._name,\n id0 = this._id,\n id1 = (0,_index_js__WEBPACK_IMPORTED_MODULE_0__.newId)();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__.get)(node, id0);\n (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_0__.Transition(groups, this._parents, name, id1);\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/transition.js?"); + +/***/ }), + +/***/ "./node_modules/d3-transition/src/transition/tween.js": +/*!************************************************************!*\ + !*** ./node_modules/d3-transition/src/transition/tween.js ***! + \************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ tweenValue: () => (/* binding */ tweenValue)\n/* harmony export */ });\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ \"./node_modules/d3-transition/src/transition/schedule.js\");\n\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.get)(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nfunction tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.get)(node, id).value[name];\n };\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-transition/src/transition/tween.js?"); + +/***/ }), + +/***/ "./node_modules/d3-zoom/src/constant.js": +/*!**********************************************!*\ + !*** ./node_modules/d3-zoom/src/constant.js ***! + \**********************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +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 default export */ const __WEBPACK_DEFAULT_EXPORT__ = (x => () => x);\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-zoom/src/constant.js?"); + +/***/ }), + +/***/ "./node_modules/d3-zoom/src/event.js": +/*!*******************************************!*\ + !*** ./node_modules/d3-zoom/src/event.js ***! + \*******************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ZoomEvent)\n/* harmony export */ });\nfunction ZoomEvent(type, {\n sourceEvent,\n target,\n transform,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n transform: {value: transform, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-zoom/src/event.js?"); + +/***/ }), + +/***/ "./node_modules/d3-zoom/src/index.js": +/*!*******************************************!*\ + !*** ./node_modules/d3-zoom/src/index.js ***! + \*******************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ZoomTransform: () => (/* reexport safe */ _transform_js__WEBPACK_IMPORTED_MODULE_1__.Transform),\n/* harmony export */ zoom: () => (/* reexport safe */ _zoom_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ zoomIdentity: () => (/* reexport safe */ _transform_js__WEBPACK_IMPORTED_MODULE_1__.identity),\n/* harmony export */ zoomTransform: () => (/* reexport safe */ _transform_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _zoom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./zoom.js */ \"./node_modules/d3-zoom/src/zoom.js\");\n/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transform.js */ \"./node_modules/d3-zoom/src/transform.js\");\n\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-zoom/src/index.js?"); + +/***/ }), + +/***/ "./node_modules/d3-zoom/src/noevent.js": +/*!*********************************************!*\ + !*** ./node_modules/d3-zoom/src/noevent.js ***! + \*********************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ nopropagation: () => (/* binding */ nopropagation)\n/* harmony export */ });\nfunction nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-zoom/src/noevent.js?"); + +/***/ }), + +/***/ "./node_modules/d3-zoom/src/transform.js": +/*!***********************************************!*\ + !*** ./node_modules/d3-zoom/src/transform.js ***! + \***********************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Transform: () => (/* binding */ Transform),\n/* harmony export */ \"default\": () => (/* binding */ transform),\n/* harmony export */ identity: () => (/* binding */ identity)\n/* harmony export */ });\nfunction Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nvar identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nfunction transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-zoom/src/transform.js?"); + +/***/ }), + +/***/ "./node_modules/d3-zoom/src/zoom.js": +/*!******************************************!*\ + !*** ./node_modules/d3-zoom/src/zoom.js ***! + \******************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-dispatch */ \"./node_modules/d3-dispatch/src/dispatch.js\");\n/* harmony import */ var d3_drag__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! d3-drag */ \"./node_modules/d3-drag/src/nodrag.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-interpolate */ \"./node_modules/d3-interpolate/src/zoom.js\");\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! d3-selection */ \"./node_modules/d3-selection/src/select.js\");\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! d3-selection */ \"./node_modules/d3-selection/src/pointer.js\");\n/* harmony import */ var d3_transition__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-transition */ \"./node_modules/d3-transition/src/index.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant.js */ \"./node_modules/d3-zoom/src/constant.js\");\n/* harmony import */ var _event_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./event.js */ \"./node_modules/d3-zoom/src/event.js\");\n/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./transform.js */ \"./node_modules/d3-zoom/src/transform.js\");\n/* harmony import */ var _noevent_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./noevent.js */ \"./node_modules/d3-zoom/src/noevent.js\");\n\n\n\n\n\n\n\n\n\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n var e = this;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n if (e.hasAttribute(\"viewBox\")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || _transform_js__WEBPACK_IMPORTED_MODULE_3__.identity;\n}\n\nfunction defaultWheelDelta(event) {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = d3_interpolate__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n listeners = (0,d3_dispatch__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchfirst,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0,\n tapDistance = 10;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled, {passive: false})\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform, point, event) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform, point, event);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .event(event)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k, p, event) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p, event);\n };\n\n zoom.scaleTo = function(selection, k, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p, event);\n };\n\n zoom.translateBy = function(selection, x, y, event) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n }, null, event);\n };\n\n zoom.translateTo = function(selection, x, y, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n return constrain(_transform_js__WEBPACK_IMPORTED_MODULE_3__.identity.translate(p0[0], p0[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n }, p, event);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new _transform_js__WEBPACK_IMPORTED_MODULE_3__.Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new _transform_js__WEBPACK_IMPORTED_MODULE_3__.Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point, event) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args).event(event),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new _transform_js__WEBPACK_IMPORTED_MODULE_3__.Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return (!clean && that.__zooming) || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.sourceEvent = null;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n event: function(event) {\n if (event) this.sourceEvent = event;\n return this;\n },\n start: function() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n var d = (0,d3_selection__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.that).datum();\n listeners.call(\n type,\n this.that,\n new _event_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](type, {\n sourceEvent: this.sourceEvent,\n target: zoom,\n type,\n transform: this.that.__zoom,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function wheeled(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, args).event(event),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(event);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n (0,d3_transition__WEBPACK_IMPORTED_MODULE_0__.interrupt)(this);\n g.start();\n }\n\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(event);\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned(event, ...args) {\n if (touchending || !filter.apply(this, arguments)) return;\n var currentTarget = event.currentTarget,\n g = gesture(this, args, true).event(event),\n v = (0,d3_selection__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(event, currentTarget),\n x0 = event.clientX,\n y0 = event.clientY;\n\n (0,d3_drag__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(event.view);\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__.nopropagation)(event);\n g.mouse = [p, this.__zoom.invert(p)];\n (0,d3_transition__WEBPACK_IMPORTED_MODULE_0__.interrupt)(this);\n g.start();\n\n function mousemoved(event) {\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(event);\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.event(event)\n .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = (0,d3_selection__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped(event) {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n (0,d3_drag__WEBPACK_IMPORTED_MODULE_9__.yesdrag)(event.view, g.moved);\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(event);\n g.event(event).end();\n }\n }\n\n function dblclicked(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = (0,d3_selection__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(event.changedTouches ? event.changedTouches[0] : event, this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(event);\n if (duration > 0) (0,d3_selection__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this).transition().duration(duration).call(schedule, t1, p0, event);\n else (0,d3_selection__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this).call(zoom.transform, t1, p0, event);\n }\n\n function touchstarted(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, args, event.changedTouches.length === n).event(event),\n started, i, t, p;\n\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__.nopropagation)(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(t, this);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n (0,d3_transition__WEBPACK_IMPORTED_MODULE_0__.interrupt)(this);\n g.start();\n }\n }\n\n function touchmoved(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(t, this);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__.nopropagation)(event);\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else {\n g.end();\n // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (g.taps === 2) {\n t = (0,d3_selection__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(t, this);\n if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n var p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n }\n }\n }\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n zoom.tapDistance = function(_) {\n return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n };\n\n return zoom;\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/d3-zoom/src/zoom.js?"); + +/***/ }), + /***/ "./node_modules/dayjs/dayjs.min.js": /*!*****************************************!*\ !*** ./node_modules/dayjs/dayjs.min.js ***! @@ -9331,6 +10783,17 @@ eval("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs /***/ }), +/***/ "./node_modules/reactflow/dist/style.css": +/*!***********************************************!*\ + !*** ./node_modules/reactflow/dist/style.css ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +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 _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../style-loader/dist/runtime/styleDomAPI.js */ \"./node_modules/style-loader/dist/runtime/styleDomAPI.js\");\n/* harmony import */ var _style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../style-loader/dist/runtime/insertBySelector.js */ \"./node_modules/style-loader/dist/runtime/insertBySelector.js\");\n/* harmony import */ var _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../style-loader/dist/runtime/setAttributesWithoutAttributes.js */ \"./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\");\n/* harmony import */ var _style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../style-loader/dist/runtime/insertStyleElement.js */ \"./node_modules/style-loader/dist/runtime/insertStyleElement.js\");\n/* harmony import */ var _style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../style-loader/dist/runtime/styleTagTransform.js */ \"./node_modules/style-loader/dist/runtime/styleTagTransform.js\");\n/* harmony import */ var _style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _css_loader_dist_cjs_js_style_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../css-loader/dist/cjs.js!./style.css */ \"./node_modules/css-loader/dist/cjs.js!./node_modules/reactflow/dist/style.css\");\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());\noptions.setAttributes = (_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());\noptions.insert = _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, \"head\");\noptions.domAPI = (_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());\noptions.insertStyleElement = (_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());\n\nvar update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_css_loader_dist_cjs_js_style_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"], options);\n\n\n\n\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_css_loader_dist_cjs_js_style_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"] && _css_loader_dist_cjs_js_style_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals ? _css_loader_dist_cjs_js_style_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals : undefined);\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/reactflow/dist/style.css?"); + +/***/ }), + /***/ "./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js": /*!*************************************************************************!*\ !*** ./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js ***! @@ -9528,6 +10991,83 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js": +/*!**********************************************************************************************!*\ + !*** ./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js ***! + \**********************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function useSyncExternalStore$2(subscribe, getSnapshot) {\n didWarnOld18Alpha ||\n void 0 === React.startTransition ||\n ((didWarnOld18Alpha = !0),\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n ));\n var value = getSnapshot();\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n objectIs(value, cachedValue) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n cachedValue = useState({\n inst: { value: value, getSnapshot: getSnapshot }\n });\n var inst = cachedValue[0].inst,\n forceUpdate = cachedValue[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = __webpack_require__(/*! react */ \"./node_modules/react/index.js\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue,\n didWarnOld18Alpha = !1,\n didWarnUncachedGetSnapshot = !1,\n shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\n exports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js?"); + +/***/ }), + +/***/ "./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js": +/*!************************************************************************************************************!*\ + !*** ./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js ***! + \************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = __webpack_require__(/*! react */ \"./node_modules/react/index.js\"),\n shim = __webpack_require__(/*! use-sync-external-store/shim */ \"./node_modules/use-sync-external-store/shim/index.js\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\n exports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n ) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot))\n return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n };\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js?"); + +/***/ }), + +/***/ "./node_modules/use-sync-external-store/shim/index.js": +/*!************************************************************!*\ + !*** ./node_modules/use-sync-external-store/shim/index.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ../cjs/use-sync-external-store-shim.development.js */ \"./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js\");\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/use-sync-external-store/shim/index.js?"); + +/***/ }), + +/***/ "./node_modules/use-sync-external-store/shim/with-selector.js": +/*!********************************************************************!*\ + !*** ./node_modules/use-sync-external-store/shim/with-selector.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ../cjs/use-sync-external-store-shim/with-selector.development.js */ \"./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js\");\n}\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/use-sync-external-store/shim/with-selector.js?"); + +/***/ }), + +/***/ "./node_modules/zustand/esm/shallow.mjs": +/*!**********************************************!*\ + !*** ./node_modules/zustand/esm/shallow.mjs ***! + \**********************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ shallow),\n/* harmony export */ shallow: () => (/* binding */ shallow$1)\n/* harmony export */ });\nfunction shallow$1(objA, objB) {\n if (Object.is(objA, objB)) {\n return true;\n }\n if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n return false;\n }\n if (objA instanceof Map && objB instanceof Map) {\n if (objA.size !== objB.size) return false;\n for (const [key, value] of objA) {\n if (!Object.is(value, objB.get(key))) {\n return false;\n }\n }\n return true;\n }\n if (objA instanceof Set && objB instanceof Set) {\n if (objA.size !== objB.size) return false;\n for (const value of objA) {\n if (!objB.has(value)) {\n return false;\n }\n }\n return true;\n }\n const keysA = Object.keys(objA);\n if (keysA.length !== Object.keys(objB).length) {\n return false;\n }\n for (const keyA of keysA) {\n if (!Object.prototype.hasOwnProperty.call(objB, keyA) || !Object.is(objA[keyA], objB[keyA])) {\n return false;\n }\n }\n return true;\n}\n\nvar shallow = (objA, objB) => {\n if (( false ? 0 : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] Default export is deprecated. Instead use `import { shallow } from 'zustand/shallow'`.\"\n );\n }\n return shallow$1(objA, objB);\n};\n\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/zustand/esm/shallow.mjs?"); + +/***/ }), + +/***/ "./node_modules/zustand/esm/traditional.mjs": +/*!**************************************************!*\ + !*** ./node_modules/zustand/esm/traditional.mjs ***! + \**************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createWithEqualityFn: () => (/* binding */ createWithEqualityFn),\n/* harmony export */ useStoreWithEqualityFn: () => (/* binding */ useStoreWithEqualityFn)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var use_sync_external_store_shim_with_selector_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! use-sync-external-store/shim/with-selector.js */ \"./node_modules/use-sync-external-store/shim/with-selector.js\");\n/* harmony import */ var zustand_vanilla__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! zustand/vanilla */ \"./node_modules/zustand/esm/vanilla.mjs\");\n\n\n\n\nconst { useDebugValue } = react__WEBPACK_IMPORTED_MODULE_0__;\nconst { useSyncExternalStoreWithSelector } = use_sync_external_store_shim_with_selector_js__WEBPACK_IMPORTED_MODULE_1__;\nconst identity = (arg) => arg;\nfunction useStoreWithEqualityFn(api, selector = identity, equalityFn) {\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getServerState || api.getInitialState,\n selector,\n equalityFn\n );\n useDebugValue(slice);\n return slice;\n}\nconst createWithEqualityFnImpl = (createState, defaultEqualityFn) => {\n const api = (0,zustand_vanilla__WEBPACK_IMPORTED_MODULE_2__.createStore)(createState);\n const useBoundStoreWithEqualityFn = (selector, equalityFn = defaultEqualityFn) => useStoreWithEqualityFn(api, selector, equalityFn);\n Object.assign(useBoundStoreWithEqualityFn, api);\n return useBoundStoreWithEqualityFn;\n};\nconst createWithEqualityFn = (createState, defaultEqualityFn) => createState ? createWithEqualityFnImpl(createState, defaultEqualityFn) : createWithEqualityFnImpl;\n\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/zustand/esm/traditional.mjs?"); + +/***/ }), + +/***/ "./node_modules/zustand/esm/vanilla.mjs": +/*!**********************************************!*\ + !*** ./node_modules/zustand/esm/vanilla.mjs ***! + \**********************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createStore: () => (/* binding */ createStore),\n/* harmony export */ \"default\": () => (/* binding */ vanilla)\n/* harmony export */ });\nconst createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => {\n if (( false ? 0 : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected.\"\n );\n }\n listeners.clear();\n };\n const api = { setState, getState, getInitialState, subscribe, destroy };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\nvar vanilla = (createState) => {\n if (( false ? 0 : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'.\"\n );\n }\n return createStore(createState);\n};\n\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/zustand/esm/vanilla.mjs?"); + +/***/ }), + /***/ "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2IDYiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwMCIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iNnB4Ij48ZyBvcGFjaXR5PSIwLjMwMiI+PHBhdGggZD0iTSA2IDYgTCAwIDYgTCAwIDQuMiBMIDQgNC4yIEwgNC4yIDQuMiBMIDQuMiAwIEwgNiAwIEwgNiA2IEwgNiA2IFoiIGZpbGw9IiMwMDAwMDAiLz48L2c+PC9zdmc+": /*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2IDYiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwMCIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iNnB4Ij48ZyBvcGFjaXR5PSIwLjMwMiI+PHBhdGggZD0iTSA2IDYgTCAwIDYgTCAwIDQuMiBMIDQgNC4yIEwgNC4yIDQuMiBMIDQuMiAwIEwgNiAwIEwgNiA2IEwgNiA2IFoiIGZpbGw9IiMwMDAwMDAiLz48L2c+PC9zdmc+ ***! diff --git a/package-lock.json b/package-lock.json index fffb992..72a7427 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,6 +30,7 @@ "react-dom": "^18.2.0", "react-grid-layout": "^1.5.1", "react-router-dom": "^6.15.0", + "reactflow": "^11.11.4", "style-loader": "^4.0.0", "webpack": "^5.88.2", "webpack-cli": "^5.1.4" @@ -48,12 +49,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" @@ -232,17 +234,17 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "engines": { "node": ">=6.9.0" } @@ -256,35 +258,24 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", - "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", - "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "dependencies": { + "@babel/types": "^7.28.0" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -387,24 +378,21 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz", - "integrity": "sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -431,13 +419,12 @@ } }, "node_modules/@babel/types": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz", - "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.0.tgz", + "integrity": "sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1090,6 +1077,102 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@reactflow/background": { + "version": "11.3.14", + "resolved": "https://registry.npmjs.org/@reactflow/background/-/background-11.3.14.tgz", + "integrity": "sha512-Gewd7blEVT5Lh6jqrvOgd4G6Qk17eGKQfsDXgyRSqM+CTwDqRldG2LsWN4sNeno6sbqVIC2fZ+rAUBFA9ZEUDA==", + "dependencies": { + "@reactflow/core": "11.11.4", + "classcat": "^5.0.3", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/controls": { + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@reactflow/controls/-/controls-11.2.14.tgz", + "integrity": "sha512-MiJp5VldFD7FrqaBNIrQ85dxChrG6ivuZ+dcFhPQUwOK3HfYgX2RHdBua+gx+40p5Vw5It3dVNp/my4Z3jF0dw==", + "dependencies": { + "@reactflow/core": "11.11.4", + "classcat": "^5.0.3", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/core": { + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/@reactflow/core/-/core-11.11.4.tgz", + "integrity": "sha512-H4vODklsjAq3AMq6Np4LE12i1I4Ta9PrDHuBR9GmL8uzTt2l2jh4CiQbEMpvMDcp7xi4be0hgXj+Ysodde/i7Q==", + "dependencies": { + "@types/d3": "^7.4.0", + "@types/d3-drag": "^3.0.1", + "@types/d3-selection": "^3.0.3", + "@types/d3-zoom": "^3.0.1", + "classcat": "^5.0.3", + "d3-drag": "^3.0.0", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/minimap": { + "version": "11.7.14", + "resolved": "https://registry.npmjs.org/@reactflow/minimap/-/minimap-11.7.14.tgz", + "integrity": "sha512-mpwLKKrEAofgFJdkhwR5UQ1JYWlcAAL/ZU/bctBkuNTT1yqV+y0buoNVImsRehVYhJwffSWeSHaBR5/GJjlCSQ==", + "dependencies": { + "@reactflow/core": "11.11.4", + "@types/d3-selection": "^3.0.3", + "@types/d3-zoom": "^3.0.1", + "classcat": "^5.0.3", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/node-resizer": { + "version": "2.2.14", + "resolved": "https://registry.npmjs.org/@reactflow/node-resizer/-/node-resizer-2.2.14.tgz", + "integrity": "sha512-fwqnks83jUlYr6OHcdFEedumWKChTHRGw/kbCxj0oqBd+ekfs+SIp4ddyNU0pdx96JIm5iNFS0oNrmEiJbbSaA==", + "dependencies": { + "@reactflow/core": "11.11.4", + "classcat": "^5.0.4", + "d3-drag": "^3.0.0", + "d3-selection": "^3.0.0", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/node-toolbar": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@reactflow/node-toolbar/-/node-toolbar-1.3.14.tgz", + "integrity": "sha512-rbynXQnH/xFNu4P9H+hVqlEUafDCkEoCy0Dg9mG22Sg+rY/0ck6KkrAQrYrTgXusd+cEJOMK0uOOFCK2/5rSGQ==", + "dependencies": { + "@reactflow/core": "11.11.4", + "classcat": "^5.0.3", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, "node_modules/@remix-run/router": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.18.0.tgz", @@ -1098,6 +1181,228 @@ "node": ">=14.0.0" } }, + "node_modules/@types/d3": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", + "dependencies": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==" + }, + "node_modules/@types/d3-axis": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-brush": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-chord": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", + "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==" + }, + "node_modules/@types/d3-contour": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", + "dependencies": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==" + }, + "node_modules/@types/d3-dispatch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz", + "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==" + }, + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", + "dependencies": { + "@types/d3-dsv": "*" + } + }, + "node_modules/@types/d3-force": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", + "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==" + }, + "node_modules/@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==" + }, + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-hierarchy": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", + "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==" + }, + "node_modules/@types/d3-polygon": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==" + }, + "node_modules/@types/d3-quadtree": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", + "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==" + }, + "node_modules/@types/d3-random": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==" + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==" + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==" + }, + "node_modules/@types/d3-time-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, "node_modules/@types/eslint": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", @@ -1121,6 +1426,11 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==" + }, "node_modules/@types/hoist-non-react-statics": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz", @@ -1454,17 +1764,6 @@ "node": ">=8" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1651,9 +1950,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1740,27 +2039,6 @@ } ] }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/chart.js": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.3.tgz", @@ -1780,6 +2058,11 @@ "node": ">=6.0" } }, + "node_modules/classcat": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.5.tgz", + "integrity": "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==" + }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -1801,19 +2084,6 @@ "node": ">=6" } }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -1936,6 +2206,102 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", @@ -2930,14 +3296,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -4468,6 +4826,23 @@ "react-dom": ">=16.6.0" } }, + "node_modules/reactflow": { + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.11.4.tgz", + "integrity": "sha512-70FOtJkUWH3BAOsN+LU9lCrKoKbtOPnz2uq0CV2PLdNSwxTXOhCbsZr50GmZ+Rtw3jx8Uv7/vBFtCGixLfd4Og==", + "dependencies": { + "@reactflow/background": "11.3.14", + "@reactflow/controls": "11.2.14", + "@reactflow/core": "11.11.4", + "@reactflow/minimap": "11.7.14", + "@reactflow/node-resizer": "2.2.14", + "@reactflow/node-toolbar": "1.3.14" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, "node_modules/rechoir": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", @@ -4507,11 +4882,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", @@ -5010,17 +5380,6 @@ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -5100,14 +5459,6 @@ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -5263,6 +5614,14 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -5548,6 +5907,33 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zustand": { + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.7.tgz", + "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==", + "dependencies": { + "use-sync-external-store": "^1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } } } } diff --git a/package.json b/package.json index 5b2e433..a922e21 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "react-dom": "^18.2.0", "react-grid-layout": "^1.5.1", "react-router-dom": "^6.15.0", + "reactflow": "^11.11.4", "style-loader": "^4.0.0", "webpack": "^5.88.2", "webpack-cli": "^5.1.4"