all-purpose-table 1.0.10 → 1.1.0

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["#style-inject:#style-inject","../src/styles.css","../src/Table.tsx","../src/ColumnVisibilityToggle.tsx"],"names":["Fragment","jsx","useState","useRef","useEffect","jsxs"],"mappings":"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","file":"index.mjs","sourcesContent":["\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\":root {\\n --apt-color-primary: #371f1f;\\n --apt-color-border: #d1d5db;\\n --apt-color-bg: white;\\n --apt-color-bg-secondary: #e5e7eb;\\n --apt-color-bg-hover: #f3f4f6;\\n --apt-color-text: #1f2937;\\n --apt-color-text-muted: #6b7280;\\n --apt-color-text-muted-light: #9ca3af;\\n --apt-color-accent: #9333ea;\\n --apt-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\\n --apt-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n --apt-resizer-color: #bbb;\\n --apt-resizer-hover-color: #888;\\n --apt-th-sortable-hover: #d1d5db;\\n --apt-btn-bg: white;\\n --apt-btn-hover-bg: #d1d5db;\\n}\\n@media (prefers-color-scheme: dark) {\\n :root {\\n --apt-color-primary: #eee;\\n --apt-color-border: #333;\\n --apt-color-bg: #1e1e1e;\\n --apt-color-bg-secondary: #333;\\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\\n --apt-color-text: #eee;\\n --apt-color-text-muted: #d1d5db;\\n --apt-color-text-muted-light: #444;\\n --apt-color-accent: #a855f7;\\n --apt-resizer-color: #666;\\n --apt-resizer-hover-color: #999;\\n --apt-th-sortable-hover: #444;\\n --apt-btn-bg: #444;\\n --apt-btn-hover-bg: #555;\\n }\\n}\\nhtml.dark,\\n.dark,\\n:root.dark {\\n --apt-color-primary: #eee;\\n --apt-color-border: #333;\\n --apt-color-bg: #1e1e1e;\\n --apt-color-bg-secondary: #333;\\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\\n --apt-color-text: #eee;\\n --apt-color-text-muted: #d1d5db;\\n --apt-color-text-muted-light: #444;\\n --apt-color-accent: #a855f7;\\n --apt-resizer-color: #666;\\n --apt-resizer-hover-color: #999;\\n --apt-th-sortable-hover: #444;\\n --apt-btn-bg: #444;\\n --apt-btn-hover-bg: #555;\\n}\\nhtml.light,\\n.light,\\n:root.light {\\n --apt-color-primary: #371f1f;\\n --apt-color-border: #d1d5db;\\n --apt-color-bg: white;\\n --apt-color-bg-secondary: #e5e7eb;\\n --apt-color-bg-hover: #f3f4f6;\\n --apt-color-text: #1f2937;\\n --apt-color-text-muted: #6b7280;\\n --apt-color-text-muted-light: #9ca3af;\\n --apt-color-accent: #9333ea;\\n --apt-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\\n --apt-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n --apt-resizer-color: #bbb;\\n --apt-resizer-hover-color: #888;\\n --apt-th-sortable-hover: #d1d5db;\\n --apt-btn-bg: white;\\n --apt-btn-hover-bg: #d1d5db;\\n}\\n.apt-table-container {\\n color: var(--apt-color-text);\\n border-radius: 6px;\\n margin: 0;\\n padding: 0;\\n border: 1px solid var(--apt-color-border);\\n background-color: var(--apt-color-bg);\\n box-shadow: var(--apt-shadow);\\n display: flex;\\n flex-direction: column;\\n overflow: hidden;\\n}\\n.apt-empty-state {\\n flex-grow: 1;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n text-align: center;\\n padding: 48px 0;\\n color: var(--apt-color-text-muted-light);\\n}\\n.apt-scroll-area {\\n flex-grow: 1;\\n overflow: auto;\\n}\\n.apt-table {\\n width: 100%;\\n text-align: left;\\n font-size: 0.75rem;\\n table-layout: fixed;\\n border-collapse: collapse;\\n border-spacing: 0;\\n margin: 0;\\n padding: 0;\\n}\\n.apt-thead {\\n position: sticky;\\n top: 0;\\n background-color: var(--apt-color-bg-secondary);\\n z-index: 10;\\n}\\n.apt-th {\\n position: relative;\\n padding: 12px 8px;\\n border: none;\\n}\\n.apt-th-sortable {\\n cursor: pointer;\\n}\\n.apt-th-sortable:hover {\\n background-color: var(--apt-th-sortable-hover);\\n}\\n.apt-th-content {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\\n.apt-resizer {\\n position: absolute;\\n right: 0;\\n top: 4px;\\n height: 80%;\\n width: 3px;\\n border-radius: 2px;\\n cursor: col-resize;\\n user-select: none;\\n touch-action: none;\\n background-color: var(--apt-resizer-color);\\n}\\n.apt-resizer:hover,\\n.apt-th:hover .apt-resizer {\\n background-color: var(--apt-resizer-hover-color);\\n}\\n.apt-tbody {\\n border: none;\\n}\\n.apt-tbody tr {\\n border: none;\\n}\\n.apt-row {\\n transition: background-color 0.15s;\\n}\\n.apt-row:hover {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-row-expanded {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-td {\\n padding: 4px 8px;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n border: none;\\n}\\n.apt-td-actions {\\n padding: 4px 8px;\\n border: none;\\n}\\n.apt-footer {\\n display: grid;\\n grid-template-columns: 1fr 1fr 1fr;\\n align-items: center;\\n padding: 8px;\\n background-color: var(--apt-color-bg-secondary);\\n}\\n.apt-footer-left {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n}\\n.apt-footer-center {\\n justify-self: center;\\n font-size: 0.875rem;\\n color: var(--apt-color-text);\\n}\\n.apt-footer-right {\\n justify-self: end;\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n}\\n.apt-rows-label {\\n font-size: 0.75rem;\\n text-transform: uppercase;\\n letter-spacing: 0.05em;\\n color: var(--apt-color-text-muted);\\n}\\n.apt-rows-select {\\n padding: 4px 8px;\\n font-size: 0.875rem;\\n border-radius: 4px;\\n background-color: var(--apt-btn-bg);\\n color: var(--apt-color-text);\\n border: 1px solid var(--apt-color-border);\\n}\\n.apt-btn {\\n padding: 4px 12px;\\n font-size: 0.875rem;\\n border-radius: 4px;\\n background-color: var(--apt-btn-bg);\\n color: var(--apt-color-text);\\n border: 0;\\n cursor: pointer;\\n transition: background-color 0.15s;\\n}\\n.apt-btn:hover:not(:disabled) {\\n background-color: var(--apt-btn-hover-bg);\\n}\\n.apt-btn:disabled {\\n opacity: 0.5;\\n cursor: not-allowed;\\n}\\n.apt-sort-icon {\\n display: inline-block;\\n margin-left: 4px;\\n width: 14px;\\n height: 14px;\\n opacity: 0.3;\\n}\\n.apt-sort-icon-active {\\n opacity: 1;\\n}\\n.apt-column-toggle-container {\\n position: relative;\\n}\\n.apt-column-toggle-btn {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n border-radius: 8px;\\n border: 1px solid var(--apt-color-border);\\n background-color: var(--apt-color-bg-hover);\\n padding: 8px 12px;\\n font-size: 0.875rem;\\n font-weight: 500;\\n color: var(--apt-color-primary);\\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);\\n cursor: pointer;\\n transition: background-color 0.15s;\\n}\\n.apt-column-toggle-btn:hover {\\n background-color: var(--apt-color-bg-secondary);\\n}\\n.apt-column-toggle-btn:focus {\\n outline: none;\\n}\\n.apt-column-toggle-icon {\\n font-size: 1.125rem;\\n}\\n.apt-column-toggle-count {\\n font-size: 0.75rem;\\n opacity: 0.7;\\n}\\n.apt-column-toggle-menu {\\n position: absolute;\\n right: 0;\\n margin-top: 8px;\\n width: 288px;\\n border-radius: 8px;\\n border: 1px solid var(--apt-color-border);\\n background-color: var(--apt-color-bg);\\n box-shadow: var(--apt-shadow-lg);\\n z-index: 50;\\n max-height: 384px;\\n overflow-y: auto;\\n}\\n.apt-column-toggle-menu-inner {\\n padding: 12px;\\n}\\n.apt-column-toggle-header {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n margin-bottom: 12px;\\n border-bottom: 1px solid var(--apt-color-border);\\n padding-bottom: 8px;\\n}\\n.apt-column-toggle-title {\\n font-size: 0.875rem;\\n font-weight: 600;\\n color: var(--apt-color-primary);\\n}\\n.apt-column-toggle-select-all {\\n font-size: 0.75rem;\\n color: var(--apt-color-accent);\\n background: none;\\n border: none;\\n cursor: pointer;\\n text-decoration: none;\\n}\\n.apt-column-toggle-select-all:hover {\\n text-decoration: underline;\\n}\\n.apt-column-toggle-list {\\n display: flex;\\n flex-direction: column;\\n gap: 4px;\\n}\\n.apt-column-toggle-item {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n cursor: pointer;\\n padding: 6px 8px;\\n border-radius: 4px;\\n transition: background-color 0.15s;\\n}\\n.apt-column-toggle-item:hover {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-column-toggle-checkbox {\\n width: 16px;\\n height: 16px;\\n color: var(--apt-color-accent);\\n border-radius: 12px;\\n cursor: pointer;\\n accent-color: var(--apt-color-accent);\\n}\\n.apt-column-toggle-label {\\n font-size: 0.875rem;\\n color: var(--apt-color-primary);\\n flex: 1;\\n}\\n.apt-flex {\\n display: flex;\\n}\\n.apt-items-center {\\n align-items: center;\\n}\\n.apt-gap-2 {\\n gap: 8px;\\n}\\n\")","import {\r\n Fragment,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n CSSProperties,\r\n} from \"react\";\r\n\r\n// ============= TypeScript Interfaces =============\r\n\r\nexport interface TableHeader {\r\n accessor: string;\r\n label: string;\r\n isSortable?: boolean;\r\n width?: string | number;\r\n minWidth?: string | number;\r\n cellRenderer?: (args: { row: any; value: any }) => React.ReactNode;\r\n}\r\n\r\nexport interface SortConfig {\r\n key: string;\r\n direction: \"asc\" | \"desc\";\r\n}\r\n\r\nexport interface TableProps {\r\n manualHeaders: TableHeader[];\r\n manualRowData: Record<string, any>[];\r\n initialSort?: SortConfig | null;\r\n height?: string;\r\n rowHeight?: number;\r\n rowsPerPage?: number;\r\n shouldPaginate?: boolean;\r\n rowClassName?: (row: any) => string;\r\n onRowClick?: (row: any) => void;\r\n minColWidth?: number;\r\n mobileAutoSizeOnHeaderClick?: boolean;\r\n mobileBreakpoint?: number;\r\n columnWidthsStorageKey?: string;\r\n rowsPerPageOptions?: number[];\r\n onRowsPerPageChange?: (value: number) => void;\r\n expandedRowId?: string | null;\r\n renderExpandedRow?: (row: any) => React.ReactNode;\r\n renderFullRow?: (row: any) => React.ReactNode;\r\n}\r\n\r\n// ============= SVG Icons (replaced react-icons) =============\r\n\r\nconst SortIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M6 2L3 5h6L6 2zM6 10l3-3H3l3 3z\" />\r\n </svg>\r\n);\r\n\r\nconst SortUpIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M6 2L2 7h8L6 2z\" />\r\n </svg>\r\n);\r\n\r\nconst SortDownIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M6 10l4-5H2l4 5z\" />\r\n </svg>\r\n);\r\n\r\n// ============= Utilities =============\r\n\r\nfunction loadStoredColumnWidths(\r\n columnWidthsStorageKey: string | undefined,\r\n fallback: Record<string, string | number | undefined>,\r\n): Record<string, string | number | undefined> {\r\n if (!columnWidthsStorageKey || typeof window === \"undefined\") return fallback;\r\n try {\r\n const raw = window.localStorage.getItem(columnWidthsStorageKey);\r\n if (!raw) return fallback;\r\n const parsed = JSON.parse(raw);\r\n if (!parsed || typeof parsed !== \"object\") return fallback;\r\n const next = { ...fallback };\r\n Object.keys(next).forEach((key) => {\r\n const val = parsed[key];\r\n if (typeof val === \"number\" || typeof val === \"string\") next[key] = val;\r\n });\r\n return next;\r\n } catch {\r\n return fallback;\r\n }\r\n}\r\n\r\n// ============= Main Component =============\r\n\r\nconst Table: React.FC<TableProps> = ({\r\n manualHeaders,\r\n manualRowData,\r\n initialSort,\r\n height = \"100%\",\r\n rowHeight = 40,\r\n rowsPerPage = 60,\r\n shouldPaginate = true,\r\n rowClassName,\r\n onRowClick,\r\n minColWidth = 50,\r\n mobileAutoSizeOnHeaderClick = false,\r\n mobileBreakpoint = 768,\r\n columnWidthsStorageKey,\r\n rowsPerPageOptions = [20, 50, 100],\r\n onRowsPerPageChange,\r\n expandedRowId,\r\n renderExpandedRow,\r\n renderFullRow,\r\n}) => {\r\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(\r\n initialSort || null,\r\n );\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [columnWidths, setColumnWidths] = useState<\r\n Record<string, string | number>\r\n >({});\r\n const [expandedColumns, setExpandedColumns] = useState<Set<string>>(\r\n () => new Set(),\r\n );\r\n const initialColumnWidthsRef = useRef<\r\n Record<string, string | number | undefined>\r\n >({});\r\n const tableRef = useRef<HTMLTableElement>(null);\r\n const textMeasureContextRef = useRef<CanvasRenderingContext2D | null>(null);\r\n const [isMobile, setIsMobile] = useState(() => {\r\n if (typeof window === \"undefined\") return false;\r\n return window.innerWidth < mobileBreakpoint;\r\n });\r\n\r\n const headers = useMemo(() => manualHeaders || [], [manualHeaders]);\r\n\r\n // Reset column widths, expanded columns, and page when headers/storage key changes\r\n useEffect(() => {\r\n const initialWidths: Record<string, string | number | undefined> = {};\r\n headers.forEach((header) => {\r\n initialWidths[header.accessor] = header.width;\r\n });\r\n initialColumnWidthsRef.current = initialWidths;\r\n setColumnWidths(\r\n loadStoredColumnWidths(columnWidthsStorageKey, initialWidths) as Record<\r\n string,\r\n string | number\r\n >,\r\n );\r\n setExpandedColumns(new Set());\r\n setCurrentPage(1);\r\n }, [headers, columnWidthsStorageKey]);\r\n\r\n useEffect(() => {\r\n if (!columnWidthsStorageKey || typeof window === \"undefined\") return;\r\n if (Object.keys(columnWidths).length === 0) return;\r\n window.localStorage.setItem(\r\n columnWidthsStorageKey,\r\n JSON.stringify(columnWidths),\r\n );\r\n }, [columnWidths, columnWidthsStorageKey]);\r\n\r\n useEffect(() => {\r\n if (typeof window === \"undefined\") return undefined;\r\n const handleResize = () =>\r\n setIsMobile(window.innerWidth < mobileBreakpoint);\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, [mobileBreakpoint]);\r\n\r\n const measureTextWidth = (text: any): number => {\r\n if (typeof document === \"undefined\") return String(text ?? \"\").length * 8;\r\n const ctx =\r\n textMeasureContextRef.current ||\r\n (() => {\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n if (tableRef.current && context) {\r\n const font = window.getComputedStyle(tableRef.current).font;\r\n context.font = font || \"12px sans-serif\";\r\n }\r\n textMeasureContextRef.current = context;\r\n return context;\r\n })();\r\n return ctx ? ctx.measureText(String(text ?? \"\")).width : 0;\r\n };\r\n\r\n const parseWidthValue = (\r\n value: string | number | undefined,\r\n fallback: number,\r\n ): number => {\r\n if (typeof value === \"number\" && !Number.isNaN(value)) return value;\r\n if (typeof value === \"string\") {\r\n const parsed = parseFloat(value);\r\n if (!Number.isNaN(parsed)) return parsed;\r\n }\r\n return fallback;\r\n };\r\n\r\n const rows = useMemo(() => {\r\n if (!Array.isArray(manualRowData)) return [];\r\n\r\n const src = manualRowData\r\n .filter(Boolean)\r\n .filter((r) => typeof r === \"object\");\r\n\r\n const makeSafeId = (full: any, idx: number): string => {\r\n const rawId = full?.id;\r\n const v1 =\r\n rawId !== undefined && rawId !== null && String(rawId).trim() !== \"\"\r\n ? String(rawId).trim()\r\n : \"\";\r\n const v2 = [\r\n full?.order_id,\r\n full?.bom_id,\r\n full?.bom_workstation_status_id,\r\n full?.bom_data_id,\r\n full?.unique_task_info_id,\r\n full?.order_data_id,\r\n ]\r\n .filter((v) => v !== undefined && v !== null && String(v) !== \"\")\r\n .join(\"-\");\r\n return v1 || `${v2}-row${idx}`;\r\n };\r\n\r\n return src.map((full: any, idx: number) => {\r\n const id = makeSafeId(full, idx);\r\n const base: any = { id, \"#\": idx + 1, _meta: full };\r\n headers.forEach((h) => {\r\n if (![\"#\", \"details_meta\"].includes(h.accessor)) {\r\n base[h.accessor] = full?.[h.accessor] ?? \"\";\r\n }\r\n });\r\n return base;\r\n });\r\n }, [manualRowData, headers]);\r\n\r\n const sortedRows = useMemo(() => {\r\n if (!sortConfig || !sortConfig.key) {\r\n return rows;\r\n }\r\n const sortableRows = [...rows];\r\n sortableRows.sort((a, b) => {\r\n const aVal = a[sortConfig.key];\r\n const bVal = b[sortConfig.key];\r\n\r\n if (aVal < bVal) {\r\n return sortConfig.direction === \"asc\" ? -1 : 1;\r\n }\r\n if (aVal > bVal) {\r\n return sortConfig.direction === \"asc\" ? 1 : -1;\r\n }\r\n return 0;\r\n });\r\n return sortableRows;\r\n }, [rows, sortConfig]);\r\n\r\n const effectiveShouldPaginate =\r\n shouldPaginate && sortedRows.length > rowsPerPage;\r\n\r\n const totalPages = effectiveShouldPaginate\r\n ? Math.ceil(sortedRows.length / rowsPerPage)\r\n : 1;\r\n\r\n // Clamp page to valid range — avoids setState-during-render\r\n const safePage = totalPages > 0 ? Math.min(currentPage, totalPages) : 1;\r\n\r\n const paginatedRows = useMemo(() => {\r\n if (!effectiveShouldPaginate) return sortedRows;\r\n const startIndex = (safePage - 1) * rowsPerPage;\r\n return sortedRows.slice(startIndex, startIndex + rowsPerPage);\r\n }, [sortedRows, safePage, rowsPerPage, effectiveShouldPaginate]);\r\n\r\n const handleSort = (key: string, isSortable?: boolean) => {\r\n if (!isSortable) return;\r\n let direction: \"asc\" | \"desc\" = \"asc\";\r\n if (\r\n sortConfig &&\r\n sortConfig.key === key &&\r\n sortConfig.direction === \"asc\"\r\n ) {\r\n direction = \"desc\";\r\n }\r\n setSortConfig({ key, direction });\r\n setCurrentPage(1);\r\n };\r\n\r\n const autoSizeColumn = (colIndex: number, header: TableHeader) => {\r\n if (!tableRef.current) return;\r\n const tableEl = tableRef.current;\r\n let maxWidth = measureTextWidth(header?.label || \"\");\r\n\r\n const collectCellWidth = (cell: HTMLTableCellElement | null) => {\r\n if (!cell) return;\r\n const scrollWidth = cell.scrollWidth || cell.offsetWidth || 0;\r\n const style = window.getComputedStyle(cell);\r\n const borderWidth =\r\n parseFloat(style.borderLeftWidth || \"0\") +\r\n parseFloat(style.borderRightWidth || \"0\");\r\n maxWidth = Math.max(maxWidth, Math.ceil(scrollWidth + borderWidth));\r\n };\r\n\r\n const headerCell =\r\n tableEl.tHead?.rows?.[0]?.cells?.[colIndex] ||\r\n tableEl.querySelector(`thead th:nth-child(${colIndex + 1})`);\r\n collectCellWidth(headerCell as HTMLTableCellElement);\r\n\r\n const bodyRows = tableEl.tBodies?.[0]?.rows || [];\r\n for (const row of bodyRows) {\r\n collectCellWidth(row.cells?.[colIndex] as HTMLTableCellElement);\r\n }\r\n\r\n rows.forEach((r) => {\r\n maxWidth = Math.max(\r\n maxWidth,\r\n Math.ceil(measureTextWidth(r[header.accessor])),\r\n );\r\n });\r\n\r\n const minWidthPx = parseWidthValue(\r\n header?.minWidth,\r\n parseWidthValue(minColWidth, 50),\r\n );\r\n const finalWidth = Math.max(maxWidth + 12, minWidthPx);\r\n setColumnWidths((prev) => ({\r\n ...prev,\r\n [header.accessor]: `${finalWidth}px`,\r\n }));\r\n };\r\n\r\n const resetColumnWidth = (accessor: string) => {\r\n const regularWidth = initialColumnWidthsRef.current[accessor];\r\n setColumnWidths((prev) => {\r\n if (regularWidth === undefined) {\r\n const next = { ...prev };\r\n delete next[accessor];\r\n return next;\r\n }\r\n return { ...prev, [accessor]: regularWidth };\r\n });\r\n };\r\n\r\n const handleHeaderClick = (header: TableHeader, colIndex: number) => {\r\n if (mobileAutoSizeOnHeaderClick && isMobile) {\r\n const isExpanded = expandedColumns.has(header.accessor);\r\n if (isExpanded) {\r\n resetColumnWidth(header.accessor);\r\n setExpandedColumns((prev) => {\r\n const next = new Set(prev);\r\n next.delete(header.accessor);\r\n return next;\r\n });\r\n } else {\r\n autoSizeColumn(colIndex, header);\r\n setExpandedColumns((prev) => {\r\n const next = new Set(prev);\r\n next.add(header.accessor);\r\n return next;\r\n });\r\n }\r\n return;\r\n }\r\n handleSort(header.accessor, header.isSortable);\r\n };\r\n\r\n const getSortIcon = (key: string): React.ReactNode => {\r\n if (mobileAutoSizeOnHeaderClick && isMobile) return null;\r\n if (!sortConfig || sortConfig.key !== key) {\r\n return <SortIcon className=\"apt-sort-icon\" />;\r\n }\r\n return sortConfig.direction === \"asc\" ? (\r\n <SortUpIcon className=\"apt-sort-icon apt-sort-icon-active\" />\r\n ) : (\r\n <SortDownIcon className=\"apt-sort-icon apt-sort-icon-active\" />\r\n );\r\n };\r\n\r\n const handleMouseDown = (e: React.MouseEvent, accessor: string) => {\r\n e.preventDefault();\r\n const startX = e.clientX;\r\n const th = (e.target as HTMLElement).closest(\"th\");\r\n if (!th) return;\r\n\r\n const header = headers.find((h) => h.accessor === accessor);\r\n const minResizeWidth = parseWidthValue(header?.minWidth, minColWidth);\r\n\r\n const startWidth = th.offsetWidth;\r\n\r\n document.body.style.cursor = \"col-resize\";\r\n document.body.style.userSelect = \"none\";\r\n\r\n const handleMouseMove = (moveEvent: MouseEvent) => {\r\n const deltaX = moveEvent.clientX - startX;\r\n const newWidth = startWidth + deltaX;\r\n const finalWidth = Math.max(newWidth, minResizeWidth);\r\n\r\n setColumnWidths((prev) => ({\r\n ...prev,\r\n [accessor]: `${finalWidth}px`,\r\n }));\r\n };\r\n\r\n const handleMouseUp = () => {\r\n document.body.style.cursor = \"\";\r\n document.body.style.userSelect = \"\";\r\n document.removeEventListener(\"mousemove\", handleMouseMove);\r\n document.removeEventListener(\"mouseup\", handleMouseUp);\r\n };\r\n\r\n document.addEventListener(\"mousemove\", handleMouseMove);\r\n document.addEventListener(\"mouseup\", handleMouseUp);\r\n };\r\n\r\n const containerStyle: CSSProperties = {\r\n height:\r\n sortedRows.length === 0\r\n ? height\r\n : !effectiveShouldPaginate\r\n ? \"auto\"\r\n : height,\r\n maxHeight: !effectiveShouldPaginate ? height : undefined,\r\n };\r\n\r\n return (\r\n <div className=\"apt-table-container\" style={containerStyle}>\r\n {sortedRows.length === 0 ? (\r\n <div className=\"apt-empty-state\">No rows to display.</div>\r\n ) : (\r\n <>\r\n <div className=\"apt-scroll-area\">\r\n <table className=\"apt-table\" ref={tableRef}>\r\n <colgroup>\r\n {headers.map((header) => (\r\n <col\r\n key={`col-${header.accessor}`}\r\n style={{\r\n width: columnWidths[header.accessor],\r\n minWidth: `${parseWidthValue(\r\n header.minWidth,\r\n minColWidth,\r\n )}px`,\r\n }}\r\n />\r\n ))}\r\n </colgroup>\r\n <thead className=\"apt-thead\">\r\n <tr>\r\n {headers.map((header, idx) => {\r\n const isHeaderClickable =\r\n (mobileAutoSizeOnHeaderClick && isMobile) ||\r\n header.isSortable;\r\n return (\r\n <th\r\n key={header.accessor}\r\n onClick={() => handleHeaderClick(header, idx)}\r\n className={`apt-th ${\r\n isHeaderClickable ? \"apt-th-sortable\" : \"\"\r\n }`}\r\n >\r\n <div className=\"apt-th-content\">\r\n {header.label}\r\n {header.isSortable &&\r\n !(mobileAutoSizeOnHeaderClick && isMobile) &&\r\n getSortIcon(header.accessor)}\r\n </div>\r\n <div\r\n className=\"apt-resizer\"\r\n onMouseDown={(e) => {\r\n e.stopPropagation();\r\n handleMouseDown(e, header.accessor);\r\n }}\r\n />\r\n </th>\r\n );\r\n })}\r\n </tr>\r\n </thead>\r\n <tbody className=\"apt-tbody\">\r\n {paginatedRows.map((row) => {\r\n const isExpanded = expandedRowId === row.id;\r\n const isFullRow =\r\n typeof renderFullRow === \"function\" && row?._meta?.fullRow;\r\n return (\r\n <Fragment key={row.id}>\r\n {isFullRow ? (\r\n <tr\r\n className={`apt-row ${rowClassName ? rowClassName(row) : \"\"}`}\r\n onClick={() => onRowClick && onRowClick(row)}\r\n >\r\n <td\r\n colSpan={headers.length}\r\n className=\"apt-td\"\r\n style={{ padding: 0 }}\r\n >\r\n {renderFullRow(row)}\r\n </td>\r\n </tr>\r\n ) : (\r\n <tr\r\n className={`apt-row ${rowClassName ? rowClassName(row) : \"\"}`}\r\n onClick={() => onRowClick && onRowClick(row)}\r\n style={{ height: `${rowHeight}px` }}\r\n >\r\n {headers.map((header) => {\r\n const value = row[header.accessor];\r\n const cellContent = header.cellRenderer\r\n ? header.cellRenderer({ row, value })\r\n : value;\r\n return (\r\n <td\r\n key={`${row.id}-${header.accessor}`}\r\n className={\r\n header.accessor === \"actions\"\r\n ? \"apt-td-actions\"\r\n : \"apt-td\"\r\n }\r\n >\r\n {header.accessor === \"actions\" ? (\r\n <div onClick={(e) => e.stopPropagation()}>\r\n {cellContent}\r\n </div>\r\n ) : (\r\n cellContent\r\n )}\r\n </td>\r\n );\r\n })}\r\n </tr>\r\n )}\r\n {isExpanded &&\r\n typeof renderExpandedRow === \"function\" && (\r\n <tr className=\"apt-row-expanded\">\r\n <td\r\n colSpan={headers.length}\r\n className=\"apt-td\"\r\n style={{ padding: 0 }}\r\n >\r\n {renderExpandedRow(row)}\r\n </td>\r\n </tr>\r\n )}\r\n </Fragment>\r\n );\r\n })}\r\n </tbody>\r\n </table>\r\n </div>\r\n {(shouldPaginate && totalPages > 1) ||\r\n (Array.isArray(rowsPerPageOptions) &&\r\n rowsPerPageOptions.length > 0 &&\r\n onRowsPerPageChange) ? (\r\n <div className=\"apt-footer\">\r\n <div className=\"apt-footer-left\">\r\n {Array.isArray(rowsPerPageOptions) &&\r\n rowsPerPageOptions.length > 0 &&\r\n onRowsPerPageChange && (\r\n <>\r\n <label className=\"apt-rows-label\">Rows</label>\r\n <select\r\n value={rowsPerPage}\r\n onChange={(e) =>\r\n onRowsPerPageChange(Number(e.target.value))\r\n }\r\n className=\"apt-rows-select\"\r\n >\r\n {rowsPerPageOptions.map((opt) => (\r\n <option key={opt} value={opt}>\r\n {opt}\r\n </option>\r\n ))}\r\n </select>\r\n </>\r\n )}\r\n </div>\r\n <div className=\"apt-footer-center\">\r\n {totalPages > 1 ? `Page ${safePage} of ${totalPages}` : \"\"}\r\n </div>\r\n <div className=\"apt-footer-right\">\r\n {totalPages > 1 ? (\r\n <>\r\n <button\r\n onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}\r\n disabled={safePage === 1}\r\n className=\"apt-btn\"\r\n >\r\n Previous\r\n </button>\r\n <button\r\n onClick={() =>\r\n setCurrentPage((p) => Math.min(totalPages, p + 1))\r\n }\r\n disabled={safePage === totalPages}\r\n className=\"apt-btn\"\r\n >\r\n Next\r\n </button>\r\n </>\r\n ) : null}\r\n </div>\r\n </div>\r\n ) : null}\r\n </>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Table;\r\n","import { useState, useRef, useEffect } from \"react\";\r\n\r\n// ============= TypeScript Interfaces =============\r\n\r\nexport interface ColumnDefinition {\r\n key: string;\r\n label: string;\r\n}\r\n\r\nexport interface ColumnVisibilityToggleProps {\r\n availableColumns: ColumnDefinition[];\r\n visibleColumns: string[];\r\n onColumnsChange: (columns: string[]) => void;\r\n storageKey?: string;\r\n}\r\n\r\n// ============= SVG Icon (replaced react-icons) =============\r\n\r\nconst ViewColumnIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"18\"\r\n height=\"18\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M10 18h5V5h-5v13zm-6 0h5V5H4v13zM16 5v13h5V5h-5z\" />\r\n </svg>\r\n);\r\n\r\n// ============= Main Component =============\r\n\r\nconst ColumnVisibilityToggle: React.FC<ColumnVisibilityToggleProps> = ({\r\n availableColumns,\r\n visibleColumns,\r\n onColumnsChange,\r\n storageKey,\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n\r\n // Close menu when clicking outside\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n if (isOpen) {\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n }\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, [isOpen]);\r\n\r\n const saveToStorage = (columns: string[]) => {\r\n if (storageKey && typeof window !== \"undefined\") {\r\n try {\r\n window.localStorage.setItem(storageKey, JSON.stringify(columns));\r\n } catch (error) {\r\n console.warn(\r\n \"Failed to save column visibility to localStorage:\",\r\n error,\r\n );\r\n }\r\n }\r\n };\r\n\r\n const handleToggleColumn = (columnKey: string) => {\r\n const newVisibleColumns = visibleColumns.includes(columnKey)\r\n ? visibleColumns.filter((key) => key !== columnKey)\r\n : [...visibleColumns, columnKey];\r\n\r\n saveToStorage(newVisibleColumns);\r\n onColumnsChange(newVisibleColumns);\r\n };\r\n\r\n const handleSelectAll = () => {\r\n const allKeys = availableColumns.map((col) => col.key);\r\n saveToStorage(allKeys);\r\n onColumnsChange(allKeys);\r\n };\r\n\r\n return (\r\n <div className=\"apt-column-toggle-container\" ref={menuRef}>\r\n <button\r\n type=\"button\"\r\n onClick={() => setIsOpen(!isOpen)}\r\n className=\"apt-column-toggle-btn\"\r\n aria-label=\"Toggle column visibility\"\r\n aria-expanded={isOpen}\r\n >\r\n <ViewColumnIcon className=\"apt-column-toggle-icon\" />\r\n <span>Columns</span>\r\n <span className=\"apt-column-toggle-count\">\r\n ({visibleColumns.length})\r\n </span>\r\n </button>\r\n\r\n {isOpen && (\r\n <div className=\"apt-column-toggle-menu\">\r\n <div className=\"apt-column-toggle-menu-inner\">\r\n <div className=\"apt-column-toggle-header\">\r\n <h3 className=\"apt-column-toggle-title\">Toggle Columns</h3>\r\n <button\r\n type=\"button\"\r\n onClick={handleSelectAll}\r\n className=\"apt-column-toggle-select-all\"\r\n >\r\n Select All\r\n </button>\r\n </div>\r\n <div className=\"apt-column-toggle-list\">\r\n {availableColumns.map((column) => {\r\n const isVisible = visibleColumns.includes(column.key);\r\n return (\r\n <label key={column.key} className=\"apt-column-toggle-item\">\r\n <input\r\n type=\"checkbox\"\r\n checked={isVisible}\r\n onChange={() => handleToggleColumn(column.key)}\r\n className=\"apt-column-toggle-checkbox\"\r\n />\r\n <span className=\"apt-column-toggle-label\">\r\n {column.label}\r\n </span>\r\n </label>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ColumnVisibilityToggle;\r\n"]}
1
+ {"version":3,"sources":["#style-inject:#style-inject","../src/styles.css","../src/ColumnFilter.tsx","../src/Table.tsx","../src/ColumnVisibilityToggle.tsx"],"names":["jsx","useState","useRef","useMemo","useEffect","useLayoutEffect","jsxs","Fragment"],"mappings":"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","file":"index.mjs","sourcesContent":["\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\":root {\\n --apt-color-primary: #371f1f;\\n --apt-color-border: #d1d5db;\\n --apt-color-border-subtle: #eceff3;\\n --apt-color-bg: white;\\n --apt-color-bg-secondary: #e5e7eb;\\n --apt-color-bg-hover: #f3f4f6;\\n --apt-color-row-stripe: #f9fafb;\\n --apt-color-text: #1f2937;\\n --apt-color-text-muted: #6b7280;\\n --apt-color-text-muted-light: #9ca3af;\\n --apt-color-accent: #9333ea;\\n --apt-color-accent-soft: rgba(147, 51, 234, 0.12);\\n --apt-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\\n --apt-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n --apt-resizer-color: #bbb;\\n --apt-resizer-hover-color: #888;\\n --apt-th-sortable-hover: #d1d5db;\\n --apt-btn-bg: white;\\n --apt-btn-hover-bg: #d1d5db;\\n}\\n@media (prefers-color-scheme: dark) {\\n :root {\\n --apt-color-primary: #eee;\\n --apt-color-border: #333;\\n --apt-color-border-subtle: #2a2a2a;\\n --apt-color-bg: #1e1e1e;\\n --apt-color-bg-secondary: #333;\\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\\n --apt-color-row-stripe: rgba(255, 255, 255, 0.03);\\n --apt-color-text: #eee;\\n --apt-color-text-muted: #d1d5db;\\n --apt-color-text-muted-light: #444;\\n --apt-color-accent: #a855f7;\\n --apt-color-accent-soft: rgba(168, 85, 247, 0.2);\\n --apt-resizer-color: #666;\\n --apt-resizer-hover-color: #999;\\n --apt-th-sortable-hover: #444;\\n --apt-btn-bg: #444;\\n --apt-btn-hover-bg: #555;\\n }\\n}\\nhtml.dark,\\n.dark,\\n:root.dark {\\n --apt-color-primary: #eee;\\n --apt-color-border: #333;\\n --apt-color-border-subtle: #2a2a2a;\\n --apt-color-bg: #1e1e1e;\\n --apt-color-bg-secondary: #333;\\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\\n --apt-color-row-stripe: rgba(255, 255, 255, 0.03);\\n --apt-color-text: #eee;\\n --apt-color-text-muted: #d1d5db;\\n --apt-color-text-muted-light: #444;\\n --apt-color-accent: #a855f7;\\n --apt-color-accent-soft: rgba(168, 85, 247, 0.2);\\n --apt-resizer-color: #666;\\n --apt-resizer-hover-color: #999;\\n --apt-th-sortable-hover: #444;\\n --apt-btn-bg: #444;\\n --apt-btn-hover-bg: #555;\\n}\\nhtml.light,\\n.light,\\n:root.light {\\n --apt-color-primary: #371f1f;\\n --apt-color-border: #d1d5db;\\n --apt-color-border-subtle: #eceff3;\\n --apt-color-bg: white;\\n --apt-color-bg-secondary: #e5e7eb;\\n --apt-color-bg-hover: #f3f4f6;\\n --apt-color-row-stripe: #f9fafb;\\n --apt-color-text: #1f2937;\\n --apt-color-text-muted: #6b7280;\\n --apt-color-text-muted-light: #9ca3af;\\n --apt-color-accent: #9333ea;\\n --apt-color-accent-soft: rgba(147, 51, 234, 0.12);\\n --apt-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\\n --apt-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n --apt-resizer-color: #bbb;\\n --apt-resizer-hover-color: #888;\\n --apt-th-sortable-hover: #d1d5db;\\n --apt-btn-bg: white;\\n --apt-btn-hover-bg: #d1d5db;\\n}\\n.apt-table-container {\\n color: var(--apt-color-text);\\n border-radius: 6px;\\n margin: 0;\\n padding: 0;\\n border: 1px solid var(--apt-color-border);\\n background-color: var(--apt-color-bg);\\n box-shadow: var(--apt-shadow);\\n display: flex;\\n flex-direction: column;\\n overflow: hidden;\\n}\\n.apt-empty-state {\\n flex-grow: 1;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n text-align: center;\\n padding: 48px 0;\\n color: var(--apt-color-text-muted-light);\\n}\\n.apt-scroll-area {\\n flex-grow: 1;\\n overflow: auto;\\n}\\n.apt-no-matches {\\n text-align: center;\\n padding: 32px 8px;\\n color: var(--apt-color-text-muted-light);\\n white-space: normal;\\n}\\n.apt-table {\\n width: 100%;\\n text-align: left;\\n font-size: 0.75rem;\\n table-layout: fixed;\\n border-collapse: collapse;\\n border-spacing: 0;\\n margin: 0;\\n padding: 0;\\n}\\n.apt-thead {\\n position: sticky;\\n top: 0;\\n background-color: var(--apt-color-bg-secondary);\\n z-index: 10;\\n}\\n.apt-th {\\n position: relative;\\n padding: 10px 12px;\\n border: none;\\n border-bottom: 2px solid var(--apt-color-border);\\n font-weight: 600;\\n font-size: 0.7rem;\\n letter-spacing: 0.03em;\\n text-transform: uppercase;\\n color: var(--apt-color-text-muted);\\n user-select: none;\\n}\\n.apt-th-sortable {\\n cursor: pointer;\\n}\\n.apt-th-sortable:hover {\\n background-color: var(--apt-th-sortable-hover);\\n}\\n.apt-th-content {\\n display: flex;\\n align-items: center;\\n justify-content: flex-start;\\n gap: 2px;\\n}\\n.apt-th-label {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.apt-resizer {\\n position: absolute;\\n right: -3px;\\n top: 0;\\n height: 100%;\\n width: 7px;\\n cursor: col-resize;\\n user-select: none;\\n touch-action: none;\\n z-index: 2;\\n background-color: transparent;\\n}\\n.apt-resizer::after {\\n content: \\\"\\\";\\n position: absolute;\\n right: 3px;\\n top: 20%;\\n height: 60%;\\n width: 2px;\\n border-radius: 2px;\\n background-color: transparent;\\n transition: background-color 0.15s;\\n}\\n.apt-th:hover .apt-resizer::after {\\n background-color: var(--apt-resizer-color);\\n}\\n.apt-resizer:hover::after {\\n background-color: var(--apt-color-accent);\\n}\\n.apt-th-spacer,\\n.apt-td-spacer {\\n padding: 0;\\n border: none;\\n}\\n.apt-tbody {\\n border: none;\\n}\\n.apt-tbody tr {\\n border: none;\\n}\\n.apt-row {\\n transition: background-color 0.15s;\\n}\\n.apt-row:hover {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-row-expanded {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-td {\\n padding: 6px 12px;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n border: none;\\n}\\n.apt-td-actions {\\n padding: 6px 12px;\\n border: none;\\n}\\n.apt-footer {\\n display: grid;\\n grid-template-columns: 1fr 1fr 1fr;\\n align-items: center;\\n padding: 8px;\\n background-color: var(--apt-color-bg-secondary);\\n}\\n.apt-footer-left {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n}\\n.apt-footer-center {\\n justify-self: center;\\n font-size: 0.875rem;\\n color: var(--apt-color-text);\\n}\\n.apt-footer-right {\\n justify-self: end;\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n}\\n.apt-rows-label {\\n font-size: 0.75rem;\\n text-transform: uppercase;\\n letter-spacing: 0.05em;\\n color: var(--apt-color-text-muted);\\n}\\n.apt-rows-select {\\n padding: 4px 8px;\\n font-size: 0.875rem;\\n border-radius: 4px;\\n background-color: var(--apt-btn-bg);\\n color: var(--apt-color-text);\\n border: 1px solid var(--apt-color-border);\\n}\\n.apt-btn {\\n padding: 4px 12px;\\n font-size: 0.875rem;\\n border-radius: 4px;\\n background-color: var(--apt-btn-bg);\\n color: var(--apt-color-text);\\n border: 0;\\n cursor: pointer;\\n transition: background-color 0.15s;\\n}\\n.apt-btn:hover:not(:disabled) {\\n background-color: var(--apt-btn-hover-bg);\\n}\\n.apt-btn:disabled {\\n opacity: 0.5;\\n cursor: not-allowed;\\n}\\n.apt-sort-icon {\\n display: inline-block;\\n margin-left: 4px;\\n width: 14px;\\n height: 14px;\\n opacity: 0.3;\\n}\\n.apt-sort-icon-active {\\n opacity: 1;\\n}\\n.apt-column-toggle-container {\\n position: relative;\\n}\\n.apt-column-toggle-btn {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n border-radius: 8px;\\n border: 1px solid var(--apt-color-border);\\n background-color: var(--apt-color-bg-hover);\\n padding: 8px 12px;\\n font-size: 0.875rem;\\n font-weight: 500;\\n color: var(--apt-color-primary);\\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);\\n cursor: pointer;\\n transition: background-color 0.15s;\\n}\\n.apt-column-toggle-btn:hover {\\n background-color: var(--apt-color-bg-secondary);\\n}\\n.apt-column-toggle-btn:focus {\\n outline: none;\\n}\\n.apt-column-toggle-icon {\\n font-size: 1.125rem;\\n}\\n.apt-column-toggle-count {\\n font-size: 0.75rem;\\n opacity: 0.7;\\n}\\n.apt-column-toggle-menu {\\n position: absolute;\\n right: 0;\\n margin-top: 8px;\\n width: 288px;\\n border-radius: 8px;\\n border: 1px solid var(--apt-color-border);\\n background-color: var(--apt-color-bg);\\n box-shadow: var(--apt-shadow-lg);\\n z-index: 50;\\n max-height: 384px;\\n overflow-y: auto;\\n}\\n.apt-column-toggle-menu-inner {\\n padding: 12px;\\n}\\n.apt-column-toggle-header {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n margin-bottom: 12px;\\n border-bottom: 1px solid var(--apt-color-border);\\n padding-bottom: 8px;\\n}\\n.apt-column-toggle-title {\\n font-size: 0.875rem;\\n font-weight: 600;\\n color: var(--apt-color-primary);\\n}\\n.apt-column-toggle-select-all {\\n font-size: 0.75rem;\\n color: var(--apt-color-accent);\\n background: none;\\n border: none;\\n cursor: pointer;\\n text-decoration: none;\\n}\\n.apt-column-toggle-select-all:hover {\\n text-decoration: underline;\\n}\\n.apt-column-toggle-list {\\n display: flex;\\n flex-direction: column;\\n gap: 4px;\\n}\\n.apt-column-toggle-item {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n cursor: pointer;\\n padding: 6px 8px;\\n border-radius: 4px;\\n transition: background-color 0.15s;\\n}\\n.apt-column-toggle-item:hover {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-column-toggle-checkbox {\\n width: 16px;\\n height: 16px;\\n color: var(--apt-color-accent);\\n border-radius: 12px;\\n cursor: pointer;\\n accent-color: var(--apt-color-accent);\\n}\\n.apt-column-toggle-label {\\n font-size: 0.875rem;\\n color: var(--apt-color-primary);\\n flex: 1;\\n}\\n.apt-striped .apt-row.apt-row-alt {\\n background-color: var(--apt-color-row-stripe);\\n}\\n.apt-dividers .apt-tbody .apt-row > td {\\n border-bottom: 1px solid var(--apt-color-border-subtle);\\n}\\n.apt-bordered .apt-th:not(.apt-th-spacer),\\n.apt-bordered .apt-td:not(.apt-td-spacer) {\\n border-right: 1px solid var(--apt-color-border-subtle);\\n}\\n.apt-bordered .apt-th:not(.apt-th-spacer) {\\n border-right-color: var(--apt-color-border);\\n}\\n.apt-compact .apt-th {\\n padding: 6px 8px;\\n}\\n.apt-compact .apt-td,\\n.apt-compact .apt-td-actions {\\n padding: 2px 8px;\\n}\\n.apt-row:hover,\\n.apt-striped .apt-row.apt-row-alt:hover {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-filter-btn {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n margin-left: auto;\\n padding: 2px;\\n width: 18px;\\n height: 18px;\\n border: none;\\n border-radius: 4px;\\n background: transparent;\\n color: var(--apt-color-text-muted-light);\\n cursor: pointer;\\n opacity: 0.6;\\n transition:\\n background-color 0.15s,\\n color 0.15s,\\n opacity 0.15s;\\n}\\n.apt-th:hover .apt-filter-btn {\\n opacity: 1;\\n}\\n.apt-filter-btn:hover {\\n background-color: var(--apt-color-accent-soft);\\n color: var(--apt-color-accent);\\n}\\n.apt-filter-btn-active {\\n opacity: 1;\\n color: var(--apt-color-accent);\\n background-color: var(--apt-color-accent-soft);\\n}\\n.apt-filter-icon {\\n display: block;\\n width: 12px;\\n height: 12px;\\n}\\n.apt-filter-popover {\\n position: fixed;\\n z-index: 1000;\\n display: flex;\\n flex-direction: column;\\n border: 1px solid var(--apt-color-border);\\n border-radius: 8px;\\n background-color: var(--apt-color-bg);\\n color: var(--apt-color-text);\\n box-shadow: var(--apt-shadow-lg);\\n padding: 8px;\\n font-size: 0.8125rem;\\n text-transform: none;\\n letter-spacing: normal;\\n font-weight: 400;\\n}\\n.apt-filter-sort-row {\\n display: flex;\\n gap: 6px;\\n margin-bottom: 8px;\\n}\\n.apt-filter-sort-btn {\\n flex: 1;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: 4px;\\n padding: 5px 8px;\\n border: 1px solid var(--apt-color-border);\\n border-radius: 6px;\\n background-color: var(--apt-btn-bg);\\n color: var(--apt-color-text);\\n font-size: 0.75rem;\\n cursor: pointer;\\n transition: background-color 0.15s, border-color 0.15s;\\n}\\n.apt-filter-sort-btn:hover {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-filter-sort-btn-active {\\n border-color: var(--apt-color-accent);\\n color: var(--apt-color-accent);\\n background-color: var(--apt-color-accent-soft);\\n}\\n.apt-filter-sort-icon {\\n width: 11px;\\n height: 11px;\\n}\\n.apt-filter-search-wrap {\\n margin-bottom: 6px;\\n}\\n.apt-filter-search {\\n width: 100%;\\n box-sizing: border-box;\\n padding: 6px 8px;\\n border: 1px solid var(--apt-color-border);\\n border-radius: 6px;\\n background-color: var(--apt-color-bg);\\n color: var(--apt-color-text);\\n font-size: 0.8125rem;\\n outline: none;\\n}\\n.apt-filter-search:focus {\\n border-color: var(--apt-color-accent);\\n box-shadow: 0 0 0 2px var(--apt-color-accent-soft);\\n}\\n.apt-filter-list {\\n max-height: 200px;\\n overflow-y: auto;\\n margin: 2px 0;\\n}\\n.apt-filter-item {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n padding: 4px 6px;\\n border-radius: 4px;\\n cursor: pointer;\\n}\\n.apt-filter-item:hover {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-filter-item-all {\\n border-bottom: 1px solid var(--apt-color-border-subtle);\\n border-radius: 0;\\n margin-bottom: 2px;\\n padding-bottom: 6px;\\n font-weight: 600;\\n}\\n.apt-filter-checkbox {\\n width: 15px;\\n height: 15px;\\n flex-shrink: 0;\\n cursor: pointer;\\n accent-color: var(--apt-color-accent);\\n}\\n.apt-filter-item-label {\\n flex: 1;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.apt-filter-empty {\\n padding: 12px 6px;\\n text-align: center;\\n color: var(--apt-color-text-muted);\\n font-size: 0.75rem;\\n}\\n.apt-filter-footer {\\n display: flex;\\n justify-content: space-between;\\n gap: 6px;\\n margin-top: 8px;\\n padding-top: 8px;\\n border-top: 1px solid var(--apt-color-border-subtle);\\n}\\n.apt-filter-clear {\\n padding: 5px 10px;\\n border: none;\\n border-radius: 6px;\\n background: transparent;\\n color: var(--apt-color-accent);\\n font-size: 0.75rem;\\n cursor: pointer;\\n}\\n.apt-filter-clear:hover:not(:disabled) {\\n text-decoration: underline;\\n}\\n.apt-filter-clear:disabled {\\n color: var(--apt-color-text-muted-light);\\n cursor: not-allowed;\\n}\\n.apt-filter-done {\\n padding: 5px 14px;\\n border: none;\\n border-radius: 6px;\\n background-color: var(--apt-color-accent);\\n color: #fff;\\n font-size: 0.75rem;\\n cursor: pointer;\\n transition: opacity 0.15s;\\n}\\n.apt-filter-done:hover {\\n opacity: 0.9;\\n}\\n.apt-flex {\\n display: flex;\\n}\\n.apt-items-center {\\n align-items: center;\\n}\\n.apt-gap-2 {\\n gap: 8px;\\n}\\n\")","import { useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { SortConfig } from \"./Table\";\n\n// ============= Icons =============\n\nconst FilterIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={className}\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n >\n <path d=\"M1 2h10L7 6.5V11L5 9.5V6.5L1 2z\" />\n </svg>\n);\n\nconst SortAscIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={className}\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n >\n <path d=\"M6 2L2 7h8L6 2z\" />\n </svg>\n);\n\nconst SortDescIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={className}\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n >\n <path d=\"M6 10l4-5H2l4 5z\" />\n </svg>\n);\n\n// ============= Types =============\n\nexport interface ColumnFilterProps {\n columnKey: string;\n label: string;\n distinctValues: string[];\n search: string;\n excluded: Set<string>;\n sortConfig: SortConfig | null;\n isSortable?: boolean;\n onSort: (direction: \"asc\" | \"desc\") => void;\n onSearchChange: (value: string) => void;\n onExcludedChange: (next: Set<string>) => void;\n onClear: () => void;\n}\n\n// ============= Component =============\n\nconst POPOVER_WIDTH = 240;\n\nconst ColumnFilter: React.FC<ColumnFilterProps> = ({\n columnKey,\n label,\n distinctValues,\n search,\n excluded,\n sortConfig,\n isSortable = true,\n onSort,\n onSearchChange,\n onExcludedChange,\n onClear,\n}) => {\n const [open, setOpen] = useState(false);\n const [pos, setPos] = useState<{ top: number; left: number } | null>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const masterRef = useRef<HTMLInputElement>(null);\n\n const isActive = search.trim() !== \"\" || excluded.size > 0;\n const sortDir = sortConfig && sortConfig.key === columnKey ? sortConfig.direction : null;\n\n const visibleValues = useMemo(() => {\n const q = search.trim().toLowerCase();\n if (!q) return distinctValues;\n return distinctValues.filter((v) => v.toLowerCase().includes(q));\n }, [distinctValues, search]);\n\n const allVisibleSelected =\n visibleValues.length > 0 && visibleValues.every((v) => !excluded.has(v));\n const someVisibleSelected = visibleValues.some((v) => !excluded.has(v));\n\n // Position the popover under the button, clamped to the viewport.\n useLayoutEffect(() => {\n if (!open || !buttonRef.current) return;\n const rect = buttonRef.current.getBoundingClientRect();\n let left = rect.right - POPOVER_WIDTH;\n const maxLeft = window.innerWidth - POPOVER_WIDTH - 8;\n if (left > maxLeft) left = maxLeft;\n if (left < 8) left = 8;\n setPos({ top: rect.bottom + 6, left });\n }, [open]);\n\n // Reflect indeterminate state on the master checkbox.\n useEffect(() => {\n if (masterRef.current) {\n masterRef.current.indeterminate = someVisibleSelected && !allVisibleSelected;\n }\n }, [someVisibleSelected, allVisibleSelected, open]);\n\n // Close on outside click, Escape, or scroll.\n useEffect(() => {\n if (!open) return undefined;\n const onDown = (e: MouseEvent) => {\n const target = e.target as Node;\n if (popoverRef.current?.contains(target)) return;\n if (buttonRef.current?.contains(target)) return;\n setOpen(false);\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n const onScroll = () => setOpen(false);\n document.addEventListener(\"mousedown\", onDown);\n document.addEventListener(\"keydown\", onKey);\n window.addEventListener(\"scroll\", onScroll, true);\n window.addEventListener(\"resize\", onScroll);\n return () => {\n document.removeEventListener(\"mousedown\", onDown);\n document.removeEventListener(\"keydown\", onKey);\n window.removeEventListener(\"scroll\", onScroll, true);\n window.removeEventListener(\"resize\", onScroll);\n };\n }, [open]);\n\n const toggleValue = (value: string) => {\n const next = new Set(excluded);\n if (next.has(value)) next.delete(value);\n else next.add(value);\n onExcludedChange(next);\n };\n\n const toggleAllVisible = () => {\n const next = new Set(excluded);\n if (allVisibleSelected) {\n visibleValues.forEach((v) => next.add(v));\n } else {\n visibleValues.forEach((v) => next.delete(v));\n }\n onExcludedChange(next);\n };\n\n const handleClear = () => {\n onClear();\n };\n\n return (\n <>\n <button\n ref={buttonRef}\n type=\"button\"\n className={`apt-filter-btn ${isActive ? \"apt-filter-btn-active\" : \"\"}`}\n aria-label={`Filter ${label}`}\n aria-expanded={open}\n onClick={(e) => {\n e.stopPropagation();\n setOpen((v) => !v);\n }}\n >\n <FilterIcon className=\"apt-filter-icon\" />\n </button>\n\n {open &&\n pos &&\n typeof document !== \"undefined\" &&\n createPortal(\n <div\n ref={popoverRef}\n className=\"apt-filter-popover\"\n style={{ top: pos.top, left: pos.left, width: POPOVER_WIDTH }}\n onClick={(e) => e.stopPropagation()}\n >\n {isSortable && (\n <div className=\"apt-filter-sort-row\">\n <button\n type=\"button\"\n className={`apt-filter-sort-btn ${\n sortDir === \"asc\" ? \"apt-filter-sort-btn-active\" : \"\"\n }`}\n onClick={() => onSort(\"asc\")}\n >\n <SortAscIcon className=\"apt-filter-sort-icon\" />\n <span>Asc</span>\n </button>\n <button\n type=\"button\"\n className={`apt-filter-sort-btn ${\n sortDir === \"desc\" ? \"apt-filter-sort-btn-active\" : \"\"\n }`}\n onClick={() => onSort(\"desc\")}\n >\n <SortDescIcon className=\"apt-filter-sort-icon\" />\n <span>Desc</span>\n </button>\n </div>\n )}\n\n <div className=\"apt-filter-search-wrap\">\n <input\n type=\"text\"\n className=\"apt-filter-search\"\n placeholder=\"Search…\"\n value={search}\n autoFocus\n onChange={(e) => onSearchChange(e.target.value)}\n />\n </div>\n\n <label className=\"apt-filter-item apt-filter-item-all\">\n <input\n ref={masterRef}\n type=\"checkbox\"\n className=\"apt-filter-checkbox\"\n checked={allVisibleSelected}\n onChange={toggleAllVisible}\n />\n <span className=\"apt-filter-item-label\">\n {search.trim() ? \"Select all (filtered)\" : \"Select all\"}\n </span>\n </label>\n\n <div className=\"apt-filter-list\">\n {visibleValues.length === 0 ? (\n <div className=\"apt-filter-empty\">No matches</div>\n ) : (\n visibleValues.map((value) => (\n <label key={value} className=\"apt-filter-item\">\n <input\n type=\"checkbox\"\n className=\"apt-filter-checkbox\"\n checked={!excluded.has(value)}\n onChange={() => toggleValue(value)}\n />\n <span className=\"apt-filter-item-label\" title={value}>\n {value === \"\" ? \"(Blanks)\" : value}\n </span>\n </label>\n ))\n )}\n </div>\n\n <div className=\"apt-filter-footer\">\n <button\n type=\"button\"\n className=\"apt-filter-clear\"\n onClick={handleClear}\n disabled={!isActive}\n >\n Clear filter\n </button>\n <button\n type=\"button\"\n className=\"apt-filter-done\"\n onClick={() => setOpen(false)}\n >\n Done\n </button>\n </div>\n </div>,\n document.body,\n )}\n </>\n );\n};\n\nexport default ColumnFilter;\n","import {\n Fragment,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n CSSProperties,\n} from \"react\";\nimport ColumnFilter from \"./ColumnFilter\";\n\n// ============= TypeScript Interfaces =============\n\nexport interface TableHeader {\n accessor: string;\n label: string;\n isSortable?: boolean;\n /**\n * Enable the Excel-style filter dropdown for this column. When omitted, the\n * column inherits the table-level `filterable` prop.\n */\n isFilterable?: boolean;\n width?: string | number;\n minWidth?: string | number;\n cellRenderer?: (args: { row: any; value: any }) => React.ReactNode;\n}\n\nexport interface SortConfig {\n key: string;\n direction: \"asc\" | \"desc\";\n}\n\nexport type TableDensity = \"default\" | \"compact\";\n\ninterface ColumnFilterState {\n search: string;\n excluded: Set<string>;\n}\n\nexport interface TableProps {\n manualHeaders: TableHeader[];\n manualRowData: Record<string, any>[];\n initialSort?: SortConfig | null;\n height?: string;\n rowHeight?: number;\n rowsPerPage?: number;\n shouldPaginate?: boolean;\n rowClassName?: (row: any) => string;\n onRowClick?: (row: any) => void;\n minColWidth?: number;\n mobileAutoSizeOnHeaderClick?: boolean;\n mobileBreakpoint?: number;\n columnWidthsStorageKey?: string;\n rowsPerPageOptions?: number[];\n onRowsPerPageChange?: (value: number) => void;\n expandedRowId?: string | null;\n renderExpandedRow?: (row: any) => React.ReactNode;\n renderFullRow?: (row: any) => React.ReactNode;\n /** Enable Excel-style per-column filtering on every column (opt-in). */\n filterable?: boolean;\n /** Zebra striping: give every other row a subtle darker background. */\n striped?: boolean;\n /** Draw a horizontal divider line beneath each row. */\n dividers?: boolean;\n /** Draw vertical divider lines between columns (grid look). */\n bordered?: boolean;\n /** Row/cell density. `\"compact\"` tightens padding for dense data. */\n density?: TableDensity;\n}\n\n// ============= SVG Icons =============\n\nconst SortIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={className}\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n >\n <path d=\"M6 2L3 5h6L6 2zM6 10l3-3H3l3 3z\" />\n </svg>\n);\n\nconst SortUpIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={className}\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n >\n <path d=\"M6 2L2 7h8L6 2z\" />\n </svg>\n);\n\nconst SortDownIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={className}\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n >\n <path d=\"M6 10l4-5H2l4 5z\" />\n </svg>\n);\n\n// ============= Utilities =============\n\n/** Parse a width value (number, \"120\", or \"120px\") to a pixel number, else null. */\nfunction parseNumericWidth(value: string | number | undefined): number | null {\n if (typeof value === \"number\" && !Number.isNaN(value)) return value;\n if (typeof value === \"string\") {\n const parsed = parseFloat(value);\n if (!Number.isNaN(parsed)) return parsed;\n }\n return null;\n}\n\nfunction loadStoredColumnWidths(\n columnWidthsStorageKey: string | undefined,\n fallback: Record<string, number>,\n): { widths: Record<string, number>; hadStored: boolean } {\n if (!columnWidthsStorageKey || typeof window === \"undefined\")\n return { widths: fallback, hadStored: false };\n try {\n const raw = window.localStorage.getItem(columnWidthsStorageKey);\n if (!raw) return { widths: fallback, hadStored: false };\n const parsed = JSON.parse(raw);\n if (!parsed || typeof parsed !== \"object\")\n return { widths: fallback, hadStored: false };\n const next = { ...fallback };\n Object.keys(parsed).forEach((key) => {\n const num = parseNumericWidth(parsed[key]);\n if (num !== null) next[key] = num;\n });\n return { widths: next, hadStored: true };\n } catch {\n return { widths: fallback, hadStored: false };\n }\n}\n\n// ============= Main Component =============\n\nconst Table: React.FC<TableProps> = ({\n manualHeaders,\n manualRowData,\n initialSort,\n height = \"100%\",\n rowHeight = 40,\n rowsPerPage = 60,\n shouldPaginate = true,\n rowClassName,\n onRowClick,\n minColWidth = 50,\n mobileAutoSizeOnHeaderClick = false,\n mobileBreakpoint = 768,\n columnWidthsStorageKey,\n rowsPerPageOptions = [20, 50, 100],\n onRowsPerPageChange,\n expandedRowId,\n renderExpandedRow,\n renderFullRow,\n filterable = false,\n striped = false,\n dividers = false,\n bordered = false,\n density = \"default\",\n}) => {\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(\n initialSort || null,\n );\n const [currentPage, setCurrentPage] = useState(1);\n const [columnWidths, setColumnWidths] = useState<Record<string, number>>({});\n // Once columns are \"frozen\" every column carries an explicit pixel width and a\n // trailing spacer column absorbs slack, so resizing one column never\n // redistributes width across the others.\n const [columnsFrozen, setColumnsFrozen] = useState(false);\n const [columnFilters, setColumnFilters] = useState<\n Record<string, ColumnFilterState>\n >({});\n const [expandedColumns, setExpandedColumns] = useState<Set<string>>(\n () => new Set(),\n );\n const initialColumnWidthsRef = useRef<Record<string, number>>({});\n const suppressHeaderClickRef = useRef(false);\n const tableRef = useRef<HTMLTableElement>(null);\n const textMeasureContextRef = useRef<CanvasRenderingContext2D | null>(null);\n const [isMobile, setIsMobile] = useState(() => {\n if (typeof window === \"undefined\") return false;\n return window.innerWidth < mobileBreakpoint;\n });\n\n const headers = useMemo(() => manualHeaders || [], [manualHeaders]);\n\n // Reset per-header state when headers or the storage key change.\n useEffect(() => {\n const initialWidths: Record<string, number> = {};\n headers.forEach((header) => {\n const w = parseNumericWidth(header.width);\n if (w !== null) initialWidths[header.accessor] = w;\n });\n initialColumnWidthsRef.current = initialWidths;\n const { widths, hadStored } = loadStoredColumnWidths(\n columnWidthsStorageKey,\n initialWidths,\n );\n setColumnWidths(widths);\n // Persisted widths mean the user has already resized: start frozen so the\n // spacer column is in play and their layout is preserved exactly.\n setColumnsFrozen(hadStored);\n setExpandedColumns(new Set());\n setColumnFilters({});\n setCurrentPage(1);\n }, [headers, columnWidthsStorageKey]);\n\n // When frozen but some columns still lack an explicit width (e.g. a partial\n // persisted set), measure their rendered width once and commit it.\n useLayoutEffect(() => {\n if (!columnsFrozen || !tableRef.current) return;\n const missing = headers.some((h) => columnWidths[h.accessor] == null);\n if (!missing) return;\n const cells = tableRef.current.tHead?.rows?.[0]?.cells;\n const next = { ...columnWidths };\n headers.forEach((header, idx) => {\n if (next[header.accessor] == null) {\n const cell = cells?.[idx] as HTMLTableCellElement | undefined;\n if (cell) next[header.accessor] = cell.offsetWidth;\n }\n });\n setColumnWidths(next);\n }, [columnsFrozen, headers, columnWidths]);\n\n useEffect(() => {\n if (!columnWidthsStorageKey || typeof window === \"undefined\") return;\n if (Object.keys(columnWidths).length === 0) return;\n window.localStorage.setItem(\n columnWidthsStorageKey,\n JSON.stringify(columnWidths),\n );\n }, [columnWidths, columnWidthsStorageKey]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return undefined;\n const handleResize = () =>\n setIsMobile(window.innerWidth < mobileBreakpoint);\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, [mobileBreakpoint]);\n\n const measureTextWidth = (text: any): number => {\n if (typeof document === \"undefined\") return String(text ?? \"\").length * 8;\n const ctx =\n textMeasureContextRef.current ||\n (() => {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n if (tableRef.current && context) {\n const font = window.getComputedStyle(tableRef.current).font;\n context.font = font || \"12px sans-serif\";\n }\n textMeasureContextRef.current = context;\n return context;\n })();\n return ctx ? ctx.measureText(String(text ?? \"\")).width : 0;\n };\n\n const rows = useMemo(() => {\n if (!Array.isArray(manualRowData)) return [];\n\n const src = manualRowData\n .filter(Boolean)\n .filter((r) => typeof r === \"object\");\n\n const makeSafeId = (full: any, idx: number): string => {\n const rawId = full?.id;\n const v1 =\n rawId !== undefined && rawId !== null && String(rawId).trim() !== \"\"\n ? String(rawId).trim()\n : \"\";\n const v2 = [\n full?.order_id,\n full?.bom_id,\n full?.bom_workstation_status_id,\n full?.bom_data_id,\n full?.unique_task_info_id,\n full?.order_data_id,\n ]\n .filter((v) => v !== undefined && v !== null && String(v) !== \"\")\n .join(\"-\");\n return v1 || `${v2}-row${idx}`;\n };\n\n return src.map((full: any, idx: number) => {\n const id = makeSafeId(full, idx);\n const base: any = { id, \"#\": idx + 1, _meta: full };\n headers.forEach((h) => {\n if (![\"#\", \"details_meta\"].includes(h.accessor)) {\n base[h.accessor] = full?.[h.accessor] ?? \"\";\n }\n });\n return base;\n });\n }, [manualRowData, headers]);\n\n // Distinct values per filterable column, for the filter dropdown checklists.\n const distinctValuesByColumn = useMemo(() => {\n const map: Record<string, string[]> = {};\n const anyFilterable = headers.some((h) => h.isFilterable ?? filterable);\n if (!anyFilterable) return map;\n headers.forEach((header) => {\n if (!(header.isFilterable ?? filterable)) return;\n const set = new Set<string>();\n rows.forEach((r) => set.add(String(r[header.accessor] ?? \"\")));\n const arr = Array.from(set);\n arr.sort((a, b) =>\n a.localeCompare(b, undefined, { numeric: true, sensitivity: \"base\" }),\n );\n map[header.accessor] = arr;\n });\n return map;\n }, [rows, headers, filterable]);\n\n const filteredRows = useMemo(() => {\n const active = Object.entries(columnFilters).filter(\n ([, f]) => f.search.trim() !== \"\" || f.excluded.size > 0,\n );\n if (active.length === 0) return rows;\n return rows.filter((row) =>\n active.every(([accessor, filter]) => {\n const val = String(row[accessor] ?? \"\");\n if (\n filter.search.trim() !== \"\" &&\n !val.toLowerCase().includes(filter.search.trim().toLowerCase())\n ) {\n return false;\n }\n if (filter.excluded.size > 0 && filter.excluded.has(val)) return false;\n return true;\n }),\n );\n }, [rows, columnFilters]);\n\n const sortedRows = useMemo(() => {\n if (!sortConfig || !sortConfig.key) {\n return filteredRows;\n }\n const sortableRows = [...filteredRows];\n sortableRows.sort((a, b) => {\n const aVal = a[sortConfig.key];\n const bVal = b[sortConfig.key];\n\n if (aVal < bVal) {\n return sortConfig.direction === \"asc\" ? -1 : 1;\n }\n if (aVal > bVal) {\n return sortConfig.direction === \"asc\" ? 1 : -1;\n }\n return 0;\n });\n return sortableRows;\n }, [filteredRows, sortConfig]);\n\n const effectiveShouldPaginate =\n shouldPaginate && sortedRows.length > rowsPerPage;\n\n const totalPages = effectiveShouldPaginate\n ? Math.ceil(sortedRows.length / rowsPerPage)\n : 1;\n\n // Clamp page to valid range — avoids setState-during-render\n const safePage = totalPages > 0 ? Math.min(currentPage, totalPages) : 1;\n\n const paginatedRows = useMemo(() => {\n if (!effectiveShouldPaginate) return sortedRows;\n const startIndex = (safePage - 1) * rowsPerPage;\n return sortedRows.slice(startIndex, startIndex + rowsPerPage);\n }, [sortedRows, safePage, rowsPerPage, effectiveShouldPaginate]);\n\n const handleSort = (key: string, isSortable?: boolean) => {\n if (!isSortable) return;\n let direction: \"asc\" | \"desc\" = \"asc\";\n if (\n sortConfig &&\n sortConfig.key === key &&\n sortConfig.direction === \"asc\"\n ) {\n direction = \"desc\";\n }\n setSortConfig({ key, direction });\n setCurrentPage(1);\n };\n\n // ============= Filter handlers =============\n\n const setColumnSearch = (accessor: string, value: string) => {\n setColumnFilters((prev) => ({\n ...prev,\n [accessor]: {\n search: value,\n excluded: prev[accessor]?.excluded ?? new Set<string>(),\n },\n }));\n setCurrentPage(1);\n };\n\n const setColumnExcluded = (accessor: string, next: Set<string>) => {\n setColumnFilters((prev) => ({\n ...prev,\n [accessor]: {\n search: prev[accessor]?.search ?? \"\",\n excluded: next,\n },\n }));\n setCurrentPage(1);\n };\n\n const clearColumnFilter = (accessor: string) => {\n setColumnFilters((prev) => {\n if (!prev[accessor]) return prev;\n const next = { ...prev };\n delete next[accessor];\n return next;\n });\n setCurrentPage(1);\n };\n\n const setColumnSort = (accessor: string, direction: \"asc\" | \"desc\") => {\n setSortConfig({ key: accessor, direction });\n setCurrentPage(1);\n };\n\n // ============= Column width / resize =============\n\n /** Snapshot every column's current rendered width so the layout is fully\n * explicit before a resize gesture, keeping neighbours fixed. */\n const freezeCurrentWidths = (): Record<string, number> => {\n const next: Record<string, number> = { ...columnWidths };\n const cells = tableRef.current?.tHead?.rows?.[0]?.cells;\n headers.forEach((header, idx) => {\n if (next[header.accessor] == null) {\n const cell = cells?.[idx] as HTMLTableCellElement | undefined;\n if (cell) next[header.accessor] = cell.offsetWidth;\n }\n });\n return next;\n };\n\n const autoSizeColumn = (colIndex: number, header: TableHeader) => {\n if (!tableRef.current) return;\n const tableEl = tableRef.current;\n let maxWidth = measureTextWidth(header?.label || \"\");\n\n const collectCellWidth = (cell: HTMLTableCellElement | null) => {\n if (!cell) return;\n const scrollWidth = cell.scrollWidth || cell.offsetWidth || 0;\n const style = window.getComputedStyle(cell);\n const borderWidth =\n parseFloat(style.borderLeftWidth || \"0\") +\n parseFloat(style.borderRightWidth || \"0\");\n maxWidth = Math.max(maxWidth, Math.ceil(scrollWidth + borderWidth));\n };\n\n const headerCell =\n tableEl.tHead?.rows?.[0]?.cells?.[colIndex] ||\n tableEl.querySelector(`thead th:nth-child(${colIndex + 1})`);\n collectCellWidth(headerCell as HTMLTableCellElement);\n\n const bodyRows = tableEl.tBodies?.[0]?.rows || [];\n for (const row of bodyRows) {\n collectCellWidth(row.cells?.[colIndex] as HTMLTableCellElement);\n }\n\n rows.forEach((r) => {\n maxWidth = Math.max(\n maxWidth,\n Math.ceil(measureTextWidth(r[header.accessor])),\n );\n });\n\n const minWidthPx = parseNumericWidth(header?.minWidth) ?? minColWidth;\n const finalWidth = Math.max(maxWidth + 12, minWidthPx);\n const frozen = freezeCurrentWidths();\n setColumnsFrozen(true);\n setColumnWidths({ ...frozen, [header.accessor]: finalWidth });\n };\n\n const resetColumnWidth = (accessor: string) => {\n const regularWidth = initialColumnWidthsRef.current[accessor];\n setColumnWidths((prev) => {\n if (regularWidth === undefined) {\n const next = { ...prev };\n delete next[accessor];\n return next;\n }\n return { ...prev, [accessor]: regularWidth };\n });\n };\n\n const handleHeaderClick = (header: TableHeader, colIndex: number) => {\n if (suppressHeaderClickRef.current) {\n suppressHeaderClickRef.current = false;\n return;\n }\n\n if (mobileAutoSizeOnHeaderClick && isMobile) {\n const isExpanded = expandedColumns.has(header.accessor);\n if (isExpanded) {\n resetColumnWidth(header.accessor);\n setExpandedColumns((prev) => {\n const next = new Set(prev);\n next.delete(header.accessor);\n return next;\n });\n } else {\n autoSizeColumn(colIndex, header);\n setExpandedColumns((prev) => {\n const next = new Set(prev);\n next.add(header.accessor);\n return next;\n });\n }\n return;\n }\n handleSort(header.accessor, header.isSortable);\n };\n\n const getSortIcon = (key: string): React.ReactNode => {\n if (mobileAutoSizeOnHeaderClick && isMobile) return null;\n if (!sortConfig || sortConfig.key !== key) {\n return <SortIcon className=\"apt-sort-icon\" />;\n }\n return sortConfig.direction === \"asc\" ? (\n <SortUpIcon className=\"apt-sort-icon apt-sort-icon-active\" />\n ) : (\n <SortDownIcon className=\"apt-sort-icon apt-sort-icon-active\" />\n );\n };\n\n const handleMouseDown = (e: React.MouseEvent, accessor: string) => {\n e.preventDefault();\n suppressHeaderClickRef.current = true;\n const startX = e.clientX;\n const th = (e.target as HTMLElement).closest(\"th\");\n if (!th) return;\n\n const header = headers.find((h) => h.accessor === accessor);\n const minResizeWidth = parseNumericWidth(header?.minWidth) ?? minColWidth;\n\n // Freeze all columns to explicit widths so only the dragged one moves.\n const frozen = freezeCurrentWidths();\n const startWidth = frozen[accessor] ?? th.offsetWidth;\n setColumnsFrozen(true);\n setColumnWidths(frozen);\n\n document.body.style.cursor = \"col-resize\";\n document.body.style.userSelect = \"none\";\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n const deltaX = moveEvent.clientX - startX;\n const newWidth = startWidth + deltaX;\n const finalWidth = Math.max(newWidth, minResizeWidth);\n\n setColumnWidths((prev) => ({\n ...prev,\n [accessor]: finalWidth,\n }));\n };\n\n const handleMouseUp = () => {\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n\n // Clear the one-shot suppression after click dispatch for this gesture.\n window.setTimeout(() => {\n suppressHeaderClickRef.current = false;\n }, 0);\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n };\n\n const containerClassName = [\n \"apt-table-container\",\n striped && \"apt-striped\",\n dividers && \"apt-dividers\",\n bordered && \"apt-bordered\",\n density === \"compact\" && \"apt-compact\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n // Distinguish \"no data at all\" from \"data filtered out\": keep the header (and\n // its filter controls) visible in the latter case so the user can undo it.\n const noData = rows.length === 0;\n const noMatches = !noData && sortedRows.length === 0;\n\n const containerStyle: CSSProperties = {\n height: noData ? height : !effectiveShouldPaginate ? \"auto\" : height,\n maxHeight: !effectiveShouldPaginate ? height : undefined,\n };\n\n const spanCount = headers.length + (columnsFrozen ? 1 : 0);\n\n return (\n <div className={containerClassName} style={containerStyle}>\n {noData ? (\n <div className=\"apt-empty-state\">No rows to display.</div>\n ) : (\n <>\n <div className=\"apt-scroll-area\">\n <table className=\"apt-table\" ref={tableRef}>\n <colgroup>\n {headers.map((header) => (\n <col\n key={`col-${header.accessor}`}\n style={{\n width:\n columnWidths[header.accessor] != null\n ? `${columnWidths[header.accessor]}px`\n : undefined,\n minWidth: `${\n parseNumericWidth(header.minWidth) ?? minColWidth\n }px`,\n }}\n />\n ))}\n {columnsFrozen && <col className=\"apt-col-spacer\" />}\n </colgroup>\n <thead className=\"apt-thead\">\n <tr>\n {headers.map((header, idx) => {\n const columnFilterable =\n header.isFilterable ?? filterable;\n const isHeaderClickable =\n (mobileAutoSizeOnHeaderClick && isMobile) ||\n header.isSortable;\n return (\n <th\n key={header.accessor}\n onClick={() => handleHeaderClick(header, idx)}\n className={`apt-th ${\n isHeaderClickable ? \"apt-th-sortable\" : \"\"\n }`}\n >\n <div className=\"apt-th-content\">\n <span className=\"apt-th-label\">{header.label}</span>\n {header.isSortable &&\n !(mobileAutoSizeOnHeaderClick && isMobile) &&\n getSortIcon(header.accessor)}\n {columnFilterable && (\n <ColumnFilter\n columnKey={header.accessor}\n label={header.label}\n distinctValues={\n distinctValuesByColumn[header.accessor] || []\n }\n search={\n columnFilters[header.accessor]?.search ?? \"\"\n }\n excluded={\n columnFilters[header.accessor]?.excluded ??\n new Set<string>()\n }\n sortConfig={sortConfig}\n isSortable={header.isSortable}\n onSort={(dir) =>\n setColumnSort(header.accessor, dir)\n }\n onSearchChange={(value) =>\n setColumnSearch(header.accessor, value)\n }\n onExcludedChange={(next) =>\n setColumnExcluded(header.accessor, next)\n }\n onClear={() =>\n clearColumnFilter(header.accessor)\n }\n />\n )}\n </div>\n <div\n className=\"apt-resizer\"\n onMouseDown={(e) => {\n e.stopPropagation();\n handleMouseDown(e, header.accessor);\n }}\n onClick={(e) => e.stopPropagation()}\n />\n </th>\n );\n })}\n {columnsFrozen && (\n <th className=\"apt-th apt-th-spacer\" aria-hidden=\"true\" />\n )}\n </tr>\n </thead>\n <tbody className=\"apt-tbody\">\n {noMatches && (\n <tr className=\"apt-row\">\n <td colSpan={spanCount} className=\"apt-td apt-no-matches\">\n No rows match the current filters.\n </td>\n </tr>\n )}\n {paginatedRows.map((row, rowIdx) => {\n const isExpanded = expandedRowId === row.id;\n const isFullRow =\n typeof renderFullRow === \"function\" && row?._meta?.fullRow;\n const altClass = rowIdx % 2 === 1 ? \"apt-row-alt\" : \"\";\n return (\n <Fragment key={row.id}>\n {isFullRow ? (\n <tr\n className={`apt-row ${altClass} ${rowClassName ? rowClassName(row) : \"\"}`}\n onClick={() => onRowClick && onRowClick(row)}\n >\n <td\n colSpan={spanCount}\n className=\"apt-td\"\n style={{ padding: 0 }}\n >\n {renderFullRow(row)}\n </td>\n </tr>\n ) : (\n <tr\n className={`apt-row ${altClass} ${rowClassName ? rowClassName(row) : \"\"}`}\n onClick={() => onRowClick && onRowClick(row)}\n style={{ height: `${rowHeight}px` }}\n >\n {headers.map((header) => {\n const value = row[header.accessor];\n const cellContent = header.cellRenderer\n ? header.cellRenderer({ row, value })\n : value;\n return (\n <td\n key={`${row.id}-${header.accessor}`}\n className={\n header.accessor === \"actions\"\n ? \"apt-td-actions\"\n : \"apt-td\"\n }\n >\n {header.accessor === \"actions\" ? (\n <div onClick={(e) => e.stopPropagation()}>\n {cellContent}\n </div>\n ) : (\n cellContent\n )}\n </td>\n );\n })}\n {columnsFrozen && (\n <td className=\"apt-td apt-td-spacer\" aria-hidden=\"true\" />\n )}\n </tr>\n )}\n {isExpanded &&\n typeof renderExpandedRow === \"function\" && (\n <tr className=\"apt-row-expanded\">\n <td\n colSpan={spanCount}\n className=\"apt-td\"\n style={{ padding: 0 }}\n >\n {renderExpandedRow(row)}\n </td>\n </tr>\n )}\n </Fragment>\n );\n })}\n </tbody>\n </table>\n </div>\n {(shouldPaginate && totalPages > 1) ||\n (Array.isArray(rowsPerPageOptions) &&\n rowsPerPageOptions.length > 0 &&\n onRowsPerPageChange) ? (\n <div className=\"apt-footer\">\n <div className=\"apt-footer-left\">\n {Array.isArray(rowsPerPageOptions) &&\n rowsPerPageOptions.length > 0 &&\n onRowsPerPageChange && (\n <>\n <label className=\"apt-rows-label\">Rows</label>\n <select\n value={rowsPerPage}\n onChange={(e) =>\n onRowsPerPageChange(Number(e.target.value))\n }\n className=\"apt-rows-select\"\n >\n {rowsPerPageOptions.map((opt) => (\n <option key={opt} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </>\n )}\n </div>\n <div className=\"apt-footer-center\">\n {totalPages > 1 ? `Page ${safePage} of ${totalPages}` : \"\"}\n </div>\n <div className=\"apt-footer-right\">\n {totalPages > 1 ? (\n <>\n <button\n onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}\n disabled={safePage === 1}\n className=\"apt-btn\"\n >\n Previous\n </button>\n <button\n onClick={() =>\n setCurrentPage((p) => Math.min(totalPages, p + 1))\n }\n disabled={safePage === totalPages}\n className=\"apt-btn\"\n >\n Next\n </button>\n </>\n ) : null}\n </div>\n </div>\n ) : null}\n </>\n )}\n </div>\n );\n};\n\nexport default Table;\n","import { useState, useRef, useEffect } from \"react\";\r\n\r\n// ============= TypeScript Interfaces =============\r\n\r\nexport interface ColumnDefinition {\r\n key: string;\r\n label: string;\r\n}\r\n\r\nexport interface ColumnVisibilityToggleProps {\r\n availableColumns: ColumnDefinition[];\r\n visibleColumns: string[];\r\n onColumnsChange: (columns: string[]) => void;\r\n storageKey?: string;\r\n}\r\n\r\n// ============= SVG Icon (replaced react-icons) =============\r\n\r\nconst ViewColumnIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"18\"\r\n height=\"18\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M10 18h5V5h-5v13zm-6 0h5V5H4v13zM16 5v13h5V5h-5z\" />\r\n </svg>\r\n);\r\n\r\n// ============= Main Component =============\r\n\r\nconst ColumnVisibilityToggle: React.FC<ColumnVisibilityToggleProps> = ({\r\n availableColumns,\r\n visibleColumns,\r\n onColumnsChange,\r\n storageKey,\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n\r\n // Close menu when clicking outside\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n if (isOpen) {\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n }\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, [isOpen]);\r\n\r\n const saveToStorage = (columns: string[]) => {\r\n if (storageKey && typeof window !== \"undefined\") {\r\n try {\r\n window.localStorage.setItem(storageKey, JSON.stringify(columns));\r\n } catch (error) {\r\n console.warn(\r\n \"Failed to save column visibility to localStorage:\",\r\n error,\r\n );\r\n }\r\n }\r\n };\r\n\r\n const handleToggleColumn = (columnKey: string) => {\r\n const newVisibleColumns = visibleColumns.includes(columnKey)\r\n ? visibleColumns.filter((key) => key !== columnKey)\r\n : [...visibleColumns, columnKey];\r\n\r\n saveToStorage(newVisibleColumns);\r\n onColumnsChange(newVisibleColumns);\r\n };\r\n\r\n const handleSelectAll = () => {\r\n const allKeys = availableColumns.map((col) => col.key);\r\n saveToStorage(allKeys);\r\n onColumnsChange(allKeys);\r\n };\r\n\r\n return (\r\n <div className=\"apt-column-toggle-container\" ref={menuRef}>\r\n <button\r\n type=\"button\"\r\n onClick={() => setIsOpen(!isOpen)}\r\n className=\"apt-column-toggle-btn\"\r\n aria-label=\"Toggle column visibility\"\r\n aria-expanded={isOpen}\r\n >\r\n <ViewColumnIcon className=\"apt-column-toggle-icon\" />\r\n <span>Columns</span>\r\n <span className=\"apt-column-toggle-count\">\r\n ({visibleColumns.length})\r\n </span>\r\n </button>\r\n\r\n {isOpen && (\r\n <div className=\"apt-column-toggle-menu\">\r\n <div className=\"apt-column-toggle-menu-inner\">\r\n <div className=\"apt-column-toggle-header\">\r\n <h3 className=\"apt-column-toggle-title\">Toggle Columns</h3>\r\n <button\r\n type=\"button\"\r\n onClick={handleSelectAll}\r\n className=\"apt-column-toggle-select-all\"\r\n >\r\n Select All\r\n </button>\r\n </div>\r\n <div className=\"apt-column-toggle-list\">\r\n {availableColumns.map((column) => {\r\n const isVisible = visibleColumns.includes(column.key);\r\n return (\r\n <label key={column.key} className=\"apt-column-toggle-item\">\r\n <input\r\n type=\"checkbox\"\r\n checked={isVisible}\r\n onChange={() => handleToggleColumn(column.key)}\r\n className=\"apt-column-toggle-checkbox\"\r\n />\r\n <span className=\"apt-column-toggle-label\">\r\n {column.label}\r\n </span>\r\n </label>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ColumnVisibilityToggle;\r\n"]}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "all-purpose-table",
3
- "version": "1.0.10",
3
+ "version": "1.1.0",
4
4
  "description": "A production-grade, plug-and-play React Table component with TypeScript support",
5
- "main": "dist/index.cjs",
5
+ "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
7
7
  "types": "dist/index.d.ts",
8
8
  "exports": {
@@ -33,6 +33,7 @@
33
33
  "datatable",
34
34
  "pagination",
35
35
  "sorting",
36
+ "filtering",
36
37
  "column visibility",
37
38
  "typescript",
38
39
  "plug-and-play"