# Перечень модалок Источник: `perf/e2e/modals.json` (поиск по `web/src`: `common/Modal`, emotion-модалки `ModalBackdrop`, MUI `Dialog`/`Modal`/`Popover`). priority 1 - листы форм, задача, проект, проекты, задачи; priority 2 - админка и справочник ВСП. | id | страница | source | priority | роль | открытие | статус | n | медиана, мс | skip_reason | |---|---|---|---|---|---|---|---|---|---| | `sheet_select_vsp` | sheet | `web/src/components/RealtimeTable/Modals/SelectVspModal.jsx:51` | 1 | rf | `button[aria-label="Добавить строку"]` | measured | 5 | 58 | | | `sheet_select_vsp@big` | sheet | `web/src/components/RealtimeTable/Modals/SelectVspModal.jsx:51` | 1 | rf | `button[aria-label="Добавить строку"]` | measured | 5 | 57 | | | `sheet_select_expense` | sheet | `web/src/components/RealtimeTable/Modals/SelectExpenseItemModal.jsx:51` | 1 | rf | `button[aria-label="Добавить строку"]` (+1 шаг.) | measured | 5 | 66 | | | `sheet_select_expense@big` | sheet | `web/src/components/RealtimeTable/Modals/SelectExpenseItemModal.jsx:51` | 1 | rf | `button[aria-label="Добавить строку"]` (+1 шаг.) | measured | 5 | 70 | | | `sheet_create_program` | sheet | `web/src/components/RealtimeTable/Modals/CreateProgramProjectModal.jsx:38` | 1 | rf | `button[aria-label="Добавить программу"]` | measured | 5 | 65 | | | `sheet_create_program@big` | sheet | `web/src/components/RealtimeTable/Modals/CreateProgramProjectModal.jsx:38` | 1 | rf | `button[aria-label="Добавить программу"]` | measured | 5 | 62 | | | `sheet_create_project` | sheet | `web/src/components/RealtimeTable/Modals/CreateProgramProjectModal.jsx:38` | 1 | rf | `button[aria-label="Добавить проект"]` (+1 шаг.) | measured | 5 | 66 | | | `sheet_create_project@big` | sheet | `web/src/components/RealtimeTable/Modals/CreateProgramProjectModal.jsx:38` | 1 | rf | `button[aria-label="Добавить проект"]` (+1 шаг.) | measured | 5 | 63 | | | `sheet_columns_tree` | sheet | `web/src/components/common/CollapsibleTree.jsx:203` | 1 | rf | `[data-pin-panel] input[readonly]` | measured | 5 | 37 | | | `sheet_columns_tree@big` | sheet | `web/src/components/common/CollapsibleTree.jsx:203` | 1 | rf | `[data-pin-panel] input[readonly]` | measured | 5 | 34 | | | `task_stages` | task | `web/src/components/Stages/SettingModal.jsx:102` | 1 | rf | `role=button[name="Этапы"]` | measured | 5 | 24 | | | `task_stage_add` | task | `web/src/components/Stages/AddStagesModal.jsx:156` | 1 | admin | `role=button[name="Добавить этап"]` (+1 шаг.) | measured | 5 | 24 | | | `task_stage_edit` | task | `web/src/components/Stages/AddStagesModal.jsx:156` | 1 | admin | `role=menuitem[name="Редактировать"]` (+2 шаг.) | measured | 5 | 24 | | | `project_stages` | project | `web/src/components/Stages/SettingModal.jsx:102` | 1 | rf | `role=button[name="Этапы"] >> nth=0` | measured | 5 | 25 | | | `project_add_year` | project | `web/src/pages/TaskPage/TaskPage.jsx:217` | 1 | rf | `role=button[name="Добавить год"]` | measured | 5 | 24 | | | `project_stage_delete` | project | `web/src/components/Stages/DeleteStageModal.jsx:38` | 1 | admin | `role=menuitem[name="Удалить"]` (+2 шаг.) | measured | 5 | 25 | | | `projects_create` | projects | `web/src/pages/ProjectsPage/ModalCreateProject.jsx:247` | 1 | rf | `role=button[name="Создать проект"]` | measured | 5 | 40 | | | `projects_edit` | projects | `web/src/pages/ProjectPages/components/EditModal/EditModal.jsx:170` | 1 | rf | `role=button[name="Редактировать"] >> nth=0` | measured | 5 | 43 | | | `projects_delete` | projects | `web/src/pages/ProjectPages/NavigationProjectPage.jsx:510` | 1 | rf | `role=button[name="Удалить проект"] >> nth=0` | measured | 5 | 29 | | | `tasks_create` | tasks | `web/src/pages/TasksPage/TasksPage.jsx:374` | 1 | admin | `role=button[name="Создать задачу"]` | measured | 5 | 62 | | | `tasks_confirm_mark` | tasks | `web/src/pages/TasksPage/TasksTable.jsx:371` | 1 | admin | `text=Отправить на удаление` (+1 шаг.) | measured | 5 | 34 | | | `forms_create` | forms | `web/src/pages/FormsPage.jsx:133` | 1 | admin | | skip | 0 | | страница FormsPage не подключена в app/Routes.jsx - открыть из UI нельзя | | `taskcard_confirm` | forms | `web/src/components/common/TaskCardComponent.jsx:265` | 1 | admin | | skip | 0 | | TaskCardComponent используется только в FormsPage (не в маршрутах) | | `infoheader_rename` | forms | `web/src/pages/TableTempPage/InfoForHeader.jsx:44` | 1 | admin | | skip | 0 | | TableTempPage не в маршрутах, ModalRename не импортирован - мёртвый код | | `admin_users_add` | admin_users | `web/src/pages/AdminPanel/UsersPage/ModalAddUsers.jsx:71` | 2 | admin | `role=button[name="Добавить"]` | measured | 3 | 49 | | | `admin_users_edit` | admin_users | `web/src/pages/AdminPanel/UsersPage/UserTable/EditUserModal.jsx:311` | 2 | admin | `role=menuitem[name="Редактировать"]` (+1 шаг.) | measured | 3 | 28 | | | `admin_users_delete` | admin_users | `web/src/pages/AdminPanel/UsersPage/UserTable/DeleteUserModal.jsx:48` | 2 | admin | `role=menuitem[name="Удалить"]` (+1 шаг.) | measured | 3 | 30 | | | `admin_users_ssp` | admin_users | `web/src/pages/AdminPanel/UsersPage/ModalEditUserSsp.jsx:93` | 2 | admin | `tbody button:has-text("Выбрать") >> nth=0` | measured | 3 | 48 | | | `admin_ssps_add` | admin_ssps | `web/src/pages/AdminPanel/SppsPage/ModalAddSsp.jsx:51` | 2 | admin | `role=button[name="Добавить"]` | measured | 3 | 39 | | | `admin_ssps_edit` | admin_ssps | `web/src/pages/AdminPanel/SppsPage/ModalEditSsp.jsx:41` | 2 | admin | `tbody tr >> nth=0 >> button >> nth=-1` | measured | 3 | 28 | | | `admin_ssps_users` | admin_ssps | `web/src/pages/AdminPanel/SppsPage/ModalChangeUsersInSsp.jsx:121` | 2 | admin | `tbody tr >> nth=0 >> button >> nth=0` | measured | 3 | 28 | | | `admin_ssps_archive` | admin_ssps | `web/src/pages/AdminPanel/SppsPage/ModalConfirmArchiveSsp.jsx:27` | 2 | admin | `tbody tr >> nth=0 >> button:has-text("Активен")` | measured | 3 | 24 | | | `admin_phase_add` | admin_default_stage | `web/src/pages/AdminPanel/PhaseTemplatesPage/components/PhaseTemplateDialog.jsx:120` | 2 | admin | `role=button[name="Добавить этап"]` | measured | 3 | 71 | | | `admin_phase_edit` | admin_default_stage | `web/src/pages/AdminPanel/PhaseTemplatesPage/components/PhaseTemplateDialog.jsx:120` | 2 | admin | `role=button[name^="Редактировать этап"] >> nth=0` | measured | 3 | 67 | | | `admin_phase_delete` | admin_default_stage | `web/src/pages/AdminPanel/PhaseTemplatesPage/components/DeletePhaseTemplateDialog.jsx:8` | 2 | admin | `role=button[name^="Удалить этап"] >> nth=0` | measured | 3 | 51 | | | `admin_audit_json` | admin_audit_log | `web/src/pages/AdminPanel/AuditLogsPage/components/JsonViewModal.jsx:95` | 2 | admin | `text=Посмотреть >> nth=0` | measured | 3 | 40 | | | `dict_vsp_add` | dict_vsp | `web/src/pages/DictVspPage/components/Modals/ModalEditAddVsp.jsx:239` | 2 | admin | `role=button[name="+ Добавить объект"]` | measured | 3 | 507 | | | `dict_vsp_edit` | dict_vsp | `web/src/pages/DictVspPage/components/Modals/ModalEditAddVsp.jsx:239` | 2 | admin | `tbody tr >> nth=0 >> button >> nth=-1` | measured | 3 | 609 | | | `dict_vsp_export` | dict_vsp | `web/src/pages/DictVspPage/components/Modals/ModalExport.jsx:71` | 2 | admin | `role=button[name="Экспортировать"]` | measured | 3 | 496 | | Всего: 39, без skip_reason: 36, skip_reason: 3.