@fileflow/sdk 0.1.30 → 0.1.32
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/dist/ImportWizard-4E5fcskQ.js +64 -0
- package/dist/ImportWizard-4E5fcskQ.js.map +1 -0
- package/dist/{ImportWizard-wwdBs7gE.mjs → ImportWizard-DoopWzxk.mjs} +1144 -1214
- package/dist/ImportWizard-DoopWzxk.mjs.map +1 -0
- package/dist/{KYCWizard-D9W8V70o.mjs → KYCWizard-BbVeACaA.mjs} +2 -2
- package/dist/{KYCWizard-D9W8V70o.mjs.map → KYCWizard-BbVeACaA.mjs.map} +1 -1
- package/dist/{KYCWizard-DecrJ0MW.js → KYCWizard-CMQUzKSL.js} +2 -2
- package/dist/{KYCWizard-DecrJ0MW.js.map → KYCWizard-CMQUzKSL.js.map} +1 -1
- package/dist/import.d.ts +9 -24
- package/dist/import.js +1 -1
- package/dist/import.mjs +1 -1
- package/dist/{index-Dn3cI9sZ.mjs → index-B_sBDXNZ.mjs} +212 -212
- package/dist/{index-Dn3cI9sZ.mjs.map → index-B_sBDXNZ.mjs.map} +1 -1
- package/dist/{index-RFYSKfrk.js → index-CQzYw3WX.js} +13 -13
- package/dist/{index-RFYSKfrk.js.map → index-CQzYw3WX.js.map} +1 -1
- package/dist/index.d.ts +9 -24
- package/dist/index.js +1 -1
- package/dist/index.mjs +3 -3
- package/dist/kyc.js +1 -1
- package/dist/kyc.mjs +1 -1
- package/dist/styles.css +62 -6
- package/package.json +1 -1
- package/dist/ImportWizard-G3oGN0nc.js +0 -79
- package/dist/ImportWizard-G3oGN0nc.js.map +0 -1
- package/dist/ImportWizard-wwdBs7gE.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImportWizard-DoopWzxk.mjs","sources":["../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/arrow-right.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/check.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-left.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/file-spreadsheet.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/file.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/pen.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/trash-2.js","../src/store/import-store.ts","../src/import/components/FileUploader.tsx","../src/import/components/ColumnMapper.tsx","../../../node_modules/.pnpm/@tanstack+table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.mjs","../../../node_modules/.pnpm/@tanstack+react-table@8.21.3_react-dom@18.3.1_react@18.3.1/node_modules/@tanstack/react-table/build/lib/index.mjs","../src/import/components/DataTable.tsx","../src/import/components/ValidationSummary.tsx","../src/import/components/ImportWizard.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]];\nconst ChevronLeft = createLucideIcon(\"chevron-left\", __iconNode);\n\nexport { __iconNode, ChevronLeft as default };\n//# sourceMappingURL=chevron-left.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst CircleQuestionMark = createLucideIcon(\"circle-question-mark\", __iconNode);\n\nexport { __iconNode, CircleQuestionMark as default };\n//# sourceMappingURL=circle-question-mark.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"M8 13h2\", key: \"yr2amv\" }],\n [\"path\", { d: \"M14 13h2\", key: \"un5t4a\" }],\n [\"path\", { d: \"M8 17h2\", key: \"2yhykz\" }],\n [\"path\", { d: \"M14 17h2\", key: \"10kma7\" }]\n];\nconst FileSpreadsheet = createLucideIcon(\"file-spreadsheet\", __iconNode);\n\nexport { __iconNode, FileSpreadsheet as default };\n//# sourceMappingURL=file-spreadsheet.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }]\n];\nconst File = createLucideIcon(\"file\", __iconNode);\n\nexport { __iconNode, File as default };\n//# sourceMappingURL=file.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\",\n key: \"1a8usu\"\n }\n ]\n];\nconst Pen = createLucideIcon(\"pen\", __iconNode);\n\nexport { __iconNode, Pen as default };\n//# sourceMappingURL=pen.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash2 = createLucideIcon(\"trash-2\", __iconNode);\n\nexport { __iconNode, Trash2 as default };\n//# sourceMappingURL=trash-2.js.map\n","import { create } from 'zustand';\nimport type { \n ImportSchema, \n ParsedRow, \n ColumnMapping, \n ValidationResults,\n ValidationError,\n ValidationSummary,\n ColumnValidationSummary,\n DuplicateInfo,\n SchemaColumn,\n ValidatorType,\n} from '@fileflow/shared';\n\nexport type ImportStep = 'upload' | 'mapping' | 'validation' | 'review' | 'complete';\n\nexport interface ImportState {\n // Session\n sessionId: string | null;\n status: string;\n step: ImportStep;\n \n // Schema\n schema: ImportSchema | null;\n \n // File\n file: File | null;\n fileName: string | null;\n fileSize: number | null;\n \n // Parsed data\n headers: string[];\n rows: ParsedRow[];\n totalRows: number;\n sampleRows: ParsedRow[];\n \n // Mappings\n mappings: ColumnMapping[];\n unmappedSource: string[];\n unmappedTarget: string[];\n \n // Validation\n validationResults: ValidationResults | null;\n errorsByRow: Map<number, ValidationError[]>;\n \n // UI state\n isLoading: boolean;\n error: string | null;\n \n // Editing\n editingCell: { rowIndex: number; columnKey: string } | null;\n editedRows: Set<number>;\n}\n\nexport interface ImportActions {\n // Initialize\n setSchema: (schema: ImportSchema) => void;\n setSessionId: (sessionId: string) => void;\n \n // File upload\n setFile: (file: File) => void;\n setParsedData: (data: {\n headers: string[];\n rows: ParsedRow[];\n totalRows: number;\n sampleRows: ParsedRow[];\n }) => void;\n \n // Mapping\n setMappings: (mappings: ColumnMapping[]) => void;\n updateMapping: (sourceColumn: string, targetKey: string | null) => void;\n setUnmapped: (source: string[], target: string[]) => void;\n \n // Validation\n setValidationResults: (results: ValidationResults) => void;\n revalidate: () => void;\n \n // Navigation\n setStep: (step: ImportStep) => void;\n nextStep: () => void;\n previousStep: () => void;\n \n // Editing\n startEditing: (rowIndex: number, columnKey: string) => void;\n stopEditing: () => void;\n updateCell: (rowIndex: number, columnKey: string, value: unknown) => void;\n deleteRow: (rowIndex: number) => void;\n \n // Status\n setStatus: (status: string) => void;\n setLoading: (loading: boolean) => void;\n setError: (error: string | null) => void;\n \n // Reset\n reset: () => void;\n}\n\nconst initialState: ImportState = {\n sessionId: null,\n status: 'idle',\n step: 'upload',\n schema: null,\n file: null,\n fileName: null,\n fileSize: null,\n headers: [],\n rows: [],\n totalRows: 0,\n sampleRows: [],\n mappings: [],\n unmappedSource: [],\n unmappedTarget: [],\n validationResults: null,\n errorsByRow: new Map(),\n isLoading: false,\n error: null,\n editingCell: null,\n editedRows: new Set(),\n};\n\n// ============================================================================\n// Client-side validation helpers\n// ============================================================================\n\nexport function validateCellValue(\n value: string,\n column: SchemaColumn\n): ValidationError[] {\n const errors: ValidationError[] = [];\n const trimmed = value?.trim() || '';\n\n // Required check\n if (column.required && !trimmed) {\n errors.push({\n rowIndex: 0, // will be set by caller\n columnKey: column.key,\n value: trimmed,\n severity: 'error',\n validatorType: 'required' as ValidatorType,\n message: `${column.label} is required`,\n });\n return errors;\n }\n\n if (!trimmed) return errors;\n\n // Type-based validation\n switch (column.type) {\n case 'email': {\n // Stricter email validation:\n // - local part: at least 1 char, no spaces or @\n // - domain: at least 2 chars, alphanumeric/hyphens, dots allowed for subdomains\n // - TLD: at least 2 chars, letters only\n const emailRegex = /^[^\\s@]+@[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*\\.[a-zA-Z]{2,}$/;\n if (!emailRegex.test(trimmed)) {\n errors.push({\n rowIndex: 0,\n columnKey: column.key,\n value: trimmed,\n severity: 'error',\n validatorType: 'type' as ValidatorType,\n message: 'Invalid email format',\n });\n } else {\n // Check for common domain typos (warning)\n const domain = trimmed.split('@')[1]?.toLowerCase();\n const COMMON_TYPOS: Record<string, string> = {\n 'gmial.com': 'gmail.com', 'gmal.com': 'gmail.com', 'gmai.com': 'gmail.com',\n 'gamil.com': 'gmail.com', 'gnail.com': 'gmail.com', 'gmail.co': 'gmail.com',\n 'gmail.cm': 'gmail.com', 'gmil.com': 'gmail.com', 'gmaill.com': 'gmail.com',\n 'yaho.com': 'yahoo.com', 'yahooo.com': 'yahoo.com', 'yahoo.co': 'yahoo.com',\n 'hotmal.com': 'hotmail.com', 'hotmial.com': 'hotmail.com', 'hotmai.com': 'hotmail.com',\n 'hotmail.co': 'hotmail.com', 'outlok.com': 'outlook.com', 'outloo.com': 'outlook.com',\n 'outlook.co': 'outlook.com',\n };\n if (domain && COMMON_TYPOS[domain]) {\n errors.push({\n rowIndex: 0,\n columnKey: column.key,\n value: trimmed,\n severity: 'warning',\n validatorType: 'type' as ValidatorType,\n message: `Possible typo: did you mean @${COMMON_TYPOS[domain]}?`,\n suggestion: `${trimmed.split('@')[0]}@${COMMON_TYPOS[domain]}`,\n });\n }\n }\n break;\n }\n case 'url':\n if (!/^https?:\\/\\/.+/.test(trimmed)) {\n errors.push({\n rowIndex: 0,\n columnKey: column.key,\n value: trimmed,\n severity: 'error',\n validatorType: 'type' as ValidatorType,\n message: 'Invalid URL format',\n });\n }\n break;\n case 'integer':\n if (!/^-?\\d+$/.test(trimmed)) {\n errors.push({\n rowIndex: 0,\n columnKey: column.key,\n value: trimmed,\n severity: 'error',\n validatorType: 'type' as ValidatorType,\n message: 'Must be a whole number',\n });\n }\n break;\n case 'number':\n case 'float':\n if (!/^-?\\d+(\\.\\d+)?$/.test(trimmed)) {\n errors.push({\n rowIndex: 0,\n columnKey: column.key,\n value: trimmed,\n severity: 'error',\n validatorType: 'type' as ValidatorType,\n message: 'Must be a valid number',\n });\n }\n break;\n case 'phone':\n if (trimmed.replace(/\\D/g, '').length < 10) {\n errors.push({\n rowIndex: 0,\n columnKey: column.key,\n value: trimmed,\n severity: 'warning',\n validatorType: 'type' as ValidatorType,\n message: 'Invalid phone number',\n });\n }\n break;\n }\n\n // Custom validators\n if (column.validators) {\n for (const validator of column.validators) {\n const severity = (validator.severity === 'info' ? 'warning' : validator.severity || 'error') as 'error' | 'warning';\n const params = validator.params || {};\n\n switch (validator.type) {\n case 'minLength': {\n const minLen = (params.value as number) ?? 0;\n if (trimmed.length < minLen) {\n errors.push({\n rowIndex: 0,\n columnKey: column.key,\n value: trimmed,\n severity,\n validatorType: validator.type as ValidatorType,\n message: validator.message || `Must be at least ${minLen} characters`,\n });\n }\n break;\n }\n case 'maxLength': {\n const maxLen = (params.value as number) ?? Infinity;\n if (trimmed.length > maxLen) {\n errors.push({\n rowIndex: 0,\n columnKey: column.key,\n value: trimmed,\n severity,\n validatorType: validator.type as ValidatorType,\n message: validator.message || `Must be at most ${maxLen} characters`,\n });\n }\n break;\n }\n case 'min': {\n const numVal = parseFloat(trimmed);\n const minVal = (params.value as number) ?? -Infinity;\n if (!isNaN(numVal) && numVal < minVal) {\n errors.push({\n rowIndex: 0,\n columnKey: column.key,\n value: trimmed,\n severity,\n validatorType: validator.type as ValidatorType,\n message: validator.message || `Must be at least ${minVal}`,\n });\n }\n break;\n }\n case 'max': {\n const numVal2 = parseFloat(trimmed);\n const maxVal = (params.value as number) ?? Infinity;\n if (!isNaN(numVal2) && numVal2 > maxVal) {\n errors.push({\n rowIndex: 0,\n columnKey: column.key,\n value: trimmed,\n severity,\n validatorType: validator.type as ValidatorType,\n message: validator.message || `Must be at most ${maxVal}`,\n });\n }\n break;\n }\n case 'pattern': {\n const patternStr = (params.regex as string) ?? (params.pattern as string) ?? '.*';\n if (!new RegExp(patternStr).test(trimmed)) {\n errors.push({\n rowIndex: 0,\n columnKey: column.key,\n value: trimmed,\n severity,\n validatorType: validator.type as ValidatorType,\n message: validator.message || 'Format is invalid',\n });\n }\n break;\n }\n case 'enum': {\n const allowed = (params.values as readonly string[]) || [];\n const normalizedAllowed = allowed.map(v => v.toLowerCase());\n if (!normalizedAllowed.includes(trimmed.toLowerCase())) {\n errors.push({\n rowIndex: 0,\n columnKey: column.key,\n value: trimmed,\n severity,\n validatorType: validator.type as ValidatorType,\n message: validator.message || `Must be one of: ${allowed.slice(0, 5).join(', ')}${allowed.length > 5 ? '...' : ''}`,\n });\n }\n break;\n }\n case 'custom': {\n const validatorName = params.validatorName as string;\n if (validatorName === 'commaSeparatedEnum') {\n const allowedVals = (params.allowedValues as readonly string[]) || [];\n const vals = trimmed.split(',').map(v => v.trim().toLowerCase()).filter(v => v);\n const normAllowed = allowedVals.map(v => v.toLowerCase());\n const invalid = vals.filter(v => !normAllowed.includes(v));\n if (invalid.length > 0) {\n errors.push({\n rowIndex: 0,\n columnKey: column.key,\n value: trimmed,\n severity,\n validatorType: validator.type as ValidatorType,\n message: validator.message || `Invalid values: ${invalid.join(', ')}. Must be comma-separated values from: ${allowedVals.slice(0, 5).join(', ')}${allowedVals.length > 5 ? '...' : ''}`,\n });\n }\n }\n if (validatorName === 'commaSeparatedEmails') {\n const emails = trimmed.split(',').map(e => e.trim()).filter(e => e);\n const invalidEmails = emails.filter(e => !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(e));\n if (invalidEmails.length > 0) {\n errors.push({\n rowIndex: 0,\n columnKey: column.key,\n value: trimmed,\n severity,\n validatorType: validator.type as ValidatorType,\n message: `Invalid email(s): ${invalidEmails.join(', ')}`,\n });\n }\n }\n break;\n }\n }\n }\n }\n\n return errors;\n}\n\n/**\n * Run full validation on current data. Called after edits and deletes.\n */\nfunction runClientValidation(\n rows: ParsedRow[],\n schema: ImportSchema,\n mappings: ColumnMapping[]\n): { validationResults: ValidationResults; errorsByRow: Map<number, ValidationError[]> } {\n const allErrors: ValidationError[] = [];\n\n // Validate each row against schema\n for (const row of rows) {\n for (const mapping of mappings) {\n if (!mapping.targetKey) continue;\n const col = schema.columns.find(c => c.key === mapping.targetKey);\n if (!col) continue;\n\n const value = row.data[mapping.targetKey] || row.data[mapping.sourceColumn] || '';\n const cellErrors = validateCellValue(String(value), col);\n\n for (const err of cellErrors) {\n allErrors.push({ ...err, rowIndex: row.rowIndex });\n }\n }\n }\n\n // Check for duplicates on unique keys\n const uniqueKeys = schema.options?.uniqueKeys || [];\n for (const uniqueKey of uniqueKeys) {\n const mapping = mappings.find(m => m.targetKey === uniqueKey);\n if (!mapping) continue;\n\n const seen = new Map<string, number[]>();\n for (const row of rows) {\n const val = String(row.data[uniqueKey] || row.data[mapping.sourceColumn] || '').toLowerCase().trim();\n if (!val) continue;\n const existing = seen.get(val) || [];\n existing.push(row.rowIndex);\n seen.set(val, existing);\n }\n\n for (const [val, indices] of seen.entries()) {\n if (indices.length > 1) {\n for (const idx of indices.slice(1)) {\n allErrors.push({\n rowIndex: idx,\n columnKey: uniqueKey,\n value: val,\n severity: 'warning',\n validatorType: 'unique' as ValidatorType,\n message: `Duplicate ${uniqueKey} value`,\n });\n }\n }\n }\n }\n\n // Build errorsByRow index\n const errorsByRow = new Map<number, ValidationError[]>();\n for (const err of allErrors) {\n const existing = errorsByRow.get(err.rowIndex) || [];\n existing.push(err);\n errorsByRow.set(err.rowIndex, existing);\n }\n\n // Count metrics\n const errorCount = allErrors.filter(e => e.severity === 'error').length;\n const warningCount = allErrors.filter(e => e.severity === 'warning').length;\n const infoCount = allErrors.filter(e => e.severity === 'info').length;\n\n // Count rows with at least one error (not warning)\n const rowsWithErrors = new Set(allErrors.filter(e => e.severity === 'error').map(e => e.rowIndex));\n const totalRows = rows.length;\n const validRows = totalRows - rowsWithErrors.size;\n\n // Build byColumn summary\n const byColumn: Record<string, ColumnValidationSummary> = {};\n for (const err of allErrors) {\n if (!byColumn[err.columnKey]) {\n byColumn[err.columnKey] = {\n columnKey: err.columnKey,\n errorCount: 0,\n warningCount: 0,\n infoCount: 0,\n mostCommonError: undefined,\n };\n }\n const col = byColumn[err.columnKey];\n if (err.severity === 'error') col.errorCount++;\n else if (err.severity === 'warning') col.warningCount++;\n else col.infoCount++;\n if (!col.mostCommonError) col.mostCommonError = err.message;\n }\n\n // Build byType summary\n const byType: Record<string, number> = {};\n for (const err of allErrors) {\n byType[err.validatorType] = (byType[err.validatorType] || 0) + 1;\n }\n\n // Build duplicates info\n const duplicates: DuplicateInfo[] = [];\n for (const uniqueKey of uniqueKeys) {\n const mapping = mappings.find(m => m.targetKey === uniqueKey);\n if (!mapping) continue;\n\n const seen = new Map<string, number[]>();\n for (const row of rows) {\n const val = String(row.data[uniqueKey] || row.data[mapping.sourceColumn] || '').toLowerCase().trim();\n if (!val) continue;\n const existing = seen.get(val) || [];\n existing.push(row.rowIndex);\n seen.set(val, existing);\n }\n\n for (const [val, indices] of seen.entries()) {\n if (indices.length > 1) {\n duplicates.push({ columnKey: uniqueKey, value: val, rowIndices: indices });\n }\n }\n }\n\n const summary: ValidationSummary = {\n byColumn,\n byType: byType as Record<ValidatorType, number>,\n duplicates: duplicates.length > 0 ? duplicates : undefined,\n };\n\n return {\n validationResults: {\n isValid: errorCount === 0,\n totalRows,\n validRows,\n errorCount,\n warningCount,\n infoCount,\n errors: allErrors,\n summary,\n },\n errorsByRow,\n };\n}\n\n// ============================================================================\n// Store\n// ============================================================================\n\nexport const useImportStore = create<ImportState & ImportActions>((set, get) => ({\n ...initialState,\n\n setSchema: (schema) => set({ schema }),\n \n setSessionId: (sessionId) => set({ sessionId }),\n\n setFile: (file) => set({ \n file, \n fileName: file.name, \n fileSize: file.size,\n error: null,\n }),\n\n setParsedData: (data) => set({ \n headers: data.headers,\n rows: data.rows,\n totalRows: data.totalRows,\n sampleRows: data.sampleRows,\n }),\n\n setMappings: (mappings) => set({ mappings }),\n\n updateMapping: (sourceColumn, targetKey) => set((state) => {\n const mappings = state.mappings.map((m) =>\n m.sourceColumn === sourceColumn\n ? { ...m, targetKey, isAutoMapped: false }\n : m\n );\n return { mappings };\n }),\n\n setUnmapped: (source, target) => set({\n unmappedSource: source,\n unmappedTarget: target,\n }),\n\n setValidationResults: (results) => {\n if (!results) {\n // Allow clearing validation state\n set({ validationResults: null, errorsByRow: new Map() });\n return;\n }\n // Index errors by row for quick lookup\n const errorsByRow = new Map<number, ValidationError[]>();\n for (const error of results.errors) {\n const existing = errorsByRow.get(error.rowIndex) || [];\n existing.push(error);\n errorsByRow.set(error.rowIndex, existing);\n }\n set({ validationResults: results, errorsByRow });\n },\n\n revalidate: () => {\n const state = get();\n if (!state.schema || !state.validationResults) return;\n \n const { validationResults, errorsByRow } = runClientValidation(\n state.rows,\n state.schema,\n state.mappings\n );\n set({ validationResults, errorsByRow });\n },\n\n setStep: (step) => set({ step }),\n\n nextStep: () => {\n const steps: ImportStep[] = ['upload', 'mapping', 'validation', 'review', 'complete'];\n const currentIndex = steps.indexOf(get().step);\n if (currentIndex < steps.length - 1) {\n set({ step: steps[currentIndex + 1] });\n }\n },\n\n previousStep: () => {\n const steps: ImportStep[] = ['upload', 'mapping', 'validation', 'review', 'complete'];\n const currentIndex = steps.indexOf(get().step);\n if (currentIndex > 0) {\n set({ step: steps[currentIndex - 1] });\n }\n },\n\n startEditing: (rowIndex, columnKey) => set({\n editingCell: { rowIndex, columnKey },\n }),\n\n stopEditing: () => set({ editingCell: null }),\n\n updateCell: (rowIndex, columnKey, value) => {\n const state = get();\n const rows = [...state.rows];\n const row = rows.find((r) => r.rowIndex === rowIndex);\n if (row) {\n row.data = { ...row.data, [columnKey]: String(value) };\n }\n const editedRows = new Set(state.editedRows);\n editedRows.add(rowIndex);\n set({ rows, editedRows, editingCell: null });\n\n // Trigger revalidation after edit\n if (state.schema && state.validationResults) {\n const { validationResults, errorsByRow } = runClientValidation(\n rows,\n state.schema,\n state.mappings\n );\n set({ validationResults, errorsByRow });\n }\n },\n\n deleteRow: (rowIndex) => {\n const state = get();\n const rows = state.rows.filter((r) => r.rowIndex !== rowIndex);\n // Re-index remaining rows\n const reindexedRows = rows.map((r, idx) => ({ ...r, rowIndex: idx }));\n\n set({ \n rows: reindexedRows, \n totalRows: reindexedRows.length,\n });\n\n // Trigger revalidation after delete\n if (state.schema && state.validationResults) {\n const { validationResults, errorsByRow } = runClientValidation(\n reindexedRows,\n state.schema,\n state.mappings\n );\n set({ validationResults, errorsByRow });\n }\n },\n\n setStatus: (status) => set({ status }),\n \n setLoading: (isLoading) => set({ isLoading }),\n \n setError: (error) => set({ error }),\n\n reset: () => set(initialState),\n}));\n","import React, { useCallback } from 'react';\nimport { useDropzone } from 'react-dropzone';\nimport { Upload, File, X, AlertCircle } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useImportStore } from '../../store/import-store';\n\ninterface FileUploaderProps {\n onFileSelect?: (file: File) => void;\n maxSize?: number;\n acceptedTypes?: string[];\n}\n\nexport const FileUploader: React.FC<FileUploaderProps> = ({\n onFileSelect,\n maxSize = 50 * 1024 * 1024, // 50MB\n acceptedTypes = ['.csv', '.xlsx', '.xls'],\n}) => {\n const { file, fileName, fileSize, setFile, error, setError, isLoading } = useImportStore();\n\n const onDrop = useCallback(\n (acceptedFiles: File[], rejectedFiles: unknown[]) => {\n if (rejectedFiles.length > 0) {\n setError('Invalid file type or file too large');\n return;\n }\n\n if (acceptedFiles.length > 0) {\n const selectedFile = acceptedFiles[0];\n setFile(selectedFile);\n onFileSelect?.(selectedFile);\n }\n },\n [onFileSelect, setFile, setError]\n );\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop,\n accept: {\n 'text/csv': ['.csv'],\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': ['.xlsx'],\n 'application/vnd.ms-excel': ['.xls'],\n },\n maxSize,\n multiple: false,\n disabled: isLoading,\n });\n\n const formatFileSize = (bytes: number): string => {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n };\n\n const clearFile = (e: React.MouseEvent) => {\n e.stopPropagation();\n useImportStore.getState().reset();\n };\n\n if (file) {\n return (\n <div className=\"ff-p-4 ff-rounded-xl ff-border\" style={{ backgroundColor: 'var(--ff-success-light)', borderColor: 'var(--ff-success)' }}>\n <div className=\"ff-flex ff-items-center ff-gap-3\">\n <div className=\"ff-p-2 ff-rounded-lg\" style={{ backgroundColor: 'rgba(41, 142, 51, 0.15)' }}>\n <File className=\"ff-w-6 ff-h-6\" style={{ color: 'var(--ff-success)' }} />\n </div>\n <div className=\"ff-flex-1 ff-min-w-0\">\n <p className=\"ff-font-medium ff-truncate\" style={{ color: 'var(--ff-success-dark)' }}>{fileName}</p>\n <p className=\"ff-text-sm\" style={{ color: 'var(--ff-success)' }}>{formatFileSize(fileSize || 0)}</p>\n </div>\n <button\n onClick={clearFile}\n className=\"ff-p-1.5 ff-rounded-full ff-transition-colors\"\n style={{ color: 'var(--ff-success)' }}\n aria-label=\"Remove file\"\n >\n <X className=\"ff-w-5 ff-h-5\" />\n </button>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"ff-space-y-6\">\n {/* Upload Dropzone - Demo style */}\n <div\n {...getRootProps()}\n className={clsx(\n 'ff-dropzone',\n isDragActive && 'ff-dropzone-active',\n isLoading && 'ff-opacity-50 ff-cursor-not-allowed'\n )}\n >\n <input {...getInputProps()} />\n <div className=\"ff-dropzone-icon-wrapper\">\n <Upload className=\"ff-dropzone-icon\" />\n </div>\n <h3 className=\"ff-dropzone-text\">\n {isDragActive ? 'Drop your file here' : 'Upload your file'}\n </h3>\n <p className=\"ff-dropzone-hint\">Drag and drop or click to select</p>\n <label className=\"ff-inline-block\">\n <span className={clsx(\n 'ff-btn ff-btn-primary',\n isLoading && 'ff-opacity-50 ff-cursor-wait'\n )}>\n {isLoading ? 'Processing...' : 'Choose file'}\n </span>\n </label>\n <p className=\"ff-dropzone-formats\">\n Supports {acceptedTypes.join(', ')} up to {formatFileSize(maxSize)}\n </p>\n </div>\n\n {error && (\n <div className=\"ff-flex ff-items-center ff-gap-2 ff-p-4 ff-rounded-lg ff-text-sm\" style={{ backgroundColor: 'var(--ff-error-light)', color: 'var(--ff-error)' }}>\n <AlertCircle className=\"ff-w-4 ff-h-4 ff-flex-shrink-0\" />\n <p>{error}</p>\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { ArrowRight, Check, AlertCircle, HelpCircle } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useImportStore } from '../../store/import-store';\nimport type { SchemaColumn } from '@fileflow/shared';\n\ninterface ColumnMapperProps {\n onMappingChange?: (sourceColumn: string, targetKey: string | null) => void;\n}\n\nexport const ColumnMapper: React.FC<ColumnMapperProps> = ({ onMappingChange }) => {\n const { mappings, schema, unmappedSource, updateMapping } = useImportStore();\n\n const targetColumns = schema?.columns || [];\n\n const handleMappingChange = (sourceColumn: string, targetKey: string) => {\n const value = targetKey === '' ? null : targetKey;\n updateMapping(sourceColumn, value);\n onMappingChange?.(sourceColumn, value);\n };\n\n const getConfidenceColor = (confidence: number): string => {\n if (confidence >= 0.85) return 'var(--ff-success)';\n if (confidence >= 0.6) return 'var(--ff-warning)';\n return 'var(--ff-error)';\n };\n\n const getConfidenceLabel = (confidence: number): string => {\n if (confidence >= 0.85) return 'High';\n if (confidence >= 0.6) return 'Medium';\n return 'Low';\n };\n\n const getMappedTargetKeys = (): Set<string> => {\n return new Set(\n mappings\n .filter((m) => m.targetKey !== null)\n .map((m) => m.targetKey as string)\n );\n };\n\n const mappedKeys = getMappedTargetKeys();\n\n return (\n <div className=\"ff-space-y-4\">\n {/* Header - Demo style */}\n <div className=\"ff-mapping-header\">\n <div>\n <h3 className=\"ff-mapping-title\">Column Mapping</h3>\n <p className=\"ff-mapping-subtitle\">\n Match your file columns to the expected fields\n </p>\n </div>\n <div className=\"ff-mapping-legend\">\n <span className=\"ff-mapping-legend-item\">\n <span className=\"ff-mapping-legend-dot\" style={{ backgroundColor: 'var(--ff-success)' }} />\n <span style={{ color: 'var(--ff-text-secondary)' }}>Mapped</span>\n </span>\n <span className=\"ff-mapping-legend-item\">\n <span className=\"ff-mapping-legend-dot\" style={{ backgroundColor: 'var(--ff-warning)' }} />\n <span style={{ color: 'var(--ff-text-secondary)' }}>Review</span>\n </span>\n <span className=\"ff-mapping-legend-item\">\n <span className=\"ff-mapping-legend-dot\" style={{ backgroundColor: 'var(--ff-gray-70)' }} />\n <span style={{ color: 'var(--ff-text-secondary)' }}>Unmapped</span>\n </span>\n </div>\n </div>\n\n {/* Mapping Rows */}\n <div className=\"ff-space-y-2\">\n {mappings.map((mapping) => {\n const targetColumn = targetColumns.find((c) => c.key === mapping.targetKey);\n const isMapped = mapping.targetKey !== null;\n const isHighConfidence = mapping.confidence >= 0.85;\n\n return (\n <div\n key={mapping.sourceColumn}\n className={clsx(\n 'ff-mapping-row',\n isMapped && isHighConfidence && 'ff-mapping-row-success',\n isMapped && !isHighConfidence && 'ff-mapping-row-warning'\n )}\n >\n {/* Source Column */}\n <div className=\"ff-flex-1\">\n <div className=\"ff-mapping-source\">\n {mapping.sourceColumn}\n </div>\n </div>\n\n {/* Arrow */}\n <div className=\"ff-mapping-arrow\">\n <ArrowRight className=\"ff-w-5 ff-h-5\" />\n </div>\n\n {/* Target Column Selector */}\n <div className=\"ff-flex-1 ff-mapping-target\">\n <select\n value={mapping.targetKey || ''}\n onChange={(e) => handleMappingChange(mapping.sourceColumn, e.target.value)}\n className=\"ff-input\"\n >\n <option value=\"\">-- Do not import --</option>\n {targetColumns.map((col) => (\n <option\n key={col.key}\n value={col.key}\n disabled={mappedKeys.has(col.key) && mapping.targetKey !== col.key}\n >\n {col.label} ({col.type}){col.required ? ' *' : ''}\n </option>\n ))}\n </select>\n </div>\n\n {/* Status Icon */}\n <div className=\"ff-mapping-status\">\n {isMapped ? (\n isHighConfidence ? (\n <Check className=\"ff-w-5 ff-h-5\" style={{ color: 'var(--ff-success)' }} />\n ) : (\n <HelpCircle className=\"ff-w-5 ff-h-5\" style={{ color: 'var(--ff-warning)' }} />\n )\n ) : (\n <span className=\"ff-w-5 ff-h-5\" />\n )}\n </div>\n\n {/* Confidence */}\n {mapping.confidence > 0 && (\n <div className=\"ff-confidence\" style={{ color: getConfidenceColor(mapping.confidence) }}>\n <span>{Math.round(mapping.confidence * 100)}%</span>\n <span style={{ color: 'var(--ff-text-muted)' }}>\n ({getConfidenceLabel(mapping.confidence)})\n </span>\n </div>\n )}\n </div>\n );\n })}\n </div>\n\n {/* Unmapped Required Fields Warning */}\n {(() => {\n const requiredUnmapped = targetColumns.filter(\n (col) => col.required && !mappedKeys.has(col.key)\n );\n if (requiredUnmapped.length > 0) {\n return (\n <div className=\"ff-flex ff-items-start ff-gap-2 ff-p-4 ff-rounded-lg\" style={{ backgroundColor: 'var(--ff-warning-light)', borderColor: 'var(--ff-warning)' }}>\n <AlertCircle className=\"ff-w-5 ff-h-5 ff-flex-shrink-0 ff-mt-0.5\" style={{ color: 'var(--ff-warning)' }} />\n <div>\n <p className=\"ff-text-sm ff-font-medium\" style={{ color: 'var(--ff-warning-dark)' }}>\n Required fields not mapped\n </p>\n <p className=\"ff-text-sm ff-mt-1\" style={{ color: 'var(--ff-warning)' }}>\n {requiredUnmapped.map((c) => c.label).join(', ')}\n </p>\n </div>\n </div>\n );\n }\n return null;\n })()}\n </div>\n );\n};\n","/**\n * table-core\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\n// type Person = {\n// firstName: string\n// lastName: string\n// age: number\n// visits: number\n// status: string\n// progress: number\n// createdAt: Date\n// nested: {\n// foo: [\n// {\n// bar: 'bar'\n// }\n// ]\n// bar: { subBar: boolean }[]\n// baz: {\n// foo: 'foo'\n// bar: {\n// baz: 'baz'\n// }\n// }\n// }\n// }\n\n// const test: DeepKeys<Person> = 'nested.foo.0.bar'\n// const test2: DeepKeys<Person> = 'nested.bar'\n\n// const helper = createColumnHelper<Person>()\n\n// helper.accessor('nested.foo', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.foo.0.bar', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.bar', {\n// cell: info => info.getValue(),\n// })\n\nfunction createColumnHelper() {\n return {\n accessor: (accessor, column) => {\n return typeof accessor === 'function' ? {\n ...column,\n accessorFn: accessor\n } : {\n ...column,\n accessorKey: accessor\n };\n },\n display: column => column,\n group: column => column\n };\n}\n\n// Is this type a tuple?\n\n// If this type is a tuple, what indices are allowed?\n\n///\n\nfunction functionalUpdate(updater, input) {\n return typeof updater === 'function' ? updater(input) : updater;\n}\nfunction noop() {\n //\n}\nfunction makeStateUpdater(key, instance) {\n return updater => {\n instance.setState(old => {\n return {\n ...old,\n [key]: functionalUpdate(updater, old[key])\n };\n });\n };\n}\nfunction isFunction(d) {\n return d instanceof Function;\n}\nfunction isNumberArray(d) {\n return Array.isArray(d) && d.every(val => typeof val === 'number');\n}\nfunction flattenBy(arr, getChildren) {\n const flat = [];\n const recurse = subArr => {\n subArr.forEach(item => {\n flat.push(item);\n const children = getChildren(item);\n if (children != null && children.length) {\n recurse(children);\n }\n });\n };\n recurse(arr);\n return flat;\n}\nfunction memo(getDeps, fn, opts) {\n let deps = [];\n let result;\n return depArgs => {\n let depTime;\n if (opts.key && opts.debug) depTime = Date.now();\n const newDeps = getDeps(depArgs);\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime;\n if (opts.key && opts.debug) resultTime = Date.now();\n result = fn(...newDeps);\n opts == null || opts.onChange == null || opts.onChange(result);\n if (opts.key && opts.debug) {\n if (opts != null && opts.debug()) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = ' ' + str;\n }\n return str;\n };\n console.info(`%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`, `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120))}deg 100% 31%);`, opts == null ? void 0 : opts.key);\n }\n }\n return result;\n };\n}\nfunction getMemoOptions(tableOptions, debugLevel, key, onChange) {\n return {\n debug: () => {\n var _tableOptions$debugAl;\n return (_tableOptions$debugAl = tableOptions == null ? void 0 : tableOptions.debugAll) != null ? _tableOptions$debugAl : tableOptions[debugLevel];\n },\n key: process.env.NODE_ENV === 'development' && key,\n onChange\n };\n}\n\nfunction createCell(table, row, column, columnId) {\n const getRenderValue = () => {\n var _cell$getValue;\n return (_cell$getValue = cell.getValue()) != null ? _cell$getValue : table.options.renderFallbackValue;\n };\n const cell = {\n id: `${row.id}_${column.id}`,\n row,\n column,\n getValue: () => row.getValue(columnId),\n renderValue: getRenderValue,\n getContext: memo(() => [table, column, row, cell], (table, column, row, cell) => ({\n table,\n column,\n row,\n cell: cell,\n getValue: cell.getValue,\n renderValue: cell.renderValue\n }), getMemoOptions(table.options, 'debugCells', 'cell.getContext'))\n };\n table._features.forEach(feature => {\n feature.createCell == null || feature.createCell(cell, column, row, table);\n }, {});\n return cell;\n}\n\nfunction createColumn(table, columnDef, depth, parent) {\n var _ref, _resolvedColumnDef$id;\n const defaultColumn = table._getDefaultColumnDef();\n const resolvedColumnDef = {\n ...defaultColumn,\n ...columnDef\n };\n const accessorKey = resolvedColumnDef.accessorKey;\n let id = (_ref = (_resolvedColumnDef$id = resolvedColumnDef.id) != null ? _resolvedColumnDef$id : accessorKey ? typeof String.prototype.replaceAll === 'function' ? accessorKey.replaceAll('.', '_') : accessorKey.replace(/\\./g, '_') : undefined) != null ? _ref : typeof resolvedColumnDef.header === 'string' ? resolvedColumnDef.header : undefined;\n let accessorFn;\n if (resolvedColumnDef.accessorFn) {\n accessorFn = resolvedColumnDef.accessorFn;\n } else if (accessorKey) {\n // Support deep accessor keys\n if (accessorKey.includes('.')) {\n accessorFn = originalRow => {\n let result = originalRow;\n for (const key of accessorKey.split('.')) {\n var _result;\n result = (_result = result) == null ? void 0 : _result[key];\n if (process.env.NODE_ENV !== 'production' && result === undefined) {\n console.warn(`\"${key}\" in deeply nested key \"${accessorKey}\" returned undefined.`);\n }\n }\n return result;\n };\n } else {\n accessorFn = originalRow => originalRow[resolvedColumnDef.accessorKey];\n }\n }\n if (!id) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(resolvedColumnDef.accessorFn ? `Columns require an id when using an accessorFn` : `Columns require an id when using a non-string header`);\n }\n throw new Error();\n }\n let column = {\n id: `${String(id)}`,\n accessorFn,\n parent: parent,\n depth,\n columnDef: resolvedColumnDef,\n columns: [],\n getFlatColumns: memo(() => [true], () => {\n var _column$columns;\n return [column, ...((_column$columns = column.columns) == null ? void 0 : _column$columns.flatMap(d => d.getFlatColumns()))];\n }, getMemoOptions(table.options, 'debugColumns', 'column.getFlatColumns')),\n getLeafColumns: memo(() => [table._getOrderColumnsFn()], orderColumns => {\n var _column$columns2;\n if ((_column$columns2 = column.columns) != null && _column$columns2.length) {\n let leafColumns = column.columns.flatMap(column => column.getLeafColumns());\n return orderColumns(leafColumns);\n }\n return [column];\n }, getMemoOptions(table.options, 'debugColumns', 'column.getLeafColumns'))\n };\n for (const feature of table._features) {\n feature.createColumn == null || feature.createColumn(column, table);\n }\n\n // Yes, we have to convert table to unknown, because we know more than the compiler here.\n return column;\n}\n\nconst debug = 'debugHeaders';\n//\n\nfunction createHeader(table, column, options) {\n var _options$id;\n const id = (_options$id = options.id) != null ? _options$id : column.id;\n let header = {\n id,\n column,\n index: options.index,\n isPlaceholder: !!options.isPlaceholder,\n placeholderId: options.placeholderId,\n depth: options.depth,\n subHeaders: [],\n colSpan: 0,\n rowSpan: 0,\n headerGroup: null,\n getLeafHeaders: () => {\n const leafHeaders = [];\n const recurseHeader = h => {\n if (h.subHeaders && h.subHeaders.length) {\n h.subHeaders.map(recurseHeader);\n }\n leafHeaders.push(h);\n };\n recurseHeader(header);\n return leafHeaders;\n },\n getContext: () => ({\n table,\n header: header,\n column\n })\n };\n table._features.forEach(feature => {\n feature.createHeader == null || feature.createHeader(header, table);\n });\n return header;\n}\nconst Headers = {\n createTable: table => {\n // Header Groups\n\n table.getHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n var _left$map$filter, _right$map$filter;\n const leftColumns = (_left$map$filter = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter : [];\n const rightColumns = (_right$map$filter = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter : [];\n const centerColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n const headerGroups = buildHeaderGroups(allColumns, [...leftColumns, ...centerColumns, ...rightColumns], table);\n return headerGroups;\n }, getMemoOptions(table.options, debug, 'getHeaderGroups'));\n table.getCenterHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n leafColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n return buildHeaderGroups(allColumns, leafColumns, table, 'center');\n }, getMemoOptions(table.options, debug, 'getCenterHeaderGroups'));\n table.getLeftHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left], (allColumns, leafColumns, left) => {\n var _left$map$filter2;\n const orderedLeafColumns = (_left$map$filter2 = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter2 : [];\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'left');\n }, getMemoOptions(table.options, debug, 'getLeftHeaderGroups'));\n table.getRightHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.right], (allColumns, leafColumns, right) => {\n var _right$map$filter2;\n const orderedLeafColumns = (_right$map$filter2 = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter2 : [];\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'right');\n }, getMemoOptions(table.options, debug, 'getRightHeaderGroups'));\n\n // Footer Groups\n\n table.getFooterGroups = memo(() => [table.getHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getFooterGroups'));\n table.getLeftFooterGroups = memo(() => [table.getLeftHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getLeftFooterGroups'));\n table.getCenterFooterGroups = memo(() => [table.getCenterHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getCenterFooterGroups'));\n table.getRightFooterGroups = memo(() => [table.getRightHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getRightFooterGroups'));\n\n // Flat Headers\n\n table.getFlatHeaders = memo(() => [table.getHeaderGroups()], headerGroups => {\n return headerGroups.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getFlatHeaders'));\n table.getLeftFlatHeaders = memo(() => [table.getLeftHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getLeftFlatHeaders'));\n table.getCenterFlatHeaders = memo(() => [table.getCenterHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getCenterFlatHeaders'));\n table.getRightFlatHeaders = memo(() => [table.getRightHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getRightFlatHeaders'));\n\n // Leaf Headers\n\n table.getCenterLeafHeaders = memo(() => [table.getCenterFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders;\n return !((_header$subHeaders = header.subHeaders) != null && _header$subHeaders.length);\n });\n }, getMemoOptions(table.options, debug, 'getCenterLeafHeaders'));\n table.getLeftLeafHeaders = memo(() => [table.getLeftFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders2;\n return !((_header$subHeaders2 = header.subHeaders) != null && _header$subHeaders2.length);\n });\n }, getMemoOptions(table.options, debug, 'getLeftLeafHeaders'));\n table.getRightLeafHeaders = memo(() => [table.getRightFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders3;\n return !((_header$subHeaders3 = header.subHeaders) != null && _header$subHeaders3.length);\n });\n }, getMemoOptions(table.options, debug, 'getRightLeafHeaders'));\n table.getLeafHeaders = memo(() => [table.getLeftHeaderGroups(), table.getCenterHeaderGroups(), table.getRightHeaderGroups()], (left, center, right) => {\n var _left$0$headers, _left$, _center$0$headers, _center$, _right$0$headers, _right$;\n return [...((_left$0$headers = (_left$ = left[0]) == null ? void 0 : _left$.headers) != null ? _left$0$headers : []), ...((_center$0$headers = (_center$ = center[0]) == null ? void 0 : _center$.headers) != null ? _center$0$headers : []), ...((_right$0$headers = (_right$ = right[0]) == null ? void 0 : _right$.headers) != null ? _right$0$headers : [])].map(header => {\n return header.getLeafHeaders();\n }).flat();\n }, getMemoOptions(table.options, debug, 'getLeafHeaders'));\n }\n};\nfunction buildHeaderGroups(allColumns, columnsToGroup, table, headerFamily) {\n var _headerGroups$0$heade, _headerGroups$;\n // Find the max depth of the columns:\n // build the leaf column row\n // build each buffer row going up\n // placeholder for non-existent level\n // real column for existing level\n\n let maxDepth = 0;\n const findMaxDepth = function (columns, depth) {\n if (depth === void 0) {\n depth = 1;\n }\n maxDepth = Math.max(maxDepth, depth);\n columns.filter(column => column.getIsVisible()).forEach(column => {\n var _column$columns;\n if ((_column$columns = column.columns) != null && _column$columns.length) {\n findMaxDepth(column.columns, depth + 1);\n }\n }, 0);\n };\n findMaxDepth(allColumns);\n let headerGroups = [];\n const createHeaderGroup = (headersToGroup, depth) => {\n // The header group we are creating\n const headerGroup = {\n depth,\n id: [headerFamily, `${depth}`].filter(Boolean).join('_'),\n headers: []\n };\n\n // The parent columns we're going to scan next\n const pendingParentHeaders = [];\n\n // Scan each column for parents\n headersToGroup.forEach(headerToGroup => {\n // What is the latest (last) parent column?\n\n const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0];\n const isLeafHeader = headerToGroup.column.depth === headerGroup.depth;\n let column;\n let isPlaceholder = false;\n if (isLeafHeader && headerToGroup.column.parent) {\n // The parent header is new\n column = headerToGroup.column.parent;\n } else {\n // The parent header is repeated\n column = headerToGroup.column;\n isPlaceholder = true;\n }\n if (latestPendingParentHeader && (latestPendingParentHeader == null ? void 0 : latestPendingParentHeader.column) === column) {\n // This column is repeated. Add it as a sub header to the next batch\n latestPendingParentHeader.subHeaders.push(headerToGroup);\n } else {\n // This is a new header. Let's create it\n const header = createHeader(table, column, {\n id: [headerFamily, depth, column.id, headerToGroup == null ? void 0 : headerToGroup.id].filter(Boolean).join('_'),\n isPlaceholder,\n placeholderId: isPlaceholder ? `${pendingParentHeaders.filter(d => d.column === column).length}` : undefined,\n depth,\n index: pendingParentHeaders.length\n });\n\n // Add the headerToGroup as a subHeader of the new header\n header.subHeaders.push(headerToGroup);\n // Add the new header to the pendingParentHeaders to get grouped\n // in the next batch\n pendingParentHeaders.push(header);\n }\n headerGroup.headers.push(headerToGroup);\n headerToGroup.headerGroup = headerGroup;\n });\n headerGroups.push(headerGroup);\n if (depth > 0) {\n createHeaderGroup(pendingParentHeaders, depth - 1);\n }\n };\n const bottomHeaders = columnsToGroup.map((column, index) => createHeader(table, column, {\n depth: maxDepth,\n index\n }));\n createHeaderGroup(bottomHeaders, maxDepth - 1);\n headerGroups.reverse();\n\n // headerGroups = headerGroups.filter(headerGroup => {\n // return !headerGroup.headers.every(header => header.isPlaceholder)\n // })\n\n const recurseHeadersForSpans = headers => {\n const filteredHeaders = headers.filter(header => header.column.getIsVisible());\n return filteredHeaders.map(header => {\n let colSpan = 0;\n let rowSpan = 0;\n let childRowSpans = [0];\n if (header.subHeaders && header.subHeaders.length) {\n childRowSpans = [];\n recurseHeadersForSpans(header.subHeaders).forEach(_ref => {\n let {\n colSpan: childColSpan,\n rowSpan: childRowSpan\n } = _ref;\n colSpan += childColSpan;\n childRowSpans.push(childRowSpan);\n });\n } else {\n colSpan = 1;\n }\n const minChildRowSpan = Math.min(...childRowSpans);\n rowSpan = rowSpan + minChildRowSpan;\n header.colSpan = colSpan;\n header.rowSpan = rowSpan;\n return {\n colSpan,\n rowSpan\n };\n });\n };\n recurseHeadersForSpans((_headerGroups$0$heade = (_headerGroups$ = headerGroups[0]) == null ? void 0 : _headerGroups$.headers) != null ? _headerGroups$0$heade : []);\n return headerGroups;\n}\n\nconst createRow = (table, id, original, rowIndex, depth, subRows, parentId) => {\n let row = {\n id,\n index: rowIndex,\n original,\n depth,\n parentId,\n _valuesCache: {},\n _uniqueValuesCache: {},\n getValue: columnId => {\n if (row._valuesCache.hasOwnProperty(columnId)) {\n return row._valuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.accessorFn)) {\n return undefined;\n }\n row._valuesCache[columnId] = column.accessorFn(row.original, rowIndex);\n return row._valuesCache[columnId];\n },\n getUniqueValues: columnId => {\n if (row._uniqueValuesCache.hasOwnProperty(columnId)) {\n return row._uniqueValuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.accessorFn)) {\n return undefined;\n }\n if (!column.columnDef.getUniqueValues) {\n row._uniqueValuesCache[columnId] = [row.getValue(columnId)];\n return row._uniqueValuesCache[columnId];\n }\n row._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(row.original, rowIndex);\n return row._uniqueValuesCache[columnId];\n },\n renderValue: columnId => {\n var _row$getValue;\n return (_row$getValue = row.getValue(columnId)) != null ? _row$getValue : table.options.renderFallbackValue;\n },\n subRows: subRows != null ? subRows : [],\n getLeafRows: () => flattenBy(row.subRows, d => d.subRows),\n getParentRow: () => row.parentId ? table.getRow(row.parentId, true) : undefined,\n getParentRows: () => {\n let parentRows = [];\n let currentRow = row;\n while (true) {\n const parentRow = currentRow.getParentRow();\n if (!parentRow) break;\n parentRows.push(parentRow);\n currentRow = parentRow;\n }\n return parentRows.reverse();\n },\n getAllCells: memo(() => [table.getAllLeafColumns()], leafColumns => {\n return leafColumns.map(column => {\n return createCell(table, row, column, column.id);\n });\n }, getMemoOptions(table.options, 'debugRows', 'getAllCells')),\n _getAllCellsByColumnId: memo(() => [row.getAllCells()], allCells => {\n return allCells.reduce((acc, cell) => {\n acc[cell.column.id] = cell;\n return acc;\n }, {});\n }, getMemoOptions(table.options, 'debugRows', 'getAllCellsByColumnId'))\n };\n for (let i = 0; i < table._features.length; i++) {\n const feature = table._features[i];\n feature == null || feature.createRow == null || feature.createRow(row, table);\n }\n return row;\n};\n\n//\n\nconst ColumnFaceting = {\n createColumn: (column, table) => {\n column._getFacetedRowModel = table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, column.id);\n column.getFacetedRowModel = () => {\n if (!column._getFacetedRowModel) {\n return table.getPreFilteredRowModel();\n }\n return column._getFacetedRowModel();\n };\n column._getFacetedUniqueValues = table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, column.id);\n column.getFacetedUniqueValues = () => {\n if (!column._getFacetedUniqueValues) {\n return new Map();\n }\n return column._getFacetedUniqueValues();\n };\n column._getFacetedMinMaxValues = table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, column.id);\n column.getFacetedMinMaxValues = () => {\n if (!column._getFacetedMinMaxValues) {\n return undefined;\n }\n return column._getFacetedMinMaxValues();\n };\n }\n};\n\nconst includesString = (row, columnId, filterValue) => {\n var _filterValue$toString, _row$getValue;\n const search = filterValue == null || (_filterValue$toString = filterValue.toString()) == null ? void 0 : _filterValue$toString.toLowerCase();\n return Boolean((_row$getValue = row.getValue(columnId)) == null || (_row$getValue = _row$getValue.toString()) == null || (_row$getValue = _row$getValue.toLowerCase()) == null ? void 0 : _row$getValue.includes(search));\n};\nincludesString.autoRemove = val => testFalsey(val);\nconst includesStringSensitive = (row, columnId, filterValue) => {\n var _row$getValue2;\n return Boolean((_row$getValue2 = row.getValue(columnId)) == null || (_row$getValue2 = _row$getValue2.toString()) == null ? void 0 : _row$getValue2.includes(filterValue));\n};\nincludesStringSensitive.autoRemove = val => testFalsey(val);\nconst equalsString = (row, columnId, filterValue) => {\n var _row$getValue3;\n return ((_row$getValue3 = row.getValue(columnId)) == null || (_row$getValue3 = _row$getValue3.toString()) == null ? void 0 : _row$getValue3.toLowerCase()) === (filterValue == null ? void 0 : filterValue.toLowerCase());\n};\nequalsString.autoRemove = val => testFalsey(val);\nconst arrIncludes = (row, columnId, filterValue) => {\n var _row$getValue4;\n return (_row$getValue4 = row.getValue(columnId)) == null ? void 0 : _row$getValue4.includes(filterValue);\n};\narrIncludes.autoRemove = val => testFalsey(val);\nconst arrIncludesAll = (row, columnId, filterValue) => {\n return !filterValue.some(val => {\n var _row$getValue5;\n return !((_row$getValue5 = row.getValue(columnId)) != null && _row$getValue5.includes(val));\n });\n};\narrIncludesAll.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst arrIncludesSome = (row, columnId, filterValue) => {\n return filterValue.some(val => {\n var _row$getValue6;\n return (_row$getValue6 = row.getValue(columnId)) == null ? void 0 : _row$getValue6.includes(val);\n });\n};\narrIncludesSome.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst equals = (row, columnId, filterValue) => {\n return row.getValue(columnId) === filterValue;\n};\nequals.autoRemove = val => testFalsey(val);\nconst weakEquals = (row, columnId, filterValue) => {\n return row.getValue(columnId) == filterValue;\n};\nweakEquals.autoRemove = val => testFalsey(val);\nconst inNumberRange = (row, columnId, filterValue) => {\n let [min, max] = filterValue;\n const rowValue = row.getValue(columnId);\n return rowValue >= min && rowValue <= max;\n};\ninNumberRange.resolveFilterValue = val => {\n let [unsafeMin, unsafeMax] = val;\n let parsedMin = typeof unsafeMin !== 'number' ? parseFloat(unsafeMin) : unsafeMin;\n let parsedMax = typeof unsafeMax !== 'number' ? parseFloat(unsafeMax) : unsafeMax;\n let min = unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin;\n let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax;\n if (min > max) {\n const temp = min;\n min = max;\n max = temp;\n }\n return [min, max];\n};\ninNumberRange.autoRemove = val => testFalsey(val) || testFalsey(val[0]) && testFalsey(val[1]);\n\n// Export\n\nconst filterFns = {\n includesString,\n includesStringSensitive,\n equalsString,\n arrIncludes,\n arrIncludesAll,\n arrIncludesSome,\n equals,\n weakEquals,\n inNumberRange\n};\n// Utils\n\nfunction testFalsey(val) {\n return val === undefined || val === null || val === '';\n}\n\n//\n\nconst ColumnFiltering = {\n getDefaultColumnDef: () => {\n return {\n filterFn: 'auto'\n };\n },\n getInitialState: state => {\n return {\n columnFilters: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnFiltersChange: makeStateUpdater('columnFilters', table),\n filterFromLeafRows: false,\n maxLeafRowFilterDepth: 100\n };\n },\n createColumn: (column, table) => {\n column.getAutoFilterFn = () => {\n const firstRow = table.getCoreRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'string') {\n return filterFns.includesString;\n }\n if (typeof value === 'number') {\n return filterFns.inNumberRange;\n }\n if (typeof value === 'boolean') {\n return filterFns.equals;\n }\n if (value !== null && typeof value === 'object') {\n return filterFns.equals;\n }\n if (Array.isArray(value)) {\n return filterFns.arrIncludes;\n }\n return filterFns.weakEquals;\n };\n column.getFilterFn = () => {\n var _table$options$filter, _table$options$filter2;\n return isFunction(column.columnDef.filterFn) ? column.columnDef.filterFn : column.columnDef.filterFn === 'auto' ? column.getAutoFilterFn() : // @ts-ignore\n (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[column.columnDef.filterFn]) != null ? _table$options$filter : filterFns[column.columnDef.filterFn];\n };\n column.getCanFilter = () => {\n var _column$columnDef$ena, _table$options$enable, _table$options$enable2;\n return ((_column$columnDef$ena = column.columnDef.enableColumnFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnFilters) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && !!column.accessorFn;\n };\n column.getIsFiltered = () => column.getFilterIndex() > -1;\n column.getFilterValue = () => {\n var _table$getState$colum;\n return (_table$getState$colum = table.getState().columnFilters) == null || (_table$getState$colum = _table$getState$colum.find(d => d.id === column.id)) == null ? void 0 : _table$getState$colum.value;\n };\n column.getFilterIndex = () => {\n var _table$getState$colum2, _table$getState$colum3;\n return (_table$getState$colum2 = (_table$getState$colum3 = table.getState().columnFilters) == null ? void 0 : _table$getState$colum3.findIndex(d => d.id === column.id)) != null ? _table$getState$colum2 : -1;\n };\n column.setFilterValue = value => {\n table.setColumnFilters(old => {\n const filterFn = column.getFilterFn();\n const previousFilter = old == null ? void 0 : old.find(d => d.id === column.id);\n const newFilter = functionalUpdate(value, previousFilter ? previousFilter.value : undefined);\n\n //\n if (shouldAutoRemoveFilter(filterFn, newFilter, column)) {\n var _old$filter;\n return (_old$filter = old == null ? void 0 : old.filter(d => d.id !== column.id)) != null ? _old$filter : [];\n }\n const newFilterObj = {\n id: column.id,\n value: newFilter\n };\n if (previousFilter) {\n var _old$map;\n return (_old$map = old == null ? void 0 : old.map(d => {\n if (d.id === column.id) {\n return newFilterObj;\n }\n return d;\n })) != null ? _old$map : [];\n }\n if (old != null && old.length) {\n return [...old, newFilterObj];\n }\n return [newFilterObj];\n });\n };\n },\n createRow: (row, _table) => {\n row.columnFilters = {};\n row.columnFiltersMeta = {};\n },\n createTable: table => {\n table.setColumnFilters = updater => {\n const leafColumns = table.getAllLeafColumns();\n const updateFn = old => {\n var _functionalUpdate;\n return (_functionalUpdate = functionalUpdate(updater, old)) == null ? void 0 : _functionalUpdate.filter(filter => {\n const column = leafColumns.find(d => d.id === filter.id);\n if (column) {\n const filterFn = column.getFilterFn();\n if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {\n return false;\n }\n }\n return true;\n });\n };\n table.options.onColumnFiltersChange == null || table.options.onColumnFiltersChange(updateFn);\n };\n table.resetColumnFilters = defaultState => {\n var _table$initialState$c, _table$initialState;\n table.setColumnFilters(defaultState ? [] : (_table$initialState$c = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.columnFilters) != null ? _table$initialState$c : []);\n };\n table.getPreFilteredRowModel = () => table.getCoreRowModel();\n table.getFilteredRowModel = () => {\n if (!table._getFilteredRowModel && table.options.getFilteredRowModel) {\n table._getFilteredRowModel = table.options.getFilteredRowModel(table);\n }\n if (table.options.manualFiltering || !table._getFilteredRowModel) {\n return table.getPreFilteredRowModel();\n }\n return table._getFilteredRowModel();\n };\n }\n};\nfunction shouldAutoRemoveFilter(filterFn, value, column) {\n return (filterFn && filterFn.autoRemove ? filterFn.autoRemove(value, column) : false) || typeof value === 'undefined' || typeof value === 'string' && !value;\n}\n\nconst sum = (columnId, _leafRows, childRows) => {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return childRows.reduce((sum, next) => {\n const nextValue = next.getValue(columnId);\n return sum + (typeof nextValue === 'number' ? nextValue : 0);\n }, 0);\n};\nconst min = (columnId, _leafRows, childRows) => {\n let min;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null && (min > value || min === undefined && value >= value)) {\n min = value;\n }\n });\n return min;\n};\nconst max = (columnId, _leafRows, childRows) => {\n let max;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null && (max < value || max === undefined && value >= value)) {\n max = value;\n }\n });\n return max;\n};\nconst extent = (columnId, _leafRows, childRows) => {\n let min;\n let max;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n });\n return [min, max];\n};\nconst mean = (columnId, leafRows) => {\n let count = 0;\n let sum = 0;\n leafRows.forEach(row => {\n let value = row.getValue(columnId);\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n });\n if (count) return sum / count;\n return;\n};\nconst median = (columnId, leafRows) => {\n if (!leafRows.length) {\n return;\n }\n const values = leafRows.map(row => row.getValue(columnId));\n if (!isNumberArray(values)) {\n return;\n }\n if (values.length === 1) {\n return values[0];\n }\n const mid = Math.floor(values.length / 2);\n const nums = values.sort((a, b) => a - b);\n return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;\n};\nconst unique = (columnId, leafRows) => {\n return Array.from(new Set(leafRows.map(d => d.getValue(columnId))).values());\n};\nconst uniqueCount = (columnId, leafRows) => {\n return new Set(leafRows.map(d => d.getValue(columnId))).size;\n};\nconst count = (_columnId, leafRows) => {\n return leafRows.length;\n};\nconst aggregationFns = {\n sum,\n min,\n max,\n extent,\n mean,\n median,\n unique,\n uniqueCount,\n count\n};\n\n//\n\nconst ColumnGrouping = {\n getDefaultColumnDef: () => {\n return {\n aggregatedCell: props => {\n var _toString, _props$getValue;\n return (_toString = (_props$getValue = props.getValue()) == null || _props$getValue.toString == null ? void 0 : _props$getValue.toString()) != null ? _toString : null;\n },\n aggregationFn: 'auto'\n };\n },\n getInitialState: state => {\n return {\n grouping: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onGroupingChange: makeStateUpdater('grouping', table),\n groupedColumnMode: 'reorder'\n };\n },\n createColumn: (column, table) => {\n column.toggleGrouping = () => {\n table.setGrouping(old => {\n // Find any existing grouping for this column\n if (old != null && old.includes(column.id)) {\n return old.filter(d => d !== column.id);\n }\n return [...(old != null ? old : []), column.id];\n });\n };\n column.getCanGroup = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableGrouping) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGrouping) != null ? _table$options$enable : true) && (!!column.accessorFn || !!column.columnDef.getGroupingValue);\n };\n column.getIsGrouped = () => {\n var _table$getState$group;\n return (_table$getState$group = table.getState().grouping) == null ? void 0 : _table$getState$group.includes(column.id);\n };\n column.getGroupedIndex = () => {\n var _table$getState$group2;\n return (_table$getState$group2 = table.getState().grouping) == null ? void 0 : _table$getState$group2.indexOf(column.id);\n };\n column.getToggleGroupingHandler = () => {\n const canGroup = column.getCanGroup();\n return () => {\n if (!canGroup) return;\n column.toggleGrouping();\n };\n };\n column.getAutoAggregationFn = () => {\n const firstRow = table.getCoreRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'number') {\n return aggregationFns.sum;\n }\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return aggregationFns.extent;\n }\n };\n column.getAggregationFn = () => {\n var _table$options$aggreg, _table$options$aggreg2;\n if (!column) {\n throw new Error();\n }\n return isFunction(column.columnDef.aggregationFn) ? column.columnDef.aggregationFn : column.columnDef.aggregationFn === 'auto' ? column.getAutoAggregationFn() : (_table$options$aggreg = (_table$options$aggreg2 = table.options.aggregationFns) == null ? void 0 : _table$options$aggreg2[column.columnDef.aggregationFn]) != null ? _table$options$aggreg : aggregationFns[column.columnDef.aggregationFn];\n };\n },\n createTable: table => {\n table.setGrouping = updater => table.options.onGroupingChange == null ? void 0 : table.options.onGroupingChange(updater);\n table.resetGrouping = defaultState => {\n var _table$initialState$g, _table$initialState;\n table.setGrouping(defaultState ? [] : (_table$initialState$g = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.grouping) != null ? _table$initialState$g : []);\n };\n table.getPreGroupedRowModel = () => table.getFilteredRowModel();\n table.getGroupedRowModel = () => {\n if (!table._getGroupedRowModel && table.options.getGroupedRowModel) {\n table._getGroupedRowModel = table.options.getGroupedRowModel(table);\n }\n if (table.options.manualGrouping || !table._getGroupedRowModel) {\n return table.getPreGroupedRowModel();\n }\n return table._getGroupedRowModel();\n };\n },\n createRow: (row, table) => {\n row.getIsGrouped = () => !!row.groupingColumnId;\n row.getGroupingValue = columnId => {\n if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n return row._groupingValuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.columnDef.getGroupingValue)) {\n return row.getValue(columnId);\n }\n row._groupingValuesCache[columnId] = column.columnDef.getGroupingValue(row.original);\n return row._groupingValuesCache[columnId];\n };\n row._groupingValuesCache = {};\n },\n createCell: (cell, column, row, table) => {\n cell.getIsGrouped = () => column.getIsGrouped() && column.id === row.groupingColumnId;\n cell.getIsPlaceholder = () => !cell.getIsGrouped() && column.getIsGrouped();\n cell.getIsAggregated = () => {\n var _row$subRows;\n return !cell.getIsGrouped() && !cell.getIsPlaceholder() && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n };\n }\n};\nfunction orderColumns(leafColumns, grouping, groupedColumnMode) {\n if (!(grouping != null && grouping.length) || !groupedColumnMode) {\n return leafColumns;\n }\n const nonGroupingColumns = leafColumns.filter(col => !grouping.includes(col.id));\n if (groupedColumnMode === 'remove') {\n return nonGroupingColumns;\n }\n const groupingColumns = grouping.map(g => leafColumns.find(col => col.id === g)).filter(Boolean);\n return [...groupingColumns, ...nonGroupingColumns];\n}\n\n//\n\nconst ColumnOrdering = {\n getInitialState: state => {\n return {\n columnOrder: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnOrderChange: makeStateUpdater('columnOrder', table)\n };\n },\n createColumn: (column, table) => {\n column.getIndex = memo(position => [_getVisibleLeafColumns(table, position)], columns => columns.findIndex(d => d.id === column.id), getMemoOptions(table.options, 'debugColumns', 'getIndex'));\n column.getIsFirstColumn = position => {\n var _columns$;\n const columns = _getVisibleLeafColumns(table, position);\n return ((_columns$ = columns[0]) == null ? void 0 : _columns$.id) === column.id;\n };\n column.getIsLastColumn = position => {\n var _columns;\n const columns = _getVisibleLeafColumns(table, position);\n return ((_columns = columns[columns.length - 1]) == null ? void 0 : _columns.id) === column.id;\n };\n },\n createTable: table => {\n table.setColumnOrder = updater => table.options.onColumnOrderChange == null ? void 0 : table.options.onColumnOrderChange(updater);\n table.resetColumnOrder = defaultState => {\n var _table$initialState$c;\n table.setColumnOrder(defaultState ? [] : (_table$initialState$c = table.initialState.columnOrder) != null ? _table$initialState$c : []);\n };\n table._getOrderColumnsFn = memo(() => [table.getState().columnOrder, table.getState().grouping, table.options.groupedColumnMode], (columnOrder, grouping, groupedColumnMode) => columns => {\n // Sort grouped columns to the start of the column list\n // before the headers are built\n let orderedColumns = [];\n\n // If there is no order, return the normal columns\n if (!(columnOrder != null && columnOrder.length)) {\n orderedColumns = columns;\n } else {\n const columnOrderCopy = [...columnOrder];\n\n // If there is an order, make a copy of the columns\n const columnsCopy = [...columns];\n\n // And make a new ordered array of the columns\n\n // Loop over the columns and place them in order into the new array\n while (columnsCopy.length && columnOrderCopy.length) {\n const targetColumnId = columnOrderCopy.shift();\n const foundIndex = columnsCopy.findIndex(d => d.id === targetColumnId);\n if (foundIndex > -1) {\n orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]);\n }\n }\n\n // If there are any columns left, add them to the end\n orderedColumns = [...orderedColumns, ...columnsCopy];\n }\n return orderColumns(orderedColumns, grouping, groupedColumnMode);\n }, getMemoOptions(table.options, 'debugTable', '_getOrderColumnsFn'));\n }\n};\n\n//\n\nconst getDefaultColumnPinningState = () => ({\n left: [],\n right: []\n});\nconst ColumnPinning = {\n getInitialState: state => {\n return {\n columnPinning: getDefaultColumnPinningState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnPinningChange: makeStateUpdater('columnPinning', table)\n };\n },\n createColumn: (column, table) => {\n column.pin = position => {\n const columnIds = column.getLeafColumns().map(d => d.id).filter(Boolean);\n table.setColumnPinning(old => {\n var _old$left3, _old$right3;\n if (position === 'right') {\n var _old$left, _old$right;\n return {\n left: ((_old$left = old == null ? void 0 : old.left) != null ? _old$left : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n right: [...((_old$right = old == null ? void 0 : old.right) != null ? _old$right : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds]\n };\n }\n if (position === 'left') {\n var _old$left2, _old$right2;\n return {\n left: [...((_old$left2 = old == null ? void 0 : old.left) != null ? _old$left2 : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds],\n right: ((_old$right2 = old == null ? void 0 : old.right) != null ? _old$right2 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n };\n }\n return {\n left: ((_old$left3 = old == null ? void 0 : old.left) != null ? _old$left3 : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n right: ((_old$right3 = old == null ? void 0 : old.right) != null ? _old$right3 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n };\n });\n };\n column.getCanPin = () => {\n const leafColumns = column.getLeafColumns();\n return leafColumns.some(d => {\n var _d$columnDef$enablePi, _ref, _table$options$enable;\n return ((_d$columnDef$enablePi = d.columnDef.enablePinning) != null ? _d$columnDef$enablePi : true) && ((_ref = (_table$options$enable = table.options.enableColumnPinning) != null ? _table$options$enable : table.options.enablePinning) != null ? _ref : true);\n });\n };\n column.getIsPinned = () => {\n const leafColumnIds = column.getLeafColumns().map(d => d.id);\n const {\n left,\n right\n } = table.getState().columnPinning;\n const isLeft = leafColumnIds.some(d => left == null ? void 0 : left.includes(d));\n const isRight = leafColumnIds.some(d => right == null ? void 0 : right.includes(d));\n return isLeft ? 'left' : isRight ? 'right' : false;\n };\n column.getPinnedIndex = () => {\n var _table$getState$colum, _table$getState$colum2;\n const position = column.getIsPinned();\n return position ? (_table$getState$colum = (_table$getState$colum2 = table.getState().columnPinning) == null || (_table$getState$colum2 = _table$getState$colum2[position]) == null ? void 0 : _table$getState$colum2.indexOf(column.id)) != null ? _table$getState$colum : -1 : 0;\n };\n },\n createRow: (row, table) => {\n row.getCenterVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allCells, left, right) => {\n const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n return allCells.filter(d => !leftAndRight.includes(d.column.id));\n }, getMemoOptions(table.options, 'debugRows', 'getCenterVisibleCells'));\n row.getLeftVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left], (allCells, left) => {\n const cells = (left != null ? left : []).map(columnId => allCells.find(cell => cell.column.id === columnId)).filter(Boolean).map(d => ({\n ...d,\n position: 'left'\n }));\n return cells;\n }, getMemoOptions(table.options, 'debugRows', 'getLeftVisibleCells'));\n row.getRightVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.right], (allCells, right) => {\n const cells = (right != null ? right : []).map(columnId => allCells.find(cell => cell.column.id === columnId)).filter(Boolean).map(d => ({\n ...d,\n position: 'right'\n }));\n return cells;\n }, getMemoOptions(table.options, 'debugRows', 'getRightVisibleCells'));\n },\n createTable: table => {\n table.setColumnPinning = updater => table.options.onColumnPinningChange == null ? void 0 : table.options.onColumnPinningChange(updater);\n table.resetColumnPinning = defaultState => {\n var _table$initialState$c, _table$initialState;\n return table.setColumnPinning(defaultState ? getDefaultColumnPinningState() : (_table$initialState$c = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.columnPinning) != null ? _table$initialState$c : getDefaultColumnPinningState());\n };\n table.getIsSomeColumnsPinned = position => {\n var _pinningState$positio;\n const pinningState = table.getState().columnPinning;\n if (!position) {\n var _pinningState$left, _pinningState$right;\n return Boolean(((_pinningState$left = pinningState.left) == null ? void 0 : _pinningState$left.length) || ((_pinningState$right = pinningState.right) == null ? void 0 : _pinningState$right.length));\n }\n return Boolean((_pinningState$positio = pinningState[position]) == null ? void 0 : _pinningState$positio.length);\n };\n table.getLeftLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left], (allColumns, left) => {\n return (left != null ? left : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n }, getMemoOptions(table.options, 'debugColumns', 'getLeftLeafColumns'));\n table.getRightLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.right], (allColumns, right) => {\n return (right != null ? right : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n }, getMemoOptions(table.options, 'debugColumns', 'getRightLeafColumns'));\n table.getCenterLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, left, right) => {\n const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n return allColumns.filter(d => !leftAndRight.includes(d.id));\n }, getMemoOptions(table.options, 'debugColumns', 'getCenterLeafColumns'));\n }\n};\n\nfunction safelyAccessDocument(_document) {\n return _document || (typeof document !== 'undefined' ? document : null);\n}\n\n//\n\n//\n\nconst defaultColumnSizing = {\n size: 150,\n minSize: 20,\n maxSize: Number.MAX_SAFE_INTEGER\n};\nconst getDefaultColumnSizingInfoState = () => ({\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: false,\n columnSizingStart: []\n});\nconst ColumnSizing = {\n getDefaultColumnDef: () => {\n return defaultColumnSizing;\n },\n getInitialState: state => {\n return {\n columnSizing: {},\n columnSizingInfo: getDefaultColumnSizingInfoState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n columnResizeMode: 'onEnd',\n columnResizeDirection: 'ltr',\n onColumnSizingChange: makeStateUpdater('columnSizing', table),\n onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', table)\n };\n },\n createColumn: (column, table) => {\n column.getSize = () => {\n var _column$columnDef$min, _ref, _column$columnDef$max;\n const columnSize = table.getState().columnSizing[column.id];\n return Math.min(Math.max((_column$columnDef$min = column.columnDef.minSize) != null ? _column$columnDef$min : defaultColumnSizing.minSize, (_ref = columnSize != null ? columnSize : column.columnDef.size) != null ? _ref : defaultColumnSizing.size), (_column$columnDef$max = column.columnDef.maxSize) != null ? _column$columnDef$max : defaultColumnSizing.maxSize);\n };\n column.getStart = memo(position => [position, _getVisibleLeafColumns(table, position), table.getState().columnSizing], (position, columns) => columns.slice(0, column.getIndex(position)).reduce((sum, column) => sum + column.getSize(), 0), getMemoOptions(table.options, 'debugColumns', 'getStart'));\n column.getAfter = memo(position => [position, _getVisibleLeafColumns(table, position), table.getState().columnSizing], (position, columns) => columns.slice(column.getIndex(position) + 1).reduce((sum, column) => sum + column.getSize(), 0), getMemoOptions(table.options, 'debugColumns', 'getAfter'));\n column.resetSize = () => {\n table.setColumnSizing(_ref2 => {\n let {\n [column.id]: _,\n ...rest\n } = _ref2;\n return rest;\n });\n };\n column.getCanResize = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableResizing) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnResizing) != null ? _table$options$enable : true);\n };\n column.getIsResizing = () => {\n return table.getState().columnSizingInfo.isResizingColumn === column.id;\n };\n },\n createHeader: (header, table) => {\n header.getSize = () => {\n let sum = 0;\n const recurse = header => {\n if (header.subHeaders.length) {\n header.subHeaders.forEach(recurse);\n } else {\n var _header$column$getSiz;\n sum += (_header$column$getSiz = header.column.getSize()) != null ? _header$column$getSiz : 0;\n }\n };\n recurse(header);\n return sum;\n };\n header.getStart = () => {\n if (header.index > 0) {\n const prevSiblingHeader = header.headerGroup.headers[header.index - 1];\n return prevSiblingHeader.getStart() + prevSiblingHeader.getSize();\n }\n return 0;\n };\n header.getResizeHandler = _contextDocument => {\n const column = table.getColumn(header.column.id);\n const canResize = column == null ? void 0 : column.getCanResize();\n return e => {\n if (!column || !canResize) {\n return;\n }\n e.persist == null || e.persist();\n if (isTouchStartEvent(e)) {\n // lets not respond to multiple touches (e.g. 2 or 3 fingers)\n if (e.touches && e.touches.length > 1) {\n return;\n }\n }\n const startSize = header.getSize();\n const columnSizingStart = header ? header.getLeafHeaders().map(d => [d.column.id, d.column.getSize()]) : [[column.id, column.getSize()]];\n const clientX = isTouchStartEvent(e) ? Math.round(e.touches[0].clientX) : e.clientX;\n const newColumnSizing = {};\n const updateOffset = (eventType, clientXPos) => {\n if (typeof clientXPos !== 'number') {\n return;\n }\n table.setColumnSizingInfo(old => {\n var _old$startOffset, _old$startSize;\n const deltaDirection = table.options.columnResizeDirection === 'rtl' ? -1 : 1;\n const deltaOffset = (clientXPos - ((_old$startOffset = old == null ? void 0 : old.startOffset) != null ? _old$startOffset : 0)) * deltaDirection;\n const deltaPercentage = Math.max(deltaOffset / ((_old$startSize = old == null ? void 0 : old.startSize) != null ? _old$startSize : 0), -0.999999);\n old.columnSizingStart.forEach(_ref3 => {\n let [columnId, headerSize] = _ref3;\n newColumnSizing[columnId] = Math.round(Math.max(headerSize + headerSize * deltaPercentage, 0) * 100) / 100;\n });\n return {\n ...old,\n deltaOffset,\n deltaPercentage\n };\n });\n if (table.options.columnResizeMode === 'onChange' || eventType === 'end') {\n table.setColumnSizing(old => ({\n ...old,\n ...newColumnSizing\n }));\n }\n };\n const onMove = clientXPos => updateOffset('move', clientXPos);\n const onEnd = clientXPos => {\n updateOffset('end', clientXPos);\n table.setColumnSizingInfo(old => ({\n ...old,\n isResizingColumn: false,\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n columnSizingStart: []\n }));\n };\n const contextDocument = safelyAccessDocument(_contextDocument);\n const mouseEvents = {\n moveHandler: e => onMove(e.clientX),\n upHandler: e => {\n contextDocument == null || contextDocument.removeEventListener('mousemove', mouseEvents.moveHandler);\n contextDocument == null || contextDocument.removeEventListener('mouseup', mouseEvents.upHandler);\n onEnd(e.clientX);\n }\n };\n const touchEvents = {\n moveHandler: e => {\n if (e.cancelable) {\n e.preventDefault();\n e.stopPropagation();\n }\n onMove(e.touches[0].clientX);\n return false;\n },\n upHandler: e => {\n var _e$touches$;\n contextDocument == null || contextDocument.removeEventListener('touchmove', touchEvents.moveHandler);\n contextDocument == null || contextDocument.removeEventListener('touchend', touchEvents.upHandler);\n if (e.cancelable) {\n e.preventDefault();\n e.stopPropagation();\n }\n onEnd((_e$touches$ = e.touches[0]) == null ? void 0 : _e$touches$.clientX);\n }\n };\n const passiveIfSupported = passiveEventSupported() ? {\n passive: false\n } : false;\n if (isTouchStartEvent(e)) {\n contextDocument == null || contextDocument.addEventListener('touchmove', touchEvents.moveHandler, passiveIfSupported);\n contextDocument == null || contextDocument.addEventListener('touchend', touchEvents.upHandler, passiveIfSupported);\n } else {\n contextDocument == null || contextDocument.addEventListener('mousemove', mouseEvents.moveHandler, passiveIfSupported);\n contextDocument == null || contextDocument.addEventListener('mouseup', mouseEvents.upHandler, passiveIfSupported);\n }\n table.setColumnSizingInfo(old => ({\n ...old,\n startOffset: clientX,\n startSize,\n deltaOffset: 0,\n deltaPercentage: 0,\n columnSizingStart,\n isResizingColumn: column.id\n }));\n };\n };\n },\n createTable: table => {\n table.setColumnSizing = updater => table.options.onColumnSizingChange == null ? void 0 : table.options.onColumnSizingChange(updater);\n table.setColumnSizingInfo = updater => table.options.onColumnSizingInfoChange == null ? void 0 : table.options.onColumnSizingInfoChange(updater);\n table.resetColumnSizing = defaultState => {\n var _table$initialState$c;\n table.setColumnSizing(defaultState ? {} : (_table$initialState$c = table.initialState.columnSizing) != null ? _table$initialState$c : {});\n };\n table.resetHeaderSizeInfo = defaultState => {\n var _table$initialState$c2;\n table.setColumnSizingInfo(defaultState ? getDefaultColumnSizingInfoState() : (_table$initialState$c2 = table.initialState.columnSizingInfo) != null ? _table$initialState$c2 : getDefaultColumnSizingInfoState());\n };\n table.getTotalSize = () => {\n var _table$getHeaderGroup, _table$getHeaderGroup2;\n return (_table$getHeaderGroup = (_table$getHeaderGroup2 = table.getHeaderGroups()[0]) == null ? void 0 : _table$getHeaderGroup2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getHeaderGroup : 0;\n };\n table.getLeftTotalSize = () => {\n var _table$getLeftHeaderG, _table$getLeftHeaderG2;\n return (_table$getLeftHeaderG = (_table$getLeftHeaderG2 = table.getLeftHeaderGroups()[0]) == null ? void 0 : _table$getLeftHeaderG2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getLeftHeaderG : 0;\n };\n table.getCenterTotalSize = () => {\n var _table$getCenterHeade, _table$getCenterHeade2;\n return (_table$getCenterHeade = (_table$getCenterHeade2 = table.getCenterHeaderGroups()[0]) == null ? void 0 : _table$getCenterHeade2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getCenterHeade : 0;\n };\n table.getRightTotalSize = () => {\n var _table$getRightHeader, _table$getRightHeader2;\n return (_table$getRightHeader = (_table$getRightHeader2 = table.getRightHeaderGroups()[0]) == null ? void 0 : _table$getRightHeader2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getRightHeader : 0;\n };\n }\n};\nlet passiveSupported = null;\nfunction passiveEventSupported() {\n if (typeof passiveSupported === 'boolean') return passiveSupported;\n let supported = false;\n try {\n const options = {\n get passive() {\n supported = true;\n return false;\n }\n };\n const noop = () => {};\n window.addEventListener('test', noop, options);\n window.removeEventListener('test', noop);\n } catch (err) {\n supported = false;\n }\n passiveSupported = supported;\n return passiveSupported;\n}\nfunction isTouchStartEvent(e) {\n return e.type === 'touchstart';\n}\n\n//\n\nconst ColumnVisibility = {\n getInitialState: state => {\n return {\n columnVisibility: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnVisibilityChange: makeStateUpdater('columnVisibility', table)\n };\n },\n createColumn: (column, table) => {\n column.toggleVisibility = value => {\n if (column.getCanHide()) {\n table.setColumnVisibility(old => ({\n ...old,\n [column.id]: value != null ? value : !column.getIsVisible()\n }));\n }\n };\n column.getIsVisible = () => {\n var _ref, _table$getState$colum;\n const childColumns = column.columns;\n return (_ref = childColumns.length ? childColumns.some(c => c.getIsVisible()) : (_table$getState$colum = table.getState().columnVisibility) == null ? void 0 : _table$getState$colum[column.id]) != null ? _ref : true;\n };\n column.getCanHide = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableHiding) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableHiding) != null ? _table$options$enable : true);\n };\n column.getToggleVisibilityHandler = () => {\n return e => {\n column.toggleVisibility == null || column.toggleVisibility(e.target.checked);\n };\n };\n },\n createRow: (row, table) => {\n row._getAllVisibleCells = memo(() => [row.getAllCells(), table.getState().columnVisibility], cells => {\n return cells.filter(cell => cell.column.getIsVisible());\n }, getMemoOptions(table.options, 'debugRows', '_getAllVisibleCells'));\n row.getVisibleCells = memo(() => [row.getLeftVisibleCells(), row.getCenterVisibleCells(), row.getRightVisibleCells()], (left, center, right) => [...left, ...center, ...right], getMemoOptions(table.options, 'debugRows', 'getVisibleCells'));\n },\n createTable: table => {\n const makeVisibleColumnsMethod = (key, getColumns) => {\n return memo(() => [getColumns(), getColumns().filter(d => d.getIsVisible()).map(d => d.id).join('_')], columns => {\n return columns.filter(d => d.getIsVisible == null ? void 0 : d.getIsVisible());\n }, getMemoOptions(table.options, 'debugColumns', key));\n };\n table.getVisibleFlatColumns = makeVisibleColumnsMethod('getVisibleFlatColumns', () => table.getAllFlatColumns());\n table.getVisibleLeafColumns = makeVisibleColumnsMethod('getVisibleLeafColumns', () => table.getAllLeafColumns());\n table.getLeftVisibleLeafColumns = makeVisibleColumnsMethod('getLeftVisibleLeafColumns', () => table.getLeftLeafColumns());\n table.getRightVisibleLeafColumns = makeVisibleColumnsMethod('getRightVisibleLeafColumns', () => table.getRightLeafColumns());\n table.getCenterVisibleLeafColumns = makeVisibleColumnsMethod('getCenterVisibleLeafColumns', () => table.getCenterLeafColumns());\n table.setColumnVisibility = updater => table.options.onColumnVisibilityChange == null ? void 0 : table.options.onColumnVisibilityChange(updater);\n table.resetColumnVisibility = defaultState => {\n var _table$initialState$c;\n table.setColumnVisibility(defaultState ? {} : (_table$initialState$c = table.initialState.columnVisibility) != null ? _table$initialState$c : {});\n };\n table.toggleAllColumnsVisible = value => {\n var _value;\n value = (_value = value) != null ? _value : !table.getIsAllColumnsVisible();\n table.setColumnVisibility(table.getAllLeafColumns().reduce((obj, column) => ({\n ...obj,\n [column.id]: !value ? !(column.getCanHide != null && column.getCanHide()) : value\n }), {}));\n };\n table.getIsAllColumnsVisible = () => !table.getAllLeafColumns().some(column => !(column.getIsVisible != null && column.getIsVisible()));\n table.getIsSomeColumnsVisible = () => table.getAllLeafColumns().some(column => column.getIsVisible == null ? void 0 : column.getIsVisible());\n table.getToggleAllColumnsVisibilityHandler = () => {\n return e => {\n var _target;\n table.toggleAllColumnsVisible((_target = e.target) == null ? void 0 : _target.checked);\n };\n };\n }\n};\nfunction _getVisibleLeafColumns(table, position) {\n return !position ? table.getVisibleLeafColumns() : position === 'center' ? table.getCenterVisibleLeafColumns() : position === 'left' ? table.getLeftVisibleLeafColumns() : table.getRightVisibleLeafColumns();\n}\n\n//\n\nconst GlobalFaceting = {\n createTable: table => {\n table._getGlobalFacetedRowModel = table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, '__global__');\n table.getGlobalFacetedRowModel = () => {\n if (table.options.manualFiltering || !table._getGlobalFacetedRowModel) {\n return table.getPreFilteredRowModel();\n }\n return table._getGlobalFacetedRowModel();\n };\n table._getGlobalFacetedUniqueValues = table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, '__global__');\n table.getGlobalFacetedUniqueValues = () => {\n if (!table._getGlobalFacetedUniqueValues) {\n return new Map();\n }\n return table._getGlobalFacetedUniqueValues();\n };\n table._getGlobalFacetedMinMaxValues = table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, '__global__');\n table.getGlobalFacetedMinMaxValues = () => {\n if (!table._getGlobalFacetedMinMaxValues) {\n return;\n }\n return table._getGlobalFacetedMinMaxValues();\n };\n }\n};\n\n//\n\nconst GlobalFiltering = {\n getInitialState: state => {\n return {\n globalFilter: undefined,\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onGlobalFilterChange: makeStateUpdater('globalFilter', table),\n globalFilterFn: 'auto',\n getColumnCanGlobalFilter: column => {\n var _table$getCoreRowMode;\n const value = (_table$getCoreRowMode = table.getCoreRowModel().flatRows[0]) == null || (_table$getCoreRowMode = _table$getCoreRowMode._getAllCellsByColumnId()[column.id]) == null ? void 0 : _table$getCoreRowMode.getValue();\n return typeof value === 'string' || typeof value === 'number';\n }\n };\n },\n createColumn: (column, table) => {\n column.getCanGlobalFilter = () => {\n var _column$columnDef$ena, _table$options$enable, _table$options$enable2, _table$options$getCol;\n return ((_column$columnDef$ena = column.columnDef.enableGlobalFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGlobalFilter) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && ((_table$options$getCol = table.options.getColumnCanGlobalFilter == null ? void 0 : table.options.getColumnCanGlobalFilter(column)) != null ? _table$options$getCol : true) && !!column.accessorFn;\n };\n },\n createTable: table => {\n table.getGlobalAutoFilterFn = () => {\n return filterFns.includesString;\n };\n table.getGlobalFilterFn = () => {\n var _table$options$filter, _table$options$filter2;\n const {\n globalFilterFn: globalFilterFn\n } = table.options;\n return isFunction(globalFilterFn) ? globalFilterFn : globalFilterFn === 'auto' ? table.getGlobalAutoFilterFn() : (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[globalFilterFn]) != null ? _table$options$filter : filterFns[globalFilterFn];\n };\n table.setGlobalFilter = updater => {\n table.options.onGlobalFilterChange == null || table.options.onGlobalFilterChange(updater);\n };\n table.resetGlobalFilter = defaultState => {\n table.setGlobalFilter(defaultState ? undefined : table.initialState.globalFilter);\n };\n }\n};\n\n//\n\nconst RowExpanding = {\n getInitialState: state => {\n return {\n expanded: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onExpandedChange: makeStateUpdater('expanded', table),\n paginateExpandedRows: true\n };\n },\n createTable: table => {\n let registered = false;\n let queued = false;\n table._autoResetExpanded = () => {\n var _ref, _table$options$autoRe;\n if (!registered) {\n table._queue(() => {\n registered = true;\n });\n return;\n }\n if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetExpanded) != null ? _ref : !table.options.manualExpanding) {\n if (queued) return;\n queued = true;\n table._queue(() => {\n table.resetExpanded();\n queued = false;\n });\n }\n };\n table.setExpanded = updater => table.options.onExpandedChange == null ? void 0 : table.options.onExpandedChange(updater);\n table.toggleAllRowsExpanded = expanded => {\n if (expanded != null ? expanded : !table.getIsAllRowsExpanded()) {\n table.setExpanded(true);\n } else {\n table.setExpanded({});\n }\n };\n table.resetExpanded = defaultState => {\n var _table$initialState$e, _table$initialState;\n table.setExpanded(defaultState ? {} : (_table$initialState$e = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.expanded) != null ? _table$initialState$e : {});\n };\n table.getCanSomeRowsExpand = () => {\n return table.getPrePaginationRowModel().flatRows.some(row => row.getCanExpand());\n };\n table.getToggleAllRowsExpandedHandler = () => {\n return e => {\n e.persist == null || e.persist();\n table.toggleAllRowsExpanded();\n };\n };\n table.getIsSomeRowsExpanded = () => {\n const expanded = table.getState().expanded;\n return expanded === true || Object.values(expanded).some(Boolean);\n };\n table.getIsAllRowsExpanded = () => {\n const expanded = table.getState().expanded;\n\n // If expanded is true, save some cycles and return true\n if (typeof expanded === 'boolean') {\n return expanded === true;\n }\n if (!Object.keys(expanded).length) {\n return false;\n }\n\n // If any row is not expanded, return false\n if (table.getRowModel().flatRows.some(row => !row.getIsExpanded())) {\n return false;\n }\n\n // They must all be expanded :shrug:\n return true;\n };\n table.getExpandedDepth = () => {\n let maxDepth = 0;\n const rowIds = table.getState().expanded === true ? Object.keys(table.getRowModel().rowsById) : Object.keys(table.getState().expanded);\n rowIds.forEach(id => {\n const splitId = id.split('.');\n maxDepth = Math.max(maxDepth, splitId.length);\n });\n return maxDepth;\n };\n table.getPreExpandedRowModel = () => table.getSortedRowModel();\n table.getExpandedRowModel = () => {\n if (!table._getExpandedRowModel && table.options.getExpandedRowModel) {\n table._getExpandedRowModel = table.options.getExpandedRowModel(table);\n }\n if (table.options.manualExpanding || !table._getExpandedRowModel) {\n return table.getPreExpandedRowModel();\n }\n return table._getExpandedRowModel();\n };\n },\n createRow: (row, table) => {\n row.toggleExpanded = expanded => {\n table.setExpanded(old => {\n var _expanded;\n const exists = old === true ? true : !!(old != null && old[row.id]);\n let oldExpanded = {};\n if (old === true) {\n Object.keys(table.getRowModel().rowsById).forEach(rowId => {\n oldExpanded[rowId] = true;\n });\n } else {\n oldExpanded = old;\n }\n expanded = (_expanded = expanded) != null ? _expanded : !exists;\n if (!exists && expanded) {\n return {\n ...oldExpanded,\n [row.id]: true\n };\n }\n if (exists && !expanded) {\n const {\n [row.id]: _,\n ...rest\n } = oldExpanded;\n return rest;\n }\n return old;\n });\n };\n row.getIsExpanded = () => {\n var _table$options$getIsR;\n const expanded = table.getState().expanded;\n return !!((_table$options$getIsR = table.options.getIsRowExpanded == null ? void 0 : table.options.getIsRowExpanded(row)) != null ? _table$options$getIsR : expanded === true || (expanded == null ? void 0 : expanded[row.id]));\n };\n row.getCanExpand = () => {\n var _table$options$getRow, _table$options$enable, _row$subRows;\n return (_table$options$getRow = table.options.getRowCanExpand == null ? void 0 : table.options.getRowCanExpand(row)) != null ? _table$options$getRow : ((_table$options$enable = table.options.enableExpanding) != null ? _table$options$enable : true) && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n };\n row.getIsAllParentsExpanded = () => {\n let isFullyExpanded = true;\n let currentRow = row;\n while (isFullyExpanded && currentRow.parentId) {\n currentRow = table.getRow(currentRow.parentId, true);\n isFullyExpanded = currentRow.getIsExpanded();\n }\n return isFullyExpanded;\n };\n row.getToggleExpandedHandler = () => {\n const canExpand = row.getCanExpand();\n return () => {\n if (!canExpand) return;\n row.toggleExpanded();\n };\n };\n }\n};\n\n//\n\nconst defaultPageIndex = 0;\nconst defaultPageSize = 10;\nconst getDefaultPaginationState = () => ({\n pageIndex: defaultPageIndex,\n pageSize: defaultPageSize\n});\nconst RowPagination = {\n getInitialState: state => {\n return {\n ...state,\n pagination: {\n ...getDefaultPaginationState(),\n ...(state == null ? void 0 : state.pagination)\n }\n };\n },\n getDefaultOptions: table => {\n return {\n onPaginationChange: makeStateUpdater('pagination', table)\n };\n },\n createTable: table => {\n let registered = false;\n let queued = false;\n table._autoResetPageIndex = () => {\n var _ref, _table$options$autoRe;\n if (!registered) {\n table._queue(() => {\n registered = true;\n });\n return;\n }\n if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetPageIndex) != null ? _ref : !table.options.manualPagination) {\n if (queued) return;\n queued = true;\n table._queue(() => {\n table.resetPageIndex();\n queued = false;\n });\n }\n };\n table.setPagination = updater => {\n const safeUpdater = old => {\n let newState = functionalUpdate(updater, old);\n return newState;\n };\n return table.options.onPaginationChange == null ? void 0 : table.options.onPaginationChange(safeUpdater);\n };\n table.resetPagination = defaultState => {\n var _table$initialState$p;\n table.setPagination(defaultState ? getDefaultPaginationState() : (_table$initialState$p = table.initialState.pagination) != null ? _table$initialState$p : getDefaultPaginationState());\n };\n table.setPageIndex = updater => {\n table.setPagination(old => {\n let pageIndex = functionalUpdate(updater, old.pageIndex);\n const maxPageIndex = typeof table.options.pageCount === 'undefined' || table.options.pageCount === -1 ? Number.MAX_SAFE_INTEGER : table.options.pageCount - 1;\n pageIndex = Math.max(0, Math.min(pageIndex, maxPageIndex));\n return {\n ...old,\n pageIndex\n };\n });\n };\n table.resetPageIndex = defaultState => {\n var _table$initialState$p2, _table$initialState;\n table.setPageIndex(defaultState ? defaultPageIndex : (_table$initialState$p2 = (_table$initialState = table.initialState) == null || (_table$initialState = _table$initialState.pagination) == null ? void 0 : _table$initialState.pageIndex) != null ? _table$initialState$p2 : defaultPageIndex);\n };\n table.resetPageSize = defaultState => {\n var _table$initialState$p3, _table$initialState2;\n table.setPageSize(defaultState ? defaultPageSize : (_table$initialState$p3 = (_table$initialState2 = table.initialState) == null || (_table$initialState2 = _table$initialState2.pagination) == null ? void 0 : _table$initialState2.pageSize) != null ? _table$initialState$p3 : defaultPageSize);\n };\n table.setPageSize = updater => {\n table.setPagination(old => {\n const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize));\n const topRowIndex = old.pageSize * old.pageIndex;\n const pageIndex = Math.floor(topRowIndex / pageSize);\n return {\n ...old,\n pageIndex,\n pageSize\n };\n });\n };\n //deprecated\n table.setPageCount = updater => table.setPagination(old => {\n var _table$options$pageCo;\n let newPageCount = functionalUpdate(updater, (_table$options$pageCo = table.options.pageCount) != null ? _table$options$pageCo : -1);\n if (typeof newPageCount === 'number') {\n newPageCount = Math.max(-1, newPageCount);\n }\n return {\n ...old,\n pageCount: newPageCount\n };\n });\n table.getPageOptions = memo(() => [table.getPageCount()], pageCount => {\n let pageOptions = [];\n if (pageCount && pageCount > 0) {\n pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i);\n }\n return pageOptions;\n }, getMemoOptions(table.options, 'debugTable', 'getPageOptions'));\n table.getCanPreviousPage = () => table.getState().pagination.pageIndex > 0;\n table.getCanNextPage = () => {\n const {\n pageIndex\n } = table.getState().pagination;\n const pageCount = table.getPageCount();\n if (pageCount === -1) {\n return true;\n }\n if (pageCount === 0) {\n return false;\n }\n return pageIndex < pageCount - 1;\n };\n table.previousPage = () => {\n return table.setPageIndex(old => old - 1);\n };\n table.nextPage = () => {\n return table.setPageIndex(old => {\n return old + 1;\n });\n };\n table.firstPage = () => {\n return table.setPageIndex(0);\n };\n table.lastPage = () => {\n return table.setPageIndex(table.getPageCount() - 1);\n };\n table.getPrePaginationRowModel = () => table.getExpandedRowModel();\n table.getPaginationRowModel = () => {\n if (!table._getPaginationRowModel && table.options.getPaginationRowModel) {\n table._getPaginationRowModel = table.options.getPaginationRowModel(table);\n }\n if (table.options.manualPagination || !table._getPaginationRowModel) {\n return table.getPrePaginationRowModel();\n }\n return table._getPaginationRowModel();\n };\n table.getPageCount = () => {\n var _table$options$pageCo2;\n return (_table$options$pageCo2 = table.options.pageCount) != null ? _table$options$pageCo2 : Math.ceil(table.getRowCount() / table.getState().pagination.pageSize);\n };\n table.getRowCount = () => {\n var _table$options$rowCou;\n return (_table$options$rowCou = table.options.rowCount) != null ? _table$options$rowCou : table.getPrePaginationRowModel().rows.length;\n };\n }\n};\n\n//\n\nconst getDefaultRowPinningState = () => ({\n top: [],\n bottom: []\n});\nconst RowPinning = {\n getInitialState: state => {\n return {\n rowPinning: getDefaultRowPinningState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onRowPinningChange: makeStateUpdater('rowPinning', table)\n };\n },\n createRow: (row, table) => {\n row.pin = (position, includeLeafRows, includeParentRows) => {\n const leafRowIds = includeLeafRows ? row.getLeafRows().map(_ref => {\n let {\n id\n } = _ref;\n return id;\n }) : [];\n const parentRowIds = includeParentRows ? row.getParentRows().map(_ref2 => {\n let {\n id\n } = _ref2;\n return id;\n }) : [];\n const rowIds = new Set([...parentRowIds, row.id, ...leafRowIds]);\n table.setRowPinning(old => {\n var _old$top3, _old$bottom3;\n if (position === 'bottom') {\n var _old$top, _old$bottom;\n return {\n top: ((_old$top = old == null ? void 0 : old.top) != null ? _old$top : []).filter(d => !(rowIds != null && rowIds.has(d))),\n bottom: [...((_old$bottom = old == null ? void 0 : old.bottom) != null ? _old$bottom : []).filter(d => !(rowIds != null && rowIds.has(d))), ...Array.from(rowIds)]\n };\n }\n if (position === 'top') {\n var _old$top2, _old$bottom2;\n return {\n top: [...((_old$top2 = old == null ? void 0 : old.top) != null ? _old$top2 : []).filter(d => !(rowIds != null && rowIds.has(d))), ...Array.from(rowIds)],\n bottom: ((_old$bottom2 = old == null ? void 0 : old.bottom) != null ? _old$bottom2 : []).filter(d => !(rowIds != null && rowIds.has(d)))\n };\n }\n return {\n top: ((_old$top3 = old == null ? void 0 : old.top) != null ? _old$top3 : []).filter(d => !(rowIds != null && rowIds.has(d))),\n bottom: ((_old$bottom3 = old == null ? void 0 : old.bottom) != null ? _old$bottom3 : []).filter(d => !(rowIds != null && rowIds.has(d)))\n };\n });\n };\n row.getCanPin = () => {\n var _ref3;\n const {\n enableRowPinning,\n enablePinning\n } = table.options;\n if (typeof enableRowPinning === 'function') {\n return enableRowPinning(row);\n }\n return (_ref3 = enableRowPinning != null ? enableRowPinning : enablePinning) != null ? _ref3 : true;\n };\n row.getIsPinned = () => {\n const rowIds = [row.id];\n const {\n top,\n bottom\n } = table.getState().rowPinning;\n const isTop = rowIds.some(d => top == null ? void 0 : top.includes(d));\n const isBottom = rowIds.some(d => bottom == null ? void 0 : bottom.includes(d));\n return isTop ? 'top' : isBottom ? 'bottom' : false;\n };\n row.getPinnedIndex = () => {\n var _ref4, _visiblePinnedRowIds$;\n const position = row.getIsPinned();\n if (!position) return -1;\n const visiblePinnedRowIds = (_ref4 = position === 'top' ? table.getTopRows() : table.getBottomRows()) == null ? void 0 : _ref4.map(_ref5 => {\n let {\n id\n } = _ref5;\n return id;\n });\n return (_visiblePinnedRowIds$ = visiblePinnedRowIds == null ? void 0 : visiblePinnedRowIds.indexOf(row.id)) != null ? _visiblePinnedRowIds$ : -1;\n };\n },\n createTable: table => {\n table.setRowPinning = updater => table.options.onRowPinningChange == null ? void 0 : table.options.onRowPinningChange(updater);\n table.resetRowPinning = defaultState => {\n var _table$initialState$r, _table$initialState;\n return table.setRowPinning(defaultState ? getDefaultRowPinningState() : (_table$initialState$r = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.rowPinning) != null ? _table$initialState$r : getDefaultRowPinningState());\n };\n table.getIsSomeRowsPinned = position => {\n var _pinningState$positio;\n const pinningState = table.getState().rowPinning;\n if (!position) {\n var _pinningState$top, _pinningState$bottom;\n return Boolean(((_pinningState$top = pinningState.top) == null ? void 0 : _pinningState$top.length) || ((_pinningState$bottom = pinningState.bottom) == null ? void 0 : _pinningState$bottom.length));\n }\n return Boolean((_pinningState$positio = pinningState[position]) == null ? void 0 : _pinningState$positio.length);\n };\n table._getPinnedRows = (visibleRows, pinnedRowIds, position) => {\n var _table$options$keepPi;\n const rows = ((_table$options$keepPi = table.options.keepPinnedRows) != null ? _table$options$keepPi : true) ?\n //get all rows that are pinned even if they would not be otherwise visible\n //account for expanded parent rows, but not pagination or filtering\n (pinnedRowIds != null ? pinnedRowIds : []).map(rowId => {\n const row = table.getRow(rowId, true);\n return row.getIsAllParentsExpanded() ? row : null;\n }) :\n //else get only visible rows that are pinned\n (pinnedRowIds != null ? pinnedRowIds : []).map(rowId => visibleRows.find(row => row.id === rowId));\n return rows.filter(Boolean).map(d => ({\n ...d,\n position\n }));\n };\n table.getTopRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.top], (allRows, topPinnedRowIds) => table._getPinnedRows(allRows, topPinnedRowIds, 'top'), getMemoOptions(table.options, 'debugRows', 'getTopRows'));\n table.getBottomRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.bottom], (allRows, bottomPinnedRowIds) => table._getPinnedRows(allRows, bottomPinnedRowIds, 'bottom'), getMemoOptions(table.options, 'debugRows', 'getBottomRows'));\n table.getCenterRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.top, table.getState().rowPinning.bottom], (allRows, top, bottom) => {\n const topAndBottom = new Set([...(top != null ? top : []), ...(bottom != null ? bottom : [])]);\n return allRows.filter(d => !topAndBottom.has(d.id));\n }, getMemoOptions(table.options, 'debugRows', 'getCenterRows'));\n }\n};\n\n//\n\nconst RowSelection = {\n getInitialState: state => {\n return {\n rowSelection: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onRowSelectionChange: makeStateUpdater('rowSelection', table),\n enableRowSelection: true,\n enableMultiRowSelection: true,\n enableSubRowSelection: true\n // enableGroupingRowSelection: false,\n // isAdditiveSelectEvent: (e: unknown) => !!e.metaKey,\n // isInclusiveSelectEvent: (e: unknown) => !!e.shiftKey,\n };\n },\n createTable: table => {\n table.setRowSelection = updater => table.options.onRowSelectionChange == null ? void 0 : table.options.onRowSelectionChange(updater);\n table.resetRowSelection = defaultState => {\n var _table$initialState$r;\n return table.setRowSelection(defaultState ? {} : (_table$initialState$r = table.initialState.rowSelection) != null ? _table$initialState$r : {});\n };\n table.toggleAllRowsSelected = value => {\n table.setRowSelection(old => {\n value = typeof value !== 'undefined' ? value : !table.getIsAllRowsSelected();\n const rowSelection = {\n ...old\n };\n const preGroupedFlatRows = table.getPreGroupedRowModel().flatRows;\n\n // We don't use `mutateRowIsSelected` here for performance reasons.\n // All of the rows are flat already, so it wouldn't be worth it\n if (value) {\n preGroupedFlatRows.forEach(row => {\n if (!row.getCanSelect()) {\n return;\n }\n rowSelection[row.id] = true;\n });\n } else {\n preGroupedFlatRows.forEach(row => {\n delete rowSelection[row.id];\n });\n }\n return rowSelection;\n });\n };\n table.toggleAllPageRowsSelected = value => table.setRowSelection(old => {\n const resolvedValue = typeof value !== 'undefined' ? value : !table.getIsAllPageRowsSelected();\n const rowSelection = {\n ...old\n };\n table.getRowModel().rows.forEach(row => {\n mutateRowIsSelected(rowSelection, row.id, resolvedValue, true, table);\n });\n return rowSelection;\n });\n\n // addRowSelectionRange: rowId => {\n // const {\n // rows,\n // rowsById,\n // options: { selectGroupingRows, selectSubRows },\n // } = table\n\n // const findSelectedRow = (rows: Row[]) => {\n // let found\n // rows.find(d => {\n // if (d.getIsSelected()) {\n // found = d\n // return true\n // }\n // const subFound = findSelectedRow(d.subRows || [])\n // if (subFound) {\n // found = subFound\n // return true\n // }\n // return false\n // })\n // return found\n // }\n\n // const firstRow = findSelectedRow(rows) || rows[0]\n // const lastRow = rowsById[rowId]\n\n // let include = false\n // const selectedRowIds = {}\n\n // const addRow = (row: Row) => {\n // mutateRowIsSelected(selectedRowIds, row.id, true, {\n // rowsById,\n // selectGroupingRows: selectGroupingRows!,\n // selectSubRows: selectSubRows!,\n // })\n // }\n\n // table.rows.forEach(row => {\n // const isFirstRow = row.id === firstRow.id\n // const isLastRow = row.id === lastRow.id\n\n // if (isFirstRow || isLastRow) {\n // if (!include) {\n // include = true\n // } else if (include) {\n // addRow(row)\n // include = false\n // }\n // }\n\n // if (include) {\n // addRow(row)\n // }\n // })\n\n // table.setRowSelection(selectedRowIds)\n // },\n table.getPreSelectedRowModel = () => table.getCoreRowModel();\n table.getSelectedRowModel = memo(() => [table.getState().rowSelection, table.getCoreRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getSelectedRowModel'));\n table.getFilteredSelectedRowModel = memo(() => [table.getState().rowSelection, table.getFilteredRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getFilteredSelectedRowModel'));\n table.getGroupedSelectedRowModel = memo(() => [table.getState().rowSelection, table.getSortedRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getGroupedSelectedRowModel'));\n\n ///\n\n // getGroupingRowCanSelect: rowId => {\n // const row = table.getRow(rowId)\n\n // if (!row) {\n // throw new Error()\n // }\n\n // if (typeof table.options.enableGroupingRowSelection === 'function') {\n // return table.options.enableGroupingRowSelection(row)\n // }\n\n // return table.options.enableGroupingRowSelection ?? false\n // },\n\n table.getIsAllRowsSelected = () => {\n const preGroupedFlatRows = table.getFilteredRowModel().flatRows;\n const {\n rowSelection\n } = table.getState();\n let isAllRowsSelected = Boolean(preGroupedFlatRows.length && Object.keys(rowSelection).length);\n if (isAllRowsSelected) {\n if (preGroupedFlatRows.some(row => row.getCanSelect() && !rowSelection[row.id])) {\n isAllRowsSelected = false;\n }\n }\n return isAllRowsSelected;\n };\n table.getIsAllPageRowsSelected = () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows.filter(row => row.getCanSelect());\n const {\n rowSelection\n } = table.getState();\n let isAllPageRowsSelected = !!paginationFlatRows.length;\n if (isAllPageRowsSelected && paginationFlatRows.some(row => !rowSelection[row.id])) {\n isAllPageRowsSelected = false;\n }\n return isAllPageRowsSelected;\n };\n table.getIsSomeRowsSelected = () => {\n var _table$getState$rowSe;\n const totalSelected = Object.keys((_table$getState$rowSe = table.getState().rowSelection) != null ? _table$getState$rowSe : {}).length;\n return totalSelected > 0 && totalSelected < table.getFilteredRowModel().flatRows.length;\n };\n table.getIsSomePageRowsSelected = () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows;\n return table.getIsAllPageRowsSelected() ? false : paginationFlatRows.filter(row => row.getCanSelect()).some(d => d.getIsSelected() || d.getIsSomeSelected());\n };\n table.getToggleAllRowsSelectedHandler = () => {\n return e => {\n table.toggleAllRowsSelected(e.target.checked);\n };\n };\n table.getToggleAllPageRowsSelectedHandler = () => {\n return e => {\n table.toggleAllPageRowsSelected(e.target.checked);\n };\n };\n },\n createRow: (row, table) => {\n row.toggleSelected = (value, opts) => {\n const isSelected = row.getIsSelected();\n table.setRowSelection(old => {\n var _opts$selectChildren;\n value = typeof value !== 'undefined' ? value : !isSelected;\n if (row.getCanSelect() && isSelected === value) {\n return old;\n }\n const selectedRowIds = {\n ...old\n };\n mutateRowIsSelected(selectedRowIds, row.id, value, (_opts$selectChildren = opts == null ? void 0 : opts.selectChildren) != null ? _opts$selectChildren : true, table);\n return selectedRowIds;\n });\n };\n row.getIsSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isRowSelected(row, rowSelection);\n };\n row.getIsSomeSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isSubRowSelected(row, rowSelection) === 'some';\n };\n row.getIsAllSubRowsSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isSubRowSelected(row, rowSelection) === 'all';\n };\n row.getCanSelect = () => {\n var _table$options$enable;\n if (typeof table.options.enableRowSelection === 'function') {\n return table.options.enableRowSelection(row);\n }\n return (_table$options$enable = table.options.enableRowSelection) != null ? _table$options$enable : true;\n };\n row.getCanSelectSubRows = () => {\n var _table$options$enable2;\n if (typeof table.options.enableSubRowSelection === 'function') {\n return table.options.enableSubRowSelection(row);\n }\n return (_table$options$enable2 = table.options.enableSubRowSelection) != null ? _table$options$enable2 : true;\n };\n row.getCanMultiSelect = () => {\n var _table$options$enable3;\n if (typeof table.options.enableMultiRowSelection === 'function') {\n return table.options.enableMultiRowSelection(row);\n }\n return (_table$options$enable3 = table.options.enableMultiRowSelection) != null ? _table$options$enable3 : true;\n };\n row.getToggleSelectedHandler = () => {\n const canSelect = row.getCanSelect();\n return e => {\n var _target;\n if (!canSelect) return;\n row.toggleSelected((_target = e.target) == null ? void 0 : _target.checked);\n };\n };\n }\n};\nconst mutateRowIsSelected = (selectedRowIds, id, value, includeChildren, table) => {\n var _row$subRows;\n const row = table.getRow(id, true);\n\n // const isGrouped = row.getIsGrouped()\n\n // if ( // TODO: enforce grouping row selection rules\n // !isGrouped ||\n // (isGrouped && table.options.enableGroupingRowSelection)\n // ) {\n if (value) {\n if (!row.getCanMultiSelect()) {\n Object.keys(selectedRowIds).forEach(key => delete selectedRowIds[key]);\n }\n if (row.getCanSelect()) {\n selectedRowIds[id] = true;\n }\n } else {\n delete selectedRowIds[id];\n }\n // }\n\n if (includeChildren && (_row$subRows = row.subRows) != null && _row$subRows.length && row.getCanSelectSubRows()) {\n row.subRows.forEach(row => mutateRowIsSelected(selectedRowIds, row.id, value, includeChildren, table));\n }\n};\nfunction selectRowsFn(table, rowModel) {\n const rowSelection = table.getState().rowSelection;\n const newSelectedFlatRows = [];\n const newSelectedRowsById = {};\n\n // Filters top level and nested rows\n const recurseRows = function (rows, depth) {\n return rows.map(row => {\n var _row$subRows2;\n const isSelected = isRowSelected(row, rowSelection);\n if (isSelected) {\n newSelectedFlatRows.push(row);\n newSelectedRowsById[row.id] = row;\n }\n if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length) {\n row = {\n ...row,\n subRows: recurseRows(row.subRows)\n };\n }\n if (isSelected) {\n return row;\n }\n }).filter(Boolean);\n };\n return {\n rows: recurseRows(rowModel.rows),\n flatRows: newSelectedFlatRows,\n rowsById: newSelectedRowsById\n };\n}\nfunction isRowSelected(row, selection) {\n var _selection$row$id;\n return (_selection$row$id = selection[row.id]) != null ? _selection$row$id : false;\n}\nfunction isSubRowSelected(row, selection, table) {\n var _row$subRows3;\n if (!((_row$subRows3 = row.subRows) != null && _row$subRows3.length)) return false;\n let allChildrenSelected = true;\n let someSelected = false;\n row.subRows.forEach(subRow => {\n // Bail out early if we know both of these\n if (someSelected && !allChildrenSelected) {\n return;\n }\n if (subRow.getCanSelect()) {\n if (isRowSelected(subRow, selection)) {\n someSelected = true;\n } else {\n allChildrenSelected = false;\n }\n }\n\n // Check row selection of nested subrows\n if (subRow.subRows && subRow.subRows.length) {\n const subRowChildrenSelected = isSubRowSelected(subRow, selection);\n if (subRowChildrenSelected === 'all') {\n someSelected = true;\n } else if (subRowChildrenSelected === 'some') {\n someSelected = true;\n allChildrenSelected = false;\n } else {\n allChildrenSelected = false;\n }\n }\n });\n return allChildrenSelected ? 'all' : someSelected ? 'some' : false;\n}\n\nconst reSplitAlphaNumeric = /([0-9]+)/gm;\nconst alphanumeric = (rowA, rowB, columnId) => {\n return compareAlphanumeric(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n};\nconst alphanumericCaseSensitive = (rowA, rowB, columnId) => {\n return compareAlphanumeric(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n};\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst text = (rowA, rowB, columnId) => {\n return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n};\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst textCaseSensitive = (rowA, rowB, columnId) => {\n return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n};\nconst datetime = (rowA, rowB, columnId) => {\n const a = rowA.getValue(columnId);\n const b = rowB.getValue(columnId);\n\n // Can handle nullish values\n // Use > and < because == (and ===) doesn't work with\n // Date objects (would require calling getTime()).\n return a > b ? 1 : a < b ? -1 : 0;\n};\nconst basic = (rowA, rowB, columnId) => {\n return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId));\n};\n\n// Utils\n\nfunction compareBasic(a, b) {\n return a === b ? 0 : a > b ? 1 : -1;\n}\nfunction toString(a) {\n if (typeof a === 'number') {\n if (isNaN(a) || a === Infinity || a === -Infinity) {\n return '';\n }\n return String(a);\n }\n if (typeof a === 'string') {\n return a;\n }\n return '';\n}\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nfunction compareAlphanumeric(aStr, bStr) {\n // Split on number groups, but keep the delimiter\n // Then remove falsey split values\n const a = aStr.split(reSplitAlphaNumeric).filter(Boolean);\n const b = bStr.split(reSplitAlphaNumeric).filter(Boolean);\n\n // While\n while (a.length && b.length) {\n const aa = a.shift();\n const bb = b.shift();\n const an = parseInt(aa, 10);\n const bn = parseInt(bb, 10);\n const combo = [an, bn].sort();\n\n // Both are string\n if (isNaN(combo[0])) {\n if (aa > bb) {\n return 1;\n }\n if (bb > aa) {\n return -1;\n }\n continue;\n }\n\n // One is a string, one is a number\n if (isNaN(combo[1])) {\n return isNaN(an) ? -1 : 1;\n }\n\n // Both are numbers\n if (an > bn) {\n return 1;\n }\n if (bn > an) {\n return -1;\n }\n }\n return a.length - b.length;\n}\n\n// Exports\n\nconst sortingFns = {\n alphanumeric,\n alphanumericCaseSensitive,\n text,\n textCaseSensitive,\n datetime,\n basic\n};\n\n//\n\nconst RowSorting = {\n getInitialState: state => {\n return {\n sorting: [],\n ...state\n };\n },\n getDefaultColumnDef: () => {\n return {\n sortingFn: 'auto',\n sortUndefined: 1\n };\n },\n getDefaultOptions: table => {\n return {\n onSortingChange: makeStateUpdater('sorting', table),\n isMultiSortEvent: e => {\n return e.shiftKey;\n }\n };\n },\n createColumn: (column, table) => {\n column.getAutoSortingFn = () => {\n const firstRows = table.getFilteredRowModel().flatRows.slice(10);\n let isString = false;\n for (const row of firstRows) {\n const value = row == null ? void 0 : row.getValue(column.id);\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return sortingFns.datetime;\n }\n if (typeof value === 'string') {\n isString = true;\n if (value.split(reSplitAlphaNumeric).length > 1) {\n return sortingFns.alphanumeric;\n }\n }\n }\n if (isString) {\n return sortingFns.text;\n }\n return sortingFns.basic;\n };\n column.getAutoSortDir = () => {\n const firstRow = table.getFilteredRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'string') {\n return 'asc';\n }\n return 'desc';\n };\n column.getSortingFn = () => {\n var _table$options$sortin, _table$options$sortin2;\n if (!column) {\n throw new Error();\n }\n return isFunction(column.columnDef.sortingFn) ? column.columnDef.sortingFn : column.columnDef.sortingFn === 'auto' ? column.getAutoSortingFn() : (_table$options$sortin = (_table$options$sortin2 = table.options.sortingFns) == null ? void 0 : _table$options$sortin2[column.columnDef.sortingFn]) != null ? _table$options$sortin : sortingFns[column.columnDef.sortingFn];\n };\n column.toggleSorting = (desc, multi) => {\n // if (column.columns.length) {\n // column.columns.forEach((c, i) => {\n // if (c.id) {\n // table.toggleColumnSorting(c.id, undefined, multi || !!i)\n // }\n // })\n // return\n // }\n\n // this needs to be outside of table.setSorting to be in sync with rerender\n const nextSortingOrder = column.getNextSortingOrder();\n const hasManualValue = typeof desc !== 'undefined' && desc !== null;\n table.setSorting(old => {\n // Find any existing sorting for this column\n const existingSorting = old == null ? void 0 : old.find(d => d.id === column.id);\n const existingIndex = old == null ? void 0 : old.findIndex(d => d.id === column.id);\n let newSorting = [];\n\n // What should we do with this sort action?\n let sortAction;\n let nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc';\n\n // Multi-mode\n if (old != null && old.length && column.getCanMultiSort() && multi) {\n if (existingSorting) {\n sortAction = 'toggle';\n } else {\n sortAction = 'add';\n }\n } else {\n // Normal mode\n if (old != null && old.length && existingIndex !== old.length - 1) {\n sortAction = 'replace';\n } else if (existingSorting) {\n sortAction = 'toggle';\n } else {\n sortAction = 'replace';\n }\n }\n\n // Handle toggle states that will remove the sorting\n if (sortAction === 'toggle') {\n // If we are \"actually\" toggling (not a manual set value), should we remove the sorting?\n if (!hasManualValue) {\n // Is our intention to remove?\n if (!nextSortingOrder) {\n sortAction = 'remove';\n }\n }\n }\n if (sortAction === 'add') {\n var _table$options$maxMul;\n newSorting = [...old, {\n id: column.id,\n desc: nextDesc\n }];\n // Take latest n columns\n newSorting.splice(0, newSorting.length - ((_table$options$maxMul = table.options.maxMultiSortColCount) != null ? _table$options$maxMul : Number.MAX_SAFE_INTEGER));\n } else if (sortAction === 'toggle') {\n // This flips (or sets) the\n newSorting = old.map(d => {\n if (d.id === column.id) {\n return {\n ...d,\n desc: nextDesc\n };\n }\n return d;\n });\n } else if (sortAction === 'remove') {\n newSorting = old.filter(d => d.id !== column.id);\n } else {\n newSorting = [{\n id: column.id,\n desc: nextDesc\n }];\n }\n return newSorting;\n });\n };\n column.getFirstSortDir = () => {\n var _ref, _column$columnDef$sor;\n const sortDescFirst = (_ref = (_column$columnDef$sor = column.columnDef.sortDescFirst) != null ? _column$columnDef$sor : table.options.sortDescFirst) != null ? _ref : column.getAutoSortDir() === 'desc';\n return sortDescFirst ? 'desc' : 'asc';\n };\n column.getNextSortingOrder = multi => {\n var _table$options$enable, _table$options$enable2;\n const firstSortDirection = column.getFirstSortDir();\n const isSorted = column.getIsSorted();\n if (!isSorted) {\n return firstSortDirection;\n }\n if (isSorted !== firstSortDirection && ((_table$options$enable = table.options.enableSortingRemoval) != null ? _table$options$enable : true) && (\n // If enableSortRemove, enable in general\n multi ? (_table$options$enable2 = table.options.enableMultiRemove) != null ? _table$options$enable2 : true : true) // If multi, don't allow if enableMultiRemove))\n ) {\n return false;\n }\n return isSorted === 'desc' ? 'asc' : 'desc';\n };\n column.getCanSort = () => {\n var _column$columnDef$ena, _table$options$enable3;\n return ((_column$columnDef$ena = column.columnDef.enableSorting) != null ? _column$columnDef$ena : true) && ((_table$options$enable3 = table.options.enableSorting) != null ? _table$options$enable3 : true) && !!column.accessorFn;\n };\n column.getCanMultiSort = () => {\n var _ref2, _column$columnDef$ena2;\n return (_ref2 = (_column$columnDef$ena2 = column.columnDef.enableMultiSort) != null ? _column$columnDef$ena2 : table.options.enableMultiSort) != null ? _ref2 : !!column.accessorFn;\n };\n column.getIsSorted = () => {\n var _table$getState$sorti;\n const columnSort = (_table$getState$sorti = table.getState().sorting) == null ? void 0 : _table$getState$sorti.find(d => d.id === column.id);\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc';\n };\n column.getSortIndex = () => {\n var _table$getState$sorti2, _table$getState$sorti3;\n return (_table$getState$sorti2 = (_table$getState$sorti3 = table.getState().sorting) == null ? void 0 : _table$getState$sorti3.findIndex(d => d.id === column.id)) != null ? _table$getState$sorti2 : -1;\n };\n column.clearSorting = () => {\n //clear sorting for just 1 column\n table.setSorting(old => old != null && old.length ? old.filter(d => d.id !== column.id) : []);\n };\n column.getToggleSortingHandler = () => {\n const canSort = column.getCanSort();\n return e => {\n if (!canSort) return;\n e.persist == null || e.persist();\n column.toggleSorting == null || column.toggleSorting(undefined, column.getCanMultiSort() ? table.options.isMultiSortEvent == null ? void 0 : table.options.isMultiSortEvent(e) : false);\n };\n };\n },\n createTable: table => {\n table.setSorting = updater => table.options.onSortingChange == null ? void 0 : table.options.onSortingChange(updater);\n table.resetSorting = defaultState => {\n var _table$initialState$s, _table$initialState;\n table.setSorting(defaultState ? [] : (_table$initialState$s = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.sorting) != null ? _table$initialState$s : []);\n };\n table.getPreSortedRowModel = () => table.getGroupedRowModel();\n table.getSortedRowModel = () => {\n if (!table._getSortedRowModel && table.options.getSortedRowModel) {\n table._getSortedRowModel = table.options.getSortedRowModel(table);\n }\n if (table.options.manualSorting || !table._getSortedRowModel) {\n return table.getPreSortedRowModel();\n }\n return table._getSortedRowModel();\n };\n }\n};\n\nconst builtInFeatures = [Headers, ColumnVisibility, ColumnOrdering, ColumnPinning, ColumnFaceting, ColumnFiltering, GlobalFaceting,\n//depends on ColumnFaceting\nGlobalFiltering,\n//depends on ColumnFiltering\nRowSorting, ColumnGrouping,\n//depends on RowSorting\nRowExpanding, RowPagination, RowPinning, RowSelection, ColumnSizing];\n\n//\n\nfunction createTable(options) {\n var _options$_features, _options$initialState;\n if (process.env.NODE_ENV !== 'production' && (options.debugAll || options.debugTable)) {\n console.info('Creating Table Instance...');\n }\n const _features = [...builtInFeatures, ...((_options$_features = options._features) != null ? _options$_features : [])];\n let table = {\n _features\n };\n const defaultOptions = table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultOptions == null ? void 0 : feature.getDefaultOptions(table));\n }, {});\n const mergeOptions = options => {\n if (table.options.mergeOptions) {\n return table.options.mergeOptions(defaultOptions, options);\n }\n return {\n ...defaultOptions,\n ...options\n };\n };\n const coreInitialState = {};\n let initialState = {\n ...coreInitialState,\n ...((_options$initialState = options.initialState) != null ? _options$initialState : {})\n };\n table._features.forEach(feature => {\n var _feature$getInitialSt;\n initialState = (_feature$getInitialSt = feature.getInitialState == null ? void 0 : feature.getInitialState(initialState)) != null ? _feature$getInitialSt : initialState;\n });\n const queued = [];\n let queuedTimeout = false;\n const coreInstance = {\n _features,\n options: {\n ...defaultOptions,\n ...options\n },\n initialState,\n _queue: cb => {\n queued.push(cb);\n if (!queuedTimeout) {\n queuedTimeout = true;\n\n // Schedule a microtask to run the queued callbacks after\n // the current call stack (render, etc) has finished.\n Promise.resolve().then(() => {\n while (queued.length) {\n queued.shift()();\n }\n queuedTimeout = false;\n }).catch(error => setTimeout(() => {\n throw error;\n }));\n }\n },\n reset: () => {\n table.setState(table.initialState);\n },\n setOptions: updater => {\n const newOptions = functionalUpdate(updater, table.options);\n table.options = mergeOptions(newOptions);\n },\n getState: () => {\n return table.options.state;\n },\n setState: updater => {\n table.options.onStateChange == null || table.options.onStateChange(updater);\n },\n _getRowId: (row, index, parent) => {\n var _table$options$getRow;\n return (_table$options$getRow = table.options.getRowId == null ? void 0 : table.options.getRowId(row, index, parent)) != null ? _table$options$getRow : `${parent ? [parent.id, index].join('.') : index}`;\n },\n getCoreRowModel: () => {\n if (!table._getCoreRowModel) {\n table._getCoreRowModel = table.options.getCoreRowModel(table);\n }\n return table._getCoreRowModel();\n },\n // The final calls start at the bottom of the model,\n // expanded rows, which then work their way up\n\n getRowModel: () => {\n return table.getPaginationRowModel();\n },\n //in next version, we should just pass in the row model as the optional 2nd arg\n getRow: (id, searchAll) => {\n let row = (searchAll ? table.getPrePaginationRowModel() : table.getRowModel()).rowsById[id];\n if (!row) {\n row = table.getCoreRowModel().rowsById[id];\n if (!row) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(`getRow could not find row with ID: ${id}`);\n }\n throw new Error();\n }\n }\n return row;\n },\n _getDefaultColumnDef: memo(() => [table.options.defaultColumn], defaultColumn => {\n var _defaultColumn;\n defaultColumn = (_defaultColumn = defaultColumn) != null ? _defaultColumn : {};\n return {\n header: props => {\n const resolvedColumnDef = props.header.column.columnDef;\n if (resolvedColumnDef.accessorKey) {\n return resolvedColumnDef.accessorKey;\n }\n if (resolvedColumnDef.accessorFn) {\n return resolvedColumnDef.id;\n }\n return null;\n },\n // footer: props => props.header.column.id,\n cell: props => {\n var _props$renderValue$to, _props$renderValue;\n return (_props$renderValue$to = (_props$renderValue = props.renderValue()) == null || _props$renderValue.toString == null ? void 0 : _props$renderValue.toString()) != null ? _props$renderValue$to : null;\n },\n ...table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultColumnDef == null ? void 0 : feature.getDefaultColumnDef());\n }, {}),\n ...defaultColumn\n };\n }, getMemoOptions(options, 'debugColumns', '_getDefaultColumnDef')),\n _getColumnDefs: () => table.options.columns,\n getAllColumns: memo(() => [table._getColumnDefs()], columnDefs => {\n const recurseColumns = function (columnDefs, parent, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n return columnDefs.map(columnDef => {\n const column = createColumn(table, columnDef, depth, parent);\n const groupingColumnDef = columnDef;\n column.columns = groupingColumnDef.columns ? recurseColumns(groupingColumnDef.columns, column, depth + 1) : [];\n return column;\n });\n };\n return recurseColumns(columnDefs);\n }, getMemoOptions(options, 'debugColumns', 'getAllColumns')),\n getAllFlatColumns: memo(() => [table.getAllColumns()], allColumns => {\n return allColumns.flatMap(column => {\n return column.getFlatColumns();\n });\n }, getMemoOptions(options, 'debugColumns', 'getAllFlatColumns')),\n _getAllFlatColumnsById: memo(() => [table.getAllFlatColumns()], flatColumns => {\n return flatColumns.reduce((acc, column) => {\n acc[column.id] = column;\n return acc;\n }, {});\n }, getMemoOptions(options, 'debugColumns', 'getAllFlatColumnsById')),\n getAllLeafColumns: memo(() => [table.getAllColumns(), table._getOrderColumnsFn()], (allColumns, orderColumns) => {\n let leafColumns = allColumns.flatMap(column => column.getLeafColumns());\n return orderColumns(leafColumns);\n }, getMemoOptions(options, 'debugColumns', 'getAllLeafColumns')),\n getColumn: columnId => {\n const column = table._getAllFlatColumnsById()[columnId];\n if (process.env.NODE_ENV !== 'production' && !column) {\n console.error(`[Table] Column with id '${columnId}' does not exist.`);\n }\n return column;\n }\n };\n Object.assign(table, coreInstance);\n for (let index = 0; index < table._features.length; index++) {\n const feature = table._features[index];\n feature == null || feature.createTable == null || feature.createTable(table);\n }\n return table;\n}\n\nfunction getCoreRowModel() {\n return table => memo(() => [table.options.data], data => {\n const rowModel = {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n const accessRows = function (originalRows, depth, parentRow) {\n if (depth === void 0) {\n depth = 0;\n }\n const rows = [];\n for (let i = 0; i < originalRows.length; i++) {\n // This could be an expensive check at scale, so we should move it somewhere else, but where?\n // if (!id) {\n // if (process.env.NODE_ENV !== 'production') {\n // throw new Error(`getRowId expected an ID, but got ${id}`)\n // }\n // }\n\n // Make the row\n const row = createRow(table, table._getRowId(originalRows[i], i, parentRow), originalRows[i], i, depth, undefined, parentRow == null ? void 0 : parentRow.id);\n\n // Keep track of every row in a flat array\n rowModel.flatRows.push(row);\n // Also keep track of every row by its ID\n rowModel.rowsById[row.id] = row;\n // Push table row into parent\n rows.push(row);\n\n // Get the original subrows\n if (table.options.getSubRows) {\n var _row$originalSubRows;\n row.originalSubRows = table.options.getSubRows(originalRows[i], i);\n\n // Then recursively access them\n if ((_row$originalSubRows = row.originalSubRows) != null && _row$originalSubRows.length) {\n row.subRows = accessRows(row.originalSubRows, depth + 1, row);\n }\n }\n }\n return rows;\n };\n rowModel.rows = accessRows(data);\n return rowModel;\n }, getMemoOptions(table.options, 'debugTable', 'getRowModel', () => table._autoResetPageIndex()));\n}\n\nfunction getExpandedRowModel() {\n return table => memo(() => [table.getState().expanded, table.getPreExpandedRowModel(), table.options.paginateExpandedRows], (expanded, rowModel, paginateExpandedRows) => {\n if (!rowModel.rows.length || expanded !== true && !Object.keys(expanded != null ? expanded : {}).length) {\n return rowModel;\n }\n if (!paginateExpandedRows) {\n // Only expand rows at this point if they are being paginated\n return rowModel;\n }\n return expandRows(rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getExpandedRowModel'));\n}\nfunction expandRows(rowModel) {\n const expandedRows = [];\n const handleRow = row => {\n var _row$subRows;\n expandedRows.push(row);\n if ((_row$subRows = row.subRows) != null && _row$subRows.length && row.getIsExpanded()) {\n row.subRows.forEach(handleRow);\n }\n };\n rowModel.rows.forEach(handleRow);\n return {\n rows: expandedRows,\n flatRows: rowModel.flatRows,\n rowsById: rowModel.rowsById\n };\n}\n\nfunction getFacetedMinMaxValues() {\n return (table, columnId) => memo(() => {\n var _table$getColumn;\n return [(_table$getColumn = table.getColumn(columnId)) == null ? void 0 : _table$getColumn.getFacetedRowModel()];\n }, facetedRowModel => {\n if (!facetedRowModel) return undefined;\n const uniqueValues = facetedRowModel.flatRows.flatMap(flatRow => {\n var _flatRow$getUniqueVal;\n return (_flatRow$getUniqueVal = flatRow.getUniqueValues(columnId)) != null ? _flatRow$getUniqueVal : [];\n }).map(Number).filter(value => !Number.isNaN(value));\n if (!uniqueValues.length) return;\n let facetedMinValue = uniqueValues[0];\n let facetedMaxValue = uniqueValues[uniqueValues.length - 1];\n for (const value of uniqueValues) {\n if (value < facetedMinValue) facetedMinValue = value;else if (value > facetedMaxValue) facetedMaxValue = value;\n }\n return [facetedMinValue, facetedMaxValue];\n }, getMemoOptions(table.options, 'debugTable', 'getFacetedMinMaxValues'));\n}\n\nfunction filterRows(rows, filterRowImpl, table) {\n if (table.options.filterFromLeafRows) {\n return filterRowModelFromLeafs(rows, filterRowImpl, table);\n }\n return filterRowModelFromRoot(rows, filterRowImpl, table);\n}\nfunction filterRowModelFromLeafs(rowsToFilter, filterRow, table) {\n var _table$options$maxLea;\n const newFilteredFlatRows = [];\n const newFilteredRowsById = {};\n const maxDepth = (_table$options$maxLea = table.options.maxLeafRowFilterDepth) != null ? _table$options$maxLea : 100;\n const recurseFilterRows = function (rowsToFilter, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n const rows = [];\n\n // Filter from children up first\n for (let i = 0; i < rowsToFilter.length; i++) {\n var _row$subRows;\n let row = rowsToFilter[i];\n const newRow = createRow(table, row.id, row.original, row.index, row.depth, undefined, row.parentId);\n newRow.columnFilters = row.columnFilters;\n if ((_row$subRows = row.subRows) != null && _row$subRows.length && depth < maxDepth) {\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n row = newRow;\n if (filterRow(row) && !newRow.subRows.length) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n continue;\n }\n if (filterRow(row) || newRow.subRows.length) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n continue;\n }\n } else {\n row = newRow;\n if (filterRow(row)) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n }\n }\n }\n return rows;\n };\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById\n };\n}\nfunction filterRowModelFromRoot(rowsToFilter, filterRow, table) {\n var _table$options$maxLea2;\n const newFilteredFlatRows = [];\n const newFilteredRowsById = {};\n const maxDepth = (_table$options$maxLea2 = table.options.maxLeafRowFilterDepth) != null ? _table$options$maxLea2 : 100;\n\n // Filters top level and nested rows\n const recurseFilterRows = function (rowsToFilter, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n // Filter from parents downward first\n\n const rows = [];\n\n // Apply the filter to any subRows\n for (let i = 0; i < rowsToFilter.length; i++) {\n let row = rowsToFilter[i];\n const pass = filterRow(row);\n if (pass) {\n var _row$subRows2;\n if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length && depth < maxDepth) {\n const newRow = createRow(table, row.id, row.original, row.index, row.depth, undefined, row.parentId);\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n row = newRow;\n }\n rows.push(row);\n newFilteredFlatRows.push(row);\n newFilteredRowsById[row.id] = row;\n }\n }\n return rows;\n };\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById\n };\n}\n\nfunction getFacetedRowModel() {\n return (table, columnId) => memo(() => [table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter, table.getFilteredRowModel()], (preRowModel, columnFilters, globalFilter) => {\n if (!preRowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n return preRowModel;\n }\n const filterableIds = [...columnFilters.map(d => d.id).filter(d => d !== columnId), globalFilter ? '__global__' : undefined].filter(Boolean);\n const filterRowsImpl = row => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]] === false) {\n return false;\n }\n }\n return true;\n };\n return filterRows(preRowModel.rows, filterRowsImpl, table);\n }, getMemoOptions(table.options, 'debugTable', 'getFacetedRowModel'));\n}\n\nfunction getFacetedUniqueValues() {\n return (table, columnId) => memo(() => {\n var _table$getColumn;\n return [(_table$getColumn = table.getColumn(columnId)) == null ? void 0 : _table$getColumn.getFacetedRowModel()];\n }, facetedRowModel => {\n if (!facetedRowModel) return new Map();\n let facetedUniqueValues = new Map();\n for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n const values = facetedRowModel.flatRows[i].getUniqueValues(columnId);\n for (let j = 0; j < values.length; j++) {\n const value = values[j];\n if (facetedUniqueValues.has(value)) {\n var _facetedUniqueValues$;\n facetedUniqueValues.set(value, ((_facetedUniqueValues$ = facetedUniqueValues.get(value)) != null ? _facetedUniqueValues$ : 0) + 1);\n } else {\n facetedUniqueValues.set(value, 1);\n }\n }\n }\n return facetedUniqueValues;\n }, getMemoOptions(table.options, 'debugTable', `getFacetedUniqueValues_${columnId}`));\n}\n\nfunction getFilteredRowModel() {\n return table => memo(() => [table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter], (rowModel, columnFilters, globalFilter) => {\n if (!rowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n for (let i = 0; i < rowModel.flatRows.length; i++) {\n rowModel.flatRows[i].columnFilters = {};\n rowModel.flatRows[i].columnFiltersMeta = {};\n }\n return rowModel;\n }\n const resolvedColumnFilters = [];\n const resolvedGlobalFilters = [];\n (columnFilters != null ? columnFilters : []).forEach(d => {\n var _filterFn$resolveFilt;\n const column = table.getColumn(d.id);\n if (!column) {\n return;\n }\n const filterFn = column.getFilterFn();\n if (!filterFn) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Could not find a valid 'column.filterFn' for column with the ID: ${column.id}.`);\n }\n return;\n }\n resolvedColumnFilters.push({\n id: d.id,\n filterFn,\n resolvedValue: (_filterFn$resolveFilt = filterFn.resolveFilterValue == null ? void 0 : filterFn.resolveFilterValue(d.value)) != null ? _filterFn$resolveFilt : d.value\n });\n });\n const filterableIds = (columnFilters != null ? columnFilters : []).map(d => d.id);\n const globalFilterFn = table.getGlobalFilterFn();\n const globallyFilterableColumns = table.getAllLeafColumns().filter(column => column.getCanGlobalFilter());\n if (globalFilter && globalFilterFn && globallyFilterableColumns.length) {\n filterableIds.push('__global__');\n globallyFilterableColumns.forEach(column => {\n var _globalFilterFn$resol;\n resolvedGlobalFilters.push({\n id: column.id,\n filterFn: globalFilterFn,\n resolvedValue: (_globalFilterFn$resol = globalFilterFn.resolveFilterValue == null ? void 0 : globalFilterFn.resolveFilterValue(globalFilter)) != null ? _globalFilterFn$resol : globalFilter\n });\n });\n }\n let currentColumnFilter;\n let currentGlobalFilter;\n\n // Flag the prefiltered row model with each filter state\n for (let j = 0; j < rowModel.flatRows.length; j++) {\n const row = rowModel.flatRows[j];\n row.columnFilters = {};\n if (resolvedColumnFilters.length) {\n for (let i = 0; i < resolvedColumnFilters.length; i++) {\n currentColumnFilter = resolvedColumnFilters[i];\n const id = currentColumnFilter.id;\n\n // Tag the row with the column filter state\n row.columnFilters[id] = currentColumnFilter.filterFn(row, id, currentColumnFilter.resolvedValue, filterMeta => {\n row.columnFiltersMeta[id] = filterMeta;\n });\n }\n }\n if (resolvedGlobalFilters.length) {\n for (let i = 0; i < resolvedGlobalFilters.length; i++) {\n currentGlobalFilter = resolvedGlobalFilters[i];\n const id = currentGlobalFilter.id;\n // Tag the row with the first truthy global filter state\n if (currentGlobalFilter.filterFn(row, id, currentGlobalFilter.resolvedValue, filterMeta => {\n row.columnFiltersMeta[id] = filterMeta;\n })) {\n row.columnFilters.__global__ = true;\n break;\n }\n }\n if (row.columnFilters.__global__ !== true) {\n row.columnFilters.__global__ = false;\n }\n }\n }\n const filterRowsImpl = row => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]] === false) {\n return false;\n }\n }\n return true;\n };\n\n // Filter final rows using all of the active filters\n return filterRows(rowModel.rows, filterRowsImpl, table);\n }, getMemoOptions(table.options, 'debugTable', 'getFilteredRowModel', () => table._autoResetPageIndex()));\n}\n\nfunction getGroupedRowModel() {\n return table => memo(() => [table.getState().grouping, table.getPreGroupedRowModel()], (grouping, rowModel) => {\n if (!rowModel.rows.length || !grouping.length) {\n rowModel.rows.forEach(row => {\n row.depth = 0;\n row.parentId = undefined;\n });\n return rowModel;\n }\n\n // Filter the grouping list down to columns that exist\n const existingGrouping = grouping.filter(columnId => table.getColumn(columnId));\n const groupedFlatRows = [];\n const groupedRowsById = {};\n // const onlyGroupedFlatRows: Row[] = [];\n // const onlyGroupedRowsById: Record<RowId, Row> = {};\n // const nonGroupedFlatRows: Row[] = [];\n // const nonGroupedRowsById: Record<RowId, Row> = {};\n\n // Recursively group the data\n const groupUpRecursively = function (rows, depth, parentId) {\n if (depth === void 0) {\n depth = 0;\n }\n // Grouping depth has been been met\n // Stop grouping and simply rewrite thd depth and row relationships\n if (depth >= existingGrouping.length) {\n return rows.map(row => {\n row.depth = depth;\n groupedFlatRows.push(row);\n groupedRowsById[row.id] = row;\n if (row.subRows) {\n row.subRows = groupUpRecursively(row.subRows, depth + 1, row.id);\n }\n return row;\n });\n }\n const columnId = existingGrouping[depth];\n\n // Group the rows together for this level\n const rowGroupsMap = groupBy(rows, columnId);\n\n // Perform aggregations for each group\n const aggregatedGroupedRows = Array.from(rowGroupsMap.entries()).map((_ref, index) => {\n let [groupingValue, groupedRows] = _ref;\n let id = `${columnId}:${groupingValue}`;\n id = parentId ? `${parentId}>${id}` : id;\n\n // First, Recurse to group sub rows before aggregation\n const subRows = groupUpRecursively(groupedRows, depth + 1, id);\n subRows.forEach(subRow => {\n subRow.parentId = id;\n });\n\n // Flatten the leaf rows of the rows in this group\n const leafRows = depth ? flattenBy(groupedRows, row => row.subRows) : groupedRows;\n const row = createRow(table, id, leafRows[0].original, index, depth, undefined, parentId);\n Object.assign(row, {\n groupingColumnId: columnId,\n groupingValue,\n subRows,\n leafRows,\n getValue: columnId => {\n // Don't aggregate columns that are in the grouping\n if (existingGrouping.includes(columnId)) {\n if (row._valuesCache.hasOwnProperty(columnId)) {\n return row._valuesCache[columnId];\n }\n if (groupedRows[0]) {\n var _groupedRows$0$getVal;\n row._valuesCache[columnId] = (_groupedRows$0$getVal = groupedRows[0].getValue(columnId)) != null ? _groupedRows$0$getVal : undefined;\n }\n return row._valuesCache[columnId];\n }\n if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n return row._groupingValuesCache[columnId];\n }\n\n // Aggregate the values\n const column = table.getColumn(columnId);\n const aggregateFn = column == null ? void 0 : column.getAggregationFn();\n if (aggregateFn) {\n row._groupingValuesCache[columnId] = aggregateFn(columnId, leafRows, groupedRows);\n return row._groupingValuesCache[columnId];\n }\n }\n });\n subRows.forEach(subRow => {\n groupedFlatRows.push(subRow);\n groupedRowsById[subRow.id] = subRow;\n // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n });\n return row;\n });\n return aggregatedGroupedRows;\n };\n const groupedRows = groupUpRecursively(rowModel.rows, 0);\n groupedRows.forEach(subRow => {\n groupedFlatRows.push(subRow);\n groupedRowsById[subRow.id] = subRow;\n // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n });\n return {\n rows: groupedRows,\n flatRows: groupedFlatRows,\n rowsById: groupedRowsById\n };\n }, getMemoOptions(table.options, 'debugTable', 'getGroupedRowModel', () => {\n table._queue(() => {\n table._autoResetExpanded();\n table._autoResetPageIndex();\n });\n }));\n}\nfunction groupBy(rows, columnId) {\n const groupMap = new Map();\n return rows.reduce((map, row) => {\n const resKey = `${row.getGroupingValue(columnId)}`;\n const previous = map.get(resKey);\n if (!previous) {\n map.set(resKey, [row]);\n } else {\n previous.push(row);\n }\n return map;\n }, groupMap);\n}\n\nfunction getPaginationRowModel(opts) {\n return table => memo(() => [table.getState().pagination, table.getPrePaginationRowModel(), table.options.paginateExpandedRows ? undefined : table.getState().expanded], (pagination, rowModel) => {\n if (!rowModel.rows.length) {\n return rowModel;\n }\n const {\n pageSize,\n pageIndex\n } = pagination;\n let {\n rows,\n flatRows,\n rowsById\n } = rowModel;\n const pageStart = pageSize * pageIndex;\n const pageEnd = pageStart + pageSize;\n rows = rows.slice(pageStart, pageEnd);\n let paginatedRowModel;\n if (!table.options.paginateExpandedRows) {\n paginatedRowModel = expandRows({\n rows,\n flatRows,\n rowsById\n });\n } else {\n paginatedRowModel = {\n rows,\n flatRows,\n rowsById\n };\n }\n paginatedRowModel.flatRows = [];\n const handleRow = row => {\n paginatedRowModel.flatRows.push(row);\n if (row.subRows.length) {\n row.subRows.forEach(handleRow);\n }\n };\n paginatedRowModel.rows.forEach(handleRow);\n return paginatedRowModel;\n }, getMemoOptions(table.options, 'debugTable', 'getPaginationRowModel'));\n}\n\nfunction getSortedRowModel() {\n return table => memo(() => [table.getState().sorting, table.getPreSortedRowModel()], (sorting, rowModel) => {\n if (!rowModel.rows.length || !(sorting != null && sorting.length)) {\n return rowModel;\n }\n const sortingState = table.getState().sorting;\n const sortedFlatRows = [];\n\n // Filter out sortings that correspond to non existing columns\n const availableSorting = sortingState.filter(sort => {\n var _table$getColumn;\n return (_table$getColumn = table.getColumn(sort.id)) == null ? void 0 : _table$getColumn.getCanSort();\n });\n const columnInfoById = {};\n availableSorting.forEach(sortEntry => {\n const column = table.getColumn(sortEntry.id);\n if (!column) return;\n columnInfoById[sortEntry.id] = {\n sortUndefined: column.columnDef.sortUndefined,\n invertSorting: column.columnDef.invertSorting,\n sortingFn: column.getSortingFn()\n };\n });\n const sortData = rows => {\n // This will also perform a stable sorting using the row index\n // if needed.\n const sortedData = rows.map(row => ({\n ...row\n }));\n sortedData.sort((rowA, rowB) => {\n for (let i = 0; i < availableSorting.length; i += 1) {\n var _sortEntry$desc;\n const sortEntry = availableSorting[i];\n const columnInfo = columnInfoById[sortEntry.id];\n const sortUndefined = columnInfo.sortUndefined;\n const isDesc = (_sortEntry$desc = sortEntry == null ? void 0 : sortEntry.desc) != null ? _sortEntry$desc : false;\n let sortInt = 0;\n\n // All sorting ints should always return in ascending order\n if (sortUndefined) {\n const aValue = rowA.getValue(sortEntry.id);\n const bValue = rowB.getValue(sortEntry.id);\n const aUndefined = aValue === undefined;\n const bUndefined = bValue === undefined;\n if (aUndefined || bUndefined) {\n if (sortUndefined === 'first') return aUndefined ? -1 : 1;\n if (sortUndefined === 'last') return aUndefined ? 1 : -1;\n sortInt = aUndefined && bUndefined ? 0 : aUndefined ? sortUndefined : -sortUndefined;\n }\n }\n if (sortInt === 0) {\n sortInt = columnInfo.sortingFn(rowA, rowB, sortEntry.id);\n }\n\n // If sorting is non-zero, take care of desc and inversion\n if (sortInt !== 0) {\n if (isDesc) {\n sortInt *= -1;\n }\n if (columnInfo.invertSorting) {\n sortInt *= -1;\n }\n return sortInt;\n }\n }\n return rowA.index - rowB.index;\n });\n\n // If there are sub-rows, sort them\n sortedData.forEach(row => {\n var _row$subRows;\n sortedFlatRows.push(row);\n if ((_row$subRows = row.subRows) != null && _row$subRows.length) {\n row.subRows = sortData(row.subRows);\n }\n });\n return sortedData;\n };\n return {\n rows: sortData(rowModel.rows),\n flatRows: sortedFlatRows,\n rowsById: rowModel.rowsById\n };\n }, getMemoOptions(table.options, 'debugTable', 'getSortedRowModel', () => table._autoResetPageIndex()));\n}\n\nexport { ColumnFaceting, ColumnFiltering, ColumnGrouping, ColumnOrdering, ColumnPinning, ColumnSizing, ColumnVisibility, GlobalFaceting, GlobalFiltering, Headers, RowExpanding, RowPagination, RowPinning, RowSelection, RowSorting, _getVisibleLeafColumns, aggregationFns, buildHeaderGroups, createCell, createColumn, createColumnHelper, createRow, createTable, defaultColumnSizing, expandRows, filterFns, flattenBy, functionalUpdate, getCoreRowModel, getExpandedRowModel, getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, getFilteredRowModel, getGroupedRowModel, getMemoOptions, getPaginationRowModel, getSortedRowModel, isFunction, isNumberArray, isRowSelected, isSubRowSelected, makeStateUpdater, memo, noop, orderColumns, passiveEventSupported, reSplitAlphaNumeric, selectRowsFn, shouldAutoRemoveFilter, sortingFns };\n//# sourceMappingURL=index.mjs.map\n","/**\n * react-table\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport { createTable } from '@tanstack/table-core';\nexport * from '@tanstack/table-core';\n\n//\n\n/**\n * If rendering headers, cells, or footers with custom markup, use flexRender instead of `cell.getValue()` or `cell.renderValue()`.\n */\nfunction flexRender(Comp, props) {\n return !Comp ? null : isReactComponent(Comp) ? /*#__PURE__*/React.createElement(Comp, props) : Comp;\n}\nfunction isReactComponent(component) {\n return isClassComponent(component) || typeof component === 'function' || isExoticComponent(component);\n}\nfunction isClassComponent(component) {\n return typeof component === 'function' && (() => {\n const proto = Object.getPrototypeOf(component);\n return proto.prototype && proto.prototype.isReactComponent;\n })();\n}\nfunction isExoticComponent(component) {\n return typeof component === 'object' && typeof component.$$typeof === 'symbol' && ['react.memo', 'react.forward_ref'].includes(component.$$typeof.description);\n}\nfunction useReactTable(options) {\n // Compose in the generic options to the user options\n const resolvedOptions = {\n state: {},\n // Dummy state\n onStateChange: () => {},\n // noop\n renderFallbackValue: null,\n ...options\n };\n\n // Create a new table and store it in state\n const [tableRef] = React.useState(() => ({\n current: createTable(resolvedOptions)\n }));\n\n // By default, manage table state here using the table's initial state\n const [state, setState] = React.useState(() => tableRef.current.initialState);\n\n // Compose the default state above with any user state. This will allow the user\n // to only control a subset of the state if desired.\n tableRef.current.setOptions(prev => ({\n ...prev,\n ...options,\n state: {\n ...state,\n ...options.state\n },\n // Similarly, we'll maintain both our internal state and any user-provided\n // state.\n onStateChange: updater => {\n setState(updater);\n options.onStateChange == null || options.onStateChange(updater);\n }\n }));\n return tableRef.current;\n}\n\nexport { flexRender, useReactTable };\n//# sourceMappingURL=index.mjs.map\n","import React, { useState, useMemo, useCallback } from 'react';\nimport {\n useReactTable,\n getCoreRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n getFilteredRowModel,\n flexRender,\n createColumnHelper,\n type SortingState,\n type ColumnResizeMode,\n} from '@tanstack/react-table';\nimport { AlertCircle, AlertTriangle, ChevronLeft, ChevronRight, Edit2, Trash2 } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useImportStore, validateCellValue } from '../../store/import-store';\nimport type { ParsedRow, ValidationError } from '@fileflow/shared';\n\ninterface DataTableProps {\n editable?: boolean;\n deletable?: boolean;\n pageSize?: number;\n onCellEdit?: (rowIndex: number, columnKey: string, value: string) => void;\n onRowDelete?: (rowIndex: number) => void;\n}\n\nexport const DataTable: React.FC<DataTableProps> = ({\n editable = true,\n deletable = true,\n pageSize = 25,\n onCellEdit,\n onRowDelete,\n}) => {\n const {\n rows,\n schema,\n mappings,\n errorsByRow,\n editingCell,\n startEditing,\n stopEditing,\n updateCell,\n deleteRow,\n } = useImportStore();\n\n const [sorting, setSorting] = useState<SortingState>([]);\n const [globalFilter, setGlobalFilter] = useState('');\n const [editValue, setEditValue] = useState('');\n const [editError, setEditError] = useState<string | null>(null);\n const [columnResizeMode] = useState<ColumnResizeMode>('onChange');\n\n // Get mapped columns\n const displayColumns = useMemo(() => {\n return mappings\n .filter((m) => m.targetKey !== null)\n .map((m) => {\n const schemaCol = schema?.columns.find((c) => c.key === m.targetKey);\n return {\n sourceColumn: m.sourceColumn,\n targetKey: m.targetKey!,\n label: schemaCol?.label || m.targetKey!,\n type: schemaCol?.type || 'string',\n };\n });\n }, [mappings, schema]);\n\n // Get error for specific cell\n const getCellError = useCallback(\n (rowIndex: number, columnKey: string): ValidationError | undefined => {\n const rowErrors = errorsByRow.get(rowIndex);\n return rowErrors?.find((e) => e.columnKey === columnKey);\n },\n [errorsByRow]\n );\n\n // Validate edit value in real-time\n const validateEditInput = useCallback(\n (value: string, columnKey: string): string | null => {\n if (!schema) return null;\n const col = schema.columns.find((c) => c.key === columnKey);\n if (!col) return null;\n const errors = validateCellValue(value, col);\n const blocking = errors.find((e) => e.severity === 'error');\n return blocking ? blocking.message : null;\n },\n [schema]\n );\n\n // Handle cell edit start\n const handleStartEdit = (rowIndex: number, columnKey: string, currentValue: string) => {\n setEditValue(currentValue);\n setEditError(null);\n startEditing(rowIndex, columnKey);\n };\n\n // Handle edit value change with real-time validation\n const handleEditChange = (value: string, columnKey: string) => {\n setEditValue(value);\n const err = validateEditInput(value, columnKey);\n setEditError(err);\n };\n\n // Handle cell edit save\n const handleSaveEdit = () => {\n if (editError) return;\n if (editingCell) {\n updateCell(editingCell.rowIndex, editingCell.columnKey, editValue);\n onCellEdit?.(editingCell.rowIndex, editingCell.columnKey, editValue);\n }\n setEditError(null);\n stopEditing();\n };\n\n // Handle cell edit cancel\n const handleCancelEdit = () => {\n setEditValue('');\n setEditError(null);\n stopEditing();\n };\n\n // Handle row delete\n const handleDeleteRow = (rowIndex: number) => {\n deleteRow(rowIndex);\n onRowDelete?.(rowIndex);\n };\n\n // Build table columns\n const columnHelper = createColumnHelper<ParsedRow>();\n\n const columns = useMemo(\n () => [\n columnHelper.accessor('rowIndex', {\n header: '#',\n size: deletable ? 80 : 60,\n enableResizing: false,\n cell: (info) => {\n const rowIdx = info.getValue();\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span className=\"ff-font-mono ff-text-xs\" style={{ color: 'var(--ff-text-muted)' }}>\n {rowIdx + 1}\n </span>\n {deletable && (\n <button\n onClick={(e) => { e.stopPropagation(); handleDeleteRow(rowIdx); }}\n title=\"Delete row\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '4px',\n borderRadius: '4px',\n cursor: 'pointer',\n color: '#8e8d89',\n background: 'transparent',\n border: 'none',\n transition: 'color 0.15s, background-color 0.15s',\n marginLeft: '2px',\n flexShrink: 0,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.color = '#d43338';\n e.currentTarget.style.backgroundColor = '#fcdede';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.color = '#8e8d89';\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n <Trash2 style={{ width: '14px', height: '14px', display: 'block' }} />\n </button>\n )}\n </div>\n );\n },\n }),\n ...displayColumns.map((col) =>\n columnHelper.accessor((row) => row.data[col.targetKey] || row.data[col.sourceColumn], {\n id: col.targetKey,\n header: col.label,\n size: 150,\n minSize: 80,\n cell: (info) => {\n const rowIndex = info.row.original.rowIndex;\n const value = String(info.getValue() ?? '');\n const error = getCellError(rowIndex, col.targetKey);\n const isEditing =\n editingCell?.rowIndex === rowIndex && editingCell?.columnKey === col.targetKey;\n\n if (isEditing) {\n return (\n <div className=\"ff-min-w-[280px]\">\n <div className=\"ff-flex ff-items-center ff-gap-2\">\n <input\n type=\"text\"\n value={editValue}\n onChange={(e) => handleEditChange(e.target.value, col.targetKey)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !editError) handleSaveEdit();\n if (e.key === 'Escape') handleCancelEdit();\n }}\n className={clsx(\n 'ff-input ff-py-2 ff-px-3 ff-text-sm ff-flex-1 ff-min-w-[160px]',\n editError && 'ff-input-error'\n )}\n autoFocus\n />\n <button\n onClick={handleSaveEdit}\n disabled={!!editError}\n className=\"ff-btn ff-btn-primary ff-btn-sm ff-flex-shrink-0\"\n style={editError ? { opacity: 0.5, cursor: 'not-allowed' } : undefined}\n >\n Save\n </button>\n <button\n onClick={handleCancelEdit}\n className=\"ff-btn ff-btn-secondary ff-btn-sm ff-flex-shrink-0\"\n >\n Cancel\n </button>\n </div>\n {editError && (\n <p className=\"ff-text-xs ff-mt-1\" style={{ color: 'var(--ff-error)' }}>{editError}</p>\n )}\n </div>\n );\n }\n\n return (\n <div\n className={clsx(\n 'ff-group ff-flex ff-items-center ff-gap-2',\n error?.severity === 'error' && 'ff-cell-error',\n error?.severity === 'warning' && 'ff-cell-warning'\n )}\n >\n <span className=\"ff-flex-1 ff-truncate\">{value || <span style={{ color: 'var(--ff-text-muted)' }}>—</span>}</span>\n {error && (\n <div className=\"ff-relative ff-group/tooltip\">\n {error.severity === 'error' ? (\n <AlertCircle className=\"ff-w-4 ff-h-4\" style={{ color: 'var(--ff-error)' }} />\n ) : (\n <AlertTriangle className=\"ff-w-4 ff-h-4\" style={{ color: 'var(--ff-warning)' }} />\n )}\n <div className=\"ff-tooltip ff-bottom-full ff-left-1/2 ff-transform ff--translate-x-1/2 ff-mb-2 ff-w-48 group-hover/tooltip:ff-tooltip-visible\">\n {error.message}\n {error.suggestion && (\n <span className=\"ff-block ff-mt-1\" style={{ color: 'var(--ff-text-muted)' }}>{error.suggestion}</span>\n )}\n </div>\n </div>\n )}\n {editable && (\n <button\n onClick={() => handleStartEdit(rowIndex, col.targetKey, value)}\n className=\"ff-opacity-0 group-hover:ff-opacity-100 ff-p-1 ff-rounded ff-transition-opacity ff-edit-btn\"\n >\n <Edit2 className=\"ff-w-3 ff-h-3\" />\n </button>\n )}\n </div>\n );\n },\n })\n ),\n ],\n [displayColumns, editingCell, editValue, editError, editable, deletable, getCellError, columnHelper]\n );\n\n const table = useReactTable({\n data: rows,\n columns,\n columnResizeMode,\n enableColumnResizing: true,\n state: {\n sorting,\n globalFilter,\n },\n onSortingChange: setSorting,\n onGlobalFilterChange: setGlobalFilter,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n initialState: {\n pagination: {\n pageSize,\n },\n },\n });\n\n return (\n <div className=\"ff-space-y-4\">\n {/* Search & Row Count */}\n <div className=\"ff-flex ff-items-center ff-justify-between\">\n <input\n type=\"text\"\n value={globalFilter}\n onChange={(e) => setGlobalFilter(e.target.value)}\n placeholder=\"Search all columns...\"\n className=\"ff-input ff-max-w-xs\"\n />\n <div className=\"ff-text-sm\" style={{ color: 'var(--ff-text-muted)' }}>\n {table.getFilteredRowModel().rows.length} rows\n </div>\n </div>\n\n {/* Table */}\n <div className=\"ff-table-container ff-max-h-[500px]\">\n <table className=\"ff-table\" style={{ width: table.getCenterTotalSize() }}>\n <thead>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <th\n key={header.id}\n style={{ width: header.getSize(), position: 'relative' }}\n onClick={header.column.getCanSort() ? header.column.getToggleSortingHandler() : undefined}\n className={clsx(\n header.column.getCanSort() && 'ff-cursor-pointer ff-select-none'\n )}\n >\n <div className=\"ff-flex ff-items-center ff-gap-1\">\n {flexRender(header.column.columnDef.header, header.getContext())}\n {header.column.getIsSorted() && (\n <span>{header.column.getIsSorted() === 'asc' ? '↑' : '↓'}</span>\n )}\n </div>\n {header.column.getCanResize() && (\n <div\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n className=\"ff-resize-handle\"\n style={{\n position: 'absolute',\n right: 0,\n top: 0,\n height: '100%',\n width: '5px',\n cursor: 'col-resize',\n userSelect: 'none',\n touchAction: 'none',\n }}\n />\n )}\n </th>\n ))}\n </tr>\n ))}\n </thead>\n <tbody>\n {table.getRowModel().rows.map((row) => {\n const hasError = errorsByRow.has(row.original.rowIndex);\n return (\n <tr\n key={row.id}\n className={clsx(hasError && 'ff-row-error')}\n >\n {row.getVisibleCells().map((cell) => (\n <td key={cell.id} style={{ width: cell.column.getSize() }}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n ))}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n\n {/* Pagination */}\n <div className=\"ff-flex ff-items-center ff-justify-between ff-px-2\">\n <div className=\"ff-text-sm\" style={{ color: 'var(--ff-text-muted)' }}>\n Page {table.getState().pagination.pageIndex + 1} of {table.getPageCount()}\n </div>\n <div className=\"ff-flex ff-items-center ff-gap-2\">\n <button\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n className=\"ff-btn ff-btn-secondary ff-btn-sm\"\n >\n <ChevronLeft className=\"ff-w-4 ff-h-4\" />\n Previous\n </button>\n <button\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n className=\"ff-btn ff-btn-secondary ff-btn-sm\"\n >\n Next\n <ChevronRight className=\"ff-w-4 ff-h-4\" />\n </button>\n </div>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { CheckCircle, XCircle, AlertTriangle, Info } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useImportStore } from '../../store/import-store';\n\ninterface ValidationSummaryProps {\n showDetails?: boolean;\n}\n\nexport const ValidationSummary: React.FC<ValidationSummaryProps> = ({\n showDetails = true,\n}) => {\n const { validationResults } = useImportStore();\n\n if (!validationResults) {\n return null;\n }\n\n const { isValid, totalRows, validRows, errorCount, warningCount, infoCount, summary } =\n validationResults;\n\n const validPercentage = Math.round((validRows / totalRows) * 100);\n\n return (\n <div className=\"ff-space-y-4\">\n {/* Overall Status */}\n <div\n className=\"ff-flex ff-items-center ff-gap-4 ff-p-4 ff-rounded-lg ff-border\"\n style={{\n backgroundColor: isValid ? 'var(--ff-success-light)' : 'var(--ff-error-light)',\n borderColor: isValid ? 'var(--ff-success)' : 'var(--ff-error)'\n }}\n >\n {isValid ? (\n <CheckCircle className=\"ff-w-8 ff-h-8\" style={{ color: 'var(--ff-success)' }} />\n ) : (\n <XCircle className=\"ff-w-8 ff-h-8\" style={{ color: 'var(--ff-error)' }} />\n )}\n <div>\n <h3\n className=\"ff-text-lg ff-font-semibold\"\n style={{ color: isValid ? 'var(--ff-success-dark)' : 'var(--ff-error-dark)' }}\n >\n {isValid ? 'Validation Passed' : 'Validation Failed'}\n </h3>\n <p className=\"ff-text-sm\" style={{ color: isValid ? 'var(--ff-success)' : 'var(--ff-error)' }}>\n {validRows} of {totalRows} rows are valid ({validPercentage}%)\n </p>\n </div>\n </div>\n\n {/* Stats Grid */}\n <div className=\"ff-grid ff-grid-cols-4 ff-gap-4\">\n <div className=\"ff-border ff-rounded-lg ff-p-4 ff-text-center\" style={{ backgroundColor: 'var(--ff-bg-primary)', borderColor: 'var(--ff-border-light)' }}>\n <p className=\"ff-text-2xl ff-font-bold\" style={{ color: 'var(--ff-text-primary)' }}>{totalRows}</p>\n <p className=\"ff-text-sm\" style={{ color: 'var(--ff-text-muted)' }}>Total Rows</p>\n </div>\n <div className=\"ff-border ff-rounded-lg ff-p-4 ff-text-center\" style={{ backgroundColor: 'var(--ff-success-light)', borderColor: 'var(--ff-success)' }}>\n <p className=\"ff-text-2xl ff-font-bold\" style={{ color: 'var(--ff-success-dark)' }}>{validRows}</p>\n <p className=\"ff-text-sm\" style={{ color: 'var(--ff-success)' }}>Valid Rows</p>\n </div>\n <div className=\"ff-border ff-rounded-lg ff-p-4 ff-text-center\" style={{ backgroundColor: 'var(--ff-error-light)', borderColor: 'var(--ff-error)' }}>\n <p className=\"ff-text-2xl ff-font-bold\" style={{ color: 'var(--ff-error-dark)' }}>{errorCount}</p>\n <p className=\"ff-text-sm\" style={{ color: 'var(--ff-error)' }}>Errors</p>\n </div>\n <div className=\"ff-border ff-rounded-lg ff-p-4 ff-text-center\" style={{ backgroundColor: 'var(--ff-warning-light)', borderColor: 'var(--ff-warning)' }}>\n <p className=\"ff-text-2xl ff-font-bold\" style={{ color: 'var(--ff-warning-dark)' }}>{warningCount}</p>\n <p className=\"ff-text-sm\" style={{ color: 'var(--ff-warning)' }}>Warnings</p>\n </div>\n </div>\n\n {/* Details by Column */}\n {showDetails && summary.byColumn && Object.keys(summary.byColumn).length > 0 && (\n <div className=\"ff-border ff-rounded-xl ff-overflow-hidden\" style={{ backgroundColor: 'var(--ff-bg-primary)', borderColor: 'var(--ff-border-light)' }}>\n <div className=\"ff-px-4 ff-py-3\" style={{ backgroundColor: 'var(--ff-bg-secondary)' }}>\n <h4 className=\"ff-font-medium ff-text-sm\" style={{ color: 'var(--ff-text-secondary)' }}>Issues by Column</h4>\n </div>\n <div>\n {Object.entries(summary.byColumn)\n .filter(([, col]) => col.errorCount > 0 || col.warningCount > 0)\n .map(([key, col], index, arr) => (\n <div \n key={key} \n className=\"ff-flex ff-items-center ff-justify-between ff-px-4 ff-py-3\"\n style={{ \n borderTop: index > 0 ? '1px solid var(--ff-border-light)' : undefined \n }}\n >\n <div className=\"ff-flex-1 ff-min-w-0 ff-mr-4\">\n <p className=\"ff-font-medium ff-text-sm\" style={{ color: 'var(--ff-text-primary)' }}>{col.columnKey}</p>\n {col.mostCommonError && (\n <p className=\"ff-text-sm ff-truncate\" style={{ color: 'var(--ff-text-muted)' }}>{col.mostCommonError}</p>\n )}\n </div>\n <div className=\"ff-flex ff-items-center ff-gap-2 ff-flex-shrink-0\">\n {col.errorCount > 0 && (\n <span className=\"ff-badge ff-badge-error ff-whitespace-nowrap\">\n <XCircle className=\"ff-w-3 ff-h-3 ff-mr-1\" />\n {col.errorCount} {col.errorCount === 1 ? 'error' : 'errors'}\n </span>\n )}\n {col.warningCount > 0 && (\n <span className=\"ff-badge ff-badge-warning ff-whitespace-nowrap\">\n <AlertTriangle className=\"ff-w-3 ff-h-3 ff-mr-1\" />\n {col.warningCount} {col.warningCount === 1 ? 'warning' : 'warnings'}\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Duplicates */}\n {showDetails && summary.duplicates && summary.duplicates.length > 0 && (\n <div className=\"ff-border ff-rounded-lg ff-p-4\" style={{ backgroundColor: 'var(--ff-warning-light)', borderColor: 'var(--ff-warning)' }}>\n <div className=\"ff-flex ff-items-start ff-gap-3\">\n <AlertTriangle className=\"ff-w-5 ff-h-5 ff-flex-shrink-0 ff-mt-0.5\" style={{ color: 'var(--ff-warning)' }} />\n <div>\n <h4 className=\"ff-font-medium\" style={{ color: 'var(--ff-warning-dark)' }}>Duplicate Values Found</h4>\n <ul className=\"ff-mt-2 ff-space-y-1 ff-text-sm\" style={{ color: 'var(--ff-warning-dark)' }}>\n {summary.duplicates.slice(0, 5).map((dup, i) => (\n <li key={i}>\n <span className=\"ff-font-mono\">{dup.columnKey}</span>: \"{String(dup.value)}\" appears{' '}\n {dup.rowIndices.length} times (rows{' '}\n {dup.rowIndices\n .slice(0, 3)\n .map((r) => r + 1)\n .join(', ')}\n {dup.rowIndices.length > 3 ? '...' : ''})\n </li>\n ))}\n {summary.duplicates.length > 5 && (\n <li style={{ color: 'var(--ff-warning)' }}>\n ... and {summary.duplicates.length - 5} more duplicate groups\n </li>\n )}\n </ul>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { Upload, GitBranch, CheckSquare, CheckCircle, X, Loader2, FileSpreadsheet } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useImportStore, type ImportStep } from '../../store/import-store';\nimport { getClient } from '../../api/client';\nimport { FileUploader } from './FileUploader';\nimport { ColumnMapper } from './ColumnMapper';\nimport { DataTable } from './DataTable';\nimport { ValidationSummary } from './ValidationSummary';\nimport { StyleProvider, type FileFlowTheme } from '../../styles/StyleProvider';\nimport type { ImportSchema, ImportResult } from '@fileflow/shared';\nimport { getTemplateSchema, templateExists, VALID_TEMPLATE_IDS } from '@fileflow/shared';\n\ninterface ImportWizardProps {\n /** Template name to use for import schema. */\n template?: string;\n /** Custom import schema. Only used if template is not provided. */\n schema?: ImportSchema;\n /** Display mode: 'modal' (default) or 'embed' (inline, user-resizable). */\n mode?: 'modal' | 'embed';\n /** Custom theme to override default SDK colors. */\n theme?: FileFlowTheme;\n /** Enable Shadow DOM for bulletproof style isolation. */\n useShadowDom?: boolean;\n /**\n * External error to display on the complete step, overriding the SDK's own\n * success state. Use this to pass backend errors received after onComplete.\n */\n error?: string | null;\n onComplete?: (result: ImportResult) => void;\n onCancel?: () => void;\n onError?: (error: Error) => void;\n}\n\n// 4-step flow: upload -> mapping -> validation -> complete (review merged into validation)\nconst STEP_LABELS = ['upload', 'mapping', 'validation', 'complete'] as const;\n\nconst STEPS: { key: ImportStep; label: string; icon: React.ElementType }[] = [\n { key: 'upload', label: 'Upload', icon: Upload },\n { key: 'mapping', label: 'Map Columns', icon: GitBranch },\n { key: 'validation', label: 'Validate', icon: CheckSquare },\n { key: 'complete', label: 'Complete', icon: CheckCircle },\n];\n\nexport const ImportWizard: React.FC<ImportWizardProps> = ({\n template,\n schema: customSchema,\n mode = 'modal',\n theme,\n useShadowDom = false,\n error: externalError,\n onComplete,\n onCancel,\n onError,\n}) => {\n const {\n step,\n sessionId,\n file,\n rows,\n mappings,\n validationResults,\n isLoading,\n error,\n setSchema,\n setSessionId,\n setParsedData,\n setMappings,\n setUnmapped,\n setValidationResults,\n setStep,\n nextStep,\n previousStep,\n setLoading,\n setError,\n reset,\n } = useImportStore();\n\n const [resolvedSchema, setResolvedSchema] = useState<ImportSchema | null>(null);\n const [templateError, setTemplateError] = useState<string | null>(null);\n const [processingProgress, setProcessingProgress] = useState(0);\n const [processingStep, setProcessingStep] = useState('');\n const [completeError, setCompleteError] = useState<string | null>(null);\n const [importResult, setImportResult] = useState<ImportResult | null>(null);\n const [submittedRows, setSubmittedRows] = useState<any[]>([]);\n\n // Resolve schema from template or custom schema\n useEffect(() => {\n setTemplateError(null);\n if (template) {\n if (templateExists(template)) {\n const templateSchema = getTemplateSchema(template);\n if (templateSchema) {\n setResolvedSchema(templateSchema as ImportSchema);\n } else {\n setTemplateError(`Failed to load template \"${template}\"`);\n onError?.(new Error(`Failed to load template \"${template}\"`));\n }\n } else {\n const errorMsg = `Template \"${template}\" not found. Available templates: ${VALID_TEMPLATE_IDS.join(', ')}`;\n setTemplateError(errorMsg);\n onError?.(new Error(errorMsg));\n }\n } else if (customSchema) {\n setResolvedSchema(customSchema);\n } else {\n const errorMsg = `No template or schema provided. Please specify a template (${VALID_TEMPLATE_IDS.join(', ')}) or provide a custom schema.`;\n setTemplateError(errorMsg);\n onError?.(new Error(errorMsg));\n }\n }, [template, customSchema, onError]);\n\n useEffect(() => {\n if (resolvedSchema) {\n setSchema(resolvedSchema);\n initializeSession(resolvedSchema);\n }\n }, [resolvedSchema]);\n\n const initializeSession = async (schemaToUse: ImportSchema) => {\n try {\n setLoading(true);\n const client = getClient();\n const result = await client.createImportSession(schemaToUse);\n setSessionId(result.sessionId);\n } catch (err) {\n const error = err as Error;\n setError(error.message);\n onError?.(error);\n } finally {\n setLoading(false);\n }\n };\n\n const parseCSVLine = (line: string): string[] => {\n const result: string[] = [];\n let current = '';\n let inQuotes = false;\n for (let i = 0; i < line.length; i++) {\n const char = line[i];\n if (char === '\"') {\n if (inQuotes && line[i + 1] === '\"') { current += '\"'; i++; }\n else { inQuotes = !inQuotes; }\n } else if (char === ',' && !inQuotes) {\n result.push(current.trim());\n current = '';\n } else {\n current += char;\n }\n }\n result.push(current.trim());\n return result;\n };\n\n const handleFileSelect = useCallback(async (selectedFile: File) => {\n if (!sessionId) return;\n try {\n setLoading(true);\n setError(null);\n setMappings([]);\n setUnmapped([], []);\n setValidationResults(null as any);\n\n setProcessingProgress(10);\n setProcessingStep('Uploading file...');\n const client = getClient();\n\n setProcessingProgress(20);\n setProcessingStep('Uploading to server...');\n const result = await client.uploadFile(sessionId, selectedFile);\n\n setProcessingProgress(40);\n setProcessingStep('Parsing all rows...');\n\n const fileText = await selectedFile.text();\n const lines = fileText.split('\\n').filter(line => line.trim());\n const headers = result.data.headers;\n\n const allRows = lines.slice(1).map((line, i) => {\n const values = parseCSVLine(line);\n const data: Record<string, string> = {};\n headers.forEach((header, idx) => {\n data[header] = values[idx] || '';\n });\n return { rowIndex: i, data, rawData: values };\n });\n\n setProcessingProgress(60);\n setProcessingStep('Processing rows...');\n\n setParsedData({\n headers,\n rows: allRows,\n totalRows: allRows.length,\n sampleRows: allRows.slice(0, 5),\n });\n\n setProcessingProgress(80);\n setProcessingStep('Matching columns...');\n setStep('mapping');\n await handleColumnMatching();\n\n setProcessingProgress(100);\n setProcessingStep('Done');\n } catch (err) {\n const error = err as Error;\n setError(`Failed to process the uploaded file: ${error.message}`);\n } finally {\n setLoading(false);\n setProcessingProgress(0);\n setProcessingStep('');\n }\n }, [sessionId]);\n\n const handleColumnMatching = async () => {\n if (!sessionId) return;\n try {\n setLoading(true);\n const client = getClient();\n const result = await client.matchColumns(sessionId);\n setMappings(result.mappings as any[]);\n setUnmapped(result.unmappedSource, result.unmappedTarget);\n } catch (err) {\n const error = err as Error;\n setError(`Column matching failed: ${error.message}`);\n } finally {\n setLoading(false);\n }\n };\n\n const handleValidation = async () => {\n if (!sessionId) return;\n try {\n setLoading(true);\n setError(null);\n const client = getClient();\n const result = await client.validateImport(sessionId);\n setValidationResults(result.validation as any);\n nextStep(); // Goes to 'validation' step\n } catch (err) {\n const error = err as Error;\n setError(`Validation failed: ${error.message}`);\n } finally {\n setLoading(false);\n }\n };\n\n const handleComplete = async () => {\n if (!sessionId) return;\n try {\n setLoading(true);\n setError(null);\n setCompleteError(null);\n const clientRows = [...rows];\n setSubmittedRows(clientRows);\n\n const client = getClient();\n const result = await client.completeImport(sessionId, {\n skipInvalidRows: true,\n acknowledgeWarnings: true,\n });\n\n const rawResult = result as ImportResult;\n setImportResult(rawResult);\n setStep('complete');\n onComplete?.(rawResult);\n } catch (err) {\n const error = err as Error;\n setCompleteError(error.message);\n setStep('complete');\n } finally {\n setLoading(false);\n }\n };\n\n const handleCancel = () => {\n reset();\n onCancel?.();\n };\n\n const handleStartNewImport = () => {\n setCompleteError(null);\n setImportResult(null);\n setSubmittedRows([]);\n setProcessingProgress(0);\n setProcessingStep('');\n reset();\n if (resolvedSchema) {\n setSchema(resolvedSchema);\n initializeSession(resolvedSchema);\n }\n };\n\n const getDisplayStepIndex = () => {\n return STEP_LABELS.indexOf(step as typeof STEP_LABELS[number]);\n };\n\n const canProceed = () => {\n switch (step) {\n case 'upload':\n return file !== null;\n case 'mapping':\n return mappings.length > 0 && mappings.some((m) => m.targetKey !== null);\n case 'validation':\n // Validation step is now the last active step before complete.\n // User can proceed (Complete Import) only when there are no errors.\n return validationResults !== null && validationResults.errorCount === 0;\n default:\n return false;\n }\n };\n\n // Step 5: Merged flow — validation goes directly to complete (no review step)\n const handleNext = async () => {\n switch (step) {\n case 'mapping':\n await handleValidation();\n break;\n case 'validation':\n await handleComplete();\n break;\n default:\n nextStep();\n }\n };\n\n // Determine if the footer action button should be hidden\n // (prevents double \"Processing...\" when body already shows progress)\n const hideFooterAction =\n (step === 'upload' && isLoading && processingProgress > 0) ||\n (step === 'mapping' && isLoading && processingProgress > 0);\n\n if (templateError) {\n return (\n <StyleProvider theme={theme} useShadowDom={useShadowDom}>\n <div className=\"ff-container ff-bg-white ff-rounded-xl ff-shadow-xl ff-overflow-hidden ff-p-6\">\n <div className=\"ff-flex ff-flex-col ff-items-center ff-justify-center ff-py-8\">\n <div className=\"ff-w-16 ff-h-16 ff-rounded-full ff-flex ff-items-center ff-justify-center ff-mb-4\" style={{ backgroundColor: 'var(--ff-error-light)' }}>\n <X className=\"ff-w-10 ff-h-10\" style={{ color: 'var(--ff-error)' }} />\n </div>\n <h3 className=\"ff-text-xl ff-font-semibold ff-mb-2\" style={{ color: 'var(--ff-text-primary)' }}>Configuration Error</h3>\n <p className=\"ff-text-center ff-max-w-md ff-mb-4\" style={{ color: 'var(--ff-text-muted)' }}>{templateError}</p>\n {onCancel && (<button onClick={handleCancel} className=\"ff-btn ff-btn-secondary\">Close</button>)}\n </div>\n </div>\n </StyleProvider>\n );\n }\n\n if (!resolvedSchema) {\n return (\n <StyleProvider theme={theme} useShadowDom={useShadowDom}>\n <div className=\"ff-container ff-bg-white ff-rounded-xl ff-shadow-xl ff-overflow-hidden ff-p-6\">\n <div className=\"ff-flex ff-flex-col ff-items-center ff-justify-center ff-py-8\">\n <Loader2 className=\"ff-w-10 ff-h-10 ff-animate-spin ff-mb-4\" style={{ color: 'var(--ff-primary-90)' }} />\n <p style={{ color: 'var(--ff-text-muted)' }}>Loading template...</p>\n </div>\n </div>\n </StyleProvider>\n );\n }\n\n const containerClass = mode === 'embed' ? 'ff-container ff-embed' : 'ff-container ff-modal';\n\n // Determine what the complete step shows:\n // External error prop overrides everything, then internal completeError, then success.\n const displayError = externalError || completeError;\n\n const wizardContent = (\n <>\n <div className={containerClass}>\n {/* Header */}\n <div className=\"ff-modal-header\">\n <div className=\"ff-modal-header-left\">\n <div className=\"ff-flex ff-items-center ff-gap-3\">\n <div className=\"ff-modal-icon\"><FileSpreadsheet /></div>\n <h2 className=\"ff-modal-title\">Import Data</h2>\n </div>\n <div className=\"ff-steps ff-ml-4\">\n {STEP_LABELS.map((s, i) => (\n <React.Fragment key={s}>\n <div className={clsx(\n 'ff-step',\n getDisplayStepIndex() === i && 'ff-step-active',\n getDisplayStepIndex() > i && 'ff-step-complete',\n getDisplayStepIndex() < i && 'ff-step-pending'\n )}>\n {getDisplayStepIndex() > i ? '✓' : i + 1}\n </div>\n {i < STEP_LABELS.length - 1 && (\n <div className={clsx('ff-step-connector', getDisplayStepIndex() > i && 'ff-step-connector-complete')} />\n )}\n </React.Fragment>\n ))}\n </div>\n </div>\n <button onClick={handleCancel} className=\"ff-modal-close\">\n <X className=\"ff-w-5 ff-h-5\" />\n </button>\n </div>\n\n {/* Body */}\n <div className=\"ff-modal-body\">\n {error && (\n <div className=\"ff-mb-4 ff-p-4 ff-border ff-rounded-lg ff-text-sm\" style={{ backgroundColor: 'var(--ff-error-light)', borderColor: 'var(--ff-error)', color: 'var(--ff-error)' }}>\n {error}\n </div>\n )}\n\n {/* Upload Step */}\n {step === 'upload' && (\n <div className=\"ff-py-4\">\n <div className=\"ff-max-w-xl ff-mx-auto\">\n {isLoading && processingProgress > 0 ? (\n <div className=\"ff-p-8 ff-text-center\">\n <Loader2 className=\"ff-w-10 ff-h-10 ff-animate-spin ff-mx-auto ff-mb-4\" style={{ color: 'var(--ff-primary-90)' }} />\n <p className=\"ff-font-medium ff-mb-2\" style={{ color: 'var(--ff-text-primary)' }}>{processingStep}</p>\n <div className=\"ff-progress ff-w-full ff-max-w-xs ff-mx-auto ff-mb-2\">\n <div className=\"ff-progress-bar\" style={{ width: `${processingProgress}%`, transition: 'width 0.3s ease' }} />\n </div>\n <p className=\"ff-text-sm\" style={{ color: 'var(--ff-text-muted)' }}>{processingProgress}% complete</p>\n </div>\n ) : (\n <FileUploader onFileSelect={handleFileSelect} />\n )}\n </div>\n </div>\n )}\n\n {/* Mapping Step */}\n {step === 'mapping' && (\n isLoading && processingProgress > 0 ? (\n <div className=\"ff-py-12 ff-text-center\">\n <Loader2 className=\"ff-w-10 ff-h-10 ff-animate-spin ff-mx-auto ff-mb-4\" style={{ color: 'var(--ff-primary-90)' }} />\n <p className=\"ff-font-medium ff-mb-3\" style={{ color: 'var(--ff-text-primary)' }}>{processingStep}</p>\n <div className=\"ff-progress ff-w-full ff-max-w-xs ff-mx-auto ff-mb-2\">\n <div className=\"ff-progress-bar\" style={{ width: `${processingProgress}%`, transition: 'width 0.3s ease' }} />\n </div>\n <p className=\"ff-text-sm\" style={{ color: 'var(--ff-text-muted)' }}>{processingProgress}% complete</p>\n </div>\n ) : (\n <ColumnMapper />\n )\n )}\n\n {/* Validation Step (merged with review -- editable + complete button) */}\n {step === 'validation' && (\n <div className=\"ff-space-y-6\">\n <ValidationSummary />\n <DataTable editable={true} />\n </div>\n )}\n\n {/* Complete Step */}\n {step === 'complete' && (\n <div className=\"ff-flex ff-flex-col ff-items-center ff-justify-center ff-py-8\">\n {displayError ? (\n <>\n <div className=\"ff-w-16 ff-h-16 ff-rounded-full ff-flex ff-items-center ff-justify-center ff-mb-4\" style={{ backgroundColor: 'var(--ff-error-light)' }}>\n <X className=\"ff-w-10 ff-h-10\" style={{ color: 'var(--ff-error)' }} />\n </div>\n <h3 className=\"ff-text-xl ff-font-semibold ff-mb-2\" style={{ color: 'var(--ff-text-primary)' }}>Import Failed</h3>\n <p className=\"ff-text-center ff-max-w-md ff-mb-4\" style={{ color: 'var(--ff-text-muted)' }}>{displayError}</p>\n </>\n ) : (\n <>\n <div className=\"ff-w-20 ff-h-20 ff-rounded-2xl ff-flex ff-items-center ff-justify-center ff-mb-6\" style={{ backgroundColor: 'var(--ff-success-light)' }}>\n <CheckCircle className=\"ff-w-10 ff-h-10\" style={{ color: 'var(--ff-success)' }} />\n </div>\n <h3 className=\"ff-text-xl ff-font-semibold ff-mb-2\" style={{ color: 'var(--ff-text-primary)' }}>Import Complete!</h3>\n <p className=\"ff-mb-6\" style={{ color: 'var(--ff-text-muted)' }}>Your data has been successfully imported.</p>\n\n {/* Stats */}\n <div className=\"ff-flex ff-gap-6 ff-mb-6\">\n <div className=\"ff-text-center ff-px-6 ff-py-3 ff-rounded-xl ff-border\" style={{ borderColor: 'var(--ff-success)', backgroundColor: 'var(--ff-success-light)' }}>\n <p className=\"ff-text-2xl ff-font-bold\" style={{ color: 'var(--ff-success-dark)' }}>{submittedRows.length}</p>\n <p className=\"ff-text-sm\" style={{ color: 'var(--ff-success)' }}>Rows Imported</p>\n </div>\n <div className=\"ff-text-center ff-px-6 ff-py-3 ff-rounded-xl ff-border\" style={{ borderColor: 'var(--ff-border-light)', backgroundColor: 'var(--ff-bg-primary)' }}>\n <p className=\"ff-text-2xl ff-font-bold\" style={{ color: 'var(--ff-text-primary)' }}>{mappings.filter(m => m.targetKey !== null).length}</p>\n <p className=\"ff-text-sm\" style={{ color: 'var(--ff-text-muted)' }}>Columns Mapped</p>\n </div>\n </div>\n\n {/* Data Preview */}\n {submittedRows.length > 0 && (() => {\n const previewRows = submittedRows.slice(0, 5);\n const firstRow = previewRows[0] as any;\n const dataObj = firstRow?.data || firstRow;\n const columnKeys = Object.keys(typeof dataObj === 'object' ? dataObj : {}).slice(0, 6);\n const schemaColumns = resolvedSchema?.columns || [];\n if (columnKeys.length === 0) return null;\n return (\n <div className=\"ff-w-full ff-mb-6\">\n <p className=\"ff-text-xs ff-font-semibold ff-uppercase ff-tracking-wider ff-mb-2\" style={{ color: 'var(--ff-text-muted)' }}>Imported Data Preview</p>\n <div className=\"ff-table-container ff-max-h-[250px]\">\n <table className=\"ff-table\">\n <thead>\n <tr>\n <th style={{ width: 40 }}>#</th>\n {columnKeys.map(key => {\n const schemaCol = schemaColumns.find(c => c.key === key);\n return <th key={key}>{schemaCol?.label || key}</th>;\n })}\n {columnKeys.length < Object.keys(typeof dataObj === 'object' ? dataObj : {}).length && <th>...</th>}\n </tr>\n </thead>\n <tbody>\n {previewRows.map((row: any, i: number) => {\n const rowData = row?.data || row;\n return (\n <tr key={i}>\n <td><span className=\"ff-font-mono ff-text-xs\" style={{ color: 'var(--ff-text-muted)' }}>{i + 1}</span></td>\n {columnKeys.map(key => (\n <td key={key}><span className=\"ff-text-sm ff-truncate ff-block ff-max-w-[150px]\">{String(rowData?.[key] ?? '—')}</span></td>\n ))}\n {columnKeys.length < Object.keys(typeof dataObj === 'object' ? dataObj : {}).length && <td><span style={{ color: 'var(--ff-text-muted)' }}>...</span></td>}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n {submittedRows.length > 5 && (\n <p className=\"ff-text-xs ff-mt-1\" style={{ color: 'var(--ff-text-muted)' }}>Showing {previewRows.length} of {submittedRows.length} imported rows</p>\n )}\n </div>\n );\n })()}\n </>\n )}\n </div>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"ff-modal-footer\">\n {step === 'complete' ? (\n <>\n {onCancel ? (\n <button onClick={handleCancel} className=\"ff-btn ff-btn-ghost\">Close</button>\n ) : (\n <div />\n )}\n <button onClick={handleStartNewImport} className=\"ff-btn ff-btn-primary\">Start New Import</button>\n </>\n ) : (\n <>\n <button\n onClick={previousStep}\n disabled={getDisplayStepIndex() === 0 || isLoading}\n className=\"ff-btn ff-btn-ghost\"\n >\n Back\n </button>\n {!hideFooterAction && (\n <button\n onClick={handleNext}\n disabled={!canProceed() || isLoading}\n className=\"ff-btn ff-btn-primary\"\n >\n {isLoading ? (\n <><Loader2 className=\"ff-w-4 ff-h-4 ff-animate-spin\" /> Processing...</>\n ) : step === 'validation' ? (\n validationResults && validationResults.errorCount > 0\n ? `Fix ${validationResults.errorCount} error${validationResults.errorCount > 1 ? 's' : ''} to continue`\n : 'Complete Import'\n ) : (\n 'Continue'\n )}\n </button>\n )}\n </>\n )}\n </div>\n </div>\n </>\n );\n\n return (\n <StyleProvider theme={theme} useShadowDom={useShadowDom}>\n {mode === 'modal' ? (\n <div className=\"ff-overlay\">{wizardContent}</div>\n ) : (\n wizardContent\n )}\n </StyleProvider>\n );\n};\n"],"names":["__iconNode","ArrowRight","createLucideIcon","Check","ChevronLeft","CircleQuestionMark","FileSpreadsheet","File","Pen","Trash2","initialState","validateCellValue","value","column","errors","trimmed","domain","_a","COMMON_TYPOS","validator","severity","params","minLen","maxLen","numVal","minVal","numVal2","maxVal","patternStr","allowed","v","validatorName","allowedVals","vals","normAllowed","invalid","invalidEmails","e","runClientValidation","rows","schema","mappings","allErrors","row","mapping","col","c","cellErrors","err","uniqueKeys","uniqueKey","m","seen","val","existing","indices","idx","errorsByRow","errorCount","warningCount","infoCount","rowsWithErrors","totalRows","validRows","byColumn","byType","duplicates","summary","useImportStore","create","set","get","sessionId","file","data","sourceColumn","targetKey","state","source","target","results","error","validationResults","step","steps","currentIndex","rowIndex","columnKey","r","editedRows","reindexedRows","status","isLoading","FileUploader","onFileSelect","maxSize","acceptedTypes","fileName","fileSize","setFile","setError","onDrop","useCallback","acceptedFiles","rejectedFiles","selectedFile","getRootProps","getInputProps","isDragActive","useDropzone","formatFileSize","bytes","clearFile","jsx","jsxs","X","clsx","Upload","AlertCircle","ColumnMapper","onMappingChange","unmappedSource","updateMapping","targetColumns","handleMappingChange","getConfidenceColor","confidence","getConfidenceLabel","mappedKeys","isMapped","isHighConfidence","HelpCircle","requiredUnmapped","createColumnHelper","accessor","functionalUpdate","updater","input","makeStateUpdater","key","instance","old","isFunction","d","isNumberArray","flattenBy","arr","getChildren","flat","recurse","subArr","item","children","memo","getDeps","fn","opts","deps","result","depArgs","depTime","newDeps","dep","index","resultTime","depEndTime","resultEndTime","resultFpsPercentage","pad","str","num","getMemoOptions","tableOptions","debugLevel","onChange","_tableOptions$debugAl","createCell","table","columnId","getRenderValue","_cell$getValue","cell","feature","createColumn","columnDef","depth","parent","_ref","_resolvedColumnDef$id","resolvedColumnDef","accessorKey","id","accessorFn","originalRow","_result","_column$columns","orderColumns","_column$columns2","leafColumns","debug","createHeader","options","_options$id","header","leafHeaders","recurseHeader","h","Headers","allColumns","left","right","_left$map$filter","_right$map$filter","leftColumns","rightColumns","centerColumns","buildHeaderGroups","_left$map$filter2","orderedLeafColumns","_right$map$filter2","headerGroups","headerGroup","flatHeaders","_header$subHeaders","_header$subHeaders2","_header$subHeaders3","center","_left$0$headers","_left$","_center$0$headers","_center$","_right$0$headers","_right$","columnsToGroup","headerFamily","_headerGroups$0$heade","_headerGroups$","maxDepth","findMaxDepth","columns","createHeaderGroup","headersToGroup","pendingParentHeaders","headerToGroup","latestPendingParentHeader","isLeafHeader","isPlaceholder","bottomHeaders","recurseHeadersForSpans","headers","colSpan","rowSpan","childRowSpans","childColSpan","childRowSpan","minChildRowSpan","createRow","original","subRows","parentId","_row$getValue","parentRows","currentRow","parentRow","allCells","acc","i","ColumnFaceting","includesString","filterValue","_filterValue$toString","search","testFalsey","includesStringSensitive","_row$getValue2","equalsString","_row$getValue3","arrIncludes","_row$getValue4","arrIncludesAll","_row$getValue5","arrIncludesSome","_row$getValue6","equals","weakEquals","inNumberRange","min","max","rowValue","unsafeMin","unsafeMax","parsedMin","parsedMax","temp","filterFns","ColumnFiltering","firstRow","_table$options$filter","_table$options$filter2","_column$columnDef$ena","_table$options$enable","_table$options$enable2","_table$getState$colum","_table$getState$colum2","_table$getState$colum3","filterFn","previousFilter","newFilter","shouldAutoRemoveFilter","_old$filter","newFilterObj","_old$map","_table","updateFn","_functionalUpdate","filter","defaultState","_table$initialState$c","_table$initialState","sum","_leafRows","childRows","next","nextValue","extent","mean","leafRows","count","median","values","mid","nums","a","b","unique","uniqueCount","_columnId","aggregationFns","ColumnGrouping","props","_toString","_props$getValue","_table$getState$group","_table$getState$group2","canGroup","_table$options$aggreg","_table$options$aggreg2","_table$initialState$g","_row$subRows","grouping","groupedColumnMode","nonGroupingColumns","g","ColumnOrdering","position","_getVisibleLeafColumns","_columns$","_columns","columnOrder","orderedColumns","columnOrderCopy","columnsCopy","targetColumnId","foundIndex","getDefaultColumnPinningState","ColumnPinning","columnIds","_old$left3","_old$right3","_old$left","_old$right","_old$left2","_old$right2","_d$columnDef$enablePi","leafColumnIds","isLeft","isRight","leftAndRight","_pinningState$positio","pinningState","_pinningState$left","_pinningState$right","safelyAccessDocument","_document","defaultColumnSizing","getDefaultColumnSizingInfoState","ColumnSizing","_column$columnDef$min","_column$columnDef$max","columnSize","_ref2","_","rest","_header$column$getSiz","prevSiblingHeader","_contextDocument","canResize","isTouchStartEvent","startSize","columnSizingStart","clientX","newColumnSizing","updateOffset","eventType","clientXPos","_old$startOffset","_old$startSize","deltaDirection","deltaOffset","deltaPercentage","_ref3","headerSize","onMove","onEnd","contextDocument","mouseEvents","touchEvents","_e$touches$","passiveIfSupported","passiveEventSupported","_table$initialState$c2","_table$getHeaderGroup","_table$getHeaderGroup2","_table$getLeftHeaderG","_table$getLeftHeaderG2","_table$getCenterHeade","_table$getCenterHeade2","_table$getRightHeader","_table$getRightHeader2","passiveSupported","supported","noop","ColumnVisibility","childColumns","cells","makeVisibleColumnsMethod","getColumns","_value","obj","_target","GlobalFaceting","GlobalFiltering","_table$getCoreRowMode","_table$options$getCol","globalFilterFn","RowExpanding","registered","queued","_table$options$autoRe","expanded","_table$initialState$e","splitId","_expanded","exists","oldExpanded","rowId","_table$options$getIsR","_table$options$getRow","isFullyExpanded","canExpand","defaultPageIndex","defaultPageSize","getDefaultPaginationState","RowPagination","safeUpdater","_table$initialState$p","pageIndex","maxPageIndex","_table$initialState$p2","_table$initialState$p3","_table$initialState2","pageSize","topRowIndex","_table$options$pageCo","newPageCount","pageCount","pageOptions","_table$options$pageCo2","_table$options$rowCou","getDefaultRowPinningState","RowPinning","includeLeafRows","includeParentRows","leafRowIds","parentRowIds","rowIds","_old$top3","_old$bottom3","_old$top","_old$bottom","_old$top2","_old$bottom2","enableRowPinning","enablePinning","top","bottom","isTop","isBottom","_ref4","_visiblePinnedRowIds$","visiblePinnedRowIds","_ref5","_table$initialState$r","_pinningState$top","_pinningState$bottom","visibleRows","pinnedRowIds","_table$options$keepPi","allRows","topPinnedRowIds","bottomPinnedRowIds","topAndBottom","RowSelection","rowSelection","preGroupedFlatRows","resolvedValue","mutateRowIsSelected","rowModel","selectRowsFn","isAllRowsSelected","paginationFlatRows","isAllPageRowsSelected","_table$getState$rowSe","totalSelected","isSelected","_opts$selectChildren","selectedRowIds","isRowSelected","isSubRowSelected","_table$options$enable3","canSelect","includeChildren","newSelectedFlatRows","newSelectedRowsById","recurseRows","_row$subRows2","selection","_selection$row$id","_row$subRows3","allChildrenSelected","someSelected","subRow","subRowChildrenSelected","reSplitAlphaNumeric","alphanumeric","rowA","rowB","compareAlphanumeric","toString","alphanumericCaseSensitive","text","compareBasic","textCaseSensitive","datetime","basic","aStr","bStr","aa","bb","an","bn","combo","sortingFns","RowSorting","firstRows","isString","_table$options$sortin","_table$options$sortin2","desc","multi","nextSortingOrder","hasManualValue","existingSorting","existingIndex","newSorting","sortAction","nextDesc","_table$options$maxMul","_column$columnDef$sor","firstSortDirection","isSorted","_column$columnDef$ena2","_table$getState$sorti","columnSort","_table$getState$sorti2","_table$getState$sorti3","canSort","_table$initialState$s","builtInFeatures","createTable","_options$_features","_options$initialState","_features","defaultOptions","mergeOptions","_feature$getInitialSt","queuedTimeout","coreInstance","cb","newOptions","searchAll","defaultColumn","_defaultColumn","_props$renderValue$to","_props$renderValue","columnDefs","recurseColumns","groupingColumnDef","flatColumns","getCoreRowModel","accessRows","originalRows","_row$originalSubRows","expandRows","expandedRows","handleRow","filterRows","filterRowImpl","filterRowModelFromLeafs","filterRowModelFromRoot","rowsToFilter","filterRow","_table$options$maxLea","newFilteredFlatRows","newFilteredRowsById","recurseFilterRows","newRow","_table$options$maxLea2","getFilteredRowModel","columnFilters","globalFilter","resolvedColumnFilters","resolvedGlobalFilters","_filterFn$resolveFilt","filterableIds","globallyFilterableColumns","_globalFilterFn$resol","currentColumnFilter","currentGlobalFilter","j","filterMeta","filterRowsImpl","getPaginationRowModel","pagination","flatRows","rowsById","pageStart","pageEnd","paginatedRowModel","getSortedRowModel","sorting","sortingState","sortedFlatRows","availableSorting","sort","_table$getColumn","columnInfoById","sortEntry","sortData","sortedData","_sortEntry$desc","columnInfo","sortUndefined","isDesc","sortInt","aValue","bValue","aUndefined","bUndefined","flexRender","Comp","isReactComponent","React","component","isClassComponent","isExoticComponent","proto","useReactTable","resolvedOptions","tableRef","setState","prev","DataTable","editable","deletable","onCellEdit","onRowDelete","editingCell","startEditing","stopEditing","updateCell","deleteRow","setSorting","useState","setGlobalFilter","editValue","setEditValue","editError","setEditError","columnResizeMode","displayColumns","useMemo","schemaCol","getCellError","rowErrors","validateEditInput","blocking","handleStartEdit","currentValue","handleEditChange","handleSaveEdit","handleCancelEdit","handleDeleteRow","columnHelper","info","rowIdx","AlertTriangle","Edit2","hasError","ChevronRight","ValidationSummary","showDetails","isValid","validPercentage","CheckCircle","XCircle","dup","STEP_LABELS","ImportWizard","template","customSchema","mode","theme","useShadowDom","externalError","onComplete","onCancel","onError","setSchema","setSessionId","setParsedData","setMappings","setUnmapped","setValidationResults","setStep","nextStep","previousStep","setLoading","reset","resolvedSchema","setResolvedSchema","templateError","setTemplateError","processingProgress","setProcessingProgress","processingStep","setProcessingStep","completeError","setCompleteError","importResult","setImportResult","submittedRows","setSubmittedRows","useEffect","templateExists","templateSchema","getTemplateSchema","errorMsg","VALID_TEMPLATE_IDS","initializeSession","schemaToUse","getClient","parseCSVLine","line","current","inQuotes","char","handleFileSelect","client","lines","handleColumnMatching","handleValidation","handleComplete","clientRows","rawResult","handleCancel","handleStartNewImport","getDisplayStepIndex","canProceed","handleNext","hideFooterAction","StyleProvider","Loader2","containerClass","displayError","wizardContent","Fragment","s","previewRows","dataObj","columnKeys","schemaColumns","rowData"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,11,12]}
|