@cristianmpx/react-import-sheet-ui-raw 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/hooks/useRawImporterRoot/useRawImporterRoot.ts","../src/hooks/useRawImporterRoot/RootConfigContext.tsx","../src/hooks/useStatusView/useStatusView.ts","../src/shared/types/status-views.ts","../src/hooks/useRawFilePicker/useRawFilePicker.ts","../src/hooks/useRawMappingTable/useRawMappingTable.ts","../src/hooks/useRawMappingRow/useRawMappingRow.ts","../src/shared/types/input-phase.ts","../src/hooks/useRawMappingSuggest/useRawMappingSuggest.ts","../src/shared/utils/fuzzy-similarity.ts","../src/hooks/useRawImportAction/useRawImportAction.ts","../src/hooks/useRawProgress/useRawProgress.ts","../src/hooks/useRawStatus/useRawStatus.ts","../src/hooks/useRawAbort/useRawAbort.ts","../src/hooks/useRawDataTable/useRawDataTable.ts","../src/hooks/useRawDataTable/DataTableContext.tsx","../src/hooks/useRawDataTable/RawDataTableProvider.tsx","../src/hooks/useRawTableHead/useRawTableHead.ts","../src/hooks/useRawTableBody/useRawTableBody.ts","../src/hooks/useRawTableRow/useRawTableRow.ts","../src/hooks/useRawCell/useRawCell.ts","../src/hooks/useRawErrorBadge/useRawErrorBadge.ts","../src/hooks/useRawPagination/useRawPagination.ts","../src/hooks/useRawPagination/ViewPhaseContext.tsx","../src/hooks/useRawPagination/useRawSubmitStatus.ts","../src/hooks/useRawPagination/RawViewPhaseProvider.tsx","../src/hooks/useRawRemoveRow/useRawRemoveRow.ts","../src/hooks/useRawEditLog/useRawEditLog.ts","../src/hooks/useRawEditLog/EditLogContext.tsx","../src/hooks/useRawEditLog/RawEditLogProvider.tsx","../src/hooks/useRawFilterToggle/useRawFilterToggle.ts","../src/hooks/useRawExport/useRawExport.ts","../src/hooks/useRawPersistence/useRawPersistence.ts","../src/hooks/useImporterMetrics/useImporterMetrics.ts","../src/components/RawImporterRoot/RawImporterRoot.tsx","../src/components/RawStatusGuard/RawStatusGuard.tsx","../src/components/RawFilePicker/RawFilePicker.tsx","../src/components/RawMappingTable/RawMappingTable.tsx","../src/components/RawMappingRow/RawMappingRow.tsx","../src/components/RawMappingSuggest/RawMappingSuggest.tsx","../src/components/RawImportAction/RawImportAction.tsx","../src/components/RawErrorBoundary/RawErrorBoundary.tsx","../src/components/RawProgressDisplay/RawProgressDisplay.tsx","../src/components/RawStatusIndicator/RawStatusIndicator.tsx","../src/components/RawAbortButton/RawAbortButton.tsx","../src/components/RawImporterWorkflow/RawImporterWorkflow.tsx","../src/components/RawEditLogPanel/RawEditLogPanel.tsx"],"sourcesContent":["/**\n * @cristianm/react-import-sheet-ui-raw\n * Raw UI components for sheet import — built on @cristianmpx/react-import-sheet-headless.\n */\n\nexport {\n useRawImporterRoot,\n RootConfigContext,\n RootConfigProvider,\n LayoutContext,\n LayoutProvider,\n} from './hooks/useRawImporterRoot/index';\nexport type {\n AutoApplyMappingWhenMismatchesAtMost,\n RootConfig,\n LayoutProviderProps,\n RootConfigProviderProps,\n RootConfigStages,\n UseRawImporterRootOptions,\n UseRawImporterRootReturn,\n} from './hooks/useRawImporterRoot/index';\n\nexport { useStatusView } from './hooks/useStatusView/index';\nexport type { MappingErrorDetail, UseStatusViewReturn } from './hooks/useStatusView/index';\n\nexport { useRawFilePicker } from './hooks/useRawFilePicker/index';\nexport type {\n GetRootPropsOptions,\n UseRawFilePickerOptions,\n UseRawFilePickerReturn,\n} from './hooks/useRawFilePicker/index';\n\nexport { useRawMappingTable } from './hooks/useRawMappingTable/index';\nexport type { UseRawMappingTableReturn } from './hooks/useRawMappingTable/index';\n\nexport { useRawMappingRow } from './hooks/useRawMappingRow/index';\nexport type {\n UseRawMappingRowOptions,\n UseRawMappingRowReturn,\n} from './hooks/useRawMappingRow/index';\n\nexport { useRawMappingSuggest } from './hooks/useRawMappingSuggest/index';\nexport type {\n UseRawMappingSuggestOptions,\n UseRawMappingSuggestReturn,\n} from './hooks/useRawMappingSuggest/index';\n\nexport { useRawImportAction } from './hooks/useRawImportAction/index';\nexport type { UseRawImportActionReturn } from './hooks/useRawImportAction/index';\n\nexport { useRawProgress } from './hooks/useRawProgress/index';\nexport type { UseRawProgressOptions, UseRawProgressReturn } from './hooks/useRawProgress/index';\n\nexport { useRawStatus } from './hooks/useRawStatus/index';\nexport type { UseRawStatusReturn } from './hooks/useRawStatus/index';\n\nexport { useRawAbort } from './hooks/useRawAbort/index';\nexport type { UseRawAbortReturn } from './hooks/useRawAbort/index';\n\nexport {\n useRawDataTable,\n DataTableContext,\n RawDataTableProvider,\n} from './hooks/useRawDataTable/index';\nexport type {\n DataTableContextValue,\n UseRawDataTableReturn,\n UseRawDataTableOptions,\n RawDataTableProviderProps,\n PendingCell,\n} from './hooks/useRawDataTable/index';\n\nexport { useRawTableHead } from './hooks/useRawTableHead/index';\nexport type { UseRawTableHeadReturn } from './hooks/useRawTableHead/index';\n\nexport { useRawTableBody } from './hooks/useRawTableBody/index';\nexport type { UseRawTableBodyReturn } from './hooks/useRawTableBody/index';\n\nexport { useRawTableRow } from './hooks/useRawTableRow/index';\nexport type { UseRawTableRowOptions, UseRawTableRowReturn } from './hooks/useRawTableRow/index';\n\nexport { useRawCell } from './hooks/useRawCell/index';\nexport type { UseRawCellOptions, UseRawCellReturn } from './hooks/useRawCell/index';\n\nexport { useRawErrorBadge } from './hooks/useRawErrorBadge/index';\nexport type {\n UseRawErrorBadgeOptions,\n UseRawErrorBadgeReturn,\n} from './hooks/useRawErrorBadge/index';\n\nexport {\n useRawPagination,\n useRawSubmitStatus,\n ViewPhaseContext,\n RawViewPhaseProvider,\n} from './hooks/useRawPagination/index';\nexport type {\n ViewPhaseContextValue,\n RawViewPhaseProviderProps,\n UseRawPaginationReturn,\n UseRawSubmitStatusReturn,\n} from './hooks/useRawPagination/index';\n\nexport { useRawRemoveRow } from './hooks/useRawRemoveRow/index';\nexport type { UseRawRemoveRowReturn } from './hooks/useRawRemoveRow/index';\n\nexport { useRawEditLog, EditLogContext, RawEditLogProvider } from './hooks/useRawEditLog/index';\nexport type {\n UseRawEditLogReturn,\n RawEditLogProviderProps,\n EditLogEntry,\n EditLogCellUpdate,\n EditLogRowRemoved,\n} from './hooks/useRawEditLog/index';\n\nexport { useRawFilterToggle } from './hooks/useRawFilterToggle/index';\nexport type { UseRawFilterToggleReturn } from './hooks/useRawFilterToggle/index';\n\nexport { useRawExport } from './hooks/useRawExport/index';\nexport type { UseRawExportReturn } from './hooks/useRawExport/index';\n\nexport { useRawPersistence } from './hooks/useRawPersistence/index';\nexport type { UseRawPersistenceReturn } from './hooks/useRawPersistence/index';\n\nexport { useImporterMetrics } from './hooks/useImporterMetrics/index';\n\nexport type { StatusView } from './shared/types/status-views';\nexport { getViewFromState } from './shared/types/status-views';\nexport type {\n LayoutFieldOption,\n MappingStatus,\n RawMappingRowContext,\n RawMappingSuggestContext,\n} from './shared/types/input-phase';\nexport { getLayoutFieldOptions } from './shared/types/input-phase';\nexport type {\n TableHeader,\n RawTableRowContext,\n RawCellContext,\n GetRowPropsResult,\n GetRowPropsOptions,\n GetCellPropsOptions,\n} from './shared/types/data-phase';\nexport type { FilterMode } from './shared/types/view-phase';\n\nexport { RawImporterRoot } from './components/RawImporterRoot';\nexport type { RawImporterRootProps } from './components/RawImporterRoot';\n\nexport { RawStatusGuard } from './components/RawStatusGuard';\nexport type { RawStatusGuardProps } from './components/RawStatusGuard';\n\nexport { RawFilePicker } from './components/RawFilePicker';\nexport type { RawFilePickerProps } from './components/RawFilePicker';\n\nexport { RawMappingTable } from './components/RawMappingTable';\nexport type { RawMappingTableProps } from './components/RawMappingTable';\n\nexport { RawMappingRow } from './components/RawMappingRow';\nexport type { RawMappingRowProps } from './components/RawMappingRow';\n\nexport { RawMappingSuggest } from './components/RawMappingSuggest';\nexport type { RawMappingSuggestProps } from './components/RawMappingSuggest';\n\nexport { RawImportAction } from './components/RawImportAction';\nexport type { RawImportActionProps } from './components/RawImportAction';\n\nexport { RawErrorBoundary } from './components/RawErrorBoundary';\nexport type { RawErrorBoundaryProps } from './components/RawErrorBoundary';\n\nexport { RawProgressDisplay } from './components/RawProgressDisplay';\nexport type { RawProgressDisplayProps } from './components/RawProgressDisplay';\n\nexport { RawStatusIndicator } from './components/RawStatusIndicator';\nexport type { RawStatusIndicatorProps } from './components/RawStatusIndicator';\n\nexport { RawAbortButton } from './components/RawAbortButton';\nexport type { RawAbortButtonProps } from './components/RawAbortButton';\n\nexport { RawImporterWorkflow } from './components/RawImporterWorkflow';\nexport type {\n CellErrorPlacement,\n RawImporterWorkflowErrorOptions,\n RawImporterWorkflowProps,\n} from './components/RawImporterWorkflow';\n\nexport { RawEditLogPanel } from './components/RawEditLogPanel';\nexport type { RawEditLogPanelProps } from './components/RawEditLogPanel';\n\nexport {\n ImporterProvider,\n useImporter,\n useImportSheet,\n useConvert,\n useImporterStatus,\n useSheetData,\n useSheetEditor,\n useSheetView,\n useImporterEventTarget,\n useImporterProgressSubscription,\n IMPORTER_ABORTED_EVENT,\n IMPORTER_PROGRESS_EVENT,\n} from '@cristianmpx/react-import-sheet-headless';\nexport type {\n ImporterProviderProps,\n UseImporterOptions,\n ImporterStatus,\n ImporterState,\n ImporterProgressDetail,\n SheetLayout,\n SheetLayoutField,\n SheetLayoutRef,\n SheetError,\n SheetErrorLevel,\n ParserEngine,\n Sheet,\n ValidatedCell,\n ValidatedRow,\n EditCellParams,\n PaginatedResult,\n PipelineMetrics,\n PipelineMetricsPercentages,\n PipelineMetricsTimings,\n ExportOptions,\n UseSheetViewOptions,\n UseSheetViewReturn,\n ViewCounts,\n ViewFilterMode,\n ConvertResult,\n ConvertResultData,\n} from '@cristianmpx/react-import-sheet-headless';\n","import { useMemo } from 'react';\nimport type { UseRawImporterRootOptions, UseRawImporterRootReturn } from './types.js';\n\nconst defaultStages = {};\n\nexport function useRawImporterRoot(\n options: UseRawImporterRootOptions = {}\n): UseRawImporterRootReturn {\n const {\n layout,\n engine,\n persist,\n persistKey,\n fuzzyMatch = true,\n editingEnabled = true,\n stages = defaultStages,\n autoApplyMappingWhenMismatchesAtMost = 'never',\n showErrorWhenMismatchesAbove,\n onSubmit,\n submitKeyMap,\n } = options;\n\n const providerProps = useMemo(\n () => ({\n layout,\n engine,\n persist,\n persistKey,\n onSubmit,\n submitKeyMap,\n }),\n [layout, engine, persist, persistKey, onSubmit, submitKeyMap]\n );\n\n const rootConfig = useMemo(\n () => ({\n fuzzyMatch,\n editingEnabled,\n stages: { ...defaultStages, ...stages },\n autoApplyMappingWhenMismatchesAtMost,\n showErrorWhenMismatchesAbove,\n }),\n [\n fuzzyMatch,\n editingEnabled,\n stages,\n autoApplyMappingWhenMismatchesAtMost,\n showErrorWhenMismatchesAbove,\n ]\n );\n\n return { providerProps, rootConfig };\n}\n","import { createContext, type ReactNode } from 'react';\nimport type { SheetLayout } from '@cristianmpx/react-import-sheet-headless';\nimport type { RootConfig } from './types.js';\n\nconst defaultConfig: RootConfig = {\n fuzzyMatch: true,\n editingEnabled: true,\n stages: {},\n autoApplyMappingWhenMismatchesAtMost: 'never',\n showErrorWhenMismatchesAbove: undefined,\n};\n\nexport const RootConfigContext = createContext<RootConfig>(defaultConfig);\n\n/** Layout from RawImporterRoot; used by useRawMappingTable/Row for field options. */\nexport const LayoutContext = createContext<SheetLayout | null>(null);\n\nexport interface RootConfigProviderProps {\n rootConfig: RootConfig;\n children: ReactNode;\n}\n\nexport function RootConfigProvider({ rootConfig, children }: RootConfigProviderProps) {\n return <RootConfigContext.Provider value={rootConfig}>{children}</RootConfigContext.Provider>;\n}\n\nexport interface LayoutProviderProps {\n layout: SheetLayout | null;\n children: ReactNode;\n}\n\nexport function LayoutProvider({ layout, children }: LayoutProviderProps) {\n return <LayoutContext.Provider value={layout}>{children}</LayoutContext.Provider>;\n}\n","import { useContext, useEffect, useMemo, useRef } from 'react';\nimport { useConvert, useImporterStatus } from '@cristianmpx/react-import-sheet-headless';\nimport { RootConfigContext } from '../useRawImporterRoot/RootConfigContext.jsx';\nimport type { AutoApplyMappingWhenMismatchesAtMost } from '../useRawImporterRoot/types.js';\nimport { getViewFromState } from '../../shared/types/status-views.js';\nimport type { StatusView } from '../../shared/types/status-views.js';\nimport type { MappingErrorDetail, UseStatusViewReturn } from './types.js';\n\nfunction applyStages(\n view: StatusView,\n stages: { mapping?: boolean; process?: boolean; result?: boolean }\n): StatusView {\n if (view === 'mapping' && stages.mapping === false) return 'idle';\n if (view === 'process' && stages.process === false) return 'idle';\n if (view === 'result' && stages.result === false) return 'idle';\n return view;\n}\n\nfunction resolveMappingView(\n rawView: StatusView,\n mismatchCount: number,\n autoApply: AutoApplyMappingWhenMismatchesAtMost,\n showErrorAbove: number | undefined\n): { view: StatusView; mappingErrorDetail: MappingErrorDetail | null } {\n if (rawView !== 'mapping') {\n return { view: rawView, mappingErrorDetail: null };\n }\n if (showErrorAbove != null && mismatchCount > showErrorAbove) {\n return {\n view: 'error',\n mappingErrorDetail: {\n code: 'TOO_MANY_MISMATCHES',\n mismatchCount,\n maxAllowed: showErrorAbove,\n },\n };\n }\n if (autoApply !== 'never' && typeof autoApply === 'number' && mismatchCount <= autoApply) {\n return { view: 'process', mappingErrorDetail: null };\n }\n return { view: 'mapping', mappingErrorDetail: null };\n}\n\nexport function useStatusView(): UseStatusViewReturn {\n const rootConfig = useContext(RootConfigContext);\n const { status, progressEventTarget } = useImporterStatus();\n const { convertResult } = useConvert();\n\n const mismatchCount = useMemo(\n () => (convertResult?.mismatches?.length ?? 0) as number,\n [convertResult]\n );\n\n const { view, mappingErrorDetail } = useMemo(() => {\n const raw = getViewFromState(status, convertResult);\n const afterStages = applyStages(raw, rootConfig.stages);\n return resolveMappingView(\n afterStages,\n mismatchCount,\n rootConfig.autoApplyMappingWhenMismatchesAtMost,\n rootConfig.showErrorWhenMismatchesAbove\n );\n }, [\n status,\n convertResult,\n rootConfig.stages,\n mismatchCount,\n rootConfig.autoApplyMappingWhenMismatchesAtMost,\n rootConfig.showErrorWhenMismatchesAbove,\n ]);\n\n const appliedRef = useRef<unknown>(null);\n useEffect(() => {\n const autoApply = rootConfig.autoApplyMappingWhenMismatchesAtMost;\n if (\n convertResult != null &&\n autoApply !== 'never' &&\n typeof autoApply === 'number' &&\n mismatchCount <= autoApply &&\n appliedRef.current !== convertResult\n ) {\n appliedRef.current = convertResult;\n convertResult.applyMapping();\n }\n if (convertResult == null) {\n appliedRef.current = null;\n }\n }, [convertResult, mismatchCount, rootConfig.autoApplyMappingWhenMismatchesAtMost]);\n\n return useMemo(\n () => ({\n view,\n status,\n progressEventTarget,\n convertResult,\n mappingErrorDetail,\n }),\n [view, status, progressEventTarget, convertResult, mappingErrorDetail]\n );\n}\n","import type { ImporterStatus } from '@cristianmpx/react-import-sheet-headless';\n\nexport type StatusView = 'idle' | 'mapping' | 'process' | 'result' | 'error';\n\nexport function getViewFromState(status: ImporterStatus, convertResult: unknown): StatusView {\n if (convertResult !== null && convertResult !== undefined) {\n return 'mapping';\n }\n switch (status) {\n case 'idle':\n case 'loading':\n case 'parsing':\n return 'idle';\n case 'validating':\n case 'transforming':\n return 'process';\n case 'success':\n return 'result';\n case 'error':\n case 'cancelled':\n return 'error';\n default:\n return 'idle';\n }\n}\n","import { useCallback, useRef, useState } from 'react';\nimport { useImporter } from '@cristianmpx/react-import-sheet-headless';\nimport type {\n GetRootPropsOptions,\n UseRawFilePickerOptions,\n UseRawFilePickerReturn,\n} from './types.js';\n\nexport function useRawFilePicker(options: UseRawFilePickerOptions = {}): UseRawFilePickerReturn {\n const { accept } = options;\n const { processFile } = useImporter();\n const [isDragging, setIsDragging] = useState(false);\n const rootRef = useRef<HTMLElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const setRootRef = useCallback((el: HTMLElement | null) => {\n rootRef.current = el;\n }, []);\n\n const setInputRef = useCallback((el: HTMLInputElement | null) => {\n inputRef.current = el;\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n const file = e.dataTransfer?.files?.[0];\n if (file) processFile(file);\n },\n [processFile]\n );\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n e.dataTransfer.dropEffect = 'copy';\n setIsDragging(true);\n }, []);\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (!rootRef.current?.contains(e.relatedTarget as Node)) {\n setIsDragging(false);\n }\n }, []);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) processFile(file);\n e.target.value = '';\n },\n [processFile]\n );\n\n const handleRootClick = useCallback((e: React.MouseEvent) => {\n if (e.target !== inputRef.current) {\n inputRef.current?.click();\n }\n }, []);\n\n const getRootProps = useCallback(\n (opts?: GetRootPropsOptions) => ({\n ref: setRootRef,\n onClick: handleRootClick,\n onDragOver: handleDragOver,\n onDragLeave: handleDragLeave,\n onDrop: handleDrop,\n role: 'button',\n 'aria-label': 'Drop zone for file import',\n 'data-dropzone': 'true',\n className: opts?.className,\n style: opts?.style,\n }),\n [handleRootClick, handleDragOver, handleDragLeave, handleDrop, setRootRef]\n );\n\n const getInputProps = useCallback(\n () => ({\n ref: setInputRef,\n type: 'file' as const,\n onChange: handleChange,\n accept: accept ?? '.xlsx,.xls,.csv',\n tabIndex: -1,\n 'aria-label': 'Select file to import',\n }),\n [handleChange, setInputRef, accept]\n );\n\n return {\n isDragging,\n getRootProps,\n getInputProps,\n };\n}\n","import { useMemo } from 'react';\nimport { useConvert } from '@cristianmpx/react-import-sheet-headless';\nimport type { RawMappingRowContext } from '../../shared/types/input-phase.js';\nimport type { UseRawMappingTableReturn } from './types.js';\n\nexport function useRawMappingTable(): UseRawMappingTableReturn {\n const { convertResult } = useConvert();\n\n const rows: RawMappingRowContext[] = useMemo(() => {\n if (!convertResult?.headersFound?.length) return [];\n return convertResult.headersFound.map((headerOriginal, columnIndex) => ({\n headerOriginal,\n columnIndex,\n }));\n }, [convertResult]);\n\n const hasMappingData = convertResult != null && rows.length > 0;\n\n return useMemo(\n () => ({\n rows,\n hasMappingData,\n }),\n [rows, hasMappingData]\n );\n}\n","import { useContext, useCallback, useMemo } from 'react';\nimport { useConvert } from '@cristianmpx/react-import-sheet-headless';\nimport { LayoutContext } from '../useRawImporterRoot/RootConfigContext.jsx';\nimport { getLayoutFieldOptions } from '../../shared/types/input-phase.js';\nimport type { MappingStatus } from '../../shared/types/input-phase.js';\nimport type { UseRawMappingRowOptions, UseRawMappingRowReturn } from './types.js';\n\nexport function useRawMappingRow(options: UseRawMappingRowOptions): UseRawMappingRowReturn {\n const { rowContext } = options;\n const { headerOriginal, columnIndex } = rowContext;\n const layout = useContext(LayoutContext);\n const { convertResult } = useConvert();\n\n const optionsList = useMemo(() => getLayoutFieldOptions(layout), [layout]);\n\n /** Field ids already mapped by other columns (not this row); keep mapping unique per layout field. */\n const usedByOtherColumns = useMemo(() => {\n if (!convertResult?.headerToFieldMap) return new Set<string>();\n return new Set(\n Object.entries(convertResult.headerToFieldMap)\n .filter(([header]) => header !== headerOriginal)\n .map(([, fieldId]) => fieldId)\n .filter(Boolean)\n );\n }, [convertResult?.headerToFieldMap, headerOriginal]);\n\n const mappingOptions = useMemo(\n () =>\n optionsList.map((opt) => ({\n ...opt,\n disabled: usedByOtherColumns.has(opt.id),\n })),\n [optionsList, usedByOtherColumns]\n );\n\n const value = useMemo(() => {\n if (!convertResult?.headerToFieldMap) return null;\n return convertResult.headerToFieldMap[headerOriginal] ?? null;\n }, [convertResult, headerOriginal]);\n\n const onChange = useCallback(\n (fieldId: string) => {\n convertResult?.renameColumn(headerOriginal, fieldId);\n },\n [convertResult, headerOriginal]\n );\n\n const mappingStatus: MappingStatus = useMemo(() => {\n if (value == null || value === '') return 'unmapped';\n const mismatches = convertResult?.mismatches ?? [];\n const stillMismatch = mismatches.some((m) => m.expected === value);\n return stillMismatch ? 'invalid' : 'valid';\n }, [value, convertResult?.mismatches]);\n\n return useMemo(\n () => ({\n headerOriginal,\n columnIndex,\n options: mappingOptions,\n value,\n onChange,\n mappingStatus,\n }),\n [headerOriginal, columnIndex, mappingOptions, value, onChange, mappingStatus]\n );\n}\n","/**\n * Shared types for the input phase (file picker, mapping table/row, suggest, import action).\n * Align with @cristianmpx/react-import-sheet-headless ConvertResult, headerToFieldMap, layout fields.\n */\n\nimport type { SheetLayout, SheetLayoutField } from '@cristianmpx/react-import-sheet-headless';\n\n/** Option for the destination field selector (layout field id + label). */\nexport interface LayoutFieldOption {\n id: string;\n label: string;\n /** True when this field is already mapped by another file column (unique mapping). */\n disabled?: boolean;\n}\n\n/** Status of a single column-to-field mapping (valid when mapped and matched). */\nexport type MappingStatus = 'valid' | 'invalid' | 'unmapped';\n\n/** Context passed to useRawMappingRow for one file column. */\nexport interface RawMappingRowContext {\n /** Original header from the file (column name). */\n headerOriginal: string;\n /** Column index in the file (0-based). */\n columnIndex: number;\n}\n\n/** Context passed to useRawMappingSuggest for one file column (fuzzy suggestion). */\nexport interface RawMappingSuggestContext {\n /** Original header from the file. */\n fileHeader: string;\n /** Column index (0-based). */\n columnIndex: number;\n}\n\n/**\n * Build layout options from SheetLayout for dropdowns/selectors.\n * Each option has id = field key, label = field.name (or id fallback).\n */\nexport function getLayoutFieldOptions(layout: SheetLayout | null): LayoutFieldOption[] {\n if (!layout?.fields) return [];\n return Object.entries(layout.fields).map(([id, field]) => ({\n id,\n label: (field as SheetLayoutField).name ?? id,\n }));\n}\n","import { useContext, useMemo } from 'react';\nimport { LayoutContext } from '../useRawImporterRoot/RootConfigContext.jsx';\nimport { RootConfigContext } from '../useRawImporterRoot/RootConfigContext.jsx';\nimport { getLayoutFieldOptions } from '../../shared/types/input-phase.js';\nimport { getSimilarity } from '../../shared/utils/fuzzy-similarity.js';\nimport type { UseRawMappingSuggestOptions, UseRawMappingSuggestReturn } from './types.js';\n\nconst DEFAULT_FUZZY_THRESHOLD = 0.8;\n\nexport function useRawMappingSuggest(\n options: UseRawMappingSuggestOptions\n): UseRawMappingSuggestReturn {\n const { columnContext } = options;\n const { fileHeader } = columnContext;\n const rootConfig = useContext(RootConfigContext);\n const layout = useContext(LayoutContext);\n\n return useMemo((): UseRawMappingSuggestReturn => {\n if (rootConfig.fuzzyMatch === false) {\n return { matchScore: 0, suggestedFieldId: null, suggestedFieldLabel: null };\n }\n const optionsList = getLayoutFieldOptions(layout);\n let bestScore = 0;\n let bestId: string | null = null;\n let bestLabel: string | null = null;\n for (const opt of optionsList) {\n const score = getSimilarity(fileHeader, opt.label);\n if (score >= DEFAULT_FUZZY_THRESHOLD && score > bestScore) {\n bestScore = score;\n bestId = opt.id;\n bestLabel = opt.label;\n }\n }\n const matchScore = Math.round(bestScore * 100);\n return {\n matchScore: bestId != null ? matchScore : 0,\n suggestedFieldId: bestId,\n suggestedFieldLabel: bestLabel,\n };\n }, [rootConfig.fuzzyMatch, layout, fileHeader]);\n}\n","/**\n * Simple string similarity (0–1) for fuzzy suggestion in mapping UI.\n * Used when rootConfig.fuzzyMatch is true; no dependency on headless internals.\n */\n\nfunction normalize(s: string): string {\n return s\n .trim()\n .toLowerCase()\n .normalize('NFD')\n .replace(/\\p{Diacritic}/gu, '');\n}\n\nfunction levenshtein(a: string, b: string): number {\n if (a.length === 0) return b.length;\n if (b.length === 0) return a.length;\n let prev = Array.from({ length: b.length + 1 }, (_, i) => i);\n for (let i = 1; i <= a.length; i++) {\n const curr: number[] = [i];\n for (let j = 1; j <= b.length; j++) {\n const cost = a[i - 1] === b[j - 1] ? 0 : 1;\n curr[j] = Math.min(curr[j - 1]! + 1, prev[j]! + 1, prev[j - 1]! + cost);\n }\n prev = curr;\n }\n return prev[b.length]!;\n}\n\n/** Returns similarity between 0 and 1. */\nexport function getSimilarity(s1: string, s2: string): number {\n const a = normalize(s1);\n const b = normalize(s2);\n if (a.length === 0 && b.length === 0) return 1;\n const longer = a.length >= b.length ? a : b;\n const shorter = a.length < b.length ? a : b;\n if (longer.length === 0) return 1;\n const distance = levenshtein(longer, shorter);\n return (longer.length - distance) / longer.length;\n}\n","import { useCallback, useMemo } from 'react';\nimport { useConvert, useImporterStatus } from '@cristianmpx/react-import-sheet-headless';\nimport type { UseRawImportActionReturn } from './types.js';\n\nexport function useRawImportAction(): UseRawImportActionReturn {\n const { convertResult } = useConvert();\n const { status } = useImporterStatus();\n\n const isProcessing =\n status === 'loading' ||\n status === 'parsing' ||\n status === 'validating' ||\n status === 'transforming';\n\n const disabled = useMemo(() => {\n if (isProcessing) return true;\n if (!convertResult) return true;\n // Headless: layoutError means required columns missing; extra file columns are ignored.\n if (typeof (convertResult as { layoutError?: boolean }).layoutError === 'boolean') {\n return (convertResult as { layoutError?: boolean }).layoutError === true;\n }\n return convertResult.mismatches.length > 0;\n }, [isProcessing, convertResult]);\n\n const runImport = useCallback(() => {\n if (convertResult && !disabled) {\n convertResult.applyMapping();\n }\n }, [convertResult, disabled]);\n\n return useMemo(\n () => ({\n disabled,\n runImport,\n }),\n [disabled, runImport]\n );\n}\n","import { useEffect, useRef } from 'react';\nimport {\n useImporterStatus,\n IMPORTER_PROGRESS_EVENT,\n IMPORTER_ABORTED_EVENT,\n} from '@cristianmpx/react-import-sheet-headless';\nimport type { ImporterProgressDetail } from '@cristianmpx/react-import-sheet-headless';\nimport type { UseRawProgressOptions, UseRawProgressReturn } from './types.js';\n\nexport function useRawProgress(options: UseRawProgressOptions = {}): UseRawProgressReturn {\n const { onProgress } = options;\n const { progressEventTarget } = useImporterStatus();\n const progressRef = useRef<ImporterProgressDetail | null>(null);\n\n useEffect(() => {\n const target = progressEventTarget;\n const handleProgress = (e: Event) => {\n const detail = (e as CustomEvent<ImporterProgressDetail>).detail;\n progressRef.current = detail ?? null;\n onProgress?.(detail);\n };\n const handleAborted = () => {\n progressRef.current = null;\n };\n target.addEventListener(IMPORTER_PROGRESS_EVENT, handleProgress);\n target.addEventListener(IMPORTER_ABORTED_EVENT, handleAborted);\n return () => {\n target.removeEventListener(IMPORTER_PROGRESS_EVENT, handleProgress);\n target.removeEventListener(IMPORTER_ABORTED_EVENT, handleAborted);\n };\n }, [progressEventTarget, onProgress]);\n\n return {\n progressRef,\n ...(onProgress ? { onProgress } : {}),\n };\n}\n","import { useMemo } from 'react';\nimport { useImporterStatus } from '@cristianmpx/react-import-sheet-headless';\nimport type { UseRawStatusReturn } from './types.js';\n\nexport function useRawStatus(): UseRawStatusReturn {\n const { status } = useImporterStatus();\n\n return useMemo(\n (): UseRawStatusReturn => ({\n status,\n // When headless exposes lastError / errorDetail, wire it here for status === 'error'\n errorDetail: undefined,\n }),\n [status]\n );\n}\n","import { useImporter } from '@cristianmpx/react-import-sheet-headless';\nimport type { UseRawAbortReturn } from './types.js';\n\nexport function useRawAbort(): UseRawAbortReturn {\n const { abort } = useImporter();\n return { abort };\n}\n","import { useContext, useCallback, useMemo, useState } from 'react';\nimport { useSheetData } from '@cristianmpx/react-import-sheet-headless';\nimport { LayoutContext, RootConfigContext } from '../useRawImporterRoot/RootConfigContext.jsx';\nimport { getLayoutFieldOptions } from '../../shared/types/input-phase.js';\nimport type { TableHeader } from '../../shared/types/data-phase.js';\nimport type { DataTableContextValue, UseRawDataTableReturn } from './types.js';\n\nexport interface UseRawDataTableOptions {\n /** Called when focus would move to a row index (e.g. for virtualiser scrollToIndex). */\n onNavigateToIndex?: (index: number) => void;\n}\n\nexport function useRawDataTable(options: UseRawDataTableOptions = {}): UseRawDataTableReturn {\n const { onNavigateToIndex } = options;\n const layout = useContext(LayoutContext);\n const rootConfig = useContext(RootConfigContext);\n const { sheet } = useSheetData();\n\n const [focusedRowIndex, setFocusedRowIndex] = useState<number | null>(null);\n const [focusedCellKey, setFocusedCellKey] = useState<string | null>(null);\n const [pendingCell, setPendingCell] = useState<{ rowIndex: number; fieldId: string } | null>(\n null\n );\n\n const headerIds = useMemo(() => {\n if (!layout?.fields) return [];\n return Object.keys(layout.fields);\n }, [layout?.fields]);\n\n const totalRowCount = sheet?.rows?.length ?? 0;\n const editingEnabled = rootConfig.editingEnabled ?? true;\n\n const headers: TableHeader[] = useMemo(\n () => getLayoutFieldOptions(layout).map((o) => ({ id: o.id, label: o.label })),\n [layout]\n );\n\n const setFocused = useCallback((rowIndex: number | null, cellKey: string | null) => {\n setFocusedRowIndex(rowIndex);\n setFocusedCellKey(cellKey);\n }, []);\n\n const getKeyDownHandler = useCallback(\n (rowIndex: number, cellKey: string) => {\n return (e: React.KeyboardEvent) => {\n const key = e.key;\n if (\n key !== 'ArrowLeft' &&\n key !== 'ArrowRight' &&\n key !== 'ArrowUp' &&\n key !== 'ArrowDown'\n ) {\n return;\n }\n e.preventDefault();\n const colIdx = headerIds.indexOf(cellKey);\n if (colIdx === -1) return;\n\n if (key === 'ArrowLeft' && colIdx > 0) {\n setFocused(rowIndex, headerIds[colIdx - 1] ?? null);\n return;\n }\n if (key === 'ArrowRight' && colIdx < headerIds.length - 1) {\n setFocused(rowIndex, headerIds[colIdx + 1] ?? null);\n return;\n }\n if (key === 'ArrowUp' && rowIndex > 0) {\n const nextIndex = rowIndex - 1;\n setFocused(nextIndex, cellKey);\n onNavigateToIndex?.(nextIndex);\n return;\n }\n if (key === 'ArrowDown' && rowIndex < totalRowCount - 1) {\n const nextIndex = rowIndex + 1;\n setFocused(nextIndex, cellKey);\n onNavigateToIndex?.(nextIndex);\n return;\n }\n };\n },\n [headerIds, totalRowCount, setFocused, onNavigateToIndex]\n );\n\n const value: DataTableContextValue = useMemo(\n () => ({\n editingEnabled,\n headerIds,\n totalRowCount,\n focusedRowIndex,\n focusedCellKey,\n setFocused,\n pendingCell,\n setPendingCell,\n getKeyDownHandler,\n onNavigateToIndex,\n }),\n [\n editingEnabled,\n headerIds,\n totalRowCount,\n focusedRowIndex,\n focusedCellKey,\n setFocused,\n pendingCell,\n getKeyDownHandler,\n onNavigateToIndex,\n ]\n );\n\n return useMemo(\n () => ({\n ...value,\n headers,\n }),\n [value, headers]\n );\n}\n","import { createContext } from 'react';\nimport type { DataTableContextValue } from './types.js';\n\nconst defaultContext: DataTableContextValue = {\n editingEnabled: true,\n headerIds: [],\n totalRowCount: 0,\n focusedRowIndex: null,\n focusedCellKey: null,\n setFocused: () => {},\n pendingCell: null,\n setPendingCell: () => {},\n getKeyDownHandler: () => () => {},\n};\n\nexport const DataTableContext = createContext<DataTableContextValue>(defaultContext);\n","import type { ReactNode } from 'react';\nimport { useMemo } from 'react';\nimport { useSheetEditor } from '@cristianmpx/react-import-sheet-headless';\nimport { DataTableContext } from './DataTableContext.jsx';\nimport { useRawDataTable } from './useRawDataTable.js';\nimport type { UseRawDataTableOptions } from './useRawDataTable.js';\n\nexport interface RawDataTableProviderProps extends UseRawDataTableOptions {\n children: ReactNode;\n}\n\n/**\n * Provides DataTableContext (Roaming Tabindex, editingEnabled) for useRawTableBody/Row/Cell.\n * editingEnabled is overridden with headless canEdit (!submitDone) so editing is disabled after submit.\n * Must be used inside ImporterProvider + LayoutProvider + RootConfigProvider (e.g. RawImporterRoot).\n */\nexport function RawDataTableProvider({ children, onNavigateToIndex }: RawDataTableProviderProps) {\n const editor = useSheetEditor();\n const tableValue = useRawDataTable({ onNavigateToIndex });\n const canEdit = (editor as { canEdit?: boolean }).canEdit !== false;\n const effectiveEditing = tableValue.editingEnabled && canEdit;\n const value = useMemo(\n () => ({ ...tableValue, editingEnabled: effectiveEditing }),\n [tableValue, effectiveEditing]\n );\n return <DataTableContext.Provider value={value}>{children}</DataTableContext.Provider>;\n}\n","import { useContext, useMemo } from 'react';\nimport { LayoutContext } from '../useRawImporterRoot/RootConfigContext.jsx';\nimport { getLayoutFieldOptions } from '../../shared/types/input-phase.js';\nimport type { TableHeader } from '../../shared/types/data-phase.js';\nimport type { UseRawTableHeadReturn } from './types.js';\n\nexport function useRawTableHead(): UseRawTableHeadReturn {\n const layout = useContext(LayoutContext);\n const headers: TableHeader[] = useMemo(\n () => getLayoutFieldOptions(layout).map((o) => ({ id: o.id, label: o.label })),\n [layout]\n );\n return useMemo(() => ({ headers }), [headers]);\n}\n","import { useCallback, useMemo } from 'react';\nimport { useSheetData } from '@cristianmpx/react-import-sheet-headless';\nimport type { GetRowPropsOptions, GetRowPropsResult } from '../../shared/types/data-phase.js';\nimport type { UseRawTableBodyReturn } from './types.js';\n\nexport function useRawTableBody(): UseRawTableBodyReturn {\n const { sheet } = useSheetData();\n const totalRowCount = sheet?.rows?.length ?? 0;\n\n const isPlaceholder = useCallback(\n (index: number) => index < 0 || index >= totalRowCount,\n [totalRowCount]\n );\n\n const getRowProps = useCallback(\n (options: GetRowPropsOptions): GetRowPropsResult => {\n const { index, style } = options;\n const row = sheet?.rows?.[index];\n const hasErrors = (row?.errors?.length ?? 0) > 0;\n const placeholder = isPlaceholder(index);\n\n return {\n 'data-row-index': index,\n 'data-has-errors': hasErrors || undefined,\n 'data-placeholder': placeholder || undefined,\n style,\n role: 'row',\n 'aria-rowindex': index + 1,\n };\n },\n [sheet?.rows, isPlaceholder]\n );\n\n return useMemo(\n (): UseRawTableBodyReturn => ({\n totalRowCount,\n getRowProps,\n isPlaceholder,\n }),\n [totalRowCount, getRowProps, isPlaceholder]\n );\n}\n","import { useCallback, useMemo } from 'react';\nimport type { ValidatedRow } from '@cristianmpx/react-import-sheet-headless';\nimport { useSheetData } from '@cristianmpx/react-import-sheet-headless';\nimport { useRawTableBody } from '../useRawTableBody/index.js';\nimport type { UseRawTableRowOptions, UseRawTableRowReturn } from './types.js';\n\nexport function useRawTableRow(options: UseRawTableRowOptions): UseRawTableRowReturn {\n const { index, style } = options;\n const { sheet } = useSheetData();\n const { getRowProps: bodyGetRowProps, isPlaceholder } = useRawTableBody();\n\n const row: ValidatedRow | undefined | null = useMemo(() => {\n if (options.row !== undefined) return options.row;\n if (!sheet?.rows) return null;\n if (isPlaceholder(index)) return null;\n return sheet.rows[index] ?? null;\n }, [options.row, sheet?.rows, index, isPlaceholder]);\n\n const getRowProps = useCallback(\n (merge?: { className?: string; style?: React.CSSProperties }) => {\n const base = bodyGetRowProps({ index, style });\n return {\n ...base,\n ...(merge?.className != null && { className: merge.className }),\n ...(merge?.style != null && { style: { ...base.style, ...merge.style } }),\n };\n },\n [bodyGetRowProps, index, style]\n );\n\n const rowErrors = row?.errors ?? [];\n\n return useMemo(\n (): UseRawTableRowReturn => ({\n getRowProps,\n row: row ?? undefined,\n rowErrors,\n }),\n [getRowProps, row, rowErrors]\n );\n}\n","import { useContext, useCallback, useMemo, useRef } from 'react';\nimport { useSheetData, useSheetEditor } from '@cristianmpx/react-import-sheet-headless';\nimport { DataTableContext } from '../useRawDataTable/DataTableContext.jsx';\nimport type { UseRawCellOptions, UseRawCellReturn } from './types.js';\n\nexport function useRawCell(options: UseRawCellOptions): UseRawCellReturn {\n const { rowIndex, fieldId } = options;\n const { sheet } = useSheetData();\n const { editCell: editorEditCell } = useSheetEditor();\n const ctx = useContext(DataTableContext);\n\n const row = sheet?.rows?.[rowIndex];\n const cell = useMemo(() => row?.cells?.find((c) => c.key === fieldId), [row?.cells, fieldId]);\n\n const value = cell?.value;\n const errors = cell?.errors ?? [];\n const isPending = ctx.pendingCell?.rowIndex === rowIndex && ctx.pendingCell?.fieldId === fieldId;\n const isFocused = ctx.focusedRowIndex === rowIndex && ctx.focusedCellKey === fieldId;\n const isEditing = (ctx.editingEnabled ?? true) && isFocused;\n\n const editCell = useCallback(\n (newValue: unknown) => {\n if (!(ctx.editingEnabled ?? true)) return;\n ctx.setPendingCell({ rowIndex, fieldId });\n const p = editorEditCell({\n rowIndex,\n cellKey: fieldId,\n value: newValue,\n });\n if (p && typeof (p as Promise<unknown>).then === 'function') {\n (p as Promise<void>).then(\n () => ctx.setPendingCell(null),\n () => ctx.setPendingCell(null)\n );\n } else {\n ctx.setPendingCell(null);\n }\n },\n [ctx.editingEnabled, ctx.setPendingCell, editorEditCell, rowIndex, fieldId]\n );\n\n const localValueRef = useRef<unknown>(value);\n const displayValue = isPending ? localValueRef.current : value;\n if (!isPending) localValueRef.current = value;\n\n const getCellProps = useCallback(\n (opts?: { className?: string; style?: React.CSSProperties }) => {\n const base: Record<string, unknown> = {\n role: 'gridcell',\n tabIndex: isFocused ? 0 : -1,\n 'data-pending': isPending ? 'true' : 'false',\n 'data-has-error': errors.length > 0 ? 'true' : undefined,\n 'aria-invalid': errors.length > 0 ? 'true' : undefined,\n 'data-cell-key': fieldId,\n 'data-row-index': rowIndex,\n onKeyDown: ctx.getKeyDownHandler(rowIndex, fieldId),\n onFocus: () => ctx.setFocused(rowIndex, fieldId),\n ...(opts?.className != null && { className: opts.className }),\n ...(opts?.style != null && { style: opts.style }),\n };\n return base;\n },\n [isFocused, isPending, errors.length, fieldId, rowIndex, ctx.getKeyDownHandler, ctx.setFocused]\n );\n\n const getEditInputProps = useCallback(() => {\n return {\n value: displayValue ?? '',\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n const v = e.target.value;\n localValueRef.current = v;\n editCell(v);\n },\n onBlur: () => {\n // Keep focus on cell; consumer can clear focus if desired\n },\n 'aria-label': fieldId,\n };\n }, [displayValue, fieldId, editCell]);\n const getErrorProps = useCallback(\n () => ({\n role: 'alert' as const,\n 'aria-live': 'polite' as const,\n 'aria-atomic': true,\n 'data-ris-ui': 'raw-cell-error-message' as const,\n }),\n []\n );\n\n return useMemo(\n (): UseRawCellReturn => ({\n value: displayValue,\n errors,\n isPending,\n isEditing,\n getCellProps,\n getEditInputProps,\n getErrorProps,\n editCell,\n }),\n [\n displayValue,\n errors,\n isPending,\n isEditing,\n getCellProps,\n getEditInputProps,\n getErrorProps,\n editCell,\n ]\n );\n}\n","import { useMemo } from 'react';\nimport type { UseRawErrorBadgeOptions, UseRawErrorBadgeReturn } from './types.js';\n\nexport function useRawErrorBadge(options: UseRawErrorBadgeOptions): UseRawErrorBadgeReturn {\n const { error, translateError } = options;\n\n const message = useMemo(() => {\n if (!error) return '';\n if (translateError) return translateError(error.code, error.params);\n return (error.message as string) ?? error.code;\n }, [error, translateError]);\n\n return useMemo(\n (): UseRawErrorBadgeReturn => ({\n error,\n message,\n translateError,\n }),\n [error, message, translateError]\n );\n}\n","import { useContext } from 'react';\nimport { ViewPhaseContext } from './ViewPhaseContext.jsx';\nimport type { UseRawPaginationReturn } from './types.js';\n\nconst VIEW_PHASE_ERROR =\n 'useRawPagination must be used within RawViewPhaseProvider (e.g. in RESULT view).';\n\nexport function useRawPagination(): UseRawPaginationReturn {\n const ctx = useContext(ViewPhaseContext);\n if (!ctx) throw new Error(VIEW_PHASE_ERROR);\n return {\n page: ctx.page,\n pageSize: ctx.pageSize,\n totalRows: ctx.totalRows,\n visibleSheetIndices: ctx.visibleSheetIndices,\n setPage: ctx.setPage,\n setPageSize: ctx.setPageSize,\n };\n}\n","import { createContext } from 'react';\nimport type { Dispatch, SetStateAction } from 'react';\nimport type { FilterMode } from '../../shared/types/view-phase.js';\n\nexport interface ViewPhaseContextValue {\n page: number;\n setPage: (page: number) => void;\n pageSize: number;\n setPageSize: (size: number) => void;\n totalRows: number;\n /** Sheet row indices for the current page (filtered by filterMode). Use these to render grid rows. */\n visibleSheetIndices: number[];\n filterMode: FilterMode;\n setFilterMode: Dispatch<SetStateAction<FilterMode>>;\n downloadCSV: (opts?: { filename?: string }) => void | Promise<void>;\n downloadJSON: (opts?: { filename?: string }) => void | Promise<void>;\n /** Export only rows that have validation errors (CSV). Optional; may be undefined if not provided by provider. */\n downloadCSVErrorsOnly?: (opts?: { filename?: string }) => void | Promise<void>;\n /** Export only rows that have validation errors (JSON). Optional; may be undefined if not provided by provider. */\n downloadJSONErrorsOnly?: (opts?: { filename?: string }) => void | Promise<void>;\n /** True when there is at least one row with validation errors (for disabling \"export errors only\" when empty). */\n hasRowsWithErrors?: boolean;\n hasRecoverableSession: boolean;\n recoverSession: () => Promise<void>;\n clearSession: () => Promise<void>;\n /** True after the user has submitted (headless submitDone). */\n isSubmitted: boolean;\n /** Call when user submits; headless submit() invokes Provider onSubmit(rows) and sets submitDone. */\n markSubmitted: () => void;\n /** Headless canSubmit: true when status success, no validation errors, and not yet submitted. */\n canSubmit: boolean;\n}\n\nexport const ViewPhaseContext = createContext<ViewPhaseContextValue | null>(null);\n","import { useContext } from 'react';\nimport { ViewPhaseContext } from './ViewPhaseContext.jsx';\n\nconst VIEW_PHASE_ERROR =\n 'useRawSubmitStatus must be used within RawViewPhaseProvider (e.g. in RESULT view).';\n\nexport interface UseRawSubmitStatusReturn {\n /** True after the user has submitted (headless submitDone). */\n isSubmitted: boolean;\n /** Call when user submits; headless submit() invokes Provider onSubmit(rows) and sets submitDone. */\n markSubmitted: () => void;\n /** Headless canSubmit: true when status success, no validation errors, and not yet submitted. */\n canSubmit: boolean;\n}\n\nexport function useRawSubmitStatus(): UseRawSubmitStatusReturn {\n const ctx = useContext(ViewPhaseContext);\n if (!ctx) throw new Error(VIEW_PHASE_ERROR);\n return {\n isSubmitted: ctx.isSubmitted,\n markSubmitted: ctx.markSubmitted,\n canSubmit: ctx.canSubmit,\n };\n}\n","import type { ReactNode } from 'react';\nimport { useCallback, useContext, useMemo, useState } from 'react';\nimport { useSheetView, useSheetData, useImporter } from '@cristianmpx/react-import-sheet-headless';\nimport type { FilterMode } from '../../shared/types/view-phase.js';\nimport { getLayoutFieldOptions } from '../../shared/types/input-phase.js';\nimport { LayoutContext } from '../useRawImporterRoot/RootConfigContext.jsx';\nimport { ViewPhaseContext, type ViewPhaseContextValue } from './ViewPhaseContext.jsx';\n\nfunction hasRowErrors(\n row: {\n errors?: readonly unknown[];\n cells?: ReadonlyArray<{ errors?: readonly unknown[] }>;\n } | null\n): boolean {\n if (!row) return false;\n if ((row.errors?.length ?? 0) > 0) return true;\n return row.cells?.some((c) => (c?.errors?.length ?? 0) > 0) ?? false;\n}\n\nfunction escapeCsvCell(value: unknown): string {\n const s = value == null ? '' : String(value);\n if (/[\",\\r\\n]/.test(s)) return `\"${s.replace(/\"/g, '\"\"')}\"`;\n return s;\n}\n\ninterface LayoutFieldOption {\n id: string;\n label: string;\n}\n\nfunction buildErrorsOnlyCSV(\n options: LayoutFieldOption[],\n rowsWithErrors: ReadonlyArray<{ cells?: ReadonlyArray<{ key: string; value: unknown }> }>\n): string {\n const headerLine = options\n .map((o) => o.label)\n .map(escapeCsvCell)\n .join(',');\n const dataLines = rowsWithErrors.map((row) =>\n options\n .map((o) => row.cells?.find((c) => c.key === o.id))\n .map((c) => escapeCsvCell(c?.value))\n .join(',')\n );\n return [headerLine, ...dataLines].join('\\r\\n');\n}\n\nfunction buildErrorsOnlyJSON(\n rowsWithErrors: ReadonlyArray<{ cells?: ReadonlyArray<{ key: string; value: unknown }> }>\n): string {\n const arr = rowsWithErrors.map((row) => {\n const obj: Record<string, unknown> = {};\n (row.cells ?? []).forEach((c) => {\n obj[c.key] = c.value;\n });\n return obj;\n });\n return JSON.stringify(arr, null, 2);\n}\n\nfunction downloadBlob(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n a.click();\n URL.revokeObjectURL(url);\n}\n\nexport interface RawViewPhaseProviderProps {\n children: ReactNode;\n /** Initial page (1-based). Default 1. */\n initialPage?: number;\n /** Initial page size. Default 25. */\n defaultPageSize?: number;\n /** Initial filter mode. Default 'all'. */\n defaultFilterMode?: FilterMode;\n}\n\n/**\n * Single source of truth for view phase: pagination, filter, export, persistence.\n * Must be used inside ImporterProvider (e.g. when status is success / RESULT view).\n * useRawPagination, useRawFilterToggle, useRawExport, useRawPersistence read from this context.\n */\nexport function RawViewPhaseProvider({\n children,\n initialPage = 1,\n defaultPageSize = 25,\n defaultFilterMode = 'all',\n}: RawViewPhaseProviderProps) {\n const [filterMode, setFilterMode] = useState<FilterMode>(defaultFilterMode);\n const [pageSize, setPageSize] = useState(defaultPageSize);\n const layout = useContext(LayoutContext);\n const { sheet } = useSheetData();\n const { submitDone, submit, canSubmit } = useImporter();\n\n const view = useSheetView({\n page: initialPage,\n defaultPageSize: pageSize,\n filterMode,\n });\n\n const layoutOptions = useMemo(() => getLayoutFieldOptions(layout), [layout]);\n const rowsWithErrors = useMemo(\n () => (sheet?.rows ?? []).filter((row) => hasRowErrors(row)),\n [sheet?.rows]\n );\n\n const downloadCSVErrorsOnly = useCallback(\n (opts?: { filename?: string }) => {\n if (rowsWithErrors.length === 0) return;\n const csv = buildErrorsOnlyCSV(layoutOptions, rowsWithErrors);\n const blob = new Blob([csv], { type: 'text/csv;charset=utf-8' });\n downloadBlob(blob, opts?.filename ?? 'errors-only.csv');\n },\n [layoutOptions, rowsWithErrors]\n );\n\n const downloadJSONErrorsOnly = useCallback(\n (opts?: { filename?: string }) => {\n if (rowsWithErrors.length === 0) return;\n const json = buildErrorsOnlyJSON(rowsWithErrors);\n const blob = new Blob([json], { type: 'application/json;charset=utf-8' });\n downloadBlob(blob, opts?.filename ?? 'errors-only.json');\n },\n [rowsWithErrors]\n );\n\n const visibleSheetIndices = useMemo(() => {\n const rows = sheet?.rows ?? [];\n return view.paginatedRows.map((row) => rows.indexOf(row)).filter((i) => i >= 0);\n }, [sheet?.rows, view.paginatedRows]);\n\n const value = useMemo<ViewPhaseContextValue>(\n () => ({\n page: view.page,\n setPage: view.setPage,\n pageSize: view.pageSize,\n setPageSize,\n totalRows: view.totalRows,\n visibleSheetIndices,\n filterMode,\n setFilterMode,\n downloadCSV: view.downloadCSV,\n downloadJSON: view.downloadJSON,\n downloadCSVErrorsOnly,\n downloadJSONErrorsOnly,\n hasRowsWithErrors: rowsWithErrors.length > 0,\n hasRecoverableSession: view.hasRecoverableSession,\n recoverSession: view.recoverSession,\n clearSession: view.clearPersistedState,\n isSubmitted: submitDone ?? false,\n markSubmitted: submit ?? (() => {}),\n canSubmit: canSubmit ?? false,\n }),\n [\n view.page,\n view.setPage,\n view.pageSize,\n view.totalRows,\n visibleSheetIndices,\n view.downloadCSV,\n view.downloadJSON,\n view.hasRecoverableSession,\n view.recoverSession,\n view.clearPersistedState,\n filterMode,\n pageSize,\n downloadCSVErrorsOnly,\n downloadJSONErrorsOnly,\n rowsWithErrors.length,\n submitDone,\n submit,\n canSubmit,\n ]\n );\n\n return <ViewPhaseContext.Provider value={value}>{children}</ViewPhaseContext.Provider>;\n}\n","import { useCallback } from 'react';\nimport { useSheetEditor } from '@cristianmpx/react-import-sheet-headless';\nimport type { UseRawRemoveRowReturn } from './types.js';\n\ntype SheetEditorWithRemove = ReturnType<typeof useSheetEditor> & {\n removeRow?: (rowIndex: number) => void;\n};\n\nexport function useRawRemoveRow(): UseRawRemoveRowReturn {\n const editor = useSheetEditor() as SheetEditorWithRemove;\n const removeRowFn = editor.removeRow;\n const canRemoveRow = typeof removeRowFn === 'function';\n\n const removeRow = useCallback(\n (rowIndex: number) => {\n if (typeof removeRowFn === 'function') {\n removeRowFn(rowIndex);\n }\n },\n [removeRowFn]\n );\n\n return { removeRow, canRemoveRow };\n}\n","import { useSheetEditor } from '@cristianmpx/react-import-sheet-headless';\n\ntype SheetEditorWithLog = ReturnType<typeof useSheetEditor> & {\n changeLog?: readonly unknown[];\n changeLogAsText?: string;\n};\n\nexport interface UseRawEditLogReturn {\n /** Headless changeLog: cell_edit and row_remove entries. Cleared on processFile. */\n entries: readonly unknown[];\n /** Human-readable log string (headless formatChangeLogAsText). */\n changeLogAsText: string;\n /** No-op; headless clears log on processFile only. Kept for API compatibility. */\n clearLog: () => void;\n}\n\nexport function useRawEditLog(): UseRawEditLogReturn {\n const editor = useSheetEditor() as SheetEditorWithLog;\n const entries = editor.changeLog ?? [];\n const changeLogAsText = editor.changeLogAsText ?? '';\n\n return {\n entries,\n changeLogAsText,\n clearLog: () => {},\n };\n}\n","import { createContext } from 'react';\nimport type { EditLogContextValue } from '../../shared/types/edit-log.js';\n\nexport const EditLogContext = createContext<EditLogContextValue | null>(null);\n","import type { ReactNode } from 'react';\nimport { useCallback, useMemo, useState } from 'react';\nimport { EditLogContext } from './EditLogContext.jsx';\nimport type { EditLogEntry } from '../../shared/types/edit-log.js';\n\nexport interface RawEditLogProviderProps {\n children: ReactNode;\n}\n\nexport function RawEditLogProvider({ children }: RawEditLogProviderProps) {\n const [entries, setEntries] = useState<EditLogEntry[]>([]);\n\n const appendCellUpdate = useCallback(\n (params: { rowIndex: number; fieldId: string; oldValue: unknown; newValue: unknown }) => {\n setEntries((prev) => [\n ...prev,\n {\n type: 'cell_update',\n ...params,\n timestamp: Date.now(),\n },\n ]);\n },\n []\n );\n\n const appendRowRemoved = useCallback((params: { rowIndex: number }) => {\n setEntries((prev) => [\n ...prev,\n {\n type: 'row_removed',\n ...params,\n timestamp: Date.now(),\n },\n ]);\n }, []);\n\n const clearLog = useCallback(() => setEntries([]), []);\n\n const value = useMemo(\n () => ({ entries, appendCellUpdate, appendRowRemoved, clearLog }),\n [entries, appendCellUpdate, appendRowRemoved, clearLog]\n );\n\n return <EditLogContext.Provider value={value}>{children}</EditLogContext.Provider>;\n}\n","import { useContext } from 'react';\nimport { ViewPhaseContext } from '../useRawPagination/ViewPhaseContext.jsx';\nimport type { UseRawFilterToggleReturn } from './types.js';\n\nconst VIEW_PHASE_ERROR =\n 'useRawFilterToggle must be used within RawViewPhaseProvider (e.g. in RESULT view).';\n\nexport function useRawFilterToggle(): UseRawFilterToggleReturn {\n const ctx = useContext(ViewPhaseContext);\n if (!ctx) throw new Error(VIEW_PHASE_ERROR);\n return {\n filterMode: ctx.filterMode,\n setFilterMode: ctx.setFilterMode,\n };\n}\n","import { useContext } from 'react';\nimport { ViewPhaseContext } from '../useRawPagination/ViewPhaseContext.jsx';\nimport type { UseRawExportReturn } from './types.js';\n\nconst VIEW_PHASE_ERROR =\n 'useRawExport must be used within RawViewPhaseProvider (e.g. in RESULT view).';\n\nexport function useRawExport(): UseRawExportReturn {\n const ctx = useContext(ViewPhaseContext);\n if (!ctx) throw new Error(VIEW_PHASE_ERROR);\n return {\n downloadCSV: ctx.downloadCSV,\n downloadJSON: ctx.downloadJSON,\n downloadCSVErrorsOnly: ctx.downloadCSVErrorsOnly,\n downloadJSONErrorsOnly: ctx.downloadJSONErrorsOnly,\n hasRowsWithErrors: ctx.hasRowsWithErrors,\n };\n}\n","import { useContext } from 'react';\nimport { ViewPhaseContext } from '../useRawPagination/ViewPhaseContext.jsx';\nimport type { UseRawPersistenceReturn } from './types.js';\n\nconst VIEW_PHASE_ERROR =\n 'useRawPersistence must be used within RawViewPhaseProvider (e.g. in RESULT view).';\n\nexport function useRawPersistence(): UseRawPersistenceReturn {\n const ctx = useContext(ViewPhaseContext);\n if (!ctx) throw new Error(VIEW_PHASE_ERROR);\n return {\n hasRecoverableSession: ctx.hasRecoverableSession,\n recoverSession: ctx.recoverSession,\n clearSession: ctx.clearSession,\n };\n}\n","import { useImporter } from '@cristianmpx/react-import-sheet-headless';\n\n/**\n * Returns pipeline metrics from the Core (timings, totalMs, rowCount).\n * Use in renderResult to show e.g. \"10,000 rows in 1.2s\".\n */\nexport function useImporterMetrics() {\n const { metrics } = useImporter();\n return metrics;\n}\n","import { forwardRef } from 'react';\nimport { ImporterProvider } from '@cristianmpx/react-import-sheet-headless';\nimport {\n useRawImporterRoot,\n RootConfigProvider,\n LayoutProvider,\n} from '../../hooks/useRawImporterRoot';\nimport type { RawImporterRootProps } from './types';\n\nexport const RawImporterRoot = forwardRef<HTMLDivElement, RawImporterRootProps>(\n function RawImporterRoot({ children, className, style, ...options }, ref) {\n const { providerProps, rootConfig } = useRawImporterRoot(options);\n return (\n <ImporterProvider {...providerProps}>\n <LayoutProvider layout={providerProps.layout ?? null}>\n <RootConfigProvider rootConfig={rootConfig}>\n <div ref={ref} className={className} style={style} data-ris-ui=\"raw-importer-root\">\n {children}\n </div>\n </RootConfigProvider>\n </LayoutProvider>\n </ImporterProvider>\n );\n }\n);\n","import { forwardRef, type ReactNode } from 'react';\nimport { useStatusView } from '../../hooks/useStatusView';\nimport type { RawStatusGuardProps } from './types';\n\nexport const RawStatusGuard = forwardRef<HTMLDivElement, RawStatusGuardProps>(\n function RawStatusGuard(\n { renderIdle, renderMapping, renderProcess, renderResult, renderError, className, style },\n ref\n ) {\n const data = useStatusView();\n const { view } = data;\n\n let content: ReactNode = null;\n if (view === 'idle' && renderIdle) content = renderIdle(data);\n else if (view === 'mapping' && renderMapping) content = renderMapping(data);\n else if (view === 'process' && renderProcess) content = renderProcess(data);\n else if (view === 'result' && renderResult) content = renderResult(data);\n else if (view === 'error' && renderError) content = renderError(data);\n\n return (\n <div ref={ref} className={className} style={style} data-ris-ui=\"raw-status-guard\">\n {content}\n </div>\n );\n }\n);\n","import { forwardRef, useCallback } from 'react';\nimport { useRawFilePicker } from '../../hooks/useRawFilePicker';\nimport type { RawFilePickerProps } from './types';\n\nexport const RawFilePicker = forwardRef<HTMLDivElement, RawFilePickerProps>(function RawFilePicker(\n { children, className, style },\n ref\n) {\n const state = useRawFilePicker();\n const rootProps = state.getRootProps({ className, style });\n const { ref: rootRef, ...restRootProps } = rootProps;\n const setRef = useCallback(\n (el: HTMLDivElement | null) => {\n (rootRef as (el: HTMLElement | null) => void)(el);\n if (typeof ref === 'function') ref(el);\n else if (ref) ref.current = el;\n },\n [rootRef, ref]\n );\n return (\n <div ref={setRef} {...restRootProps} data-ris-ui=\"raw-file-picker\">\n <input {...state.getInputProps()} />\n {children(state)}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { useRawMappingTable } from '../../hooks/useRawMappingTable';\nimport type { RawMappingTableProps } from './types';\n\nexport const RawMappingTable = forwardRef<HTMLDivElement, RawMappingTableProps>(\n function RawMappingTable({ children, className, style }, ref) {\n const state = useRawMappingTable();\n return (\n <div ref={ref} className={className} style={style} data-ris-ui=\"raw-mapping-table\">\n {children(state)}\n </div>\n );\n }\n);\n","import { forwardRef } from 'react';\nimport { useRawMappingRow } from '../../hooks/useRawMappingRow';\nimport type { RawMappingRowProps } from './types';\n\nexport const RawMappingRow = forwardRef<HTMLDivElement, RawMappingRowProps>(function RawMappingRow(\n { rowContext, children, className, style },\n ref\n) {\n const state = useRawMappingRow({ rowContext });\n return (\n <div ref={ref} className={className} style={style} data-ris-ui=\"raw-mapping-row\">\n {children(state)}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { useRawMappingSuggest } from '../../hooks/useRawMappingSuggest';\nimport type { RawMappingSuggestProps } from './types';\n\nexport const RawMappingSuggest = forwardRef<HTMLDivElement, RawMappingSuggestProps>(\n function RawMappingSuggest({ columnContext, children, className, style }, ref) {\n const state = useRawMappingSuggest({ columnContext });\n return (\n <div ref={ref} className={className} style={style} data-ris-ui=\"raw-mapping-suggest\">\n {children(state)}\n </div>\n );\n }\n);\n","import { forwardRef } from 'react';\nimport { useRawImportAction } from '../../hooks/useRawImportAction';\nimport type { RawImportActionProps } from './types';\n\nexport const RawImportAction = forwardRef<HTMLDivElement, RawImportActionProps>(\n function RawImportAction({ children, className, style }, ref) {\n const state = useRawImportAction();\n return (\n <div ref={ref} className={className} style={style} data-ris-ui=\"raw-import-action\">\n {children(state)}\n </div>\n );\n }\n);\n","import { Component, type ErrorInfo, type ReactNode } from 'react';\nimport type { RawErrorBoundaryProps } from './types.js';\n\nexport class RawErrorBoundary extends Component<\n RawErrorBoundaryProps,\n { error: Error | null; errorInfo: ErrorInfo | null }\n> {\n constructor(props: RawErrorBoundaryProps) {\n super(props);\n this.state = { error: null, errorInfo: null };\n }\n\n static getDerivedStateFromError(error: Error): { error: Error; errorInfo: null } {\n return { error, errorInfo: null };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n this.setState((s) => ({ ...s, errorInfo }));\n this.props.onError?.(error, errorInfo);\n }\n\n render(): ReactNode {\n const { error, errorInfo } = this.state;\n const { children, fallback } = this.props;\n if (error) {\n const content =\n typeof fallback === 'function'\n ? fallback(error, errorInfo ?? { componentStack: '' })\n : fallback;\n return <div data-ris-ui=\"raw-error-boundary\">{content}</div>;\n }\n return children;\n }\n}\n","import { forwardRef } from 'react';\nimport { useRawProgress } from '../../hooks/useRawProgress';\nimport type { RawProgressDisplayProps } from './types.js';\n\nexport const RawProgressDisplay = forwardRef<HTMLDivElement, RawProgressDisplayProps>(\n function RawProgressDisplay({ children, className, style, onProgress }, ref) {\n const state = useRawProgress({ onProgress });\n return (\n <div ref={ref} className={className} style={style} data-ris-ui=\"raw-progress-display\">\n {children(state)}\n </div>\n );\n }\n);\n","import { forwardRef } from 'react';\nimport { useRawStatus } from '../../hooks/useRawStatus';\nimport type { RawStatusIndicatorProps } from './types.js';\n\nexport const RawStatusIndicator = forwardRef<HTMLDivElement, RawStatusIndicatorProps>(\n function RawStatusIndicator({ children, className, style }, ref) {\n const state = useRawStatus();\n return (\n <div ref={ref} className={className} style={style} data-ris-ui=\"raw-status-indicator\">\n {children(state)}\n </div>\n );\n }\n);\n","import { forwardRef, useMemo } from 'react';\nimport { useRawAbort } from '../../hooks/useRawAbort';\nimport { useRawStatus } from '../../hooks/useRawStatus';\nimport type { RawAbortButtonProps } from './types.js';\n\nconst PROCESSING_STATUSES = ['loading', 'parsing', 'validating', 'transforming'] as const;\n\nexport const RawAbortButton = forwardRef<HTMLButtonElement, RawAbortButtonProps>(\n function RawAbortButton(\n { children, className, style, disabled: disabledProp, 'aria-label': ariaLabel },\n ref\n ) {\n const { abort } = useRawAbort();\n const { status } = useRawStatus();\n const isProcessing = PROCESSING_STATUSES.includes(\n status as (typeof PROCESSING_STATUSES)[number]\n );\n const disabled = disabledProp ?? !isProcessing;\n\n const buttonProps = useMemo(\n () => ({\n type: 'button' as const,\n onClick: abort,\n disabled,\n className,\n style,\n 'aria-label': ariaLabel ?? 'Cancel import',\n }),\n [abort, disabled, className, style, ariaLabel]\n );\n\n return (\n <button ref={ref} {...buttonProps} data-ris-ui=\"raw-abort-button\">\n {children ?? 'Cancel'}\n </button>\n );\n }\n);\n","import { forwardRef, type ReactNode } from 'react';\nimport { useStatusView } from '../../hooks/useStatusView';\nimport { RawFilePicker } from '../RawFilePicker';\nimport { RawMappingTable } from '../RawMappingTable';\nimport { RawMappingRow } from '../RawMappingRow';\nimport { RawMappingSuggest } from '../RawMappingSuggest';\nimport { RawImportAction } from '../RawImportAction';\nimport { RawProgressDisplay } from '../RawProgressDisplay';\nimport { RawStatusIndicator } from '../RawStatusIndicator';\nimport { RawAbortButton } from '../RawAbortButton';\nimport { RawViewPhaseProvider } from '../../hooks/useRawPagination';\nimport { RawDataTableProvider } from '../../hooks/useRawDataTable';\nimport { useRawTableHead } from '../../hooks/useRawTableHead';\nimport { useRawTableRow } from '../../hooks/useRawTableRow';\nimport { useRawCell } from '../../hooks/useRawCell';\nimport { useRawErrorBadge } from '../../hooks/useRawErrorBadge';\nimport { useRawFilterToggle } from '../../hooks/useRawFilterToggle';\nimport { useRawExport } from '../../hooks/useRawExport';\nimport { useRawPagination } from '../../hooks/useRawPagination';\nimport { useRawSubmitStatus } from '../../hooks/useRawPagination';\nimport { useRawRemoveRow } from '../../hooks/useRawRemoveRow';\nimport { RawEditLogPanel } from '../RawEditLogPanel';\nimport { useRawPersistence } from '../../hooks/useRawPersistence';\nimport { useRawAbort } from '../../hooks/useRawAbort';\nimport type { MappingErrorDetail } from '../../hooks/useStatusView/types';\nimport type { CellErrorPlacement, RawImporterWorkflowProps } from './types';\n\n/** Button to cancel / go back to file picker; used in mapping, result, and error stages. */\nfunction BackToFileButton({\n children = 'Choose another file',\n 'aria-label': ariaLabel = 'Cancel and choose another file',\n}: {\n children?: ReactNode;\n 'aria-label'?: string;\n}) {\n const { abort } = useRawAbort();\n return (\n <button\n type=\"button\"\n onClick={abort}\n aria-label={ariaLabel}\n data-ris-ui=\"raw-workflow-back-button\"\n >\n {children}\n </button>\n );\n}\n\nfunction DefaultIdle() {\n return (\n <RawFilePicker>\n {(state) => (\n <span data-ris-ui=\"raw-file-picker-prompt\">\n {state.isDragging ? 'Drop file here' : 'Click or drop file here'}\n </span>\n )}\n </RawFilePicker>\n );\n}\n\nfunction DefaultMapping() {\n return (\n <RawMappingTable>\n {(state) =>\n state.rows.map((rowContext) => (\n <RawMappingRow key={rowContext.columnIndex} rowContext={rowContext}>\n {(rowState) => (\n <>\n <span>{rowState.headerOriginal}</span>\n <RawMappingSuggest\n columnContext={{\n fileHeader: rowContext.headerOriginal,\n columnIndex: rowContext.columnIndex,\n }}\n >\n {(suggestState) =>\n suggestState.suggestedFieldId != null ? (\n <span data-ris-ui=\"raw-mapping-suggest-badge\">\n {suggestState.suggestedFieldLabel} ({suggestState.matchScore}%)\n </span>\n ) : null\n }\n </RawMappingSuggest>\n <select\n value={rowState.value ?? ''}\n onChange={(e) => rowState.onChange(e.target.value)}\n aria-label={`Map ${rowState.headerOriginal}`}\n >\n <option value=\"\">—</option>\n {rowState.options.map((opt) => (\n <option key={opt.id} value={opt.id} disabled={opt.disabled}>\n {opt.label}\n </option>\n ))}\n </select>\n </>\n )}\n </RawMappingRow>\n ))\n }\n </RawMappingTable>\n );\n}\n\nfunction DefaultMappingWithAction() {\n return (\n <>\n <DefaultMapping />\n <div data-ris-ui=\"raw-workflow-mapping-actions\" role=\"group\">\n <RawImportAction>\n {(state) => (\n <button\n type=\"button\"\n disabled={state.disabled}\n onClick={state.runImport}\n aria-label=\"Run import\"\n >\n Import\n </button>\n )}\n </RawImportAction>\n <BackToFileButton>Choose another file</BackToFileButton>\n </div>\n </>\n );\n}\n\nfunction DefaultProcess() {\n return (\n <>\n <RawProgressDisplay>\n {(state) => <div data-ris-ui=\"raw-progress\">{String(state.progressRef?.current ?? 0)}</div>}\n </RawProgressDisplay>\n <RawStatusIndicator>\n {(state) => <div data-ris-ui=\"raw-status\">{state.status}</div>}\n </RawStatusIndicator>\n <RawAbortButton />\n </>\n );\n}\n\nfunction ResultToolbar({\n submitLabel = 'Submit',\n}: { onSubmit?: () => void; submitLabel?: ReactNode } = {}) {\n const filter = useRawFilterToggle();\n const exportApi = useRawExport();\n const { isSubmitted, markSubmitted, canSubmit } = useRawSubmitStatus();\n return (\n <div data-ris-ui=\"raw-workflow-toolbar\" role=\"toolbar\">\n {isSubmitted ? (\n <span data-ris-ui=\"raw-workflow-submitted-message\" role=\"status\">\n Submitted. You can download the file below.\n </span>\n ) : null}\n <BackToFileButton aria-label=\"Import another file\">New file</BackToFileButton>\n <button\n type=\"button\"\n onClick={() => filter.setFilterMode(filter.filterMode === 'all' ? 'errors-only' : 'all')}\n aria-pressed={filter.filterMode === 'errors-only'}\n >\n {filter.filterMode === 'all' ? 'All' : 'Errors only'}\n </button>\n <button type=\"button\" onClick={() => exportApi.downloadCSV?.()}>\n Export CSV\n </button>\n <button type=\"button\" onClick={() => exportApi.downloadJSON?.()}>\n Export JSON\n </button>\n {exportApi.downloadCSVErrorsOnly != null ? (\n <button\n type=\"button\"\n disabled={!exportApi.hasRowsWithErrors || isSubmitted}\n onClick={() => exportApi.downloadCSVErrorsOnly?.()}\n title={exportApi.hasRowsWithErrors ? undefined : 'No hay filas con errores'}\n >\n Export CSV (errors only)\n </button>\n ) : null}\n {exportApi.downloadJSONErrorsOnly != null ? (\n <button\n type=\"button\"\n disabled={!exportApi.hasRowsWithErrors || isSubmitted}\n onClick={() => exportApi.downloadJSONErrorsOnly?.()}\n title={exportApi.hasRowsWithErrors ? undefined : 'No hay filas con errores'}\n >\n Export JSON (errors only)\n </button>\n ) : null}\n {!isSubmitted ? (\n <button\n type=\"button\"\n disabled={!canSubmit}\n onClick={() => markSubmitted()}\n data-ris-ui=\"raw-workflow-submit\"\n aria-label={typeof submitLabel === 'string' ? submitLabel : 'Submit'}\n >\n {submitLabel}\n </button>\n ) : null}\n </div>\n );\n}\n\nfunction ResultGrid({\n cellErrorPlacement = 'inline',\n}: {\n cellErrorPlacement?: CellErrorPlacement;\n}) {\n const { headers } = useRawTableHead();\n const { visibleSheetIndices } = useRawPagination();\n const { canRemoveRow } = useRawRemoveRow();\n\n return (\n <table data-ris-ui=\"raw-workflow-grid\" role=\"grid\">\n <thead>\n <tr role=\"row\">\n {headers.map((h) => (\n <th key={h.id} scope=\"col\" role=\"columnheader\">\n {h.label}\n </th>\n ))}\n {canRemoveRow ? (\n <th scope=\"col\" role=\"columnheader\" data-ris-ui=\"raw-workflow-row-actions-header\">\n Actions\n </th>\n ) : null}\n </tr>\n </thead>\n <tbody>\n {visibleSheetIndices.map((sheetIndex) => (\n <ResultRow\n key={sheetIndex}\n index={sheetIndex}\n headerIds={headers.map((h) => h.id)}\n showRemoveAction={canRemoveRow}\n cellErrorPlacement={cellErrorPlacement}\n />\n ))}\n </tbody>\n </table>\n );\n}\n\nfunction ResultRow({\n index,\n headerIds,\n showRemoveAction,\n cellErrorPlacement = 'inline',\n}: {\n index: number;\n headerIds: string[];\n showRemoveAction?: boolean;\n cellErrorPlacement?: CellErrorPlacement;\n}) {\n const row = useRawTableRow({ index });\n const { removeRow, canRemoveRow } = useRawRemoveRow();\n const { isSubmitted } = useRawSubmitStatus();\n const showDelete = showRemoveAction && canRemoveRow && !isSubmitted;\n\n return (\n <tr key={index} {...row.getRowProps()}>\n {headerIds.map((fieldId) => (\n <ResultCell\n key={fieldId}\n rowIndex={index}\n fieldId={fieldId}\n cellErrorPlacement={cellErrorPlacement}\n />\n ))}\n {showDelete ? (\n <td role=\"gridcell\" data-ris-ui=\"raw-workflow-row-remove-cell\">\n <button\n type=\"button\"\n onClick={() => removeRow(index)}\n aria-label={`Remove row ${index + 1}`}\n data-ris-ui=\"raw-workflow-remove-row\"\n >\n Remove row\n </button>\n </td>\n ) : null}\n </tr>\n );\n}\n\nfunction ResultCell({\n rowIndex,\n fieldId,\n cellErrorPlacement = 'inline',\n}: {\n rowIndex: number;\n fieldId: string;\n cellErrorPlacement?: CellErrorPlacement;\n}) {\n const cell = useRawCell({ rowIndex, fieldId });\n const error = cell.errors?.[0];\n const badge = useRawErrorBadge({\n error: error ?? null,\n translateError: undefined,\n });\n const showError = cellErrorPlacement !== 'none' && badge.message;\n const errorSlot = showError && <span {...cell.getErrorProps()}>{badge.message}</span>;\n\n return (\n <td {...cell.getCellProps()}>\n {cellErrorPlacement === 'below' ? (\n <>\n <div data-ris-ui=\"raw-cell-value-line\">\n {cell.isEditing ? (\n <input {...cell.getEditInputProps()} />\n ) : (\n <span>{String(cell.value ?? '')}</span>\n )}\n </div>\n {showError ? <div data-ris-ui=\"raw-cell-error-line\">{errorSlot}</div> : null}\n </>\n ) : (\n <>\n {cell.isEditing ? (\n <input {...cell.getEditInputProps()} />\n ) : (\n <span>{String(cell.value ?? '')}</span>\n )}\n {cellErrorPlacement === 'inline' && errorSlot}\n </>\n )}\n </td>\n );\n}\n\nfunction ResultFooter() {\n const pagination = useRawPagination();\n const persistence = useRawPersistence();\n\n return (\n <div data-ris-ui=\"raw-workflow-footer\" role=\"contentinfo\">\n <div data-ris-ui=\"raw-workflow-pagination\">\n <button\n type=\"button\"\n disabled={pagination.page <= 1}\n onClick={() => pagination.setPage(pagination.page - 1)}\n aria-label=\"Previous page\"\n >\n Previous\n </button>\n <span>\n Page {pagination.page} of{' '}\n {Math.max(1, Math.ceil(pagination.totalRows / pagination.pageSize))}\n </span>\n <button\n type=\"button\"\n disabled={pagination.page >= Math.ceil(pagination.totalRows / pagination.pageSize)}\n onClick={() => pagination.setPage(pagination.page + 1)}\n aria-label=\"Next page\"\n >\n Next\n </button>\n </div>\n {persistence.hasRecoverableSession ? (\n <div data-ris-ui=\"raw-workflow-persistence\">\n <button type=\"button\" onClick={persistence.recoverSession}>\n Recover session\n </button>\n <button type=\"button\" onClick={persistence.clearSession}>\n Clear\n </button>\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction DefaultResult({\n submitLabel,\n cellErrorPlacement = 'inline',\n}: { submitLabel?: ReactNode; cellErrorPlacement?: CellErrorPlacement } = {}) {\n return (\n <RawViewPhaseProvider>\n <ResultToolbar submitLabel={submitLabel} />\n <RawEditLogPanel />\n <RawDataTableProvider>\n <ResultGrid cellErrorPlacement={cellErrorPlacement} />\n </RawDataTableProvider>\n <ResultFooter />\n </RawViewPhaseProvider>\n );\n}\n\nfunction DefaultError({ mappingErrorDetail }: { mappingErrorDetail: MappingErrorDetail | null }) {\n if (mappingErrorDetail?.code === 'TOO_MANY_MISMATCHES') {\n return (\n <div data-ris-ui=\"raw-workflow-mapping-error\" role=\"alert\">\n <p>\n Too many column mismatches ({mappingErrorDetail.mismatchCount}). Maximum allowed:{' '}\n {mappingErrorDetail.maxAllowed}.\n </p>\n <BackToFileButton>Choose another file</BackToFileButton>\n </div>\n );\n }\n return <DefaultIdle />;\n}\n\nexport const RawImporterWorkflow = forwardRef<HTMLDivElement, RawImporterWorkflowProps>(\n function RawImporterWorkflow(\n {\n className,\n style,\n renderIdle,\n renderMapping,\n renderProcess,\n renderResult,\n renderError,\n submitLabel,\n cellErrorPlacement = 'inline',\n },\n ref\n ) {\n const { view, mappingErrorDetail } = useStatusView();\n\n let content: ReactNode;\n switch (view) {\n case 'idle':\n content = renderIdle ? renderIdle() : <DefaultIdle />;\n break;\n case 'mapping':\n content = renderMapping ? renderMapping() : <DefaultMappingWithAction />;\n break;\n case 'process':\n content = renderProcess ? renderProcess() : <DefaultProcess />;\n break;\n case 'result':\n content = renderResult ? (\n renderResult()\n ) : (\n <DefaultResult submitLabel={submitLabel} cellErrorPlacement={cellErrorPlacement} />\n );\n break;\n case 'error':\n content = renderError ? (\n renderError({ mappingErrorDetail })\n ) : (\n <DefaultError mappingErrorDetail={mappingErrorDetail} />\n );\n break;\n default:\n content = renderIdle ? renderIdle() : <DefaultIdle />;\n }\n\n return (\n <div ref={ref} className={className} style={style} data-ris-ui=\"raw-importer-workflow\">\n {content}\n </div>\n );\n }\n);\n","import { forwardRef, type ReactNode } from 'react';\nimport { useRawEditLog } from '../../hooks/useRawEditLog';\n\nexport interface RawEditLogPanelProps {\n className?: string;\n style?: React.CSSProperties;\n /** Optional. Renders content; receives headless changeLog entries and changeLogAsText. */\n children?: (props: {\n entries: readonly unknown[];\n changeLogAsText: string;\n clearLog: () => void;\n }) => ReactNode;\n}\n\nexport const RawEditLogPanel = forwardRef<HTMLDivElement, RawEditLogPanelProps>(\n function RawEditLogPanel({ className, style, children }, ref) {\n const { entries, changeLogAsText } = useRawEditLog();\n\n if (children) {\n return (\n <div\n ref={ref}\n className={className}\n style={style}\n data-ris-ui=\"raw-edit-log-panel\"\n role=\"log\"\n aria-label=\"Edit log\"\n >\n {children({ entries, changeLogAsText, clearLog: () => {} })}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={className}\n style={style}\n data-ris-ui=\"raw-edit-log-panel\"\n role=\"log\"\n aria-label=\"Edit log\"\n >\n <div data-ris-ui=\"raw-edit-log-header\">\n <span>Edit log ({entries.length} changes)</span>\n </div>\n {changeLogAsText ? (\n <pre data-ris-ui=\"raw-edit-log-list\">{changeLogAsText}</pre>\n ) : (\n <ul data-ris-ui=\"raw-edit-log-list\">\n {entries.length === 0 ? (\n <li data-ris-ui=\"raw-edit-log-entry\">No changes yet.</li>\n ) : null}\n </ul>\n )}\n </div>\n );\n }\n);\n"],"mappings":"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","names":["import_react","import_react","import_react","import_react_import_sheet_headless","import_react","import_react_import_sheet_headless","import_react","import_react_import_sheet_headless","import_react","import_react","import_react_import_sheet_headless","import_react","import_react_import_sheet_headless","import_react","import_react_import_sheet_headless","import_react_import_sheet_headless","import_react","import_react_import_sheet_headless","import_react","import_react","import_react_import_sheet_headless","import_jsx_runtime","import_react","import_react","import_react_import_sheet_headless","import_react","import_react_import_sheet_headless","import_react","import_react_import_sheet_headless","import_react","import_react","import_react","import_react","VIEW_PHASE_ERROR","import_react","import_react_import_sheet_headless","import_jsx_runtime","import_react","import_react_import_sheet_headless","import_react_import_sheet_headless","import_react","import_react","import_jsx_runtime","import_react","VIEW_PHASE_ERROR","import_react","VIEW_PHASE_ERROR","import_react","VIEW_PHASE_ERROR","import_react_import_sheet_headless","import_react","import_react_import_sheet_headless","import_jsx_runtime","RawImporterRoot","import_react","import_jsx_runtime","RawStatusGuard","import_react","import_jsx_runtime","RawFilePicker","import_react","import_jsx_runtime","RawMappingTable","import_react","import_jsx_runtime","RawMappingRow","import_react","import_jsx_runtime","RawMappingSuggest","import_react","import_jsx_runtime","RawImportAction","import_react","import_jsx_runtime","import_react","import_jsx_runtime","RawProgressDisplay","import_react","import_jsx_runtime","RawStatusIndicator","import_react","import_jsx_runtime","RawAbortButton","import_react","import_react","import_jsx_runtime","RawEditLogPanel","import_jsx_runtime","RawImporterWorkflow","import_react_import_sheet_headless"]}