nillud-data-table 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -12
- package/dist/ExportSection-ZYOK6KMB.js +247 -0
- package/dist/index.d.ts +2 -3
- package/dist/index.js +11 -256
- package/package.json +12 -11
- package/dist/index.cjs +0 -821
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -58
- package/dist/index.js.map +0 -1
package/dist/index.cjs.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../index.ts","../components/DataTable.tsx","../components/TableHeader.tsx","../components/Column.tsx","../components/img/SortDown.tsx","../components/img/SortUp.tsx","../components/TableBody.tsx","../components/Cell.tsx","../components/Row.tsx","../utils/groupDataBy.ts","../components/img/NextIcon.tsx","../components/img/LastIcon.tsx","../components/img/PrevIcon.tsx","../components/img/FirstIcon.tsx","../components/TableFooter.tsx","../components/functions/sort-data.ts","../components/export/WordExport.tsx","../utils/exportUtils/ExportHelpers.ts","../utils/exportUtils/exportUtils.ts","../components/export/ExportExcel.tsx","../components/ExportSection.tsx","../utils/useDebouncedEffect.tsx"],"sourcesContent":["export { default as DataTable } from './components/DataTable'\r\nexport type { TableProps, Column, TableElement } from './types/DataTable.types'\r\n","import { useImperativeHandle, useEffect, useState, useCallback, useMemo, forwardRef } from 'react'\r\nimport { DataTableRef, LocalStorageData, LocalStorageSort, PaginationPage, PaginationSize, TableProps } from '../types/DataTable.types'\r\nimport TableHeader from './TableHeader'\r\nimport TableBody from './TableBody'\r\nimport TableFooter from './TableFooter'\r\nimport { filterData, sortData } from './functions/sort-data'\r\nimport ExportSection from './ExportSection'\r\nimport { useDebouncedEffect } from '../utils/useDebouncedEffect'\r\n\r\nconst DataTable = forwardRef<DataTableRef, TableProps>(({\r\n tableData,\r\n columns,\r\n tableName = 'table-data',\r\n loading = false,\r\n loadingElement = null,\r\n isFooter = false,\r\n paginationCounts = null,\r\n scrollable = false,\r\n scrollHeight = 300,\r\n exportCustomColumns = null,\r\n excelBtn = false,\r\n wordBtn = false,\r\n downloadSectionLeftSideContent = null,\r\n headerGroup = null,\r\n groupBy = null,\r\n isTitles = false,\r\n wordOptions\r\n}: TableProps, ref) => {\r\n const [filters, setFilters] = useState<LocalStorageData>({})\r\n const [sortBy, setSortBy] = useState<LocalStorageSort>({ col: '', type: 'asc' })\r\n\r\n const [paginationSize, setPaginationSize] = useState<PaginationSize>(paginationCounts?.[0] || 10)\r\n const [paginationPage, setPaginationPage] = useState<PaginationPage>(0)\r\n\r\n const [collapsedGroups, setCollapsedGroups] = useState<Record<string, boolean>>({})\r\n\r\n const toggleGroup = (groupKey: string) => {\r\n setCollapsedGroups(prev => ({\r\n ...prev,\r\n [groupKey]: !prev[groupKey],\r\n }))\r\n }\r\n\r\n // const [widths, setWidths] = useState<string>('1fr')\r\n\r\n const widths = useMemo(() => {\r\n return columns.map(c => c.width ? `${c.width}px` : '1fr').join(' ')\r\n }, [columns])\r\n\r\n const loadFromLocalStorage = useCallback(() => {\r\n try {\r\n const s = localStorage.getItem(`${tableName}-sort-by`)\r\n const f = localStorage.getItem(`${tableName}-filters`)\r\n const c = localStorage.getItem(`${tableName}-counts`)\r\n const p = localStorage.getItem(`${tableName}-page`)\r\n if (s) setSortBy(JSON.parse(s))\r\n if (f) setFilters(JSON.parse(f))\r\n if (c) setPaginationSize(c === 'all' ? 0 : Number(c))\r\n if (p) setPaginationPage(Number(p))\r\n } catch (e) {\r\n console.error('Error parsing localStorage data:', e)\r\n setSortBy({ col: '', type: 'asc' })\r\n setFilters({})\r\n setPaginationSize(paginationCounts?.[0] || 10)\r\n setPaginationPage(0)\r\n }\r\n }, [tableName, paginationCounts])\r\n\r\n useEffect(() => {\r\n loadFromLocalStorage()\r\n }, [loadFromLocalStorage])\r\n\r\n // Обработка данных (фильтрация + сортировка)\r\n const processedData = useMemo(() => {\r\n let result = [...tableData]\r\n\r\n const columnMap = new Map(columns.map(col => [col.field, col]))\r\n\r\n for (const field in filters) {\r\n const filterValue = String(filters[field])\r\n if (filterValue === '') continue\r\n\r\n const column = columnMap.get(field)\r\n if (!column) continue\r\n\r\n result = column.headerFilter\r\n ? result.filter(e => column.headerFilter!(filterValue, String(e[field])))\r\n : filterData(result, field, filterValue)\r\n }\r\n\r\n if (sortBy.col) {\r\n result = sortData(result, sortBy.col, sortBy.type)\r\n }\r\n\r\n return result\r\n }, [tableData, filters, sortBy, columns])\r\n\r\n // Пагинация\r\n const displayData = useMemo(() => {\r\n if (paginationSize === 0) return processedData\r\n const start = paginationPage * paginationSize\r\n return processedData.slice(start, start + paginationSize)\r\n }, [processedData, paginationPage, paginationSize])\r\n\r\n // Сброс страницы при изменении фильтров/сортировки\r\n useEffect(() => {\r\n setPaginationPage(0)\r\n }, [filters, sortBy])\r\n\r\n // Сохраняем filters с задержкой\r\n useDebouncedEffect(() => {\r\n localStorage.setItem(`${tableName}-filters`, JSON.stringify(filters))\r\n }, [filters, tableName], 500)\r\n\r\n // Сохраняем sortBy с задержкой\r\n useDebouncedEffect(() => {\r\n localStorage.setItem(`${tableName}-sort-by`, JSON.stringify(sortBy))\r\n }, [sortBy, tableName], 500)\r\n\r\n\r\n useEffect(() => {\r\n localStorage.setItem(`${tableName}-counts`, paginationSize === 0 ? 'all' : paginationSize.toString())\r\n }, [paginationSize, tableName])\r\n\r\n useEffect(() => {\r\n localStorage.setItem(`${tableName}-page`, paginationPage.toString())\r\n }, [paginationPage, tableName])\r\n\r\n useImperativeHandle(ref, () => ({\r\n getData: () => processedData,\r\n getCurrentData: () => displayData,\r\n }), [processedData, displayData]);\r\n\r\n return (\r\n <div className=\"ndt-table-container\">\r\n {(wordBtn || excelBtn) && (\r\n <ExportSection\r\n wordBtn={wordBtn}\r\n excelBtn={excelBtn}\r\n downloadSectionLeftSideContent={downloadSectionLeftSideContent}\r\n tableData={displayData}\r\n columns={columns}\r\n tableName={tableName}\r\n exportCustomColumns={exportCustomColumns}\r\n wordOptions={wordOptions}\r\n />\r\n )}\r\n\r\n <div className=\"ndt-table\">\r\n <TableHeader\r\n columns={columns}\r\n sortBy={sortBy}\r\n getSortField={setSortBy}\r\n filters={filters}\r\n getFilters={setFilters}\r\n widths={widths}\r\n headerGroup={headerGroup}\r\n />\r\n\r\n {loading\r\n ? loadingElement !== null\r\n ? loadingElement\r\n : <span style={{ marginLeft: 10, fontWeight: 'bold' }}>Загрузка данных...</span>\r\n : <TableBody\r\n tableData={displayData}\r\n columns={columns}\r\n scrollable={scrollable}\r\n scrollHeight={scrollHeight}\r\n widths={widths}\r\n groupBy={groupBy}\r\n collapsedGroups={collapsedGroups}\r\n toggleGroup={toggleGroup}\r\n isTitles={isTitles}\r\n />\r\n }\r\n\r\n {isFooter && (\r\n <TableFooter\r\n paginationCounts={paginationCounts}\r\n tableData={processedData} // Передаем все отфильтрованные данные\r\n paginationSize={paginationSize}\r\n getPaginationSize={setPaginationSize}\r\n paginationPage={paginationPage}\r\n getPaginationPage={setPaginationPage}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n )\r\n})\r\n\r\nDataTable.displayName = 'DataTable';\r\n\r\nexport default DataTable","import React from 'react'\r\nimport { Column as ColumnType, LocalStorageData, LocalStorageSort, TableProps } from '../types/DataTable.types'\r\nimport Column from './Column'\r\n\r\ntype Props = {\r\n columns: Array<ColumnType>\r\n sortBy: LocalStorageSort\r\n getSortField: (element: LocalStorageSort) => void\r\n getFilters: (element: LocalStorageData) => void\r\n filters: LocalStorageData\r\n widths?: string\r\n headerGroup: TableProps['headerGroup']\r\n [key: string]: unknown\r\n}\r\n\r\nconst Header = ({ columns, getSortField, sortBy, getFilters, filters, widths, headerGroup }: Props) => {\r\n const renderHeaderGroup = () => (\r\n headerGroup && (\r\n <div className={\"ndt-table-columns\"} style={{ gridTemplateColumns: widths || 'auto' }}>\r\n {headerGroup.map((col, id) => (\r\n <div key={`header-group-${id}`} className={'ndt-column'} style={{ gridColumn: `span ${col.cols || 1}` }}>\r\n <div className=\"ndt-column-head\">\r\n <span>{col.title}</span>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n )\r\n )\r\n\r\n const renderColumns = () => (\r\n columns && columns.length > 0\r\n ? columns.map((column, id) => (\r\n <Column\r\n key={`column-${id}`}\r\n column={column}\r\n getSortField={getSortField}\r\n sortBy={sortBy}\r\n getFilters={getFilters}\r\n filters={filters}\r\n />\r\n ))\r\n : <div className={'ndt-data-error'}>Ошибка: columns is undefined</div>\r\n )\r\n return (\r\n <>\r\n {renderHeaderGroup()}\r\n \r\n <div className={\"ndt-table-columns\"} style={{ gridTemplateColumns: widths || 'auto' }}>\r\n {renderColumns()}\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\nexport default React.memo(Header)","import { useMemo } from 'react'\r\nimport { Column as ColumnType, LocalStorageData, LocalStorageSort } from '../types/DataTable.types'\r\nimport SortDown from './img/SortDown'\r\nimport SortUp from './img/SortUp'\r\n\r\ntype Props = {\r\n column: ColumnType\r\n getSortField: (element: LocalStorageSort) => void\r\n sortBy: LocalStorageSort\r\n getFilters: (element: LocalStorageData) => void\r\n filters: LocalStorageData\r\n}\r\n\r\nconst Column = ({ column, getSortField, sortBy, getFilters, filters }: Props) => {\r\n const currentSort = useMemo(() => {\r\n return sortBy.col === column.field ? sortBy.type : null\r\n }, [sortBy, column.field])\r\n \r\n const toggleSort = () => {\r\n const nextType = currentSort === 'asc' ? 'desc' : 'asc'\r\n getSortField({ col: column.field, type: nextType })\r\n }\r\n \r\n const onFilterChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n getFilters({ ...filters, [column.field]: e.target.value })\r\n }\r\n\r\n return (\r\n <div className={'ndt-column'}>\r\n <div className=\"ndt-column-head\">\r\n <span>{column.title}</span>\r\n\r\n {typeof column.autoinc === 'undefined' &&\r\n (typeof column.sortable === 'undefined' || column.sortable) && (\r\n <div className=\"ndt-sorter\" onClick={toggleSort}>\r\n {currentSort === 'asc' ? <SortDown /> : currentSort === 'desc' ? <SortUp /> : null}\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"ndt-column-footer\">\r\n {typeof column.autoinc === 'undefined' &&\r\n (typeof column.filterable === 'undefined' || column.filterable) && (\r\n <input\r\n type=\"text\"\r\n value={filters[column.field] ?? ''}\r\n onChange={onFilterChange}\r\n placeholder=\"Фильтр...\"\r\n />\r\n )}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Column","const SortDown = () => {\r\n return (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" className=\"bi bi-caret-down-fill\" viewBox=\"0 0 16 16\">\r\n <path d=\"M7.247 11.14 2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z\" />\r\n </svg>\r\n )\r\n}\r\n\r\nexport default SortDown","const SortUp = () => {\r\n return (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" className=\"bi bi-caret-up-fill\" viewBox=\"0 0 16 16\">\r\n <path d=\"m7.247 4.86-4.796 5.481c-.566.647-.106 1.659.753 1.659h9.592a1 1 0 0 0 .753-1.659l-4.796-5.48a1 1 0 0 0-1.506 0z\" />\r\n </svg>\r\n )\r\n}\r\n\r\nexport default SortUp","import React from 'react'\r\nimport { Column, TableData, TableElement, TableProps } from '../types/DataTable.types'\r\nimport Row from './Row'\r\nimport { groupDataBy } from '../utils/groupDataBy'\r\n\r\ntype Props = {\r\n columns: Array<Column>\r\n tableData: TableData\r\n loading?: boolean\r\n scrollable?: boolean\r\n scrollHeight?: number\r\n widths?: string\r\n groupBy?: TableProps['groupBy']\r\n collapsedGroups?: Record<string, boolean>\r\n toggleGroup?: (groupKey: string) => void\r\n isTitles: TableProps['isTitles']\r\n}\r\n\r\nconst TableBody = ({\r\n columns,\r\n tableData,\r\n scrollable,\r\n scrollHeight,\r\n widths,\r\n groupBy,\r\n collapsedGroups = {},\r\n toggleGroup,\r\n isTitles\r\n}: Props) => {\r\n const grouped = groupBy ? groupDataBy(tableData, groupBy) : []\r\n\r\n if (!tableData || tableData.length === 0) {\r\n return (\r\n <div className={`ndt-table-body${scrollable ? ' ndt-table-body-scrollable' : ''}`} style={scrollable ? { height: scrollHeight } : {}}>\r\n <div className='ndt-table-row' style={{ height: '100%' }}>\r\n <div className='ndt-row-item' style={{ margin: 'auto', padding: 20, fontWeight: 'bold' }}>Данных нет</div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n const renderGroupedRows = () => (\r\n grouped.map((group, id) => (\r\n <React.Fragment key={`row-${group.key}-${id}`}>\r\n <div\r\n className=\"ndt-group-header\"\r\n onClick={() => toggleGroup?.(group.key)}\r\n >\r\n <span style={{ marginRight: 8 }}>\r\n {collapsedGroups[group.key] ? '▶' : '▼'}\r\n </span>\r\n {group.key} ({group.items.length})\r\n </div>\r\n {!collapsedGroups[group.key] &&\r\n group.items.map((element: TableElement, id: number) => (\r\n <Row\r\n key={`row-${group.key}-${id}`}\r\n rowId={id}\r\n row={element}\r\n columns={columns}\r\n widths={widths}\r\n isTitles={isTitles}\r\n />\r\n ))}\r\n </React.Fragment>\r\n ))\r\n )\r\n\r\n const renderFlatRows = () => (\r\n tableData.map((element, id) => (\r\n <Row\r\n key={`row-${id}`}\r\n rowId={id}\r\n row={element}\r\n columns={columns}\r\n widths={widths}\r\n />\r\n ))\r\n )\r\n\r\n return (\r\n <div className={`ndt-table-body${scrollable ? ' ndt-table-body-scrollable' : ''}`} style={scrollable ? { height: scrollHeight } : {}}>\r\n {\r\n groupBy\r\n ? renderGroupedRows()\r\n : renderFlatRows()\r\n }\r\n </div>\r\n )\r\n}\r\n\r\nexport default TableBody","import { Column, TableElement, TableProps } from '../types/DataTable.types'\r\n\r\ntype Props = {\r\n row: TableElement\r\n column: Column\r\n rowId: number\r\n isTitles: TableProps['isTitles']\r\n}\r\n\r\nconst Cell = ({\r\n row,\r\n column,\r\n rowId,\r\n isTitles\r\n}: Props) => {\r\n const rawValue = row[column.field]\r\n\r\n const stringValue = typeof rawValue !== 'undefined' && rawValue !== null ? String(rawValue) : ''\r\n\r\n const content = column.formatter\r\n ? column.formatter(stringValue, row)\r\n : typeof column.autoinc !== 'undefined'\r\n ? <span>{rowId + 1}</span>\r\n : <span>{stringValue}</span>\r\n\r\n return (\r\n <div\r\n className='ndt-cell'\r\n title={isTitles && stringValue ? stringValue : ''}\r\n >\r\n {content}\r\n </div>\r\n )\r\n}\r\n\r\nexport default Cell","import React from 'react'\r\nimport { Column, TableElement, TableProps } from '../types/DataTable.types'\r\nimport Cell from './Cell'\r\n\r\ntype Props = {\r\n rowId: number\r\n row: TableElement\r\n columns: Array<Column>\r\n widths?: string\r\n isTitles?: TableProps['isTitles']\r\n}\r\n\r\nconst Row = ({ rowId, columns, row, widths, isTitles }: Props) => (\r\n <div className={'ndt-table-row'} style={{ gridTemplateColumns: widths }}>\r\n {columns.map((column, id) => (\r\n <Cell\r\n key={`cell-${rowId}-${id}`}\r\n row={row}\r\n column={column}\r\n rowId={rowId}\r\n isTitles={isTitles}\r\n />\r\n ))}\r\n </div>\r\n)\r\n\r\nexport default Row","import { TableData } from \"../types/DataTable.types\"\r\n\r\ntype GroupedData = {\r\n key: string\r\n items: TableData\r\n}\r\n\r\nexport const groupDataBy = (data: TableData, key: string): GroupedData[] => {\r\n const groups = new Map<string, TableData>()\r\n\r\n data.forEach(item => {\r\n const groupKey = item[key] || '—' // fallback если undefined\r\n if (!groups.has(String(groupKey))) {\r\n groups.set(String(groupKey), [])\r\n }\r\n groups.get(String(groupKey))!.push(item)\r\n })\r\n\r\n return Array.from(groups.entries()).map(([key, items]) => ({ key, items }))\r\n}","const NextIcon = () => {\r\n return (\r\n <svg width=\"41\" height=\"65\" viewBox=\"0 0 41 65\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M0.674316 57.2669L25.3872 32.5L0.674316 7.73312L8.28244 0.125L40.6574 32.5L8.28244 64.875L0.674316 57.2669Z\" fill=\"#666666\" />\r\n </svg>\r\n\r\n )\r\n}\r\n\r\nexport default NextIcon","const LastIcon = () => {\r\n return (\r\n <svg width=\"68\" height=\"65\" viewBox=\"0 0 68 65\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M0.185059 7.73312L24.9519 32.5L0.185059 57.2669L7.79318 64.875L40.1682 32.5L7.79318 0.125L0.185059 7.73312ZM56.3557 0.125H67.1474V64.875H56.3557V0.125Z\" fill=\"#666666\" />\r\n </svg>\r\n\r\n )\r\n}\r\n\r\nexport default LastIcon","const PrevIcon = () => {\r\n return (\r\n <svg width=\"41\" height=\"65\" viewBox=\"0 0 41 65\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M40.6574 57.2669L15.9445 32.5L40.6574 7.73312L33.0493 0.125L0.674316 32.5L33.0493 64.875L40.6574 57.2669Z\" fill=\"#666666\" />\r\n </svg>\r\n\r\n )\r\n}\r\n\r\nexport default PrevIcon","const FirstIcon = () => {\r\n return (\r\n <svg width=\"68\" height=\"65\" viewBox=\"0 0 68 65\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M67.1474 57.2669L42.3805 32.5L67.1474 7.73312L59.5392 0.125L27.1642 32.5L59.5392 64.875L67.1474 57.2669ZM0.185059 0.125H10.9767V64.875H0.185059V0.125Z\" fill=\"#666666\" />\r\n </svg>\r\n\r\n )\r\n}\r\n\r\nexport default FirstIcon","import { PaginationPage, PaginationSize, TableData, TableProps } from '../types/DataTable.types';\r\nimport NextIcon from './img/NextIcon';\r\nimport LastIcon from './img/LastIcon';\r\nimport PrevIcon from './img/PrevIcon';\r\nimport FirstIcon from './img/FirstIcon';\r\n\r\ntype Props = {\r\n tableData: TableData;\r\n paginationCounts: TableProps[\"paginationCounts\"];\r\n paginationSize: PaginationSize;\r\n getPaginationSize: (size: PaginationSize) => void;\r\n paginationPage: PaginationPage;\r\n getPaginationPage: (page: PaginationPage) => void;\r\n};\r\n\r\nconst TableFooter = ({\r\n tableData,\r\n paginationCounts,\r\n paginationSize,\r\n getPaginationSize,\r\n paginationPage,\r\n getPaginationPage\r\n}: Props) => {\r\n const totalItems = tableData.length;\r\n const totalPages = paginationSize === 0 ? 1 : Math.ceil(totalItems / paginationSize);\r\n\r\n if (totalItems === 0) return null;\r\n\r\n const handleCountChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n getPaginationSize(Number(e.target.value));\r\n };\r\n\r\n const handlePageChange = (newPage: number) => {\r\n if (newPage >= 0 && newPage < totalPages) {\r\n getPaginationPage(newPage);\r\n }\r\n };\r\n\r\n const renderPageNumbers = () => {\r\n if (totalPages <= 1) return null;\r\n\r\n const pages = [];\r\n const maxVisible = 5;\r\n let start = Math.max(0, paginationPage - Math.floor(maxVisible / 2));\r\n const end = Math.min(totalPages - 1, start + maxVisible - 1);\r\n\r\n if (end - start + 1 < maxVisible) {\r\n start = Math.max(0, end - maxVisible + 1);\r\n }\r\n\r\n if (start > 0) {\r\n pages.push(\r\n <button key=\"page-0\" onClick={() => handlePageChange(0)}>\r\n 1\r\n </button>\r\n );\r\n if (start > 1) {\r\n pages.push(<span key=\"ellipsis-start\">...</span>);\r\n }\r\n }\r\n\r\n for (let i = start; i <= end; i++) {\r\n pages.push(\r\n <button\r\n key={`page-${i}`}\r\n className={i === paginationPage ? 'btn-active' : ''}\r\n onClick={() => handlePageChange(i)}\r\n disabled={i === paginationPage}\r\n >\r\n {i + 1}\r\n </button>\r\n );\r\n }\r\n\r\n if (end < totalPages - 1) {\r\n if (end < totalPages - 2) {\r\n pages.push(<span key=\"ellipsis-end\">...</span>);\r\n }\r\n pages.push(\r\n <button key={`page-${totalPages - 1}`} onClick={() => handlePageChange(totalPages - 1)}>\r\n {totalPages}\r\n </button>\r\n );\r\n }\r\n\r\n return pages;\r\n };\r\n\r\n const firstItem = paginationSize === 0 ? 1 : paginationPage * paginationSize + 1;\r\n const lastItem = paginationSize === 0 ? totalItems : Math.min((paginationPage + 1) * paginationSize, totalItems);\r\n\r\n return (\r\n <div className=\"ndt-table-footer\">\r\n <div className=\"ndt-footer-count\">\r\n <span>Показаны строки с {firstItem} по {lastItem}, </span>\r\n <span>Всего: {totalItems}</span>\r\n </div>\r\n\r\n {paginationCounts && (\r\n <div className=\"ndt-footer-pagination\">\r\n <div className=\"ndt-pagination-counts\">\r\n <span>Показывать строк: </span>\r\n <select value={paginationSize} onChange={handleCountChange}>\r\n {paginationCounts.map(count => (\r\n <option key={`count-${count}`} value={count}>\r\n {count === 0 ? 'Все' : count}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n\r\n <div className=\"ndt-pagination-buttons\">\r\n <button\r\n disabled={paginationPage === 0}\r\n onClick={() => handlePageChange(0)}\r\n aria-label=\"Первая страница\"\r\n >\r\n <FirstIcon />\r\n </button>\r\n <button\r\n disabled={paginationPage === 0}\r\n onClick={() => handlePageChange(paginationPage - 1)}\r\n aria-label=\"Предыдущая страница\"\r\n >\r\n <PrevIcon />\r\n </button>\r\n\r\n <div className=\"ndt-buttons-num\">{renderPageNumbers()}</div>\r\n\r\n <button\r\n disabled={paginationPage >= totalPages - 1}\r\n onClick={() => handlePageChange(paginationPage + 1)}\r\n aria-label=\"Следующая страница\"\r\n >\r\n <NextIcon />\r\n </button>\r\n <button\r\n disabled={paginationPage >= totalPages - 1}\r\n onClick={() => handlePageChange(totalPages - 1)}\r\n aria-label=\"Последняя страница\"\r\n >\r\n <LastIcon />\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default TableFooter;","import { Column, TableData } from \"../../types/DataTable.types\";\r\n\r\nconst sortByAsc = (data: TableData, column: Column[\"field\"]) => {\r\n const sortedData = data.sort((a, b) => {\r\n if (!isNaN(+a[column]) && !isNaN(+b[column])) {\r\n return +a[column] - +b[column]\r\n }\r\n\r\n if (`${a[column]}`.toLowerCase() < `${b[column]}`.toLowerCase()) {\r\n return -1;\r\n }\r\n if (`${a[column]}`.toLowerCase() > `${b[column]}`.toLowerCase()) {\r\n return 1;\r\n }\r\n return 0;\r\n })\r\n\r\n return sortedData\r\n}\r\n\r\nconst sortByDesc = (data: TableData, column: Column[\"field\"]) => {\r\n const sortedData = data.sort((a, b) => {\r\n if (!isNaN(+a[column]) && !isNaN(+b[column])) {\r\n return +b[column] - +a[column]\r\n }\r\n\r\n if (`${a[column]}`.toLowerCase() > `${b[column]}`.toLowerCase()) {\r\n return -1;\r\n }\r\n if (`${a[column]}`.toLowerCase() < `${b[column]}`.toLowerCase()) {\r\n return 1;\r\n }\r\n return 0;\r\n })\r\n\r\n return sortedData\r\n}\r\n\r\nconst sortData = (data: TableData, col: Column[\"field\"], type: 'asc' | 'desc') => {\r\n if (type === 'asc') {\r\n return sortByAsc(data, col)\r\n } else {\r\n return sortByDesc(data, col)\r\n }\r\n }\r\n\r\nconst filterData = (data: TableData, filter: Column[\"field\"], value: string) => {\r\n if (value == '') return data\r\n\r\n const filteredData = data.filter(element => `${element[filter]}`.toLowerCase().includes(value.toLowerCase()))\r\n\r\n return filteredData\r\n}\r\n\r\nexport { sortByAsc, sortByDesc, sortData, filterData }","import {\r\n AlignmentType, Document, Packer,\r\n PageOrientation,\r\n // PageOrientation, \r\n Paragraph, Table, TableCell, TableRow, TextRun, VerticalAlign, WidthType\r\n} from \"docx\"\r\nimport saveAs from \"file-saver\"\r\nimport { Column, ExportOptions, TableData, TableProps } from '../../types/DataTable.types'\r\nimport { prepareExportHeaders, prepareExportRows } from '../../utils/exportUtils/ExportHelpers'\r\n\r\ntype Props = {\r\n wordData: TableData\r\n columns: Array<Column>\r\n title: string\r\n options?: ExportOptions\r\n exportCustomColumns?: TableProps[\"exportCustomColumns\"]\r\n}\r\n\r\nconst WordExport = ({\r\n wordData,\r\n columns,\r\n title,\r\n options = {\r\n fontSize: 20,\r\n boldHeaders: false,\r\n autoLandscape: false,\r\n maxColumnsBeforeLandscape: 5\r\n }\r\n // exportCustomColumns \r\n}: Props) => {\r\n const createNewWord = async () => {\r\n const {\r\n fontSize = 0,\r\n boldHeaders = true,\r\n autoLandscape = true,\r\n maxColumnsBeforeLandscape = 5\r\n } = options\r\n\r\n const isLandscape = autoLandscape && columns.length > maxColumnsBeforeLandscape\r\n\r\n const headerCells = prepareExportHeaders(columns).map(header => (\r\n new TableCell({\r\n children: [new Paragraph({\r\n children: [new TextRun({\r\n text: header,\r\n size: fontSize,\r\n bold: boldHeaders\r\n })],\r\n alignment: AlignmentType.CENTER\r\n })],\r\n verticalAlign: VerticalAlign.CENTER,\r\n })\r\n ))\r\n\r\n const tableHeaderRow = new TableRow({ children: headerCells })\r\n\r\n const rows = prepareExportRows(columns, wordData).map(cells => {\r\n const rowCells = cells.map(value =>\r\n new TableCell({\r\n children: [new Paragraph({\r\n children: [new TextRun({\r\n text: value,\r\n size: fontSize\r\n })],\r\n alignment: AlignmentType.CENTER\r\n })],\r\n verticalAlign: VerticalAlign.CENTER\r\n })\r\n )\r\n return new TableRow({ children: rowCells })\r\n })\r\n\r\n const table = new Table({\r\n rows: [tableHeaderRow, ...rows],\r\n width: { size: 11000, type: WidthType.DXA },\r\n indent: { size: -1000, type: WidthType.DXA }\r\n })\r\n\r\n const doc = new Document({\r\n sections: [{\r\n children: [table, new Paragraph({ text: '' })],\r\n properties: isLandscape\r\n ? { page: { size: { orientation: PageOrientation.LANDSCAPE } } }\r\n : {}\r\n }]\r\n })\r\n\r\n Packer.toBlob(doc).then((blob) => {\r\n saveAs(blob, `${title}.docx`)\r\n })\r\n }\r\n\r\n return (\r\n <button className={`ndt-buttonExport ndt-Word}`} onClick={createNewWord}>Скачать Word</button>\r\n )\r\n}\r\n\r\nexport default WordExport","import { Column, TableElement } from \"../../types/DataTable.types\"\r\n\r\nexport function prepareExportRows(\r\n columns: Column[],\r\n data: TableElement[]\r\n): string[][] {\r\n return data.map((row) =>\r\n columns.map((col) => {\r\n const value = row[col.field]\r\n return typeof col.exportCustomCell !== 'undefined'\r\n ? col.exportCustomCell(String(value), row)\r\n : String(value ?? '')\r\n })\r\n )\r\n}\r\n\r\nexport function prepareExportHeaders(columns: Column[]): string[] {\r\n return columns.map(col => col.title)\r\n}\r\n","// exportUtils.ts\r\nimport ExcelJS from 'exceljs'\r\nimport { Column, TableElement, TableProps } from '../../types/DataTable.types'\r\n\r\nexport const generateExcelColumns = (\r\n columns: Column[],\r\n exportCustomColumns?: TableProps['exportCustomColumns']\r\n): Partial<ExcelJS.Column>[] => {\r\n let excelColumns = columns.map(column => ({\r\n header: column.title,\r\n key: column.field,\r\n width: 20\r\n }))\r\n\r\n if (exportCustomColumns) {\r\n exportCustomColumns.forEach(custom => {\r\n excelColumns = excelColumns.map(col =>\r\n col.key === custom.key ? { ...col, ...custom } : col\r\n )\r\n })\r\n }\r\n\r\n return excelColumns\r\n}\r\n\r\nexport const applyHeaderStyles = (row: ExcelJS.Row, columnCount: number) => {\r\n row.height = 40\r\n row.font = { size: 12, bold: true }\r\n row.alignment = { vertical: 'middle', horizontal: 'center' }\r\n\r\n for (let i = 1; i <= columnCount; i++) {\r\n const cell = row.getCell(i)\r\n cell.alignment = { wrapText: true, vertical: 'middle', horizontal: 'center' }\r\n cell.border = {\r\n top: { style: 'thin' },\r\n left: { style: 'thin' },\r\n bottom: { style: 'thin' },\r\n right: { style: 'thin' }\r\n }\r\n }\r\n}\r\n\r\nexport const applyRowStyles = (row: ExcelJS.Row, columnCount: number) => {\r\n row.height = 40\r\n row.font = { size: 12 }\r\n row.alignment = { vertical: 'middle', horizontal: 'center' }\r\n\r\n for (let i = 1; i <= columnCount; i++) {\r\n const cell = row.getCell(i)\r\n cell.alignment = { wrapText: true, vertical: 'middle', horizontal: 'center' }\r\n cell.border = {\r\n top: { style: 'thin' },\r\n left: { style: 'thin' },\r\n bottom: { style: 'thin' },\r\n right: { style: 'thin' }\r\n }\r\n }\r\n}\r\n\r\nexport const generateExcelDataRows = (\r\n columns: Column[],\r\n data: TableElement[]\r\n): Record<string, string | number>[] => {\r\n return data.map(element => {\r\n const rowData: Record<string, string | number> = {}\r\n columns.forEach(col => {\r\n const value = element[col.field]\r\n rowData[col.field] =\r\n typeof col.exportCustomCell !== 'undefined'\r\n ? col.exportCustomCell(String(value), element)\r\n : value ?? ''\r\n })\r\n return rowData\r\n })\r\n}\r\n\r\nexport const setColumnAutoWidths = (sheet: ExcelJS.Worksheet) => {\r\n sheet.columns?.forEach(column => {\r\n let maxLength = 10\r\n column.eachCell?.({ includeEmpty: true }, cell => {\r\n const cellValue = cell.value ? String(cell.value) : ''\r\n maxLength = Math.max(maxLength, cellValue.length + 5)\r\n })\r\n column.width = maxLength\r\n })\r\n}","import { Column, TableElement, TableProps } from '../../types/DataTable.types'\r\nimport { applyHeaderStyles, applyRowStyles, generateExcelColumns, generateExcelDataRows, setColumnAutoWidths } from '../../utils/exportUtils/exportUtils'\r\nimport ExcelJS from 'exceljs'\r\n\r\ntype Props = {\r\n columns: Array<Column>\r\n excelData: Array<TableElement>\r\n title: string\r\n exportCustomColumns: TableProps[\"exportCustomColumns\"]\r\n}\r\n\r\nconst ExportExcel = ({ columns, excelData, title, exportCustomColumns }: Props) => {\r\n const exportExcel = () => {\r\n const workbook = new ExcelJS.Workbook()\r\n const sheet = workbook.addWorksheet(title, {\r\n pageSetup: {\r\n fitToPage: true,\r\n fitToHeight: 2,\r\n fitToWidth: 1,\r\n orientation:\r\n \"landscape\"\r\n },\r\n headerFooter: {\r\n oddFooter: \"Страница &P из &N\",\r\n evenFooter: 'Страница &P из &N'\r\n }\r\n })\r\n\r\n const excelColumns = generateExcelColumns(columns, exportCustomColumns)\r\n sheet.columns = excelColumns\r\n\r\n const headerRow = sheet.getRow(1)\r\n applyHeaderStyles(headerRow, sheet.columns.length)\r\n\r\n const dataRows = generateExcelDataRows(columns, excelData)\r\n dataRows.forEach((data) => {\r\n const row = sheet.addRow(data)\r\n applyRowStyles(row, sheet.columns.length)\r\n })\r\n\r\n setColumnAutoWidths(sheet)\r\n\r\n if (excelData.length > 15) {\r\n sheet.pageSetup.fitToHeight = Math.floor(excelData.length / 15)\r\n } else {\r\n sheet.pageSetup.fitToHeight = 1\r\n }\r\n\r\n workbook.xlsx.writeBuffer().then(data => {\r\n const blob = new Blob([data], {\r\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n })\r\n const url = window.URL.createObjectURL(blob);\r\n const anchor = document.createElement('a');\r\n anchor.href = url\r\n anchor.download = `${title}.xlsx`\r\n anchor.click()\r\n window.URL.revokeObjectURL(url)\r\n })\r\n }\r\n\r\n return (\r\n <button className={`ndt-buttonExport ndt-Excel`} onClick={exportExcel}>\r\n Скачать Excel\r\n </button>\r\n )\r\n}\r\n\r\nexport default ExportExcel","import { ReactElement } from \"react\"\r\nimport WordExport from \"./export/WordExport\"\r\nimport ExportExcel from \"./export/ExportExcel\"\r\nimport { Column, ExportOptions, TableData, TableProps } from \"../types/DataTable.types\"\r\n\r\ntype Props = {\r\n wordBtn: boolean\r\n excelBtn: boolean\r\n downloadSectionLeftSideContent: ReactElement | null\r\n tableData: TableData\r\n columns: Array<Column>\r\n tableName: string\r\n exportCustomColumns?: TableProps['exportCustomColumns']\r\n wordOptions?: ExportOptions\r\n}\r\n\r\nconst ExportSection = ({ wordBtn, excelBtn, downloadSectionLeftSideContent, tableData, columns, tableName, exportCustomColumns, wordOptions }: Props) => {\r\n return (\r\n <>\r\n <div className={'ndt-download-section'}>\r\n <div className={'ndt-download-content'}>\r\n {\r\n (wordBtn || excelBtn) && downloadSectionLeftSideContent !== null && downloadSectionLeftSideContent\r\n }\r\n </div>\r\n <div className={'ndt-download-buttons'}>\r\n {\r\n wordBtn && <WordExport\r\n wordData={tableData}\r\n columns={columns}\r\n title={tableName}\r\n exportCustomColumns={exportCustomColumns}\r\n options={wordOptions}\r\n />\r\n }\r\n {\r\n excelBtn && <ExportExcel\r\n excelData={tableData}\r\n columns={columns}\r\n title={tableName}\r\n exportCustomColumns={exportCustomColumns}\r\n />\r\n }\r\n </div>\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\nexport default ExportSection","import { useEffect } from 'react'\r\n\r\nexport function useDebouncedEffect(callback: () => void, deps: unknown[], delay: number) {\r\n useEffect(() => {\r\n const handler = setTimeout(() => callback(), delay)\r\n\r\n return () => clearTimeout(handler) // Очистка при новом вызове\r\n }, [...deps, delay])\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,gBAA2F;;;ACA3F,IAAAC,gBAAkB;;;ACAlB,mBAAwB;;;ACGZ;AAHZ,IAAM,WAAW,MAAM;AACnB,SACI,4CAAC,SAAI,OAAM,8BAA6B,OAAM,MAAK,QAAO,MAAK,MAAK,gBAAe,WAAU,yBAAwB,SAAQ,aACzH,sDAAC,UAAK,GAAE,kHAAiH,GAC7H;AAER;AAEA,IAAO,mBAAQ;;;ACLH,IAAAC,sBAAA;AAHZ,IAAM,SAAS,MAAM;AACjB,SACI,6CAAC,SAAI,OAAM,8BAA6B,OAAM,MAAK,QAAO,MAAK,MAAK,gBAAe,WAAU,uBAAsB,SAAQ,aACvH,uDAAC,UAAK,GAAE,oHAAmH,GAC/H;AAER;AAEA,IAAO,iBAAQ;;;AFqBH,IAAAC,sBAAA;AAhBZ,IAAM,SAAS,CAAC,EAAE,QAAQ,cAAc,QAAQ,YAAY,QAAQ,MAAa;AAbjF;AAcI,QAAM,kBAAc,sBAAQ,MAAM;AAC9B,WAAO,OAAO,QAAQ,OAAO,QAAQ,OAAO,OAAO;AAAA,EACrD,GAAG,CAAC,QAAQ,OAAO,KAAK,CAAC;AAEzB,QAAM,aAAa,MAAM;AACvB,UAAM,WAAW,gBAAgB,QAAQ,SAAS;AAClD,iBAAa,EAAE,KAAK,OAAO,OAAO,MAAM,SAAS,CAAC;AAAA,EACpD;AAEA,QAAM,iBAAiB,CAAC,MAA2C;AACjE,eAAW,EAAE,GAAG,SAAS,CAAC,OAAO,KAAK,GAAG,EAAE,OAAO,MAAM,CAAC;AAAA,EAC3D;AAEF,SACI,8CAAC,SAAI,WAAW,cACZ;AAAA,kDAAC,SAAI,WAAU,mBACX;AAAA,mDAAC,UAAM,iBAAO,OAAM;AAAA,MAEnB,OAAO,OAAO,YAAY,gBACtB,OAAO,OAAO,aAAa,eAAe,OAAO,aAC9C,6CAAC,SAAI,WAAU,cAAa,SAAS,YAChC,0BAAgB,QAAQ,6CAAC,oBAAS,IAAK,gBAAgB,SAAS,6CAAC,kBAAO,IAAK,MAClF;AAAA,OAEZ;AAAA,IAEA,6CAAC,SAAI,WAAU,qBACV,iBAAO,OAAO,YAAY,gBACtB,OAAO,OAAO,eAAe,eAAe,OAAO,eAChD;AAAA,MAAC;AAAA;AAAA,QACG,MAAK;AAAA,QACL,QAAO,aAAQ,OAAO,KAAK,MAApB,YAAyB;AAAA,QAChC,UAAU;AAAA,QACV,aAAY;AAAA;AAAA,IAChB,GAEZ;AAAA,KACJ;AAER;AAEA,IAAO,iBAAQ;;;ADjCD,IAAAC,sBAAA;AAPd,IAAM,SAAS,CAAC,EAAE,SAAS,cAAc,QAAQ,YAAY,SAAS,QAAQ,YAAY,MAAa;AACrG,QAAM,oBAAoB,MACxB,eACE,6CAAC,SAAI,WAAW,qBAAqB,OAAO,EAAE,qBAAqB,UAAU,OAAO,GACjF,sBAAY,IAAI,CAAC,KAAK,OACrB,6CAAC,SAA+B,WAAW,cAAc,OAAO,EAAE,YAAY,QAAQ,IAAI,QAAQ,CAAC,GAAG,GACpG,uDAAC,SAAI,WAAU,mBACb,uDAAC,UAAM,cAAI,OAAM,GACnB,KAHQ,gBAAgB,EAAE,EAI5B,CACD,GACH;AAIJ,QAAM,gBAAgB,MACpB,WAAW,QAAQ,SAAS,IACxB,QAAQ,IAAI,CAAC,QAAQ,OACrB;AAAA,IAAC;AAAA;AAAA,MAEC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,IALK,UAAU,EAAE;AAAA,EAMnB,CACD,IACC,6CAAC,SAAI,WAAW,kBAAkB,wEAA4B;AAEpE,SACE,8EACG;AAAA,sBAAkB;AAAA,IAEnB,6CAAC,SAAI,WAAW,qBAAqB,OAAO,EAAE,qBAAqB,UAAU,OAAO,GACjF,wBAAc,GACjB;AAAA,KACF;AAEJ;AAEA,IAAO,sBAAQ,cAAAC,QAAM,KAAK,MAAM;;;AIvDhC,IAAAC,gBAAkB;;;ACsBJ,IAAAC,sBAAA;AAbd,IAAM,OAAO,CAAC;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAa;AACT,QAAM,WAAW,IAAI,OAAO,KAAK;AAEjC,QAAM,cAAc,OAAO,aAAa,eAAe,aAAa,OAAO,OAAO,QAAQ,IAAI;AAE9F,QAAM,UAAU,OAAO,YACjB,OAAO,UAAU,aAAa,GAAG,IACjC,OAAO,OAAO,YAAY,cACtB,6CAAC,UAAM,kBAAQ,GAAE,IACjB,6CAAC,UAAM,uBAAY;AAE7B,SACI;AAAA,IAAC;AAAA;AAAA,MACG,WAAU;AAAA,MACV,OAAO,YAAY,cAAc,cAAc;AAAA,MAE9C;AAAA;AAAA,EACL;AAER;AAEA,IAAO,eAAQ;;;ACpBH,IAAAC,sBAAA;AAHZ,IAAM,MAAM,CAAC,EAAE,OAAO,SAAS,KAAK,QAAQ,SAAS,MACjD,6CAAC,SAAI,WAAW,iBAAiB,OAAO,EAAE,qBAAqB,OAAO,GACjE,kBAAQ,IAAI,CAAC,QAAQ,OAClB;AAAA,EAAC;AAAA;AAAA,IAEG;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,EAJK,QAAQ,KAAK,IAAI,EAAE;AAK5B,CACH,GACL;AAGJ,IAAO,cAAQ;;;ACnBR,IAAM,cAAc,CAAC,MAAiB,QAA+B;AACxE,QAAM,SAAS,oBAAI,IAAuB;AAE1C,OAAK,QAAQ,UAAQ;AACjB,UAAM,WAAW,KAAK,GAAG,KAAK;AAC9B,QAAI,CAAC,OAAO,IAAI,OAAO,QAAQ,CAAC,GAAG;AAC/B,aAAO,IAAI,OAAO,QAAQ,GAAG,CAAC,CAAC;AAAA,IACnC;AACA,WAAO,IAAI,OAAO,QAAQ,CAAC,EAAG,KAAK,IAAI;AAAA,EAC3C,CAAC;AAED,SAAO,MAAM,KAAK,OAAO,QAAQ,CAAC,EAAE,IAAI,CAAC,CAACC,MAAK,KAAK,OAAO,EAAE,KAAAA,MAAK,MAAM,EAAE;AAC9E;;;AHgBoB,IAAAC,sBAAA;AAjBpB,IAAM,YAAY,CAAC;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB,CAAC;AAAA,EACnB;AAAA,EACA;AACJ,MAAa;AACT,QAAM,UAAU,UAAU,YAAY,WAAW,OAAO,IAAI,CAAC;AAE7D,MAAI,CAAC,aAAa,UAAU,WAAW,GAAG;AACtC,WACI,6CAAC,SAAI,WAAW,iBAAiB,aAAa,+BAA+B,EAAE,IAAI,OAAO,aAAa,EAAE,QAAQ,aAAa,IAAI,CAAC,GAC/H,uDAAC,SAAI,WAAU,iBAAgB,OAAO,EAAE,QAAQ,OAAO,GACnD,uDAAC,SAAI,WAAU,gBAAe,OAAO,EAAE,QAAQ,QAAQ,SAAS,IAAI,YAAY,OAAO,GAAG,qEAAU,GACxG,GACJ;AAAA,EAER;AAEA,QAAM,oBAAoB,MACtB,QAAQ,IAAI,CAAC,OAAO,OAChB,8CAAC,cAAAC,QAAM,UAAN,EACG;AAAA;AAAA,MAAC;AAAA;AAAA,QACG,WAAU;AAAA,QACV,SAAS,MAAM,2CAAc,MAAM;AAAA,QAEnC;AAAA,uDAAC,UAAK,OAAO,EAAE,aAAa,EAAE,GACzB,0BAAgB,MAAM,GAAG,IAAI,WAAM,UACxC;AAAA,UACC,MAAM;AAAA,UAAI;AAAA,UAAG,MAAM,MAAM;AAAA,UAAO;AAAA;AAAA;AAAA,IACrC;AAAA,IACC,CAAC,gBAAgB,MAAM,GAAG,KACvB,MAAM,MAAM,IAAI,CAAC,SAAuBC,QACpC;AAAA,MAAC;AAAA;AAAA,QAEG,OAAOA;AAAA,QACP,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA;AAAA,MALK,OAAO,MAAM,GAAG,IAAIA,GAAE;AAAA,IAM/B,CACH;AAAA,OApBY,OAAO,MAAM,GAAG,IAAI,EAAE,EAqB3C,CACH;AAGL,QAAM,iBAAiB,MACnB,UAAU,IAAI,CAAC,SAAS,OACpB;AAAA,IAAC;AAAA;AAAA,MAEG,OAAO;AAAA,MACP,KAAK;AAAA,MACL;AAAA,MACA;AAAA;AAAA,IAJK,OAAO,EAAE;AAAA,EAKlB,CACH;AAGL,SACI,6CAAC,SAAI,WAAW,iBAAiB,aAAa,+BAA+B,EAAE,IAAI,OAAO,aAAa,EAAE,QAAQ,aAAa,IAAI,CAAC,GAE3H,oBACM,kBAAkB,IAClB,eAAe,GAE7B;AAER;AAEA,IAAO,oBAAQ;;;AIxFH,IAAAC,sBAAA;AAHZ,IAAM,WAAW,MAAM;AACnB,SACI,6CAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAC9D,uDAAC,UAAK,GAAE,+GAA8G,MAAK,WAAU,GACzI;AAGR;AAEA,IAAO,mBAAQ;;;ACNH,IAAAC,sBAAA;AAHZ,IAAM,WAAW,MAAM;AACnB,SACI,6CAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAC9D,uDAAC,UAAK,GAAE,2JAA0J,MAAK,WAAU,GACrL;AAGR;AAEA,IAAO,mBAAQ;;;ACNH,IAAAC,uBAAA;AAHZ,IAAM,WAAW,MAAM;AACnB,SACI,8CAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAC9D,wDAAC,UAAK,GAAE,6GAA4G,MAAK,WAAU,GACvI;AAGR;AAEA,IAAO,mBAAQ;;;ACNH,IAAAC,uBAAA;AAHZ,IAAM,YAAY,MAAM;AACpB,SACI,8CAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAC9D,wDAAC,UAAK,GAAE,0JAAyJ,MAAK,WAAU,GACpL;AAGR;AAEA,IAAO,oBAAQ;;;AC2CP,IAAAC,uBAAA;AArCR,IAAM,cAAc,CAAC;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAa;AACX,QAAM,aAAa,UAAU;AAC7B,QAAM,aAAa,mBAAmB,IAAI,IAAI,KAAK,KAAK,aAAa,cAAc;AAEnF,MAAI,eAAe,EAAG,QAAO;AAE7B,QAAM,oBAAoB,CAAC,MAA4C;AACrE,sBAAkB,OAAO,EAAE,OAAO,KAAK,CAAC;AAAA,EAC1C;AAEA,QAAM,mBAAmB,CAAC,YAAoB;AAC5C,QAAI,WAAW,KAAK,UAAU,YAAY;AACxC,wBAAkB,OAAO;AAAA,IAC3B;AAAA,EACF;AAEA,QAAM,oBAAoB,MAAM;AAC9B,QAAI,cAAc,EAAG,QAAO;AAE5B,UAAM,QAAQ,CAAC;AACf,UAAM,aAAa;AACnB,QAAI,QAAQ,KAAK,IAAI,GAAG,iBAAiB,KAAK,MAAM,aAAa,CAAC,CAAC;AACnE,UAAM,MAAM,KAAK,IAAI,aAAa,GAAG,QAAQ,aAAa,CAAC;AAE3D,QAAI,MAAM,QAAQ,IAAI,YAAY;AAChC,cAAQ,KAAK,IAAI,GAAG,MAAM,aAAa,CAAC;AAAA,IAC1C;AAEA,QAAI,QAAQ,GAAG;AACb,YAAM;AAAA,QACJ,8CAAC,YAAoB,SAAS,MAAM,iBAAiB,CAAC,GAAG,iBAA7C,QAEZ;AAAA,MACF;AACA,UAAI,QAAQ,GAAG;AACb,cAAM,KAAK,8CAAC,UAA0B,mBAAjB,gBAAoB,CAAO;AAAA,MAClD;AAAA,IACF;AAEA,aAAS,IAAI,OAAO,KAAK,KAAK,KAAK;AACjC,YAAM;AAAA,QACJ;AAAA,UAAC;AAAA;AAAA,YAEC,WAAW,MAAM,iBAAiB,eAAe;AAAA,YACjD,SAAS,MAAM,iBAAiB,CAAC;AAAA,YACjC,UAAU,MAAM;AAAA,YAEf,cAAI;AAAA;AAAA,UALA,QAAQ,CAAC;AAAA,QAMhB;AAAA,MACF;AAAA,IACF;AAEA,QAAI,MAAM,aAAa,GAAG;AACxB,UAAI,MAAM,aAAa,GAAG;AACxB,cAAM,KAAK,8CAAC,UAAwB,mBAAf,cAAkB,CAAO;AAAA,MAChD;AACA,YAAM;AAAA,QACJ,8CAAC,YAAsC,SAAS,MAAM,iBAAiB,aAAa,CAAC,GAClF,wBADU,QAAQ,aAAa,CAAC,EAEnC;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,mBAAmB,IAAI,IAAI,iBAAiB,iBAAiB;AAC/E,QAAM,WAAW,mBAAmB,IAAI,aAAa,KAAK,KAAK,iBAAiB,KAAK,gBAAgB,UAAU;AAE/G,SACE,+CAAC,SAAI,WAAU,oBACb;AAAA,mDAAC,SAAI,WAAU,oBACb;AAAA,qDAAC,UAAK;AAAA;AAAA,QAAmB;AAAA,QAAU;AAAA,QAAK;AAAA,QAAS;AAAA,SAAE;AAAA,MACnD,+CAAC,UAAK;AAAA;AAAA,QAAQ;AAAA,SAAW;AAAA,OAC3B;AAAA,IAEC,oBACC,+CAAC,SAAI,WAAU,yBACb;AAAA,qDAAC,SAAI,WAAU,yBACb;AAAA,sDAAC,UAAK,2GAAkB;AAAA,QACxB,8CAAC,YAAO,OAAO,gBAAgB,UAAU,mBACtC,2BAAiB,IAAI,WACpB,8CAAC,YAA8B,OAAO,OACnC,oBAAU,IAAI,uBAAQ,SADZ,SAAS,KAAK,EAE3B,CACD,GACH;AAAA,SACF;AAAA,MAEA,+CAAC,SAAI,WAAU,0BACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,UAAU,mBAAmB;AAAA,YAC7B,SAAS,MAAM,iBAAiB,CAAC;AAAA,YACjC,cAAW;AAAA,YAEX,wDAAC,qBAAU;AAAA;AAAA,QACb;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,UAAU,mBAAmB;AAAA,YAC7B,SAAS,MAAM,iBAAiB,iBAAiB,CAAC;AAAA,YAClD,cAAW;AAAA,YAEX,wDAAC,oBAAS;AAAA;AAAA,QACZ;AAAA,QAEA,8CAAC,SAAI,WAAU,mBAAmB,4BAAkB,GAAE;AAAA,QAEtD;AAAA,UAAC;AAAA;AAAA,YACC,UAAU,kBAAkB,aAAa;AAAA,YACzC,SAAS,MAAM,iBAAiB,iBAAiB,CAAC;AAAA,YAClD,cAAW;AAAA,YAEX,wDAAC,oBAAS;AAAA;AAAA,QACZ;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,UAAU,kBAAkB,aAAa;AAAA,YACzC,SAAS,MAAM,iBAAiB,aAAa,CAAC;AAAA,YAC9C,cAAW;AAAA,YAEX,wDAAC,oBAAS;AAAA;AAAA,QACZ;AAAA,SACF;AAAA,OACF;AAAA,KAEJ;AAEJ;AAEA,IAAO,sBAAQ;;;ACpJf,IAAM,YAAY,CAAC,MAAiB,WAA4B;AAC5D,QAAM,aAAa,KAAK,KAAK,CAAC,GAAG,MAAM;AACnC,QAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG;AAC1C,aAAO,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM;AAAA,IACjC;AAEA,QAAI,GAAG,EAAE,MAAM,CAAC,GAAG,YAAY,IAAI,GAAG,EAAE,MAAM,CAAC,GAAG,YAAY,GAAG;AAC7D,aAAO;AAAA,IACX;AACA,QAAI,GAAG,EAAE,MAAM,CAAC,GAAG,YAAY,IAAI,GAAG,EAAE,MAAM,CAAC,GAAG,YAAY,GAAG;AAC7D,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX,CAAC;AAED,SAAO;AACX;AAEA,IAAM,aAAa,CAAC,MAAiB,WAA4B;AAC7D,QAAM,aAAa,KAAK,KAAK,CAAC,GAAG,MAAM;AACnC,QAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG;AAC1C,aAAO,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM;AAAA,IACjC;AAEA,QAAI,GAAG,EAAE,MAAM,CAAC,GAAG,YAAY,IAAI,GAAG,EAAE,MAAM,CAAC,GAAG,YAAY,GAAG;AAC7D,aAAO;AAAA,IACX;AACA,QAAI,GAAG,EAAE,MAAM,CAAC,GAAG,YAAY,IAAI,GAAG,EAAE,MAAM,CAAC,GAAG,YAAY,GAAG;AAC7D,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX,CAAC;AAED,SAAO;AACX;AAEA,IAAM,WAAW,CAAC,MAAiB,KAAsB,SAAyB;AAC9E,MAAI,SAAS,OAAO;AAClB,WAAO,UAAU,MAAM,GAAG;AAAA,EAC5B,OAAO;AACL,WAAO,WAAW,MAAM,GAAG;AAAA,EAC7B;AACF;AAEF,IAAM,aAAa,CAAC,MAAiB,QAAyB,UAAkB;AAC5E,MAAI,SAAS,GAAI,QAAO;AAExB,QAAM,eAAe,KAAK,OAAO,aAAW,GAAG,QAAQ,MAAM,CAAC,GAAG,YAAY,EAAE,SAAS,MAAM,YAAY,CAAC,CAAC;AAE5G,SAAO;AACX;;;ACpDA,kBAKO;AACP,wBAAmB;;;ACJZ,SAAS,kBACd,SACA,MACY;AACZ,SAAO,KAAK;AAAA,IAAI,CAAC,QACf,QAAQ,IAAI,CAAC,QAAQ;AACnB,YAAM,QAAQ,IAAI,IAAI,KAAK;AAC3B,aAAO,OAAO,IAAI,qBAAqB,cACnC,IAAI,iBAAiB,OAAO,KAAK,GAAG,GAAG,IACvC,OAAO,wBAAS,EAAE;AAAA,IACxB,CAAC;AAAA,EACH;AACF;AAEO,SAAS,qBAAqB,SAA6B;AAChE,SAAO,QAAQ,IAAI,SAAO,IAAI,KAAK;AACrC;;;AD2EI,IAAAC,uBAAA;AA3EJ,IAAM,aAAa,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,aAAa;AAAA,IACb,eAAe;AAAA,IACf,2BAA2B;AAAA,EAC7B;AAAA;AAEF,MAAa;AACX,QAAM,gBAAgB,YAAY;AAChC,UAAM;AAAA,MACJ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,4BAA4B;AAAA,IAC9B,IAAI;AAEJ,UAAM,cAAc,iBAAiB,QAAQ,SAAS;AAEtD,UAAM,cAAc,qBAAqB,OAAO,EAAE,IAAI,YACpD,IAAI,sBAAU;AAAA,MACZ,UAAU,CAAC,IAAI,sBAAU;AAAA,QACvB,UAAU,CAAC,IAAI,oBAAQ;AAAA,UACrB,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,QACR,CAAC,CAAC;AAAA,QACF,WAAW,0BAAc;AAAA,MAC3B,CAAC,CAAC;AAAA,MACF,eAAe,0BAAc;AAAA,IAC/B,CAAC,CACF;AAED,UAAM,iBAAiB,IAAI,qBAAS,EAAE,UAAU,YAAY,CAAC;AAE7D,UAAM,OAAO,kBAAkB,SAAS,QAAQ,EAAE,IAAI,WAAS;AAC7D,YAAM,WAAW,MAAM;AAAA,QAAI,WACzB,IAAI,sBAAU;AAAA,UACZ,UAAU,CAAC,IAAI,sBAAU;AAAA,YACvB,UAAU,CAAC,IAAI,oBAAQ;AAAA,cACrB,MAAM;AAAA,cACN,MAAM;AAAA,YACR,CAAC,CAAC;AAAA,YACF,WAAW,0BAAc;AAAA,UAC3B,CAAC,CAAC;AAAA,UACF,eAAe,0BAAc;AAAA,QAC/B,CAAC;AAAA,MACH;AACA,aAAO,IAAI,qBAAS,EAAE,UAAU,SAAS,CAAC;AAAA,IAC5C,CAAC;AAED,UAAM,QAAQ,IAAI,kBAAM;AAAA,MACtB,MAAM,CAAC,gBAAgB,GAAG,IAAI;AAAA,MAC9B,OAAO,EAAE,MAAM,MAAO,MAAM,sBAAU,IAAI;AAAA,MAC1C,QAAQ,EAAE,MAAM,MAAO,MAAM,sBAAU,IAAI;AAAA,IAC7C,CAAC;AAED,UAAM,MAAM,IAAI,qBAAS;AAAA,MACvB,UAAU,CAAC;AAAA,QACT,UAAU,CAAC,OAAO,IAAI,sBAAU,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,QAC7C,YAAY,cACR,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,4BAAgB,UAAU,EAAE,EAAE,IAC7D,CAAC;AAAA,MACP,CAAC;AAAA,IACH,CAAC;AAED,uBAAO,OAAO,GAAG,EAAE,KAAK,CAAC,SAAS;AAChC,4BAAAC,SAAO,MAAM,GAAG,KAAK,OAAO;AAAA,IAC9B,CAAC;AAAA,EACH;AAEA,SACE,8CAAC,YAAO,WAAW,8BAA8B,SAAS,eAAe,6DAAY;AAEzF;AAEA,IAAO,qBAAQ;;;AE7FR,IAAM,uBAAuB,CAChC,SACA,wBAC4B;AAC5B,MAAI,eAAe,QAAQ,IAAI,aAAW;AAAA,IACtC,QAAQ,OAAO;AAAA,IACf,KAAK,OAAO;AAAA,IACZ,OAAO;AAAA,EACX,EAAE;AAEF,MAAI,qBAAqB;AACrB,wBAAoB,QAAQ,YAAU;AAClC,qBAAe,aAAa;AAAA,QAAI,SAC5B,IAAI,QAAQ,OAAO,MAAM,EAAE,GAAG,KAAK,GAAG,OAAO,IAAI;AAAA,MACrD;AAAA,IACJ,CAAC;AAAA,EACL;AAEA,SAAO;AACX;AAEO,IAAM,oBAAoB,CAAC,KAAkB,gBAAwB;AACxE,MAAI,SAAS;AACb,MAAI,OAAO,EAAE,MAAM,IAAI,MAAM,KAAK;AAClC,MAAI,YAAY,EAAE,UAAU,UAAU,YAAY,SAAS;AAE3D,WAAS,IAAI,GAAG,KAAK,aAAa,KAAK;AACnC,UAAM,OAAO,IAAI,QAAQ,CAAC;AAC1B,SAAK,YAAY,EAAE,UAAU,MAAM,UAAU,UAAU,YAAY,SAAS;AAC5E,SAAK,SAAS;AAAA,MACV,KAAK,EAAE,OAAO,OAAO;AAAA,MACrB,MAAM,EAAE,OAAO,OAAO;AAAA,MACtB,QAAQ,EAAE,OAAO,OAAO;AAAA,MACxB,OAAO,EAAE,OAAO,OAAO;AAAA,IAC3B;AAAA,EACJ;AACJ;AAEO,IAAM,iBAAiB,CAAC,KAAkB,gBAAwB;AACrE,MAAI,SAAS;AACb,MAAI,OAAO,EAAE,MAAM,GAAG;AACtB,MAAI,YAAY,EAAE,UAAU,UAAU,YAAY,SAAS;AAE3D,WAAS,IAAI,GAAG,KAAK,aAAa,KAAK;AACnC,UAAM,OAAO,IAAI,QAAQ,CAAC;AAC1B,SAAK,YAAY,EAAE,UAAU,MAAM,UAAU,UAAU,YAAY,SAAS;AAC5E,SAAK,SAAS;AAAA,MACV,KAAK,EAAE,OAAO,OAAO;AAAA,MACrB,MAAM,EAAE,OAAO,OAAO;AAAA,MACtB,QAAQ,EAAE,OAAO,OAAO;AAAA,MACxB,OAAO,EAAE,OAAO,OAAO;AAAA,IAC3B;AAAA,EACJ;AACJ;AAEO,IAAM,wBAAwB,CACjC,SACA,SACoC;AACpC,SAAO,KAAK,IAAI,aAAW;AACvB,UAAM,UAA2C,CAAC;AAClD,YAAQ,QAAQ,SAAO;AACnB,YAAM,QAAQ,QAAQ,IAAI,KAAK;AAC/B,cAAQ,IAAI,KAAK,IACb,OAAO,IAAI,qBAAqB,cAC1B,IAAI,iBAAiB,OAAO,KAAK,GAAG,OAAO,IAC3C,wBAAS;AAAA,IACvB,CAAC;AACD,WAAO;AAAA,EACX,CAAC;AACL;AAEO,IAAM,sBAAsB,CAAC,UAA6B;AA5EjE;AA6EI,cAAM,YAAN,mBAAe,QAAQ,YAAU;AA7ErC,QAAAC;AA8EQ,QAAI,YAAY;AAChB,KAAAA,MAAA,OAAO,aAAP,gBAAAA,IAAA,aAAkB,EAAE,cAAc,KAAK,GAAG,UAAQ;AAC9C,YAAM,YAAY,KAAK,QAAQ,OAAO,KAAK,KAAK,IAAI;AACpD,kBAAY,KAAK,IAAI,WAAW,UAAU,SAAS,CAAC;AAAA,IACxD;AACA,WAAO,QAAQ;AAAA,EACnB;AACJ;;;ACnFA,qBAAoB;AA4DZ,IAAAC,uBAAA;AAnDR,IAAM,cAAc,CAAC,EAAE,SAAS,WAAW,OAAO,oBAAoB,MAAa;AAC/E,QAAM,cAAc,MAAM;AACtB,UAAM,WAAW,IAAI,eAAAC,QAAQ,SAAS;AACtC,UAAM,QAAQ,SAAS,aAAa,OAAO;AAAA,MACvC,WAAW;AAAA,QACP,WAAW;AAAA,QACX,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,aACI;AAAA,MACR;AAAA,MACA,cAAc;AAAA,QACV,WAAW;AAAA,QACX,YAAY;AAAA,MAChB;AAAA,IACJ,CAAC;AAED,UAAM,eAAe,qBAAqB,SAAS,mBAAmB;AACtE,UAAM,UAAU;AAEhB,UAAM,YAAY,MAAM,OAAO,CAAC;AAChC,sBAAkB,WAAW,MAAM,QAAQ,MAAM;AAEjD,UAAM,WAAW,sBAAsB,SAAS,SAAS;AACzD,aAAS,QAAQ,CAAC,SAAS;AACvB,YAAM,MAAM,MAAM,OAAO,IAAI;AAC7B,qBAAe,KAAK,MAAM,QAAQ,MAAM;AAAA,IAC5C,CAAC;AAED,wBAAoB,KAAK;AAEzB,QAAI,UAAU,SAAS,IAAI;AACvB,YAAM,UAAU,cAAc,KAAK,MAAM,UAAU,SAAS,EAAE;AAAA,IAClE,OAAO;AACH,YAAM,UAAU,cAAc;AAAA,IAClC;AAEA,aAAS,KAAK,YAAY,EAAE,KAAK,UAAQ;AACrC,YAAM,OAAO,IAAI,KAAK,CAAC,IAAI,GAAG;AAAA,QAC1B,MAAM;AAAA,MACV,CAAC;AACD,YAAM,MAAM,OAAO,IAAI,gBAAgB,IAAI;AAC3C,YAAM,SAAS,SAAS,cAAc,GAAG;AACzC,aAAO,OAAO;AACd,aAAO,WAAW,GAAG,KAAK;AAC1B,aAAO,MAAM;AACb,aAAO,IAAI,gBAAgB,GAAG;AAAA,IAClC,CAAC;AAAA,EACL;AAEA,SACI,8CAAC,YAAO,WAAW,8BAA8B,SAAS,aAAa,8DAEvE;AAER;AAEA,IAAO,sBAAQ;;;AClDP,IAAAC,uBAAA;AAFR,IAAM,gBAAgB,CAAC,EAAE,SAAS,UAAU,gCAAgC,WAAW,SAAS,WAAW,qBAAqB,YAAY,MAAa;AACrJ,SACI,+EACI,yDAAC,SAAI,WAAW,wBACZ;AAAA,kDAAC,SAAI,WAAW,wBAEP,sBAAW,aAAa,mCAAmC,QAAQ,gCAE5E;AAAA,IACA,+CAAC,SAAI,WAAW,wBAER;AAAA,iBAAW;AAAA,QAAC;AAAA;AAAA,UACR,UAAU;AAAA,UACV;AAAA,UACA,OAAO;AAAA,UACP;AAAA,UACA,SAAS;AAAA;AAAA,MACb;AAAA,MAGA,YAAY;AAAA,QAAC;AAAA;AAAA,UACT,WAAW;AAAA,UACX;AAAA,UACA,OAAO;AAAA,UACP;AAAA;AAAA,MACJ;AAAA,OAER;AAAA,KACJ,GACJ;AAER;AAEA,IAAO,wBAAQ;;;ACjDf,IAAAC,gBAA0B;AAEnB,SAAS,mBAAmB,UAAsB,MAAiB,OAAe;AACvF,+BAAU,MAAM;AACd,UAAM,UAAU,WAAW,MAAM,SAAS,GAAG,KAAK;AAElD,WAAO,MAAM,aAAa,OAAO;AAAA,EACnC,GAAG,CAAC,GAAG,MAAM,KAAK,CAAC;AACrB;;;ApBgIgB,IAAAC,uBAAA;AA/HhB,IAAM,gBAAY,0BAAqC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,aAAa;AAAA,EACb,eAAe;AAAA,EACf,sBAAsB;AAAA,EACtB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,iCAAiC;AAAA,EACjC,cAAc;AAAA,EACd,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AACJ,GAAe,QAAQ;AACnB,QAAM,CAAC,SAAS,UAAU,QAAI,wBAA2B,CAAC,CAAC;AAC3D,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAA2B,EAAE,KAAK,IAAI,MAAM,MAAM,CAAC;AAE/E,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,yBAAyB,qDAAmB,OAAM,EAAE;AAChG,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,wBAAyB,CAAC;AAEtE,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,wBAAkC,CAAC,CAAC;AAElF,QAAM,cAAc,CAAC,aAAqB;AACtC,uBAAmB,WAAS;AAAA,MACxB,GAAG;AAAA,MACH,CAAC,QAAQ,GAAG,CAAC,KAAK,QAAQ;AAAA,IAC9B,EAAE;AAAA,EACN;AAIA,QAAM,aAAS,uBAAQ,MAAM;AACzB,WAAO,QAAQ,IAAI,OAAK,EAAE,QAAQ,GAAG,EAAE,KAAK,OAAO,KAAK,EAAE,KAAK,GAAG;AAAA,EACtE,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,2BAAuB,2BAAY,MAAM;AAC3C,QAAI;AACA,YAAM,IAAI,aAAa,QAAQ,GAAG,SAAS,UAAU;AACrD,YAAM,IAAI,aAAa,QAAQ,GAAG,SAAS,UAAU;AACrD,YAAM,IAAI,aAAa,QAAQ,GAAG,SAAS,SAAS;AACpD,YAAM,IAAI,aAAa,QAAQ,GAAG,SAAS,OAAO;AAClD,UAAI,EAAG,WAAU,KAAK,MAAM,CAAC,CAAC;AAC9B,UAAI,EAAG,YAAW,KAAK,MAAM,CAAC,CAAC;AAC/B,UAAI,EAAG,mBAAkB,MAAM,QAAQ,IAAI,OAAO,CAAC,CAAC;AACpD,UAAI,EAAG,mBAAkB,OAAO,CAAC,CAAC;AAAA,IACtC,SAAS,GAAG;AACR,cAAQ,MAAM,oCAAoC,CAAC;AACnD,gBAAU,EAAE,KAAK,IAAI,MAAM,MAAM,CAAC;AAClC,iBAAW,CAAC,CAAC;AACb,yBAAkB,qDAAmB,OAAM,EAAE;AAC7C,wBAAkB,CAAC;AAAA,IACvB;AAAA,EACJ,GAAG,CAAC,WAAW,gBAAgB,CAAC;AAEhC,+BAAU,MAAM;AACZ,yBAAqB;AAAA,EACzB,GAAG,CAAC,oBAAoB,CAAC;AAGzB,QAAM,oBAAgB,uBAAQ,MAAM;AAChC,QAAI,SAAS,CAAC,GAAG,SAAS;AAE1B,UAAM,YAAY,IAAI,IAAI,QAAQ,IAAI,SAAO,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;AAE9D,eAAW,SAAS,SAAS;AACzB,YAAM,cAAc,OAAO,QAAQ,KAAK,CAAC;AACzC,UAAI,gBAAgB,GAAI;AAExB,YAAM,SAAS,UAAU,IAAI,KAAK;AAClC,UAAI,CAAC,OAAQ;AAEb,eAAS,OAAO,eACV,OAAO,OAAO,OAAK,OAAO,aAAc,aAAa,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IACtE,WAAW,QAAQ,OAAO,WAAW;AAAA,IAC/C;AAEA,QAAI,OAAO,KAAK;AACZ,eAAS,SAAS,QAAQ,OAAO,KAAK,OAAO,IAAI;AAAA,IACrD;AAEA,WAAO;AAAA,EACX,GAAG,CAAC,WAAW,SAAS,QAAQ,OAAO,CAAC;AAGxC,QAAM,kBAAc,uBAAQ,MAAM;AAC9B,QAAI,mBAAmB,EAAG,QAAO;AACjC,UAAM,QAAQ,iBAAiB;AAC/B,WAAO,cAAc,MAAM,OAAO,QAAQ,cAAc;AAAA,EAC5D,GAAG,CAAC,eAAe,gBAAgB,cAAc,CAAC;AAGlD,+BAAU,MAAM;AACZ,sBAAkB,CAAC;AAAA,EACvB,GAAG,CAAC,SAAS,MAAM,CAAC;AAGpB,qBAAmB,MAAM;AACrB,iBAAa,QAAQ,GAAG,SAAS,YAAY,KAAK,UAAU,OAAO,CAAC;AAAA,EACxE,GAAG,CAAC,SAAS,SAAS,GAAG,GAAG;AAG5B,qBAAmB,MAAM;AACrB,iBAAa,QAAQ,GAAG,SAAS,YAAY,KAAK,UAAU,MAAM,CAAC;AAAA,EACvE,GAAG,CAAC,QAAQ,SAAS,GAAG,GAAG;AAG3B,+BAAU,MAAM;AACZ,iBAAa,QAAQ,GAAG,SAAS,WAAW,mBAAmB,IAAI,QAAQ,eAAe,SAAS,CAAC;AAAA,EACxG,GAAG,CAAC,gBAAgB,SAAS,CAAC;AAE9B,+BAAU,MAAM;AACZ,iBAAa,QAAQ,GAAG,SAAS,SAAS,eAAe,SAAS,CAAC;AAAA,EACvE,GAAG,CAAC,gBAAgB,SAAS,CAAC;AAE9B,yCAAoB,KAAK,OAAO;AAAA,IAC5B,SAAS,MAAM;AAAA,IACf,gBAAgB,MAAM;AAAA,EAC1B,IAAI,CAAC,eAAe,WAAW,CAAC;AAEhC,SACI,+CAAC,SAAI,WAAU,uBACT;AAAA,gBAAW,aACT;AAAA,MAAC;AAAA;AAAA,QACG;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACJ;AAAA,IAGJ,+CAAC,SAAI,WAAU,aACX;AAAA;AAAA,QAAC;AAAA;AAAA,UACG;AAAA,UACA;AAAA,UACA,cAAc;AAAA,UACd;AAAA,UACA,YAAY;AAAA,UACZ;AAAA,UACA;AAAA;AAAA,MACJ;AAAA,MAEC,UACK,mBAAmB,OACf,iBACA,8CAAC,UAAK,OAAO,EAAE,YAAY,IAAI,YAAY,OAAO,GAAG,sGAAkB,IAC3E;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,MACJ;AAAA,MAGH,YACG;AAAA,QAAC;AAAA;AAAA,UACG;AAAA,UACA,WAAW;AAAA,UACX;AAAA,UACA,mBAAmB;AAAA,UACnB;AAAA,UACA,mBAAmB;AAAA;AAAA,MACvB;AAAA,OAER;AAAA,KACJ;AAER,CAAC;AAED,UAAU,cAAc;AAExB,IAAO,oBAAQ;","names":["import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","React","import_react","import_jsx_runtime","import_jsx_runtime","key","import_jsx_runtime","React","id","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","saveAs","_a","import_jsx_runtime","ExcelJS","import_jsx_runtime","import_react","import_jsx_runtime"]}
|
package/dist/index.d.cts
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
import * as react from 'react';
|
2
|
-
import { ReactElement } from 'react';
|
3
|
-
|
4
|
-
type TableElement = {
|
5
|
-
[key: string]: string | number;
|
6
|
-
};
|
7
|
-
type TableData = Array<TableElement>;
|
8
|
-
type Column = {
|
9
|
-
field: string;
|
10
|
-
title: string;
|
11
|
-
width?: number;
|
12
|
-
autoinc?: boolean;
|
13
|
-
formatter?: (cell: string, row: TableElement) => ReactElement;
|
14
|
-
exportCustomCell?: (cell: string, row: TableElement) => string;
|
15
|
-
headerFilter?: (headerValue: string, rowValue: string) => string;
|
16
|
-
sortable?: boolean;
|
17
|
-
filterable?: boolean;
|
18
|
-
};
|
19
|
-
type ExportOptions = {
|
20
|
-
fontSize?: number;
|
21
|
-
boldHeaders?: boolean;
|
22
|
-
autoLandscape?: boolean;
|
23
|
-
maxColumnsBeforeLandscape?: number;
|
24
|
-
};
|
25
|
-
type TableProps = {
|
26
|
-
tableData: TableData;
|
27
|
-
columns: Array<Column>;
|
28
|
-
tableName: string;
|
29
|
-
loading?: boolean;
|
30
|
-
loadingElement?: ReactElement | null;
|
31
|
-
isFooter?: boolean;
|
32
|
-
paginationCounts?: Array<number> | null;
|
33
|
-
scrollable?: boolean;
|
34
|
-
scrollHeight?: number;
|
35
|
-
exportCustomColumns?: Array<{
|
36
|
-
header: string;
|
37
|
-
key: string;
|
38
|
-
width: number;
|
39
|
-
}> | null;
|
40
|
-
excelBtn?: boolean;
|
41
|
-
wordBtn?: boolean;
|
42
|
-
downloadSectionLeftSideContent?: ReactElement | null;
|
43
|
-
headerGroup?: Array<{
|
44
|
-
title: string;
|
45
|
-
cols: number;
|
46
|
-
}> | null;
|
47
|
-
groupBy?: string | null;
|
48
|
-
isTitles?: boolean;
|
49
|
-
wordOptions?: ExportOptions;
|
50
|
-
};
|
51
|
-
type DataTableRef = {
|
52
|
-
getData: () => TableData;
|
53
|
-
getCurrentData: () => TableData;
|
54
|
-
};
|
55
|
-
|
56
|
-
declare const DataTable: react.ForwardRefExoticComponent<TableProps & react.RefAttributes<DataTableRef>>;
|
57
|
-
|
58
|
-
export { type Column, DataTable, type TableElement, type TableProps };
|
package/dist/index.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../components/DataTable.tsx","../components/TableHeader.tsx","../components/Column.tsx","../components/img/SortDown.tsx","../components/img/SortUp.tsx","../components/TableBody.tsx","../components/Cell.tsx","../components/Row.tsx","../utils/groupDataBy.ts","../components/img/NextIcon.tsx","../components/img/LastIcon.tsx","../components/img/PrevIcon.tsx","../components/img/FirstIcon.tsx","../components/TableFooter.tsx","../components/functions/sort-data.ts","../components/export/WordExport.tsx","../utils/exportUtils/ExportHelpers.ts","../utils/exportUtils/exportUtils.ts","../components/export/ExportExcel.tsx","../components/ExportSection.tsx","../utils/useDebouncedEffect.tsx"],"sourcesContent":["import { useImperativeHandle, useEffect, useState, useCallback, useMemo, forwardRef } from 'react'\r\nimport { DataTableRef, LocalStorageData, LocalStorageSort, PaginationPage, PaginationSize, TableProps } from '../types/DataTable.types'\r\nimport TableHeader from './TableHeader'\r\nimport TableBody from './TableBody'\r\nimport TableFooter from './TableFooter'\r\nimport { filterData, sortData } from './functions/sort-data'\r\nimport ExportSection from './ExportSection'\r\nimport { useDebouncedEffect } from '../utils/useDebouncedEffect'\r\n\r\nconst DataTable = forwardRef<DataTableRef, TableProps>(({\r\n tableData,\r\n columns,\r\n tableName = 'table-data',\r\n loading = false,\r\n loadingElement = null,\r\n isFooter = false,\r\n paginationCounts = null,\r\n scrollable = false,\r\n scrollHeight = 300,\r\n exportCustomColumns = null,\r\n excelBtn = false,\r\n wordBtn = false,\r\n downloadSectionLeftSideContent = null,\r\n headerGroup = null,\r\n groupBy = null,\r\n isTitles = false,\r\n wordOptions\r\n}: TableProps, ref) => {\r\n const [filters, setFilters] = useState<LocalStorageData>({})\r\n const [sortBy, setSortBy] = useState<LocalStorageSort>({ col: '', type: 'asc' })\r\n\r\n const [paginationSize, setPaginationSize] = useState<PaginationSize>(paginationCounts?.[0] || 10)\r\n const [paginationPage, setPaginationPage] = useState<PaginationPage>(0)\r\n\r\n const [collapsedGroups, setCollapsedGroups] = useState<Record<string, boolean>>({})\r\n\r\n const toggleGroup = (groupKey: string) => {\r\n setCollapsedGroups(prev => ({\r\n ...prev,\r\n [groupKey]: !prev[groupKey],\r\n }))\r\n }\r\n\r\n // const [widths, setWidths] = useState<string>('1fr')\r\n\r\n const widths = useMemo(() => {\r\n return columns.map(c => c.width ? `${c.width}px` : '1fr').join(' ')\r\n }, [columns])\r\n\r\n const loadFromLocalStorage = useCallback(() => {\r\n try {\r\n const s = localStorage.getItem(`${tableName}-sort-by`)\r\n const f = localStorage.getItem(`${tableName}-filters`)\r\n const c = localStorage.getItem(`${tableName}-counts`)\r\n const p = localStorage.getItem(`${tableName}-page`)\r\n if (s) setSortBy(JSON.parse(s))\r\n if (f) setFilters(JSON.parse(f))\r\n if (c) setPaginationSize(c === 'all' ? 0 : Number(c))\r\n if (p) setPaginationPage(Number(p))\r\n } catch (e) {\r\n console.error('Error parsing localStorage data:', e)\r\n setSortBy({ col: '', type: 'asc' })\r\n setFilters({})\r\n setPaginationSize(paginationCounts?.[0] || 10)\r\n setPaginationPage(0)\r\n }\r\n }, [tableName, paginationCounts])\r\n\r\n useEffect(() => {\r\n loadFromLocalStorage()\r\n }, [loadFromLocalStorage])\r\n\r\n // Обработка данных (фильтрация + сортировка)\r\n const processedData = useMemo(() => {\r\n let result = [...tableData]\r\n\r\n const columnMap = new Map(columns.map(col => [col.field, col]))\r\n\r\n for (const field in filters) {\r\n const filterValue = String(filters[field])\r\n if (filterValue === '') continue\r\n\r\n const column = columnMap.get(field)\r\n if (!column) continue\r\n\r\n result = column.headerFilter\r\n ? result.filter(e => column.headerFilter!(filterValue, String(e[field])))\r\n : filterData(result, field, filterValue)\r\n }\r\n\r\n if (sortBy.col) {\r\n result = sortData(result, sortBy.col, sortBy.type)\r\n }\r\n\r\n return result\r\n }, [tableData, filters, sortBy, columns])\r\n\r\n // Пагинация\r\n const displayData = useMemo(() => {\r\n if (paginationSize === 0) return processedData\r\n const start = paginationPage * paginationSize\r\n return processedData.slice(start, start + paginationSize)\r\n }, [processedData, paginationPage, paginationSize])\r\n\r\n // Сброс страницы при изменении фильтров/сортировки\r\n useEffect(() => {\r\n setPaginationPage(0)\r\n }, [filters, sortBy])\r\n\r\n // Сохраняем filters с задержкой\r\n useDebouncedEffect(() => {\r\n localStorage.setItem(`${tableName}-filters`, JSON.stringify(filters))\r\n }, [filters, tableName], 500)\r\n\r\n // Сохраняем sortBy с задержкой\r\n useDebouncedEffect(() => {\r\n localStorage.setItem(`${tableName}-sort-by`, JSON.stringify(sortBy))\r\n }, [sortBy, tableName], 500)\r\n\r\n\r\n useEffect(() => {\r\n localStorage.setItem(`${tableName}-counts`, paginationSize === 0 ? 'all' : paginationSize.toString())\r\n }, [paginationSize, tableName])\r\n\r\n useEffect(() => {\r\n localStorage.setItem(`${tableName}-page`, paginationPage.toString())\r\n }, [paginationPage, tableName])\r\n\r\n useImperativeHandle(ref, () => ({\r\n getData: () => processedData,\r\n getCurrentData: () => displayData,\r\n }), [processedData, displayData]);\r\n\r\n return (\r\n <div className=\"ndt-table-container\">\r\n {(wordBtn || excelBtn) && (\r\n <ExportSection\r\n wordBtn={wordBtn}\r\n excelBtn={excelBtn}\r\n downloadSectionLeftSideContent={downloadSectionLeftSideContent}\r\n tableData={displayData}\r\n columns={columns}\r\n tableName={tableName}\r\n exportCustomColumns={exportCustomColumns}\r\n wordOptions={wordOptions}\r\n />\r\n )}\r\n\r\n <div className=\"ndt-table\">\r\n <TableHeader\r\n columns={columns}\r\n sortBy={sortBy}\r\n getSortField={setSortBy}\r\n filters={filters}\r\n getFilters={setFilters}\r\n widths={widths}\r\n headerGroup={headerGroup}\r\n />\r\n\r\n {loading\r\n ? loadingElement !== null\r\n ? loadingElement\r\n : <span style={{ marginLeft: 10, fontWeight: 'bold' }}>Загрузка данных...</span>\r\n : <TableBody\r\n tableData={displayData}\r\n columns={columns}\r\n scrollable={scrollable}\r\n scrollHeight={scrollHeight}\r\n widths={widths}\r\n groupBy={groupBy}\r\n collapsedGroups={collapsedGroups}\r\n toggleGroup={toggleGroup}\r\n isTitles={isTitles}\r\n />\r\n }\r\n\r\n {isFooter && (\r\n <TableFooter\r\n paginationCounts={paginationCounts}\r\n tableData={processedData} // Передаем все отфильтрованные данные\r\n paginationSize={paginationSize}\r\n getPaginationSize={setPaginationSize}\r\n paginationPage={paginationPage}\r\n getPaginationPage={setPaginationPage}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n )\r\n})\r\n\r\nDataTable.displayName = 'DataTable';\r\n\r\nexport default DataTable","import React from 'react'\r\nimport { Column as ColumnType, LocalStorageData, LocalStorageSort, TableProps } from '../types/DataTable.types'\r\nimport Column from './Column'\r\n\r\ntype Props = {\r\n columns: Array<ColumnType>\r\n sortBy: LocalStorageSort\r\n getSortField: (element: LocalStorageSort) => void\r\n getFilters: (element: LocalStorageData) => void\r\n filters: LocalStorageData\r\n widths?: string\r\n headerGroup: TableProps['headerGroup']\r\n [key: string]: unknown\r\n}\r\n\r\nconst Header = ({ columns, getSortField, sortBy, getFilters, filters, widths, headerGroup }: Props) => {\r\n const renderHeaderGroup = () => (\r\n headerGroup && (\r\n <div className={\"ndt-table-columns\"} style={{ gridTemplateColumns: widths || 'auto' }}>\r\n {headerGroup.map((col, id) => (\r\n <div key={`header-group-${id}`} className={'ndt-column'} style={{ gridColumn: `span ${col.cols || 1}` }}>\r\n <div className=\"ndt-column-head\">\r\n <span>{col.title}</span>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n )\r\n )\r\n\r\n const renderColumns = () => (\r\n columns && columns.length > 0\r\n ? columns.map((column, id) => (\r\n <Column\r\n key={`column-${id}`}\r\n column={column}\r\n getSortField={getSortField}\r\n sortBy={sortBy}\r\n getFilters={getFilters}\r\n filters={filters}\r\n />\r\n ))\r\n : <div className={'ndt-data-error'}>Ошибка: columns is undefined</div>\r\n )\r\n return (\r\n <>\r\n {renderHeaderGroup()}\r\n \r\n <div className={\"ndt-table-columns\"} style={{ gridTemplateColumns: widths || 'auto' }}>\r\n {renderColumns()}\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\nexport default React.memo(Header)","import { useMemo } from 'react'\r\nimport { Column as ColumnType, LocalStorageData, LocalStorageSort } from '../types/DataTable.types'\r\nimport SortDown from './img/SortDown'\r\nimport SortUp from './img/SortUp'\r\n\r\ntype Props = {\r\n column: ColumnType\r\n getSortField: (element: LocalStorageSort) => void\r\n sortBy: LocalStorageSort\r\n getFilters: (element: LocalStorageData) => void\r\n filters: LocalStorageData\r\n}\r\n\r\nconst Column = ({ column, getSortField, sortBy, getFilters, filters }: Props) => {\r\n const currentSort = useMemo(() => {\r\n return sortBy.col === column.field ? sortBy.type : null\r\n }, [sortBy, column.field])\r\n \r\n const toggleSort = () => {\r\n const nextType = currentSort === 'asc' ? 'desc' : 'asc'\r\n getSortField({ col: column.field, type: nextType })\r\n }\r\n \r\n const onFilterChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n getFilters({ ...filters, [column.field]: e.target.value })\r\n }\r\n\r\n return (\r\n <div className={'ndt-column'}>\r\n <div className=\"ndt-column-head\">\r\n <span>{column.title}</span>\r\n\r\n {typeof column.autoinc === 'undefined' &&\r\n (typeof column.sortable === 'undefined' || column.sortable) && (\r\n <div className=\"ndt-sorter\" onClick={toggleSort}>\r\n {currentSort === 'asc' ? <SortDown /> : currentSort === 'desc' ? <SortUp /> : null}\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"ndt-column-footer\">\r\n {typeof column.autoinc === 'undefined' &&\r\n (typeof column.filterable === 'undefined' || column.filterable) && (\r\n <input\r\n type=\"text\"\r\n value={filters[column.field] ?? ''}\r\n onChange={onFilterChange}\r\n placeholder=\"Фильтр...\"\r\n />\r\n )}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Column","const SortDown = () => {\r\n return (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" className=\"bi bi-caret-down-fill\" viewBox=\"0 0 16 16\">\r\n <path d=\"M7.247 11.14 2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z\" />\r\n </svg>\r\n )\r\n}\r\n\r\nexport default SortDown","const SortUp = () => {\r\n return (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" className=\"bi bi-caret-up-fill\" viewBox=\"0 0 16 16\">\r\n <path d=\"m7.247 4.86-4.796 5.481c-.566.647-.106 1.659.753 1.659h9.592a1 1 0 0 0 .753-1.659l-4.796-5.48a1 1 0 0 0-1.506 0z\" />\r\n </svg>\r\n )\r\n}\r\n\r\nexport default SortUp","import React from 'react'\r\nimport { Column, TableData, TableElement, TableProps } from '../types/DataTable.types'\r\nimport Row from './Row'\r\nimport { groupDataBy } from '../utils/groupDataBy'\r\n\r\ntype Props = {\r\n columns: Array<Column>\r\n tableData: TableData\r\n loading?: boolean\r\n scrollable?: boolean\r\n scrollHeight?: number\r\n widths?: string\r\n groupBy?: TableProps['groupBy']\r\n collapsedGroups?: Record<string, boolean>\r\n toggleGroup?: (groupKey: string) => void\r\n isTitles: TableProps['isTitles']\r\n}\r\n\r\nconst TableBody = ({\r\n columns,\r\n tableData,\r\n scrollable,\r\n scrollHeight,\r\n widths,\r\n groupBy,\r\n collapsedGroups = {},\r\n toggleGroup,\r\n isTitles\r\n}: Props) => {\r\n const grouped = groupBy ? groupDataBy(tableData, groupBy) : []\r\n\r\n if (!tableData || tableData.length === 0) {\r\n return (\r\n <div className={`ndt-table-body${scrollable ? ' ndt-table-body-scrollable' : ''}`} style={scrollable ? { height: scrollHeight } : {}}>\r\n <div className='ndt-table-row' style={{ height: '100%' }}>\r\n <div className='ndt-row-item' style={{ margin: 'auto', padding: 20, fontWeight: 'bold' }}>Данных нет</div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n const renderGroupedRows = () => (\r\n grouped.map((group, id) => (\r\n <React.Fragment key={`row-${group.key}-${id}`}>\r\n <div\r\n className=\"ndt-group-header\"\r\n onClick={() => toggleGroup?.(group.key)}\r\n >\r\n <span style={{ marginRight: 8 }}>\r\n {collapsedGroups[group.key] ? '▶' : '▼'}\r\n </span>\r\n {group.key} ({group.items.length})\r\n </div>\r\n {!collapsedGroups[group.key] &&\r\n group.items.map((element: TableElement, id: number) => (\r\n <Row\r\n key={`row-${group.key}-${id}`}\r\n rowId={id}\r\n row={element}\r\n columns={columns}\r\n widths={widths}\r\n isTitles={isTitles}\r\n />\r\n ))}\r\n </React.Fragment>\r\n ))\r\n )\r\n\r\n const renderFlatRows = () => (\r\n tableData.map((element, id) => (\r\n <Row\r\n key={`row-${id}`}\r\n rowId={id}\r\n row={element}\r\n columns={columns}\r\n widths={widths}\r\n />\r\n ))\r\n )\r\n\r\n return (\r\n <div className={`ndt-table-body${scrollable ? ' ndt-table-body-scrollable' : ''}`} style={scrollable ? { height: scrollHeight } : {}}>\r\n {\r\n groupBy\r\n ? renderGroupedRows()\r\n : renderFlatRows()\r\n }\r\n </div>\r\n )\r\n}\r\n\r\nexport default TableBody","import { Column, TableElement, TableProps } from '../types/DataTable.types'\r\n\r\ntype Props = {\r\n row: TableElement\r\n column: Column\r\n rowId: number\r\n isTitles: TableProps['isTitles']\r\n}\r\n\r\nconst Cell = ({\r\n row,\r\n column,\r\n rowId,\r\n isTitles\r\n}: Props) => {\r\n const rawValue = row[column.field]\r\n\r\n const stringValue = typeof rawValue !== 'undefined' && rawValue !== null ? String(rawValue) : ''\r\n\r\n const content = column.formatter\r\n ? column.formatter(stringValue, row)\r\n : typeof column.autoinc !== 'undefined'\r\n ? <span>{rowId + 1}</span>\r\n : <span>{stringValue}</span>\r\n\r\n return (\r\n <div\r\n className='ndt-cell'\r\n title={isTitles && stringValue ? stringValue : ''}\r\n >\r\n {content}\r\n </div>\r\n )\r\n}\r\n\r\nexport default Cell","import React from 'react'\r\nimport { Column, TableElement, TableProps } from '../types/DataTable.types'\r\nimport Cell from './Cell'\r\n\r\ntype Props = {\r\n rowId: number\r\n row: TableElement\r\n columns: Array<Column>\r\n widths?: string\r\n isTitles?: TableProps['isTitles']\r\n}\r\n\r\nconst Row = ({ rowId, columns, row, widths, isTitles }: Props) => (\r\n <div className={'ndt-table-row'} style={{ gridTemplateColumns: widths }}>\r\n {columns.map((column, id) => (\r\n <Cell\r\n key={`cell-${rowId}-${id}`}\r\n row={row}\r\n column={column}\r\n rowId={rowId}\r\n isTitles={isTitles}\r\n />\r\n ))}\r\n </div>\r\n)\r\n\r\nexport default Row","import { TableData } from \"../types/DataTable.types\"\r\n\r\ntype GroupedData = {\r\n key: string\r\n items: TableData\r\n}\r\n\r\nexport const groupDataBy = (data: TableData, key: string): GroupedData[] => {\r\n const groups = new Map<string, TableData>()\r\n\r\n data.forEach(item => {\r\n const groupKey = item[key] || '—' // fallback если undefined\r\n if (!groups.has(String(groupKey))) {\r\n groups.set(String(groupKey), [])\r\n }\r\n groups.get(String(groupKey))!.push(item)\r\n })\r\n\r\n return Array.from(groups.entries()).map(([key, items]) => ({ key, items }))\r\n}","const NextIcon = () => {\r\n return (\r\n <svg width=\"41\" height=\"65\" viewBox=\"0 0 41 65\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M0.674316 57.2669L25.3872 32.5L0.674316 7.73312L8.28244 0.125L40.6574 32.5L8.28244 64.875L0.674316 57.2669Z\" fill=\"#666666\" />\r\n </svg>\r\n\r\n )\r\n}\r\n\r\nexport default NextIcon","const LastIcon = () => {\r\n return (\r\n <svg width=\"68\" height=\"65\" viewBox=\"0 0 68 65\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M0.185059 7.73312L24.9519 32.5L0.185059 57.2669L7.79318 64.875L40.1682 32.5L7.79318 0.125L0.185059 7.73312ZM56.3557 0.125H67.1474V64.875H56.3557V0.125Z\" fill=\"#666666\" />\r\n </svg>\r\n\r\n )\r\n}\r\n\r\nexport default LastIcon","const PrevIcon = () => {\r\n return (\r\n <svg width=\"41\" height=\"65\" viewBox=\"0 0 41 65\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M40.6574 57.2669L15.9445 32.5L40.6574 7.73312L33.0493 0.125L0.674316 32.5L33.0493 64.875L40.6574 57.2669Z\" fill=\"#666666\" />\r\n </svg>\r\n\r\n )\r\n}\r\n\r\nexport default PrevIcon","const FirstIcon = () => {\r\n return (\r\n <svg width=\"68\" height=\"65\" viewBox=\"0 0 68 65\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M67.1474 57.2669L42.3805 32.5L67.1474 7.73312L59.5392 0.125L27.1642 32.5L59.5392 64.875L67.1474 57.2669ZM0.185059 0.125H10.9767V64.875H0.185059V0.125Z\" fill=\"#666666\" />\r\n </svg>\r\n\r\n )\r\n}\r\n\r\nexport default FirstIcon","import { PaginationPage, PaginationSize, TableData, TableProps } from '../types/DataTable.types';\r\nimport NextIcon from './img/NextIcon';\r\nimport LastIcon from './img/LastIcon';\r\nimport PrevIcon from './img/PrevIcon';\r\nimport FirstIcon from './img/FirstIcon';\r\n\r\ntype Props = {\r\n tableData: TableData;\r\n paginationCounts: TableProps[\"paginationCounts\"];\r\n paginationSize: PaginationSize;\r\n getPaginationSize: (size: PaginationSize) => void;\r\n paginationPage: PaginationPage;\r\n getPaginationPage: (page: PaginationPage) => void;\r\n};\r\n\r\nconst TableFooter = ({\r\n tableData,\r\n paginationCounts,\r\n paginationSize,\r\n getPaginationSize,\r\n paginationPage,\r\n getPaginationPage\r\n}: Props) => {\r\n const totalItems = tableData.length;\r\n const totalPages = paginationSize === 0 ? 1 : Math.ceil(totalItems / paginationSize);\r\n\r\n if (totalItems === 0) return null;\r\n\r\n const handleCountChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n getPaginationSize(Number(e.target.value));\r\n };\r\n\r\n const handlePageChange = (newPage: number) => {\r\n if (newPage >= 0 && newPage < totalPages) {\r\n getPaginationPage(newPage);\r\n }\r\n };\r\n\r\n const renderPageNumbers = () => {\r\n if (totalPages <= 1) return null;\r\n\r\n const pages = [];\r\n const maxVisible = 5;\r\n let start = Math.max(0, paginationPage - Math.floor(maxVisible / 2));\r\n const end = Math.min(totalPages - 1, start + maxVisible - 1);\r\n\r\n if (end - start + 1 < maxVisible) {\r\n start = Math.max(0, end - maxVisible + 1);\r\n }\r\n\r\n if (start > 0) {\r\n pages.push(\r\n <button key=\"page-0\" onClick={() => handlePageChange(0)}>\r\n 1\r\n </button>\r\n );\r\n if (start > 1) {\r\n pages.push(<span key=\"ellipsis-start\">...</span>);\r\n }\r\n }\r\n\r\n for (let i = start; i <= end; i++) {\r\n pages.push(\r\n <button\r\n key={`page-${i}`}\r\n className={i === paginationPage ? 'btn-active' : ''}\r\n onClick={() => handlePageChange(i)}\r\n disabled={i === paginationPage}\r\n >\r\n {i + 1}\r\n </button>\r\n );\r\n }\r\n\r\n if (end < totalPages - 1) {\r\n if (end < totalPages - 2) {\r\n pages.push(<span key=\"ellipsis-end\">...</span>);\r\n }\r\n pages.push(\r\n <button key={`page-${totalPages - 1}`} onClick={() => handlePageChange(totalPages - 1)}>\r\n {totalPages}\r\n </button>\r\n );\r\n }\r\n\r\n return pages;\r\n };\r\n\r\n const firstItem = paginationSize === 0 ? 1 : paginationPage * paginationSize + 1;\r\n const lastItem = paginationSize === 0 ? totalItems : Math.min((paginationPage + 1) * paginationSize, totalItems);\r\n\r\n return (\r\n <div className=\"ndt-table-footer\">\r\n <div className=\"ndt-footer-count\">\r\n <span>Показаны строки с {firstItem} по {lastItem}, </span>\r\n <span>Всего: {totalItems}</span>\r\n </div>\r\n\r\n {paginationCounts && (\r\n <div className=\"ndt-footer-pagination\">\r\n <div className=\"ndt-pagination-counts\">\r\n <span>Показывать строк: </span>\r\n <select value={paginationSize} onChange={handleCountChange}>\r\n {paginationCounts.map(count => (\r\n <option key={`count-${count}`} value={count}>\r\n {count === 0 ? 'Все' : count}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n\r\n <div className=\"ndt-pagination-buttons\">\r\n <button\r\n disabled={paginationPage === 0}\r\n onClick={() => handlePageChange(0)}\r\n aria-label=\"Первая страница\"\r\n >\r\n <FirstIcon />\r\n </button>\r\n <button\r\n disabled={paginationPage === 0}\r\n onClick={() => handlePageChange(paginationPage - 1)}\r\n aria-label=\"Предыдущая страница\"\r\n >\r\n <PrevIcon />\r\n </button>\r\n\r\n <div className=\"ndt-buttons-num\">{renderPageNumbers()}</div>\r\n\r\n <button\r\n disabled={paginationPage >= totalPages - 1}\r\n onClick={() => handlePageChange(paginationPage + 1)}\r\n aria-label=\"Следующая страница\"\r\n >\r\n <NextIcon />\r\n </button>\r\n <button\r\n disabled={paginationPage >= totalPages - 1}\r\n onClick={() => handlePageChange(totalPages - 1)}\r\n aria-label=\"Последняя страница\"\r\n >\r\n <LastIcon />\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default TableFooter;","import { Column, TableData } from \"../../types/DataTable.types\";\r\n\r\nconst sortByAsc = (data: TableData, column: Column[\"field\"]) => {\r\n const sortedData = data.sort((a, b) => {\r\n if (!isNaN(+a[column]) && !isNaN(+b[column])) {\r\n return +a[column] - +b[column]\r\n }\r\n\r\n if (`${a[column]}`.toLowerCase() < `${b[column]}`.toLowerCase()) {\r\n return -1;\r\n }\r\n if (`${a[column]}`.toLowerCase() > `${b[column]}`.toLowerCase()) {\r\n return 1;\r\n }\r\n return 0;\r\n })\r\n\r\n return sortedData\r\n}\r\n\r\nconst sortByDesc = (data: TableData, column: Column[\"field\"]) => {\r\n const sortedData = data.sort((a, b) => {\r\n if (!isNaN(+a[column]) && !isNaN(+b[column])) {\r\n return +b[column] - +a[column]\r\n }\r\n\r\n if (`${a[column]}`.toLowerCase() > `${b[column]}`.toLowerCase()) {\r\n return -1;\r\n }\r\n if (`${a[column]}`.toLowerCase() < `${b[column]}`.toLowerCase()) {\r\n return 1;\r\n }\r\n return 0;\r\n })\r\n\r\n return sortedData\r\n}\r\n\r\nconst sortData = (data: TableData, col: Column[\"field\"], type: 'asc' | 'desc') => {\r\n if (type === 'asc') {\r\n return sortByAsc(data, col)\r\n } else {\r\n return sortByDesc(data, col)\r\n }\r\n }\r\n\r\nconst filterData = (data: TableData, filter: Column[\"field\"], value: string) => {\r\n if (value == '') return data\r\n\r\n const filteredData = data.filter(element => `${element[filter]}`.toLowerCase().includes(value.toLowerCase()))\r\n\r\n return filteredData\r\n}\r\n\r\nexport { sortByAsc, sortByDesc, sortData, filterData }","import {\r\n AlignmentType, Document, Packer,\r\n PageOrientation,\r\n // PageOrientation, \r\n Paragraph, Table, TableCell, TableRow, TextRun, VerticalAlign, WidthType\r\n} from \"docx\"\r\nimport saveAs from \"file-saver\"\r\nimport { Column, ExportOptions, TableData, TableProps } from '../../types/DataTable.types'\r\nimport { prepareExportHeaders, prepareExportRows } from '../../utils/exportUtils/ExportHelpers'\r\n\r\ntype Props = {\r\n wordData: TableData\r\n columns: Array<Column>\r\n title: string\r\n options?: ExportOptions\r\n exportCustomColumns?: TableProps[\"exportCustomColumns\"]\r\n}\r\n\r\nconst WordExport = ({\r\n wordData,\r\n columns,\r\n title,\r\n options = {\r\n fontSize: 20,\r\n boldHeaders: false,\r\n autoLandscape: false,\r\n maxColumnsBeforeLandscape: 5\r\n }\r\n // exportCustomColumns \r\n}: Props) => {\r\n const createNewWord = async () => {\r\n const {\r\n fontSize = 0,\r\n boldHeaders = true,\r\n autoLandscape = true,\r\n maxColumnsBeforeLandscape = 5\r\n } = options\r\n\r\n const isLandscape = autoLandscape && columns.length > maxColumnsBeforeLandscape\r\n\r\n const headerCells = prepareExportHeaders(columns).map(header => (\r\n new TableCell({\r\n children: [new Paragraph({\r\n children: [new TextRun({\r\n text: header,\r\n size: fontSize,\r\n bold: boldHeaders\r\n })],\r\n alignment: AlignmentType.CENTER\r\n })],\r\n verticalAlign: VerticalAlign.CENTER,\r\n })\r\n ))\r\n\r\n const tableHeaderRow = new TableRow({ children: headerCells })\r\n\r\n const rows = prepareExportRows(columns, wordData).map(cells => {\r\n const rowCells = cells.map(value =>\r\n new TableCell({\r\n children: [new Paragraph({\r\n children: [new TextRun({\r\n text: value,\r\n size: fontSize\r\n })],\r\n alignment: AlignmentType.CENTER\r\n })],\r\n verticalAlign: VerticalAlign.CENTER\r\n })\r\n )\r\n return new TableRow({ children: rowCells })\r\n })\r\n\r\n const table = new Table({\r\n rows: [tableHeaderRow, ...rows],\r\n width: { size: 11000, type: WidthType.DXA },\r\n indent: { size: -1000, type: WidthType.DXA }\r\n })\r\n\r\n const doc = new Document({\r\n sections: [{\r\n children: [table, new Paragraph({ text: '' })],\r\n properties: isLandscape\r\n ? { page: { size: { orientation: PageOrientation.LANDSCAPE } } }\r\n : {}\r\n }]\r\n })\r\n\r\n Packer.toBlob(doc).then((blob) => {\r\n saveAs(blob, `${title}.docx`)\r\n })\r\n }\r\n\r\n return (\r\n <button className={`ndt-buttonExport ndt-Word}`} onClick={createNewWord}>Скачать Word</button>\r\n )\r\n}\r\n\r\nexport default WordExport","import { Column, TableElement } from \"../../types/DataTable.types\"\r\n\r\nexport function prepareExportRows(\r\n columns: Column[],\r\n data: TableElement[]\r\n): string[][] {\r\n return data.map((row) =>\r\n columns.map((col) => {\r\n const value = row[col.field]\r\n return typeof col.exportCustomCell !== 'undefined'\r\n ? col.exportCustomCell(String(value), row)\r\n : String(value ?? '')\r\n })\r\n )\r\n}\r\n\r\nexport function prepareExportHeaders(columns: Column[]): string[] {\r\n return columns.map(col => col.title)\r\n}\r\n","// exportUtils.ts\r\nimport ExcelJS from 'exceljs'\r\nimport { Column, TableElement, TableProps } from '../../types/DataTable.types'\r\n\r\nexport const generateExcelColumns = (\r\n columns: Column[],\r\n exportCustomColumns?: TableProps['exportCustomColumns']\r\n): Partial<ExcelJS.Column>[] => {\r\n let excelColumns = columns.map(column => ({\r\n header: column.title,\r\n key: column.field,\r\n width: 20\r\n }))\r\n\r\n if (exportCustomColumns) {\r\n exportCustomColumns.forEach(custom => {\r\n excelColumns = excelColumns.map(col =>\r\n col.key === custom.key ? { ...col, ...custom } : col\r\n )\r\n })\r\n }\r\n\r\n return excelColumns\r\n}\r\n\r\nexport const applyHeaderStyles = (row: ExcelJS.Row, columnCount: number) => {\r\n row.height = 40\r\n row.font = { size: 12, bold: true }\r\n row.alignment = { vertical: 'middle', horizontal: 'center' }\r\n\r\n for (let i = 1; i <= columnCount; i++) {\r\n const cell = row.getCell(i)\r\n cell.alignment = { wrapText: true, vertical: 'middle', horizontal: 'center' }\r\n cell.border = {\r\n top: { style: 'thin' },\r\n left: { style: 'thin' },\r\n bottom: { style: 'thin' },\r\n right: { style: 'thin' }\r\n }\r\n }\r\n}\r\n\r\nexport const applyRowStyles = (row: ExcelJS.Row, columnCount: number) => {\r\n row.height = 40\r\n row.font = { size: 12 }\r\n row.alignment = { vertical: 'middle', horizontal: 'center' }\r\n\r\n for (let i = 1; i <= columnCount; i++) {\r\n const cell = row.getCell(i)\r\n cell.alignment = { wrapText: true, vertical: 'middle', horizontal: 'center' }\r\n cell.border = {\r\n top: { style: 'thin' },\r\n left: { style: 'thin' },\r\n bottom: { style: 'thin' },\r\n right: { style: 'thin' }\r\n }\r\n }\r\n}\r\n\r\nexport const generateExcelDataRows = (\r\n columns: Column[],\r\n data: TableElement[]\r\n): Record<string, string | number>[] => {\r\n return data.map(element => {\r\n const rowData: Record<string, string | number> = {}\r\n columns.forEach(col => {\r\n const value = element[col.field]\r\n rowData[col.field] =\r\n typeof col.exportCustomCell !== 'undefined'\r\n ? col.exportCustomCell(String(value), element)\r\n : value ?? ''\r\n })\r\n return rowData\r\n })\r\n}\r\n\r\nexport const setColumnAutoWidths = (sheet: ExcelJS.Worksheet) => {\r\n sheet.columns?.forEach(column => {\r\n let maxLength = 10\r\n column.eachCell?.({ includeEmpty: true }, cell => {\r\n const cellValue = cell.value ? String(cell.value) : ''\r\n maxLength = Math.max(maxLength, cellValue.length + 5)\r\n })\r\n column.width = maxLength\r\n })\r\n}","import { Column, TableElement, TableProps } from '../../types/DataTable.types'\r\nimport { applyHeaderStyles, applyRowStyles, generateExcelColumns, generateExcelDataRows, setColumnAutoWidths } from '../../utils/exportUtils/exportUtils'\r\nimport ExcelJS from 'exceljs'\r\n\r\ntype Props = {\r\n columns: Array<Column>\r\n excelData: Array<TableElement>\r\n title: string\r\n exportCustomColumns: TableProps[\"exportCustomColumns\"]\r\n}\r\n\r\nconst ExportExcel = ({ columns, excelData, title, exportCustomColumns }: Props) => {\r\n const exportExcel = () => {\r\n const workbook = new ExcelJS.Workbook()\r\n const sheet = workbook.addWorksheet(title, {\r\n pageSetup: {\r\n fitToPage: true,\r\n fitToHeight: 2,\r\n fitToWidth: 1,\r\n orientation:\r\n \"landscape\"\r\n },\r\n headerFooter: {\r\n oddFooter: \"Страница &P из &N\",\r\n evenFooter: 'Страница &P из &N'\r\n }\r\n })\r\n\r\n const excelColumns = generateExcelColumns(columns, exportCustomColumns)\r\n sheet.columns = excelColumns\r\n\r\n const headerRow = sheet.getRow(1)\r\n applyHeaderStyles(headerRow, sheet.columns.length)\r\n\r\n const dataRows = generateExcelDataRows(columns, excelData)\r\n dataRows.forEach((data) => {\r\n const row = sheet.addRow(data)\r\n applyRowStyles(row, sheet.columns.length)\r\n })\r\n\r\n setColumnAutoWidths(sheet)\r\n\r\n if (excelData.length > 15) {\r\n sheet.pageSetup.fitToHeight = Math.floor(excelData.length / 15)\r\n } else {\r\n sheet.pageSetup.fitToHeight = 1\r\n }\r\n\r\n workbook.xlsx.writeBuffer().then(data => {\r\n const blob = new Blob([data], {\r\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n })\r\n const url = window.URL.createObjectURL(blob);\r\n const anchor = document.createElement('a');\r\n anchor.href = url\r\n anchor.download = `${title}.xlsx`\r\n anchor.click()\r\n window.URL.revokeObjectURL(url)\r\n })\r\n }\r\n\r\n return (\r\n <button className={`ndt-buttonExport ndt-Excel`} onClick={exportExcel}>\r\n Скачать Excel\r\n </button>\r\n )\r\n}\r\n\r\nexport default ExportExcel","import { ReactElement } from \"react\"\r\nimport WordExport from \"./export/WordExport\"\r\nimport ExportExcel from \"./export/ExportExcel\"\r\nimport { Column, ExportOptions, TableData, TableProps } from \"../types/DataTable.types\"\r\n\r\ntype Props = {\r\n wordBtn: boolean\r\n excelBtn: boolean\r\n downloadSectionLeftSideContent: ReactElement | null\r\n tableData: TableData\r\n columns: Array<Column>\r\n tableName: string\r\n exportCustomColumns?: TableProps['exportCustomColumns']\r\n wordOptions?: ExportOptions\r\n}\r\n\r\nconst ExportSection = ({ wordBtn, excelBtn, downloadSectionLeftSideContent, tableData, columns, tableName, exportCustomColumns, wordOptions }: Props) => {\r\n return (\r\n <>\r\n <div className={'ndt-download-section'}>\r\n <div className={'ndt-download-content'}>\r\n {\r\n (wordBtn || excelBtn) && downloadSectionLeftSideContent !== null && downloadSectionLeftSideContent\r\n }\r\n </div>\r\n <div className={'ndt-download-buttons'}>\r\n {\r\n wordBtn && <WordExport\r\n wordData={tableData}\r\n columns={columns}\r\n title={tableName}\r\n exportCustomColumns={exportCustomColumns}\r\n options={wordOptions}\r\n />\r\n }\r\n {\r\n excelBtn && <ExportExcel\r\n excelData={tableData}\r\n columns={columns}\r\n title={tableName}\r\n exportCustomColumns={exportCustomColumns}\r\n />\r\n }\r\n </div>\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\nexport default ExportSection","import { useEffect } from 'react'\r\n\r\nexport function useDebouncedEffect(callback: () => void, deps: unknown[], delay: number) {\r\n useEffect(() => {\r\n const handler = setTimeout(() => callback(), delay)\r\n\r\n return () => clearTimeout(handler) // Очистка при новом вызове\r\n }, [...deps, delay])\r\n}\r\n"],"mappings":"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","names":["useEffect","useMemo","jsx","jsx","jsx","jsxs","React","jsx","jsx","key","jsx","jsxs","React","id","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","_a","jsx","Fragment","jsx","jsxs","jsx","jsxs","useMemo","useEffect"]}
|