/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ /** * IDSPanel - IDS (Information Delivery Specification) validation panel * * Provides: * - Load IDS files * - Run validation against loaded models * - View validation results with pass/fail status * - Filter by specification, status * - Click to select entities in 3D view * - Isolate failed/passed entities * - Multi-language support (EN/DE/FR) */ import React, { useCallback, useState, useMemo, useRef } from 'react'; import { X, Upload, Play, CheckCircle, XCircle, AlertCircle, ChevronDown, ChevronRight, Filter, Focus, EyeOff, Eye, Boxes, Layers, FileText, Loader2, Building2, RefreshCw, Trash2, FileJson, FileCode, FileBox, Download, } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { ScrollArea } from '@/components/ui/scroll-area'; import { Separator } from '@/components/ui/separator'; import { Badge } from '@/components/ui/badge'; import { Progress } from '@/components/ui/progress'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from '@/components/ui/collapsible'; import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { useIDS } from '@/hooks/useIDS'; import { openGenericFileDialog } from '@/services/file-dialog'; import type { IDSSpecificationResult, IDSEntityResult, IDSRequirementResult, } from '@ifc-lite/ids'; import { cn } from '@/lib/utils'; import { IDSAuditSummary } from './IDSAuditSummary'; import { IDSExportDialog } from './IDSExportDialog'; import type { IDSBCFExportSettings, IDSExportProgress } from './IDSExportDialog'; // ============================================================================ // Types // ============================================================================ interface IDSPanelProps { onClose?: () => void; } // ============================================================================ // Helper Components // ============================================================================ function StatusIcon({ status, showLabel = false }: { status: 'pass' | 'fail' | 'not_applicable'; showLabel?: boolean }) { const labels = { pass: 'Passed', fail: 'Failed', not_applicable: 'Not Applicable', }; const icons = { pass: