diff --git a/app/panels/samples/loader.js b/app/panels/samples/loader.js
new file mode 100644
index 0000000..99dcf6e
--- /dev/null
+++ b/app/panels/samples/loader.js
@@ -0,0 +1,61 @@
+/*
+ Парус 8 - Панели мониторинга - Примеры для разработчиков
+ Пример: Индикатор процесса
+*/
+
+//---------------------
+//Подключение библиотек
+//---------------------
+
+import React, { useContext } from "react"; //Классы React
+import PropTypes from "prop-types"; //Контроль свойств компонента
+import { Typography, Button } from "@mui/material"; //Интерфейсные элементы
+import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений
+
+//---------
+//Константы
+//---------
+
+//Стили
+const STYLES = {
+ CONTAINER: { textAlign: "center", paddingTop: "20px" },
+ TITLE: { paddingBottom: "15px" }
+};
+
+//-----------
+//Тело модуля
+//-----------
+
+//Пример: Индикатор процесса
+const Loader = ({ title }) => {
+ //Подключение к контексту сообщений
+ const { showLoader, hideLoader } = useContext(MessagingСtx);
+
+ //Генерация содержимого
+ return (
+
+
+ {title}
+
+
+
+ );
+};
+
+//Контроль свойств - Пример: Индикатор процесса
+Loader.propTypes = {
+ title: PropTypes.string.isRequired
+};
+
+//----------------
+//Интерфейс модуля
+//----------------
+
+export { Loader };
diff --git a/app/panels/samples/messages.js b/app/panels/samples/messages.js
new file mode 100644
index 0000000..95fac7d
--- /dev/null
+++ b/app/panels/samples/messages.js
@@ -0,0 +1,97 @@
+/*
+ Парус 8 - Панели мониторинга - Примеры для разработчиков
+ Пример: Сообщения
+*/
+
+//---------------------
+//Подключение библиотек
+//---------------------
+
+import React, { useContext, useState } from "react"; //Классы React
+import PropTypes from "prop-types"; //Контроль свойств компонента
+import { Typography, Divider, Button } from "@mui/material"; //Интерфейсные элементы
+import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений
+
+//---------
+//Константы
+//---------
+
+//Стили
+const STYLES = {
+ CONTAINER: { textAlign: "center", paddingTop: "20px" },
+ TITLE: { paddingBottom: "15px" },
+ DIVIDER: { margin: "15px" }
+};
+
+//-----------
+//Тело модуля
+//-----------
+
+//Пример: Сообщения
+const Messages = ({ title }) => {
+ //Собственное состояние
+ const [state, setState] = useState({ inlineErr: true, inlineWarn: true, inlineInfo: true });
+
+ //Подключение к контексту сообщений
+ const { showMsgErr, showMsgWarn, showMsgInfo, InlineMsgErr, InlineMsgInfo, InlineMsgWarn } = useContext(MessagingСtx);
+
+ //Генерация содержимого
+ return (
+
+
+ {title}
+
+ {/* Сообщение об ошибке (диалог) */}
+
+
+ {/* Предупреждение (диалог) */}
+
+
+ {/* Информация (диалог) */}
+
+
+ {/* Ошибка (встраиваемое) */}
+ {state.inlineErr ? (
+ <>
+
setState(pv => ({ ...pv, inlineErr: false }))} />
+
+ >
+ ) : null}
+ {/* Предупреждение (встраиваемое) */}
+ {state.inlineWarn ? (
+ <>
+ setState(pv => ({ ...pv, inlineWarn: false }))} />
+
+ >
+ ) : null}
+ {/* Информация (встраиваемое) */}
+ {state.inlineInfo ? setState(pv => ({ ...pv, inlineInfo: false }))} /> : null}
+
+ );
+};
+
+//Контроль свойств - Пример: Сообщения
+Messages.propTypes = {
+ title: PropTypes.string.isRequired
+};
+
+//----------------
+//Интерфейс модуля
+//----------------
+
+export { Messages };
diff --git a/app/panels/samples/mui.js b/app/panels/samples/mui.js
new file mode 100644
index 0000000..6d246ac
--- /dev/null
+++ b/app/panels/samples/mui.js
@@ -0,0 +1,50 @@
+/*
+ Парус 8 - Панели мониторинга - Примеры для разработчиков
+ Пример: Компоненты MUI
+*/
+
+//---------------------
+//Подключение библиотек
+//---------------------
+
+import React from "react"; //Классы React
+import { Typography } from "@mui/material"; //Интерфейсные элементы
+import PropTypes from "prop-types"; //Контроль свойств компонента
+
+//---------
+//Константы
+//---------
+
+//Стили
+const STYLES = {
+ CONTAINER: { textAlign: "center", paddingTop: "20px" },
+ TITLE: { paddingBottom: "15px" }
+};
+
+//-----------
+//Тело модуля
+//-----------
+
+//Пример: Компоненты MUI
+const Mui = ({ title }) => {
+ //Генерация содержимого
+ return (
+
+
+ {title}
+
+ Mui
+
+ );
+};
+
+//Контроль свойств - Пример: Компоненты MUI
+Mui.propTypes = {
+ title: PropTypes.string.isRequired
+};
+
+//----------------
+//Интерфейс модуля
+//----------------
+
+export { Mui };
diff --git a/app/panels/samples/p8online.js b/app/panels/samples/p8online.js
new file mode 100644
index 0000000..7f2adf4
--- /dev/null
+++ b/app/panels/samples/p8online.js
@@ -0,0 +1,108 @@
+/*
+ Парус 8 - Панели мониторинга - Примеры для разработчиков
+ Пример: API для взаимодействия с "ПАРУС 8 Онлайн"
+*/
+
+//---------------------
+//Подключение библиотек
+//---------------------
+
+import React, { useState, useContext } from "react"; //Классы React
+import PropTypes from "prop-types"; //Контроль свойств компонента
+import { Typography, Button, Divider } from "@mui/material"; //Интерфейсные элементы
+import { ApplicationСtx } from "../../context/application"; //Контекст приложения
+
+//---------
+//Константы
+//---------
+
+//Стили
+const STYLES = {
+ CONTAINER: { textAlign: "center", paddingTop: "20px" },
+ TITLE: { paddingBottom: "15px" },
+ DIVIDER: { margin: "15px" }
+};
+
+//-----------
+//Тело модуля
+//-----------
+
+//Пример: API для взаимодействия с "ПАРУС 8 Онлайн"
+const P8Online = ({ title }) => {
+ //Собственное состояние
+ const [agent, setAgent] = useState("");
+
+ //Подключение к контексту приложения
+ const { pOnlineShowUnit, pOnlineShowTab, pOnlineShowDocument, pOnlineShowDictionary } = useContext(ApplicationСtx);
+
+ //Генерация содержимого
+ return (
+
+
+ {title}
+
+ {/* Открыть новую закладку */}
+
+
+ {/* Открыть раздел */}
+
+
+ {/* Открыть раздел в режиме словаря */}
+
+ {/* Позиционирование/отбор документа */}
+ {agent ? (
+ <>
+
+
+ >
+ ) : null}
+
+ );
+};
+
+//Контроль свойств - Пример: API для взаимодействия с "ПАРУС 8 Онлайн"
+P8Online.propTypes = {
+ title: PropTypes.string.isRequired
+};
+
+//----------------
+//Интерфейс модуля
+//----------------
+
+export { P8Online };
diff --git a/app/panels/samples/samples.js b/app/panels/samples/samples.js
index 7ccbd69..aeaa80a 100644
--- a/app/panels/samples/samples.js
+++ b/app/panels/samples/samples.js
@@ -7,8 +7,31 @@
//Подключение библиотек
//---------------------
-import React from "react"; //Классы React
-import { Typography } from "@mui/material"; //Интерфейсные элементы
+import React, { useState } from "react"; //Классы React
+import { Button, Fab, Icon } from "@mui/material"; //Интерфейсные элементы
+import { BUTTONS } from "../../../app.text"; //Текстовые ресурсы и константы
+import { P8Online } from "./p8online"; //Пример: API для взаимодействия с "ПАРУС 8 Онлайн"
+import { Mui } from "./mui"; //Пример: Компоненты MUI
+import { Messages } from "./messages"; //Пример: Сообщения
+import { Loader } from "./loader"; //Пример: Индикатор процесса
+
+//---------
+//Константы
+//---------
+
+//Режимы
+const MODES = {
+ P8ONLINE: { name: "P8ONLINE", caption: 'API для взаимодействия с "ПАРУС 8 Онлайн"', component: P8Online },
+ MUI: { name: "MUI", caption: "Компоненты MUI", component: Mui },
+ MESSAGES: { name: "MESSAGES", caption: "Сообщения", component: Messages },
+ LOADER: { name: "LOADER", caption: "Индикатор процесса", component: Loader }
+};
+
+//Стили
+const STYLES = {
+ CONTAINER: { textAlign: "center", paddingTop: "20px" },
+ BACK_BUTTON: { position: "absolute", left: "20px", marginTop: "20px" }
+};
//-----------
//Тело модуля
@@ -16,10 +39,29 @@ import { Typography } from "@mui/material"; //Интерфейсные элем
//Примеры
const Samples = () => {
+ //Собственное состояние
+ const [mode, setMode] = useState("");
+
//Генерация содержимого
return (
-
Примеры для разработчиков
+ {mode ? (
+
+ setMode("")}>
+ arrow_back_ios
+ {BUTTONS.NAVIGATE_BACK}
+
+ {React.createElement(MODES[mode]?.component || (() => {}), { title: MODES[mode]?.caption })}
+
+ ) : (
+
+ {Object.entries(MODES).map(m => (
+
+
+
+ ))}
+
+ )}
);
};