+
+
+
+
+ {filters.display.mode === 'preset' && (
+
+
+ )}
+
+
+
+
+
+
+
+
+ {isFiltered(filters) && (
+
+ )}
+
+
+ defs={COLUMN_DEFS} visibleKeys={p.visibleKeys} onChange={p.onVisibleKeysChange} />
+ } loading={p.exporting} disabled={p.exportDisabled} onClick={p.onExport}>
+ Экспорт
+
+ : } onClick={p.onToggleFullscreen}>
+ {p.fullscreen ? 'Свернуть' : 'На весь экран'}
+
+
+
+ );
+}
diff --git a/web/src/widgets/CorrectionTable/HeaderFilter.tsx b/web/src/widgets/CorrectionTable/HeaderFilter.tsx
new file mode 100644
index 0000000..0f4d2e6
--- /dev/null
+++ b/web/src/widgets/CorrectionTable/HeaderFilter.tsx
@@ -0,0 +1,57 @@
+import { FilterFilled, FilterOutlined } from '@ant-design/icons';
+import { Input, Popover, Select } from 'antd';
+import type { ReactNode } from 'react';
+
+type Props = {
+ label: ReactNode;
+ /** Фильтр задан — значок выделяется. */
+ active: boolean;
+ children: ReactNode;
+};
+
+/** Подпись колонки со значком-воронкой: по клику открывается поле фильтра. */
+export function HeaderFilter({ label, active, children }: Props) {
+ return (
+