import{T as e,e as t,V as n,M as i,Q as o,E as r,a,O as s,b as l,F as c,c as d}from"./assets/three.js";window.THREE=e;const u={clippingPlanes:null,materialsFolder:null,materialsPropertiesText:null,camera:null,colors:{},intensity:{},ambientLight:null,cameraLight:null,mainCanvas:null,noticeContainer:null,statusNotice:null,gridSize:null,dirLightTarget:null,lightHelper:null,scene:new e.Scene,basicGrid:new e.Group,axesHelper:new e.AxesHelper,cameraCoords:null,tween:new t.Tween,controls:null,transformControlClippingPlaneY:null,transformControlClippingPlaneX:null,transformControlClippingPlaneZ:null,planeHelpers:null,outlineClipping:null,sceneBackgroundColor:null,distanceGeometry:null,planeParams:null,clippingFolder:null,helperObjects:[]},p=(e,t)=>{u[e]=t};function h(e,t,n,i){return{x:e.x+i/Math.abs(n)*t.x,y:e.y+i/Math.abs(n)*t.y,z:e.z+i/Math.abs(n)*t.z}}function g(e,t){return 0===e.length?e:e.length>t?e.substring(0,t)+"...":e}function m(e){if(null==e)return null;if(Array.isArray(e)&&Array.isArray(e[0])&&(e=e[0]),"object"==typeof e&&null!==e&&"number"==typeof e.r&&"number"==typeof e.g&&"number"==typeof e.b)return{r:e.r,g:e.g,b:e.b,a:e.a??1};if(Array.isArray(e)){const[t,n,i,o=1]=e;return"number"==typeof t&&"number"==typeof n&&"number"==typeof i?{r:t,g:n,b:i,a:o}:null}return"number"==typeof e?{r:e>>16&255,g:e>>8&255,b:255&e,a:1}:"string"==typeof e?f(e):null}function f(e){if("string"!=typeof e)return null;if((e=e.trim()).startsWith("0x")){const t=parseInt(e,16);return{r:t>>16&255,g:t>>8&255,b:255&t,a:1}}if(e.startsWith("#")){let t=e.slice(1);return 3===t.length&&(t=t.split("").map(e=>e+e).join("")),6!==t.length?null:{r:parseInt(t.slice(0,2),16),g:parseInt(t.slice(2,4),16),b:parseInt(t.slice(4,6),16),a:1}}const t=e.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)(?:\s*,\s*([\d.]+))?\s*\)/i);if(t){const[,e,n,i,o]=t;return{r:+e,g:+n,b:+i,a:void 0!==o?+o:1}}return null}p("getProxyPath",function(e,t){return decodeURIComponent(t.mainUrl).replace(u.fileObject.originalPath,encodeURIComponent(e))});const b={en:{menu:{actions:"Viewer actions",openActions:"Open viewer actions",embed:"Embed",exitEmbed:"Exit embed",openEmbedOptions:"Open embed options",exitEmbedMode:"Exit embed mode",download:"Download"},theme:{lightMode:"Light mode",darkMode:"Dark mode",switchToLightMode:"Switch to light mode",switchToDarkMode:"Switch to dark mode"},fullscreen:{mode:"Fullscreen mode",enter:"Fullscreen",exit:"Exit fullscreen",exitMode:"Exit fullscreen mode"},language:{label:"Language: English",switchToPolish:"Switch to Polish",switchToEnglish:"Switch to English",switchToGerman:"Switch to German"},hints:{pickingSelect:"Select at least one face to add annotation.",picking:"Shift + click to select multiple faces",clipping:"Drag active clipping plane helper to adjust cut"},controls:{enablePickingMode:"Enable picking mode",disablePickingMode:"Disable picking mode",enableDistanceMeasurement:"Enable distance measurement",disableDistanceMeasurement:"Disable distance measurement",selectedFaces:"Selected faces"},gui:{moveToolbar:"Move toolbar",orbit:"Navigation mode",controls:"Controls",editor:"Editor",transform3dObject:"Transform 3D Object",transformLight:"Transform Light",transformMode:"Transform Mode",directionalLight:"Directional Light",ambientLight:"Ambient Light",ambient:"Ambient",lights:"Lights",cameraLight:"Camera Light",backgroundColor:"Background Color",BackgroundColorOuter:"Background Color Outer",backgroundType:"Background Type",clippingPlanes:"Clipping Planes",clippingFolder:"Clipping Planes",displayHelperX:"Show X helper",displayHelperY:"Show Y helper",displayHelperZ:"Show Z helper",constantX:"Constant X",constantY:"Constant Y",constantZ:"Constant Z",visible:"Visible cutting",materials:"Materials",metadata:"Annotations",saveProperties:"Save properties",hierarchy:"Hierarchy",statistics:"Statistics",clearSelectedFaces:"Clear selected faces",clearSelectedHierarchy:"Clear selected objects",addAnnotations:"Add annotations",exportAnnotationsXml:"Export annotations XML",importAnnotationsXml:"Import annotations XML",IIIFexport:"Export IIIF",resetCameraPosition:"Reset camera position",saveSettings:"Save settings",renderPreview:"Render preview",color:"Color",intensity:"Intensity",metalness:"Metalness",emissive:"Emissive",position:"Position",rotation:"Rotation",camera:"Camera",performance:"Performance",highPerformance:"High-performance",lowPower:"Low-power",default:"Default",none:"None",move:"Move",rotate:"Rotate",scale:"Scale",target:"Target",local:"Local",global:"Global",linear:"Linear",gradient:"Gradient",editMaterial:"Edit material",selectByMaterial:"select by material",hideAdvancedEditor:"Hide advanced editor",showAdvancedEditor:"Show advanced editor",showLoadingLogs:"Show loading logs",hideLoadingLogs:"Hide loading logs",hierarchy:"Hierarchy",expand:"Expand toolbar",collapse:"Collapse toolbar",orthographicProjection:"Switch to orthographic projection",perspectiveProjection:"Switch to perspective projection",environmentMap:"Environment map",environmentMapToggle:"Toggle environment map",environmentMapIntensity:"Environment map intensity",environmentMapStyleNeutral:"Neutral",environmentMapStyleSunny:"Sunny",environmentMapStyleStudio:"Studio",environmentMapStyleGoldenHour:"Golden Hour",enableWireframeMode:"Enable wireframe mode",disableWireframeMode:"Disable wireframe mode",download:"Download model"},metadata:{modelDetails:"Model details",metadata:"Metadata",visualizedFile:"Visualized file",vertices:"Vertices",faces:"Faces",title:"Title",author:"Author",authorAffiliation:"Author affiliation",license:"License",description:"Description",objectType:"Object type",reconstructionAuthors:"Reconstruction authors",reconstructionPeriod:"Reconstruction period"},manifesto:{invalidUrl:"Please enter a valid manifesto URL.",invalidJson:"Please enter a valid manifesto JSON text."},iiif:{loader:"IIIF Loader",collapse:"Collapse",expand:"Expand",manifest:"IIIF manifest",loadFromUrl:"Load from URL",loadFromText:"Load from Text",manifestUrlPlaceholder:"https://example.org/iiif/manifest.json",manifestTextPlaceholder:"Paste IIIF manifest JSON here...",invalidUrl:"Please enter a valid IIIF manifest URL.",invalidJson:"Please enter a valid IIIF JSON text.",optionModelPositionScale:"Model Position and Scale",optionModelOrigin:"Model Origin",optionModelOriginBg:"Model Origin with background color",optionModelPosition:"Model Position"},localPreview:{loadExampleModel:"Load example model"},embedPanel:{title:"Embed options",closeAria:"Close embed options",modelUrl:"Model URL",modelUrlPlaceholder:"/examples/box.glb",entityId:"Entity ID",theme:"Theme",themeDark:"Dark",themeLight:"Light",autoRotateSpeed:"Auto-rotate speed",cameraPosition:"Camera position",cameraTarget:"Camera target",cameraVectorPlaceholder:"x,y,z",fov:"FOV",autoRotate:"Auto-rotate",disableInteraction:"Disable interaction",hideActionMenu:"Hide action menu",hideMetadata:"Hide metadata",presentationMode:"Presentation mode",useCurrentCamera:"Use Current Camera",resetFromViewer:"Reset From Viewer",copyUrl:"Copy URL",copyIframe:"Copy Iframe",embedUrl:"Embed URL",iframeCode:"Iframe code",preview:"Preview",previewTitle:"Embed preview"},loadingLog:{title:"Loading process log",loadingModel:"Loading 3D model...",modelLoaded:"Model has been loaded.",loadingAssets:"Loading assets...",parsingScene:"Parsing scene...",loadingTextures:"Loading textures...",preparingGeometry:"Preparing geometry...",settingUpLighting:"Setting up lighting...",settingUpMaterials:"Setting up materials...",buildingBvh:"Building BVH...",compilingShaders:"Compiling shaders...",initializingRenderer:"Initializing renderer...",uploadingBuffers:"Uploading buffers...",fetchingMetadata:"Fetching metadata..."},processingHeader:"Processing progress",processingSteps:{preparingModel:"Preparing model",convertingToTransmissionFormat:"Converting to transmission format",renderingThumbnails:"Rendering thumbnails",savingEntity:"Saving entity",finalizing3dModel:"Finalizing 3D model",initializingViewer:"Initializing viewer"},state:{enabled:"enabled",disabled:"disabled"},toasts:{transformMove:"Move: drag axis arrows to reposition the object.",transformRotate:"Rotate: drag rotation rings to rotate the object.",transformScale:"Scale: drag axis handles to resize the object.",transformLightMove:"Transform Light - Move: drag axis arrows to move the directional light.",transformLightTarget:"Transform Light - Target: drag axis arrows to reposition the light target.",distanceEnabled:"Distance measurement is enabled.",distanceHint:"Select a start point and an end point to measure distance.",noIiiifModelFallback:"No 3D model found in IIIF manifest, loading example model.",facePickingEnabled:"Face picking is enabled",facePickingDisabled:"Face picking is disabled",distanceModeEnabled:"Distance measurement mode is enabled",distanceModeDisabled:"Distance measurement mode is disabled",settingsFound:"Settings {filename}_viewer.json found",settingsNotFound:"No settings {filename}_viewer.json found",metadataFetchError:"Error fetching metadata: {error}",presentationModeError:"An error occurred during presentation mode setup.",objLoaded:"OBJ model has been loaded.",mtlLoadError:"Error occurred while loading attached MTL file.",glbLoadError:"Error occurred while loading attached GLB file.",unsupportedExtension:"File extension is not supported yet.",modelLoaded:"Model {filename} has been loaded.",modelLoadedSimple:"Model loaded successfully.",unsupportedFormat:"Unsupported file format.",presentationModeReady:"Presentation mode is ready.",presentationModeError:"An error occurred during presentation mode setup.",sandboxDropModel:"Drag and drop a 3D model into the viewer.",supportedFormats:"Supported formats:\n{formats}\nand archive formats: {archives}.",embedSourceMissing:"Set Model URL or Entity ID for embed.",embedUrlCopied:"Embed URL copied.",embedUrlCopyError:"Could not copy embed URL.",embedIframeCopied:"Embed iframe copied.",embedIframeCopyError:"Could not copy embed iframe.",embedCodeCopied:"Embed code copied to clipboard.",embedCodeCopyError:"Could not copy embed code.",annotationDataMissing:"Annotation data not found for this POI.",selectFaceRequired:"Select at least one face to add annotation.",selectFaceRequiredAgain:"Select at least one face, then run Add annotations again.",noFacesSelected:"No faces selected for annotation.",titleRequired:"Title is required.",facesInactive:"Selected faces are no longer active.",annotationsSaved:"Annotations saved for {count} face{plural}.",annotationsImported:"Imported {count} annotation{plural}.",annotationsExported:"Annotations XML exported.",noAnnotationsToExport:"No annotations to export.",noValidAnnotations:"No valid annotations found in XML.",annotationsImportError:"Failed to import annotations XML.",settingsSaved:"Settings have been saved.",settingsSaveError:"Error saving settings.",featureToggle:"{feature} is {state}.",clippingHelperToggle:"Clipping plane {axis} helper {state}.",clippingPlanes:"Drag active clipping plane helper to adjust cut",downloadSuccess:"Model downloaded successfully.",downloadError:"Failed to download model.",iiifManifestGenerated:"IIIF manifest has been generated.",iiifManifestGenerationError:"Error generating IIIF manifest.",containerNotFound:"Container element not found. Please check the Viewer configuration.",missingFiles:"Missing required files for the Viewer. Please check the Viewer configuration.",unsupportedFileFormat:"Unsupported file format."},shortcuts:{mouse:"Mouse: drag orbit, wheel zoom, right-drag pan",keyboard:"Keyboard: Arrows orbit, Shift+Arrows faster, Ctrl/Cmd+Arrows pan, +/- zoom, Space toggle auto-rotate",touch:"Touch: pinch-to-zoom, drag to orbit, double-tap-and-hold pan",dragAndDrop:"Or drag and drop a 3D model into the viewer"}},pl:{menu:{actions:"Akcje podglądu",openActions:"Otworz akcje podglądu",embed:"Osadź",exitEmbed:"Wyjdź z osadzania",openEmbedOptions:"Otwórz opcje osadzania",exitEmbedMode:"Wyjdź z trybu osadzania",download:"Pobierz"},theme:{lightMode:"Tryb jasny",darkMode:"Tryb ciemny",switchToLightMode:"Przelącz na tryb jasny",switchToDarkMode:"Przelącz na tryb ciemny"},fullscreen:{mode:"Tryb pełnoekranowy",enter:"Pełny ekran",exit:"Wyjdź z pełnego ekranu",exitMode:"Wyjdź z trybu pełnoekranowego"},language:{label:"Language: Polski",switchToPolish:"Przelącz na język polski",switchToEnglish:"Przelącz na język angielski",switchToGerman:"Przelącz na język niemiecki"},hints:{picking:"Shift + klik, aby wybrać wiele scian",pickingSelect:"Wybierz co najmniej jedną ścianę, aby dodać adnotację.",clipping:"Przeciągnij aktywną plaszczyznę przycinania, aby dostosować cięcie"},controls:{enablePickingMode:"Włącz tryb wyboru",disablePickingMode:"Wyłącz tryb wyboru",enableDistanceMeasurement:"Włącz pomiar odległości",disableDistanceMeasurement:"Wyłącz pomiar odległości",selectedFaces:"Wybrane sciany"},gui:{moveToolbar:"Przesuń pasek narzędzi",orbit:"Tryb nawigacji",controls:"Sterowanie",editor:"Edytor",transform3dObject:"Transformacja obiektu 3D",transformLight:"Transformacja światła",transformMode:"Tryb transformacji",directionalLight:"Światło kierunkowe",ambientLight:"Światło otaczające",ambient:"Ambient",lights:"Światła",cameraLight:"Światło kamery",backgroundColor:"Kolor tła",backgroundColorOuter:"Kolor tła zewnętrznego",backgroundType:"Typ tła",clippingPlanes:"Płaszczyzny przycinania",clippingFolder:"Płaszczyzny przycinania",displayHelperX:"Pokaż oś X",displayHelperY:"Pokaż oś Y",displayHelperZ:"Pokaż oś Z",constantX:"Stała X",constantY:"Stała Y",constantZ:"Stała Z",visible:"Widoczne cięcie",materials:"Materiały",metadata:"Annotacje",saveProperties:"Zapisz właściwości",hierarchy:"Hierarchia",statistics:"Statystyki",clearSelectedFaces:"Wyczyść wybrane ściany",clearSelectedHierarchy:"Odznacz wybrane obiekty",addAnnotations:"Dodaj annotacje",exportAnnotationsXml:"Eksportuj annotacje XML",importAnnotationsXml:"Importuj annotacje XML",IIIFexport:"Eksportuj do IIIF",resetCameraPosition:"Resetuj pozycję kamery",saveSettings:"Zapisz ustawienia",renderPreview:"Renderuj podgląd",color:"Kolor",intensity:"Intensywność",metalness:"Metaliczność",emissive:"Emisja",position:"Pozycja",rotation:"Rotacja",camera:"Kamera",performance:"Wydajność",highPerformance:"Wysoka wydajność",lowPower:"Niski pobór mocy",default:"Domyślny",none:"Brak",move:"Przesuń",rotate:"Obróć",scale:"Skaluj",target:"Cel",local:"Lokalny",global:"Globalny",linear:"Liniowe",gradient:"Gradient",editMaterial:"Edytuj materiał",selectByMaterial:"wybierz według materiału",hideAdvancedEditor:"Ukryj tryb zaawansowany",showAdvancedEditor:"Pokaż tryb zaawansowany",showLoadingLogs:"Pokaż logi ładowania",hideLoadingLogs:"Ukryj logi ładowania",hierarchy:"Hierarchia",collapse:"Zwiń pasek narzędzi",expand:"Rozwiń pasek narzędzi",orthographicProjection:"Przełącz na projekcję ortograficzną",perspectiveProjection:"Przełącz na projekcję perspektywiczną",environmentMap:"Mapa otoczenia",environmentMapToggle:"Przełącz mapę otoczenia",environmentMapIntensity:"Intensywność mapy otoczenia",environmentMapStyleNeutral:"Neutralny",environmentMapStyleSunny:"Słoneczny",environmentMapStyleStudio:"Studio",environmentMapStyleGoldenHour:"Złota godzina",enableWireframeMode:"Włącz tryb siatki",disableWireframeMode:"Wyłącz tryb siatki",download:"Pobierz model"},metadata:{modelDetails:"Szczegóły modelu",metadata:"Metadane",visualizedFile:"Wizualizowany plik",vertices:"Wierzchołki",faces:"Ściany",title:"Tytuł",author:"Autor",authorAffiliation:"Afiliacja autora",license:"Licencja",description:"Opis",objectType:"Typ obiektu",reconstructionAuthors:"Autorzy rekonstrukcji",reconstructionPeriod:"Okres rekonstrukcji"},manifesto:{invalidUrl:"Podaj poprawny URL manifestu.",invalidJson:"Podaj poprawny tekst JSON."},iiif:{loader:"Ładowanie IIIF",collapse:"Zwiń",expand:"Rozwiń",manifest:"Manifest IIIF",loadFromUrl:"Wczytaj z URL",loadFromText:"Wczytaj z tekstu",manifestUrlPlaceholder:"https://example.org/iiif/manifest.json",manifestTextPlaceholder:"Wklej tutaj JSON manifestu IIIF...",invalidUrl:"Podaj poprawny URL manifestu IIIF.",invalidJson:"Podaj poprawny tekst JSON IIIF.",optionModelPositionScale:"Pozycja i skala modelu",optionModelOrigin:"Punkt początkowy modelu",optionModelOriginBg:"Punkt początkowy modelu z kolorem tła",optionModelPosition:"Pozycja modelu"},localPreview:{loadExampleModel:"Wczytaj model przykładowy"},embedPanel:{title:"Opcje osadzania",closeAria:"Zamknij opcje osadzania",modelUrl:"URL modelu",modelUrlPlaceholder:"/examples/box.glb",entityId:"ID encji",theme:"Motyw",themeDark:"Ciemny",themeLight:"Jasny",autoRotateSpeed:"Prędkość auto-obrotu",cameraPosition:"Pozycja kamery",cameraTarget:"Cel kamery",cameraVectorPlaceholder:"x,y,z",fov:"FOV",autoRotate:"Auto-obrót",disableInteraction:"Wyłącz interakcję",hideActionMenu:"Ukryj menu akcji",hideMetadata:"Ukryj metadane",presentationMode:"Tryb prezentacji",useCurrentCamera:"Użyj bieżącej kamery",resetFromViewer:"Przywróć z viewera",copyUrl:"Kopiuj URL",copyIframe:"Kopiuj iframe",embedUrl:"URL osadzenia",iframeCode:"Kod iframe",preview:"Podgląd",previewTitle:"Podgląd osadzenia"},loadingLog:{title:"Log procesu ładowania",loadingModel:"Ładowanie modelu 3D...",modelLoaded:"Model został załadowany.",loadingAssets:"Ładowanie zasobów...",parsingScene:"Analizowanie sceny...",loadingTextures:"Ładowanie tekstur...",preparingGeometry:"Przygotowywanie geometrii...",settingUpLighting:"Konfigurowanie oświetlenia...",settingUpMaterials:"Konfigurowanie materiałów...",buildingBvh:"Budowanie BVH...",compilingShaders:"Kompilowanie shaderów...",initializingRenderer:"Inicjalizowanie renderera...",uploadingBuffers:"Przesyłanie buforów...",fetchingMetadata:"Pobieranie metadanych..."},processingHeader:"Postęp przetwarzania",processingSteps:{preparingModel:"Przygotowywanie modelu",convertingToTransmissionFormat:"Konwersja do formatu docelowego",renderingThumbnails:"Renderowanie miniaturek",savingEntity:"Zapisywanie encji",finalizing3dModel:"Finalizowanie modelu 3D",initializingViewer:"Inicjalizowanie viewera"},state:{enabled:"włączony",disabled:"wyłączony"},toasts:{transformMove:"Przesuwanie: przeciągnij strzalki osi, aby przesunąć obiekt.",transformRotate:"Obracanie: przeciągnij pierscienie obrotu, aby obrócić obiekt.",transformScale:"Skalowanie: przeciągnij uchwyty osi, aby zmienić rozmiar obiektu.",transformLightMove:"Transformacja światła - Przesunięcie: przeciągnij strzalki osi, aby przesunąć światło kierunkowe.",transformLightTarget:"Transformacja światła - Cel: przeciągnij strzałki osi, aby przesunąć punkt celu światła.",distanceEnabled:"Pomiar odległości jest włączony.",distanceHint:"Wybierz punkt początkowy i końcowy, aby zmierzyć odległość.",noIiiifModelFallback:"Nie znaleziono modelu 3D w manifescie IIIF, ładuję model przykładowy.",facePickingEnabled:"Tryb wyboru ścian jest włączony",facePickingDisabled:"Tryb wyboru ścian jest wyłączony",distanceModeEnabled:"Tryb pomiaru odległości jest włączony",distanceModeDisabled:"Tryb pomiaru odległości jest wyłączony",settingsFound:"Znaleziono ustawienia {filename}_viewer.json",settingsNotFound:"Nie znaleziono ustawień {filename}_viewer.json",metadataFetchError:"Błąd pobierania metadanych: {error}",presentationModeError:"Wystąpił błąd podczas konfiguracji trybu prezentacji.",objLoaded:"Model OBJ został załadowany.",mtlLoadError:"Wystąpił błąd podczas ładowania pliku MTL.",glbLoadError:"Wystąpił błąd podczas ładowania pliku GLB.",unsupportedExtension:"Rozszerzenie pliku nie jest jeszcze obsługiwane.",modelLoaded:"Model {filename} został załadowany.",modelLoadedSimple:"Model został pomyślnie załadowany.",unsupportedFormat:"Nieobsługiwany format pliku.",presentationModeReady:"Tryb prezentacji jest gotowy.",presentationModeError:"Wystąpił błąd podczas konfiguracji trybu prezentacji.",sandboxDropModel:"Przeciągnij i upuść model 3D w oknie viewer'a.",supportedFormats:"Obłsugiwane formaty:\n{formats}\ni archiwa: {archives}.",embedSourceMissing:"Ustaw URL modelu lub ID encji do osadzenia.",embedUrlCopied:"Skopiowano URL osadzenia.",embedUrlCopyError:"Nie udało się skopiować URL osadzenia.",embedIframeCopied:"Skopiowano iframe osadzenia.",embedIframeCopyError:"Nie udało się skopiować iframe.",embedCodeCopied:"Kod osadzenia został skopiowany do schowka.",embedCodeCopyError:"Nie udało się skopiować kodu osadzenia.",annotationDataMissing:"Nie znaleziono danych adnotacji dla tego punktu.",selectFaceRequired:"Wybierz co najmniej jedną ścianę, aby dodać adnotację.",selectFaceRequiredAgain:"Wybierz co najmniej jedną ścianę, a następnie ponownie dodaj adnotacje.",noFacesSelected:"Nie wybrano ścian do adnotacji.",titleRequired:"Tytuł jest wymagany.",facesInactive:"Wybrane ściany nie są już aktywne.",annotationsSaved:"Zapisano adnotacje dla {count} ścian{plural}.",annotationsImported:"Zaimportowano {count} adnotacj{plural}.",annotationsExported:"Wyeksportowano XML adnotacji.",noAnnotationsToExport:"Brak adnotacji do eksportu.",noValidAnnotations:"Nie znaleziono poprawnych adnotacji w XML.",annotationsImportError:"Nie udało się zaimportować XML adnotacji.",settingsSaved:"Ustawienia zostały zapisane.",settingsSaveError:"Błąd zapisywania ustawień.",featureToggle:"{feature} jest {state}.",clippingHelperToggle:"Pomocnik płaszczyzny przycinania {axis} jest {state}.",clippingPlanes:"Przeciągnij aktywną płaszczyznę przycinania, aby dostosować cięcie",downloadSuccess:"Model został pomyślnie pobrany.",downloadError:"Nie udało się pobrać modelu.",iiifManifestGenerated:"Manifest IIIF został wygenerowany.",iiifManifestGenerationError:"Błąd podczas generowania manifestu IIIF.",containerNotFound:"Element kontenera nie został znaleziony. Proszę sprawdzić konfigurację Viewera.",missingFiles:"Brak wymaganych plików dla Viewera. Proszę sprawdzić konfigurację Viewera.",unsupportedFileFormat:"Nieobsługiwany format pliku."},shortcuts:{mouse:"Mysz: przeciągnij, aby obracać, rolka - zoom, prawy przycisk - przesuwanie",keyboard:"Klawiatura: strzałki - obrót, Shift+strzałki - szybciej, Ctrl/Cmd+strzałki - przesuwanie, +/- — zoom, Spacja - auto-obrót",touch:"Dotyk: szczypanie, aby przybliżyć, przeciągnij, aby obracać, dotknij i przytrzymaj, aby przesunąć",dragAndDrop:"Lub przeciągnij i upuść model 3D w oknie viewer'a"}},de:{menu:{actions:"Viewer-Aktionen",openActions:"Viewer-Aktionen öffnen",embed:"Einbetten",exitEmbed:"Einbettung beenden",openEmbedOptions:"Einbettungsoptionen öffnen",exitEmbedMode:"Einbettungsmodus beenden",download:"Herunterladen"},theme:{lightMode:"Hellmodus",darkMode:"Dunkelmodus",switchToLightMode:"Zu Hellmodus wechseln",switchToDarkMode:"Zu Dunkelmodus wechseln"},fullscreen:{mode:"Vollbildmodus",enter:"Vollbild",exit:"Vollbild beenden",exitMode:"Vollbildmodus beenden"},language:{label:"Sprache: Deutsch",switchToPolish:"Zu Polnisch wechseln",switchToEnglish:"Zu Englisch wechseln"},hints:{picking:"Umschalt + Klick, um mehrere Flächen auszuwählen",pickingSelect:"Wählen Sie mindestens eine Fläche aus, um eine Anmerkung hinzuzufügen.",clipping:"Ziehen Sie die aktive Schnittebene-Hilfe, um den Schnitt anzupassen"},controls:{enablePickingMode:"Auswahlmodus aktivieren",disablePickingMode:"Auswahlmodus deaktivieren",enableDistanceMeasurement:"Entfernungsmessung aktivieren",disableDistanceMeasurement:"Entfernungsmessung deaktivieren",selectedFaces:"Ausgewählte Flächen"},gui:{moveToolbar:"Werkzeugleiste verschieben",orbit:"Navigationsmodus",controls:"Steuerung",editor:"Editor",transform3dObject:"3D-Objekt transformieren",transformLight:"Licht transformieren",transformMode:"Transformationsmodus",directionalLight:"Gerichtetes Licht",ambientLight:"Umgebungslicht",ambient:"Ambient",lights:"Beleuchtung",cameraLight:"Kamera-Licht",backgroundColor:"Hintergrundfarbe",backgroundColorOuter:"Äußere Hintergrundfarbe",backgroundType:"Hintergrundtyp",clippingPlanes:"Schnittebenen",clippingFolder:"Schnittebenen",displayHelperX:"X-Hilfe anzeigen",displayHelperY:"Y-Hilfe anzeigen",displayHelperZ:"Z-Hilfe anzeigen",constantX:"Konstante X",constantY:"Konstante Y",constantZ:"Konstante Z",visible:"Sichtbarer Schnitt",materials:"Materialien",metadata:"Anmerkungen",saveProperties:"Eigenschaften speichern",hierarchy:"Hierarchie",statistics:"Statistiken",clearSelectedFaces:"Ausgewählte Flächen löschen",clearSelectedHierarchy:"Ausgewählte Objekte abwählen",addAnnotations:"Anmerkungen hinzufügen",exportAnnotationsXml:"Anmerkungen XML exportieren",importAnnotationsXml:"Anmerkungen XML importieren",IIIFexport:"IIIF exportieren",resetCameraPosition:"Kameraposition zurücksetzen",saveSettings:"Einstellungen speichern",renderPreview:"Vorschau rendern",color:"Farbe",intensity:"Intensität",metalness:"Metallizität",emissive:"Emissiv",position:"Position",rotation:"Rotation",camera:"Kamera",performance:"Leistung",highPerformance:"Hohe Leistung",lowPower:"Niedriger Stromverbrauch",default:"Standard",none:"Keine",move:"Bewegen",rotate:"Drehen",scale:"Skalieren",target:"Ziel",local:"Lokal",global:"Global",linear:"Linear",gradient:"Farbverlauf",editMaterial:"Material bearbeiten",selectByMaterial:"nach Material auswählen",hideAdvancedEditor:"Erweiterten Editor ausblenden",showAdvancedEditor:"Erweiterten Editor anzeigen",showLoadingLogs:"Ladeprotokolle anzeigen",hideLoadingLogs:"Ladeprotokolle ausblenden",hierarchy:"Hierarchie",expand:"Werkzeugleiste erweitern",collapse:"Werkzeugleiste zusammenklappen",orthographicProjection:"Zur orthografischen Projektion wechseln",perspectiveProjection:"Zur perspektivischen Projektion wechseln",environmentMap:"Umgebungsmap",environmentMapToggle:"Umgebungsmap wechseln",environmentMapIntensity:"Intensität der Umgebungsmap",environmentMapStyleNeutral:"Neutral",environmentMapStyleSunny:"Sonnig",environmentMapStyleStudio:"Studio",environmentMapStyleGoldenHour:"Goldene Stunde",enableWireframeMode:"Drahtgittermodus aktivieren",disableWireframeMode:"Drahtgittermodus deaktivieren",download:"Modell herunterladen"},metadata:{modelDetails:"Modelldetails",metadata:"Metadaten",visualizedFile:"Visualisierte Datei",vertices:"Vertices",faces:"Flächen",title:"Titel",author:"Autor",authorAffiliation:"Autoren-Zugehörigkeit",license:"Lizenz",description:"Beschreibung",objectType:"Objekttyp",reconstructionAuthors:"Rekonstruktionsautoren",reconstructionPeriod:"Rekonstruktionsperiode"},manifesto:{invalidUrl:"Bitte geben Sie eine gültige Manifest-URL ein.",invalidJson:"Bitte geben Sie einen gültigen Manifest-JSON-Text ein."},iiif:{loader:"IIIF-Loader",collapse:"Zusammenklappen",expand:"Erweitern",manifest:"IIIF-Manifest",loadFromUrl:"Von URL laden",loadFromText:"Von Text laden",manifestUrlPlaceholder:"https://example.org/iiif/manifest.json",manifestTextPlaceholder:"IIIF-Manifest-JSON hier einfügen...",invalidUrl:"Bitte geben Sie eine gültige IIIF-Manifest-URL ein.",invalidJson:"Bitte geben Sie einen gültigen IIIF-JSON-Text ein.",optionModelPositionScale:"Modellposition und -skalierung",optionModelOrigin:"Modellursprung",optionModelOriginBg:"Modellursprung mit Hintergrundfarbe",optionModelPosition:"Modellposition"},localPreview:{loadExampleModel:"Beispielmodell laden"},embedPanel:{title:"Einbettungsoptionen",closeAria:"Einbettungsoptionen schließen",modelUrl:"Modell-URL",modelUrlPlaceholder:"/examples/box.glb",entityId:"Entitäts-ID",theme:"Thema",themeDark:"Dunkel",themeLight:"Hell",autoRotateSpeed:"Geschwindigkeit der Auto-Rotation",cameraPosition:"Kameraposition",cameraTarget:"Kameraziel",cameraVectorPlaceholder:"x,y,z",fov:"FOV",autoRotate:"Auto-Rotation",disableInteraction:"Interaktion deaktivieren",hideActionMenu:"Aktionsmenü ausblenden",hideMetadata:"Metadaten ausblenden",presentationMode:"Präsentationsmodus",useCurrentCamera:"Aktuelle Kamera verwenden",resetFromViewer:"Aus Viewer zurücksetzen",copyUrl:"URL kopieren",copyIframe:"Iframe kopieren",embedUrl:"Einbettungs-URL",iframeCode:"Iframe-Code",preview:"Vorschau",previewTitle:"Einbettungsvorschau"},loadingLog:{title:"Protokoll des Ladeprozesses",loadingModel:"3D-Modell wird geladen...",modelLoaded:"Modell wurde geladen.",loadingAssets:"Assets werden geladen...",parsingScene:"Szene wird analysiert...",loadingTextures:"Texturen werden geladen...",preparingGeometry:"Geometrie wird vorbereitet...",settingUpLighting:"Beleuchtung wird eingerichtet...",settingUpMaterials:"Materialien werden eingerichtet...",buildingBvh:"BVH wird erstellt...",compilingShaders:"Shader werden kompiliert...",initializingRenderer:"Renderer wird initialisiert...",uploadingBuffers:"Buffer werden hochgeladen...",fetchingMetadata:"Metadaten werden abgerufen..."},processingHeader:"Verarbeitungsschritte",processingSteps:{preparingModel:"Modell wird vorbereitet",convertingToTransmissionFormat:"Konvertierung in das Übertragungsformat",renderingThumbnails:"Vorschaubilder werden gerendert",savingEntity:"Entität wird gespeichert",finalizing3dModel:"3D-Modell wird finalisiert",initializingViewer:"Viewer wird initialisiert"},state:{enabled:"aktiviert",disabled:"deaktiviert"},toasts:{transformMove:"Bewegen: Ziehen Sie die Achsenpfeile, um das Objekt zu repositionieren.",transformRotate:"Drehen: Ziehen Sie die Rotationsringe, um das Objekt zu drehen.",transformScale:"Skalieren: Ziehen Sie die Achsengriffe, um die Größe des Objekts zu ändern.",transformLightMove:"Licht transformieren - Bewegen: Ziehen Sie die Achsenpfeile, um das gerichtete Licht zu bewegen.",transformLightTarget:"Licht transformieren - Ziel: Ziehen Sie die Achsenpfeile, um das Lichtziel zu repositionieren.",distanceEnabled:"Entfernungsmessung ist aktiviert.",distanceHint:"Wählen Sie einen Startpunkt und einen Endpunkt, um die Entfernung zu messen.",noIiiifModelFallback:"Kein 3D-Modell im IIIF-Manifest gefunden, Beispielmodell wird geladen.",facePickingEnabled:"Flächenauswahl ist aktiviert",facePickingDisabled:"Flächenauswahl ist deaktiviert",distanceModeEnabled:"Entfernungsmessungsmodus ist aktiviert",distanceModeDisabled:"Entfernungsmessungsmodus ist deaktiviert",settingsFound:"Einstellungen {filename}_viewer.json gefunden",settingsNotFound:"Keine Einstellungen {filename}_viewer.json gefunden",metadataFetchError:"Fehler beim Abrufen der Metadaten: {error}",presentationModeError:"Beim Einrichten des Präsentationsmodus ist ein Fehler aufgetreten.",objLoaded:"OBJ-Modell wurde geladen.",mtlLoadError:"Fehler beim Laden der zugehörigen MTL-Datei.",glbLoadError:"Fehler beim Laden der GLB-Datei.",unsupportedExtension:"Dateierweiterung wird noch nicht unterstützt.",modelLoaded:"Modell {filename} wurde geladen.",modelLoadedSimple:"Modell wurde erfolgreich geladen.",unsupportedFormat:"Nicht unterstütztes Dateiformat.",presentationModeReady:"Präsentationsmodus ist bereit.",presentationModeError:"Beim Einrichten des Präsentationsmodus ist ein Fehler aufgetreten.",sandboxDropModel:"Ziehen Sie ein 3D-Modell per Drag-and-drop in den Viewer.",supportedFormats:"Unterstützte Formate: {formats} \n und Unterstützte Archive: {archives}.",embedSourceMissing:"Model-URL oder Entitäts-ID für die Einbettung festlegen.",embedUrlCopied:"Einbettungs-URL kopiert.",embedUrlCopyError:"Einbettungs-URL konnte nicht kopiert werden.",embedIframeCopied:"Einbettungs-iframe kopiert.",embedIframeCopyError:"Einbettungs-iframe konnte nicht kopiert werden.",embedCodeCopied:"Einbettungscode in die Zwischenablage kopiert.",embedCodeCopyError:"Einbettungscode konnte nicht kopiert werden.",annotationDataMissing:"Keine Annotationsdaten für diesen Punkt gefunden.",selectFaceRequired:"Wählen Sie mindestens eine Fläche aus, um eine Annotation hinzuzufügen.",selectFaceRequiredAgain:"Wählen Sie mindestens eine Fläche und führen Sie dann „Annotationen hinzufügen“ erneut aus.",noFacesSelected:"Keine Flächen für Annotation ausgewählt.",titleRequired:"Titel ist erforderlich.",facesInactive:"Ausgewählte Flächen sind nicht mehr aktiv.",annotationsSaved:"Annotationen für {count} Fläche{plural} gespeichert.",annotationsImported:"{count} Annotation{plural} importiert.",annotationsExported:"Annotations-XML exportiert.",noAnnotationsToExport:"Keine Annotationen zum Exportieren.",noValidAnnotations:"Keine gültigen Annotationen im XML gefunden.",annotationsImportError:"Import der Annotations-XML fehlgeschlagen.",settingsSaved:"Einstellungen wurden gespeichert.",settingsSaveError:"Fehler beim Speichern der Einstellungen.",featureToggle:"{feature} ist {state}.",clippingHelperToggle:"Clipping-Ebenen-Helfer {axis} ist {state}.",clippingPlanes:"Ziehen Sie die aktive Schnittebene-Hilfe, um den Schnitt anzupassen",downloadSuccess:"Modell erfolgreich heruntergeladen.",downloadError:"Fehler beim Herunterladen des Modells.",iiifManifestGenerated:"IIIF-Manifest wurde generiert.",iiifManifestGenerationError:"Fehler beim Generieren des IIIF-Manifests.",containerNotFound:"Container-Element nicht gefunden. Bitte überprüfen Sie die Viewer-Konfiguration.",missingFiles:"Fehlende erforderliche Dateien für den Viewer. Bitte überprüfen Sie die Viewer-Konfiguration.",unsupportedFileFormat:"Nicht unterstütztes Dateiformat."},shortcuts:{mouse:"Maus: ziehen zum Drehen, Mausrad - Zoom, Rechtsklick - Verschieben",keyboard:"Tastatur: Pfeile - Drehen, Shift+Pfeile - schneller, Ctrl/Cmd+Pfeile - Verschieben, +/- - Zoom, Leertaste - Auto-Rotation",touch:"Touch: Pinch-to-Zoom, ziehen zum Drehen, Doppeltippen und halten zum Verschieben",dragAndDrop:"Oder ziehen Sie ein 3D-Modell per Drag-and-drop in den Viewer"}}},y=function(e,t={},n=""){const i=["pl","de"].includes(u.currentLanguage)?u.currentLanguage:"en",o=b[i]||b.en,r=String(e||"").split(".").reduce((e,t)=>e&&"object"==typeof e?e[t]:void 0,o);let a={},s="";"string"==typeof t?s=t:(a=t||{},s=n);return("string"==typeof r?r:s||e).replace(/\{(\w+)\}/g,(e,t)=>{let n=a[t];return"boolean"==typeof n?n=y("state."+(n?"enabled":"disabled")):"string"==typeof n&&("enabled"===n||"disabled"===n?n=y(`state.${n}`):n.startsWith("state.")&&(n=y(n))),n??`{${t}}`})};const v=(e,t,n)=>w(`toasts.${e}`,t,n),w=(e,t,n)=>{if(!u.showNotifications)return;const{tone:i,options:o}=function(e,t){let n="info",i={};return"string"==typeof e?(n=e,i=t??{}):e&&"object"==typeof e&&(i=e,n=e.tone??"info"),{tone:n,options:i}}(t,n),r=Number.isFinite(o.duration)?o.duration:4200,a=String(o.key??""),s=!0===o.replace,l=!0===o.persistent,c=String(o.variant??"");let d="",p={};const h=String(o.detailI18nKey??""),g=o.detailVars&&"object"==typeof o.detailVars?o.detailVars:o;let m,f="";"string"==typeof e&&e.includes(".")?(d=e,p=o,m=y(e,o)):m=String(e),h?f=y(h,g):null!=o.detail&&(f=String(o.detail)),window.__E2E__&&window.viewer&&(window.viewer.toasts??=[],window.viewer.toasts.push([m,f].filter(Boolean).join(" ")));const b=u.statusNotice,v=u.enqueueStatusNotice;"function"!=typeof v?b?(b.hidden=!1,b.textContent=[m,f].filter(Boolean).join(" "),b.dataset.tone=i,b.classList.remove("is-visible","is-hiding"),b.classList.add("is-visible"),u.statusNoticeTimer&&window.clearTimeout(u.statusNoticeTimer),u.statusNoticeTimer=window.setTimeout(()=>{b.classList.remove("is-visible"),b.classList.add("is-hiding"),window.setTimeout(()=>{b.classList.contains("is-visible")||(b.hidden=!0,b.classList.remove("is-hiding"))},220)},r)):console.info(`[viewer:${i}] ${m}`):v({message:m,detail:f,tone:i,duration:r,key:a,replace:s,persistent:l,variant:c,i18nKey:d,i18nVars:p,detailI18nKey:h,detailI18nVars:g})};function E(e,t={}){const{context:n="",consoleLabel:i="Viewer error",toast:o=!0,e2e:r=!0}=t,a=function(e){return e instanceof Error&&e.message?e.message:"string"==typeof e?e:String(e)}(e),s=n?`${n}: ${a}`:a;return console.error(i,e),r&&window.__E2E__&&window.viewer&&(window.viewer.errors??=[],window.viewer.errors.push(s)),o&&w(s),s}function C(e){return u.objectsConfig?.models?.find(t=>t.name===e)}function M(e){return e?Array.isArray(e)&&3===e.length?{x:e[0],y:e[1],z:e[2]}:"object"==typeof e&&"number"==typeof e.x&&"number"==typeof e.y&&"number"==typeof e.z?e:null:null}function S(e){return{type:e.type,shapeOrDirection:e.shapeOrDirection,colors:e.colors.map(m).filter(Boolean)}}function I(t,n){if(!n)return;const i=M(n.position??n.objPosition);i&&t.position.set(i.x,i.y,i.z);const o=M(n.scale??n.objScale);o&&t.scale.set(o.x,o.y,o.z);const r=M(n.rotation??n.objRotation);r&&t.rotation.set(e.MathUtils.degToRad(r.x),e.MathUtils.degToRad(r.y),e.MathUtils.degToRad(r.z))}function A(e){e.needsUpdate=!0,void 0!==e.geometry&&(e.geometry.computeBoundingBox(),e.geometry.computeBoundingSphere()),e.updateMatrix(),e.updateMatrixWorld(!0)}function L(t){const n=new e.Box3;if(n.setFromObject(t,!0),n.isEmpty())return;const i=new e.Vector3;n.getCenter(i),t.position.sub(i),t.updateMatrixWorld(!0)}const O=(t,n)=>{let i;if(void 0===t.children||0==t.children.length?i=C(t.name):t.children.length>0&&(i=C(t.children[0].name)),null!=n)I(t,n),A(t),function(e,t){if(!t)return;const n=M(t.controlsTarget),i=M(t.cameraPosition);if(!n&&!i)return;const o=u.controls.enableDamping;u.controls.enableDamping=!1,n&&u.controls.target?.set(n.x,n.y,n.z),i&&u.camera.position?.set(i.x,i.y,i.z),u.camera.updateProjectionMatrix(),u.controls.update(),u.controls.saveState(),u.controls.enableDamping=o}(0,n);else if(void 0!==u.objectsConfig&&i){if(Array.isArray(u.objectsConfig.models)&&0!==u.objectsConfig.models.length||null!=n){let e=u.objectsConfig.models[u.objectsConfig.setupIndex];null!=e&&null==n?I(t,e):null!=n&&I(t,n)}else null!=i.position&&t.position.set(i.position.x,i.position.y,i.position.z),null!=i.scale&&t.scale.set(i.scale.x,i.scale.y,i.scale.z),null!=i.rotation&&t.rotation.set(e.MathUtils.degToRad(i.rotation.x),e.MathUtils.degToRad(i.rotation.y),e.MathUtils.degToRad(i.rotation.z));A(t)}else{var o=new e.Box3;if(Array.isArray(t))for(let e=0;e"number"==typeof e))return{type:"linear",colors:[{r:e[0],g:e[1],b:e[2],a:1}]};const t=e.map(_).filter(Boolean);return t.length<2?null:{type:"linear",colors:t}}(n.value);if(e){return{kind:"gradient",normalizedGradient:S(e)}}}if("string"==typeof n){const e=function(e){if(!e||"string"!=typeof e)return null;const t=e.match(/(radial|linear)-gradient\s*\(([^,]+)/i),n=t?t[1].toLowerCase():null,i=t?t[2].trim():null,o=[],r=e.matchAll(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)(?:\s*,\s*([\d.]+))?\s*\)/gi);for(const[,e,t,n,i]of r)o.push({r:+e,g:+t,b:+n,a:void 0!==i?+i:1});const a=e.matchAll(/#([0-9a-f]{3}|[0-9a-f]{6})/gi);for(const[,e]of a){const t=3===e.length?e.split("").map(e=>e+e).join(""):e;o.push({r:parseInt(t.slice(0,2),16),g:parseInt(t.slice(2,4),16),b:parseInt(t.slice(4,6),16),a:1})}return{type:n,shapeOrDirection:i,colors:o}}(n);if(e){return{kind:"gradient",normalizedGradient:S(e)}}return{kind:"color",color:n}}return{kind:"default"}}async function x(t,n){const i=u.lightObjects[0],o=n??u.CONFIG??null,r=n??u.objectsConfig??null,a=o?.cameraPosition??r?.camera?.position;Array.isArray(a)?u.camera.position.set(a[0],a[1],a[2]):a&&"object"==typeof a?u.camera.position.set(a.x,a.y,a.z):await async function(t){console.log("Setting up empty camera");var n=new e.Box3;if(Array.isArray(t))for(let i=0;i{switch(t.type){case"directional":i.position.set(t.position.x,t.position.y,t.position.z),i.color=new e.Color(m(t.color)),i.intensity=t.intensity;break;case"ambient":u.ambientLight.color=new e.Color(m(t.color)),u.ambientLight.intensity=t.intensity;break;case"point":u.cameraLight.color=new e.Color(m(t.color)),u.cameraLight.intensity=t.intensity}}):o&&(o.lightAmbientColor&&(u.ambientLight.color=new e.Color(m(o.lightAmbientColor[0])),u.ambientLight.intensity=o.lightAmbientIntensity?.[0]??u.ambientLight.intensity),o.lightColor&&(i.color=new e.Color(m(o.lightColor[0])),i.intensity=o.lightIntensity?.[0]??i.intensity),o.lightCameraColor&&(u.cameraLight.color=new e.Color(m(o.lightCameraColor[0])),u.cameraLight.intensity=o.lightCameraIntensity?.[0]??u.cameraLight.intensity)),u.PRESENTATION_MODE){N({type:"radial",colors:[{r:255,g:255,b:255,a:0},{r:255,g:255,b:255,a:0}]})}else{const e=P(r,u.activeScene);switch(e.kind){case"gradient":case"radial":N(e.normalizedGradient);break;case"color":case"linear":D("linear",e.color);break;case"default":case"unknown":D("radial",u.colors.BackgroundColor,u.colors.BackgroundColorOuter)}}u.camera.updateProjectionMatrix(),u.controls?.update(),await k(t,!1,o)}function T({finalCameraPos:n,finalTarget:i,boundingBox:o,duration:r=3500,easing:a=t.Easing.Cubic.Out,startOffsetFactor:s=.5,animate:l=!0,distanceOffsetFactor:c=0,distanceOffsetUnits:d=0}){const p=n.clone(),h=i.clone(),g=p.clone().sub(h).normalize(),m=p.distanceTo(h),f=m*c+d,b=p.clone().add(g.multiplyScalar(m*s+f)),y=h.clone();if(!l)return u.camera.position.copy(p),u.controls?.target.copy(h),void u.controls?.update();u.camera.position.copy(b),u.controls?.target.copy(y),u.controls?.update();const v=b.clone(),w=y.clone();u.cameraTween=new t.Tween(v).to(p,r).easing(a).onUpdate(()=>{u.camera.position.copy(v)}),u.targetTween=new t.Tween(w).to(h,r).easing(a).onUpdate(()=>{u.controls?.target.copy(w),u.controls?.update()}),u.cameraTween.start(),u.targetTween.start(),u.cameraTween.onComplete(()=>{u.camera.position.copy(p),u.controls?.target.copy(h),u.controls?.update();const t=o?o.getCenter(new e.Vector3):new e.Vector3;if(o){const n=o.getSize(new e.Vector3).length(),i=p.distanceTo(t)+n;u.camera.near=Math.max(i/1e3,.001),u.camera.far=10*i,u.camera.updateProjectionMatrix(),u.controls&&(u.controls.maxDistance=2*i)}!function(e){window.__E2E__||null!=u.GESTURE&&(u.GESTURE.rotate=!0,u.GESTURE.target=e.clone(),u.controls.target.copy(u.GESTURE.target),null!=u.handHint&&(u.handHint.hidden=!1,u.handHint.classList.add("hand-drag-animate")))}(t)})}async function k(t,n,i){const o=new e.Box3;if(Array.isArray(t))for(let n=0;n{const n=u.planeHelpers?.[e],i=u.clippingPlanes?.[e];n&&i&&n.position.copy(i.normal).multiplyScalar(-t)};if(u.EDITOR){u.transformControlClippingPlaneX&&u.transformControlClippingPlaneY&&u.transformControlClippingPlaneZ&&(u.scene.add(u.transformControlClippingPlaneX?.getHelper()),u.scene.add(u.transformControlClippingPlaneY?.getHelper()),u.scene.add(u.transformControlClippingPlaneZ?.getHelper()));let t=new e.Color(16777215).getHexString();null!=u.scene.background&&(t=u.scene.background.getHexString()),u.planeHelpers=u.clippingPlanes.map(n=>new e.PlaneHelper(n,2*u.gridSize,function(e){let t=e.substring(1);return t=parseInt(t,16),t^=16777215,t=t.toString(16),t=("000000"+t).slice(-6),"#"+t}(t))),u.planeHelpers.forEach((e,t)=>{if(e.visible=!1,e.name="PlaneHelper",o(t,u.clippingPlanes[t].constant),0===t||2===t){e.userData.clippingCenterY=i;const t=e.updateMatrixWorld.bind(e);e.updateMatrixWorld=function(e){t(e),this.position.y=this.userData.clippingCenterY||0,this.updateMatrix(),this.parent?this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix):this.matrixWorld.copy(this.matrix);for(let e=0;e{["x","y","z"].forEach(n=>e[n]*=t)})(u.distanceGeometry,2);const r=(e,t)=>{v("clippingHelperToggle","info",{axis:e,state:t})},a=()=>{const e=u.updateClippingHintVisibility;if("function"==typeof e)return void e();if(!u.clippingHint||!u.planeParams?.clippingMode)return;const t=u.planeParams.clippingMode;u.clippingHint.hidden=!(t.x||t.y||t.z)},s=(e,t)=>window?.Viewer?.t?.(e,t)??t;let l={x:R(u.planeParams.planeX,"displayHelperX"),constantX:R(u.planeParams.planeX,"constantX"),y:R(u.planeParams.planeY,"displayHelperY"),constantY:R(u.planeParams.planeY,"constantY"),z:R(u.planeParams.planeZ,"displayHelperZ"),constantZ:R(u.planeParams.planeZ,"constantZ"),outline:R(u.planeParams.outline,"visible")};l.x?.name?.(s("gui.displayHelperX","Show X helper")),l.constantX?.name?.(s("gui.constantX","Constant X")),l.y?.name?.(s("gui.displayHelperY","Show Y helper")),l.constantY?.name?.(s("gui.constantY","Constant Y")),l.z?.name?.(s("gui.displayHelperZ","Show Z helper")),l.constantZ?.name?.(s("gui.constantZ","Constant Z")),l.outline?.name?.(s("gui.visible","Visible")),l.x?.onChange(e=>{u.planeParams.clippingMode.x=u.planeHelpers[0].visible=e,e?(u.transformControlClippingPlaneX.attach(u.planeHelpers[0]),u.planeParams.outline.visible&&(u.outlineClipping.visible=!0)):(u.transformControlClippingPlaneX.detach(),u.planeParams.clippingMode.y||u.planeParams.clippingMode.z||u.planeParams.outline.visible||(u.outlineClipping.visible=!1)),r("X",e),a()}),l?.constantX.min(-u.distanceGeometry.x).max(u.distanceGeometry.x).setValue(u.distanceGeometry.x).step(u.gridSize/100).listen().onChange(e=>{u.clippingPlanes[0].constant=e,o(0,e)}),l.y?.onChange(e=>{u.planeParams.clippingMode.y=u.planeHelpers[1].visible=e,e?(u.transformControlClippingPlaneY.attach(u.planeHelpers[1]),u.planeParams.outline.visible&&(u.outlineClipping.visible=!0)):(u.transformControlClippingPlaneY.detach(),u.planeParams.clippingMode.x||u.planeParams.clippingMode.z||u.planeParams.outline.visible||(u.outlineClipping.visible=!1)),r("Y",e),a()}),l?.constantY.min(-u.distanceGeometry.y).max(u.distanceGeometry.y).setValue(u.distanceGeometry.y).step(u.gridSize/100).listen().onChange(e=>{u.clippingPlanes[1].constant=e,o(1,e)}),l.z?.onChange(e=>{u.planeParams.clippingMode.z=u.planeHelpers[2].visible=e,e?(u.transformControlClippingPlaneZ.attach(u.planeHelpers[2]),u.planeParams.outline.visible&&(u.outlineClipping.visible=!0)):(u.transformControlClippingPlaneZ.detach(),u.planeParams.clippingMode.x||u.planeParams.clippingMode.y||u.planeParams.outline.visible||(u.outlineClipping.visible=!1)),r("Z",e),a()}),l?.constantZ.min(-u.distanceGeometry.z).max(u.distanceGeometry.z).setValue(u.distanceGeometry.z).step(u.gridSize/100).listen().onChange(e=>{u.clippingPlanes[2].constant=e,o(2,e)}),l.outline.onChange(e=>{u.outlineClipping.visible=e}),a()}}(t,{x:1.1*o.max.x,y:1.1*o.max.y,z:1.1*o.max.z})}function F(e){return`rgba(${e.r}, ${e.g}, ${e.b}, ${e.a})`}function j(e,t,n=100){u.mainCanvas.style.setProperty("background",`radial-gradient(circle, ${e} 0%, ${t} ${n}%)`)}function N(e){if(!e||!Array.isArray(e.colors)||0===e.colors.length)return;const t=e.colors;if(1===t.length){return void D("linear",F(t[0]))}if(2===t.length){const n=F(t[0]),i=F(t[1]);return void D(e.type,n,i)}const n=t.map((e,n)=>{const i=Math.round(n/(t.length-1)*100);return`${F(e)} ${i}%`}),i="radial"===e.type?`radial-gradient(circle, ${n.join(", ")})`:`linear-gradient(to bottom, ${n.join(", ")})`;u.mainCanvas.style.setProperty("background",i)}function D(e,t,n=t,i=100){switch(e){case"linear":j(t,t,i);break;case"gradient":case"radial":j(t,n,i)}}function R(e,t){const n=e=>{if(!e)return null;const i=e.controllers?.find(e=>e._name===t||e.property===t);if(i)return i;for(const t of e.folders||[]){const e=n(t);if(e)return e}return null};let i=n(u.clippingFolder);return i||u.clippingFolder?.add(e,t)}function z(){return u.CONFIG?.viewer?.gallery||{}}function B(e,t){return e.fileElement?.[0]||t||e.container||u.container||null}function U(e,t=""){const n=[["#1f3c88","#6da3ff"],["#0f766e","#6ee7b7"],["#9a3412","#fdba74"],["#5b21b6","#c4b5fd"]],[i,o]=n[e%n.length],r=`\n \n `.trim();return`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(r)}`}function G(e,t){return(t=t.filter(function(e){if(!(e instanceof Element))return!1;let t="";const n=e.querySelector("img"),i=e.querySelector("a");t=n&&n.getAttribute("src")?n.getAttribute("src"):i&&i.getAttribute("href")?i.getAttribute("href"):(e.textContent||e.innerHTML||"").trim();const o=H(t);return r=o,!!new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$","i").test(r)&&(e.innerHTML=o,!!n);var r})).forEach(function(e){e.innerHTML=''}),t}function H(e){if(!e||"string"!=typeof e)return"";let t=e.trim();if(""===t)return"";t.startsWith("public://")?t="/sites/default/files/"+t.substring(9):t.startsWith("sites/default/files/")&&(t="/"+t);const n=(u.CONFIG?.mainUrl||window.location.origin||"").replace(/\/+$/,"");try{const e=new URL(t,window.location.origin),i=e.host||"",o=e.pathname||"",r=i.toLowerCase(),a=i.includes("_")||"default"===r||"dfg_3dviewer"===r;return o.startsWith("/sites/default/files/")?a?`${n}${o}`:"http:"===e.protocol||"https:"===e.protocol?e.href:`${n}${o}`:e.href}catch(e){return t.startsWith("/sites/default/files/")?`${n}${t}`:t}}function V(e,t,n,i){void 0===i&&(i=n),document.getElementById("image-list")?.remove(),document.getElementById("modalGallery")?.remove();var o=document.createElement("div");o.setAttribute("id","image-list"),o.style.display="flex",o.style.flexWrap="wrap",o.style.gap="16px",o.style.alignItems="center";var r=document.createElement("div"),a=document.createElement("img");a.setAttribute("class","modalImage"),a.style.transform="scale(0.95)",e.bindEventListener(r,"wheel",function(t){return t.preventDefault(),t.stopPropagation(),t.deltaY>0&&e.zoomImage>.15?a.style.transform=`scale(${e.zoomImage-=e.ZOOM_SPEED_IMAGE})`:t.deltaY<0&&e.zoomImage<5&&(a.style.transform=`scale(${e.zoomImage+=e.ZOOM_SPEED_IMAGE})`),!1});var s=document.createElement("span");r.setAttribute("id","modalGallery"),r.setAttribute("class","modalGallery"),s.setAttribute("class","closeGallery"),s.setAttribute("title","Close"),s.innerHTML="×",s.onclick=function(){r.classList.remove("is-open")},e.bindEventListener(document,"click",function(t){r.contains(t.target)||o.contains(t.target)||(r.classList.remove("is-open"),e.zoomImage=1.5,a.style.transform="scale(1.5)")}),r.appendChild(a),r.appendChild(s);for(let e=0;i.length-e>=0;e++)if(void 0!==i[e]&&void 0!==i[e].innerHTML){var l=i[e].getElementsByTagName("a");for(let e=0;e0&&B(e,t)){const n=B(e,t);n.insertAdjacentElement("beforebegin",r),n.insertAdjacentElement("beforebegin",o)}}function $(e){const t=z();var n,i=t.container?document.getElementById(t.container):null;if(""!==t.imageClass){if(0===(n=document.getElementsByClassName(t.imageClass)).length){const e=document.querySelectorAll(".field--type-image");e.length>0&&(n=e,console.warn("Gallery imageClass not found, falling back to .field--type-image."))}if(n.length>0){var o=document.getElementsByClassName("field__label");void 0!==o&&o.length>0&&(o[0].innerText="")}}else""!==t.imageId&&(n=document.getElementById(t.imageId));if(null!=n)if(n.length>0)if(void 0!==n[0].innerHTML){let t=Array.from(n[0].getElementsByClassName("field__items")[0].childNodes);t=G(0,t),n[0].classList.add("field--label-hidden"),V(e,i,t,t)}else V(e,i,n);else if(void 0!==n.childNodes&&n.childNodes.length>0)if("string"==typeof n.childNodes[0].innerHTML||"string"==typeof n.childNodes[1].innerHTML){let t=Array.from(n.childNodes);t=G(0,t),n.classList.add("field--type-image"),n.classList.add("field--label-hidden"),V(e,i,t,n)}else V(e,i,n);if(!0===u.CONFIG?.viewer?.gallery?.buildFake){const n=function(){const e=z(),t=(Array.isArray(e.testImages)?e.testImages:[]).map((e,t)=>{if("string"==typeof e){const n=H(e);return n?{src:n,alt:`Preview ${t+1}`}:null}if(e&&"object"==typeof e){const n=H(e.src||e.url||"");return n?{src:n,alt:String(e.alt||e.label||`Preview ${t+1}`)}:null}return null}).filter(Boolean);return t.length>0?t:[]}(),o=n.length>0?n:Array.from({length:9},(e,t)=>({src:U(t,`Preview ${t+1}`),alt:`Preview ${t+1}`}));if(!0===t.build){const t=function(e){return e.map(e=>{const t=document.createElement("div");return t.className="field__item",t.innerHTML=``,t})}(o);return V(e,i,t,t),void console.log("Built fallback thumbnail gallery for local testing")}}console.log("No gallery source found")}const W={progress:0,bar:null,panel:null,header:null,stepsContainer:null,steps:[],isFinished:!1,hideTimer:null,resetTimer:null,init(){if(this.bar)return;const e=document.createElement("div");e.id="ultra-loader",e.innerHTML='';const t=document.createElement("div");t.id="ultra-loader-panel";const n=document.createElement("div");n.id="ultra-loader-header",n.textContent=y("processingHeader"),t.appendChild(n);const i=document.createElement("div");i.id="ultra-loader-steps",t.appendChild(i),document.body.appendChild(e),document.body.appendChild(t),this.bar=document.getElementById("ultra-loader-bar"),this.panel=t,this.header=n,this.stepsContainer=i},start(e){this.init(),this.hideTimer&&(window.clearTimeout(this.hideTimer),this.hideTimer=null),this.resetTimer&&(window.clearTimeout(this.resetTimer),this.resetTimer=null),this.steps=e,this.updateHeader(),this.progress=5,this.isFinished=!1,this.bar.style.width="5%",this.bar.style.background="",this.renderSteps(0),this.panel.classList.add("show"),this.render()},set(e,t){this.progress=Math.max(this.progress,e),this.render()},step(e){this.renderSteps(e)},finish(){this.progress=100,this.isFinished=!0,this.render(),this.renderSteps(this.steps.length),this.hideTimer=window.setTimeout(()=>{this.isFinished&&(this.panel.classList.remove("show"),this.hideTimer=null,this.resetTimer=window.setTimeout(()=>{this.bar.style.width="0%",this.progress=0,this.resetTimer=null},1500))},2500)},render(){this.bar.style.width=this.progress+"%"},updateHeader(){this.header&&(this.header.textContent=y("processingHeader"))},renderSteps(e){this.updateHeader(),this.stepsContainer&&(this.stepsContainer.replaceChildren(),this.steps.forEach((t,n)=>{const i=document.createElement("div");i.className="ultra-step",n{const t=document.createElement("div");t.className="ultra-step error",t.textContent="✖ "+e,this.stepsContainer.appendChild(t)}))}};function X(e,t,n){return e?t:n}function K(e,t){const n=e.originalMetadata,i=e.saveProperties,o={};return o.objPosition=X(i.Position,[u.helperObjects[0].position.x,u.helperObjects[0].position.y,u.helperObjects[0].position.z],n.objPosition),o.objRotation=X(i.Rotation,[t.x,t.y,t.z],n.objRotation),o.objScale=X(i.Scale,[u.helperObjects[0].scale.x,u.helperObjects[0].scale.y,u.helperObjects[0].scale.z],n.objScale),o.cameraPosition=X(i.Camera,[u.camera.position.x,u.camera.position.y,u.camera.position.z],n.cameraPosition),o.controlsTarget=X(i.Camera,[u.controls.target.x,u.controls.target.y,u.controls.target.z],n.controlsTarget),o.controlsZoom=X(i.Camera,[u.camera.position.distanceTo(u.controls.target)],n.controlsZoom),o.lightPosition=X(i.DirectionalLight,[u.dirLight.position.x,u.dirLight.position.y,u.dirLight.position.z],n.lightPosition),o.lightTarget=X(i.DirectionalLight,[u.dirLight.rotation._x,u.dirLight.rotation._y,u.dirLight.rotation._z],n.lightTarget),o.lightColor=X(i.DirectionalLight,["#"+u.dirLight.color.getHexString().toUpperCase()],n.lightColor),o.lightIntensity=X(i.DirectionalLight,[u.dirLight.intensity],n.lightIntensity),o.lightAmbientColor=X(i.AmbientLight,["#"+u.ambientLight.color.getHexString().toUpperCase()],n.lightAmbientColor),o.lightAmbientIntensity=X(i.AmbientLight,[u.ambientLight.intensity],n.lightAmbientIntensity),o.lightCameraColor=X(i.CameraLight,["#"+u.cameraLight.color.getHexString().toUpperCase()],n.lightCameraColor),o.lightCameraIntensity=X(i.CameraLight,[u.cameraLight.intensity],n.lightCameraIntensity),o.background=i.BackgroundColor?[window.getComputedStyle(e.mainCanvas).background]:n.background,o.annotationEntries=e.getAnnotationEntriesForPersistence(),o.iiifAnnotationsXml=e.exportAnnotationsToIIIFXml(),o}function Y(e,t,n,i){i.x=(t-e.mainCanvas.getBoundingClientRect().left)/u.renderer.domElement.clientWidth*2-1,i.y=-(n-e.mainCanvas.getBoundingClientRect().top)/u.renderer.domElement.clientHeight*2+1}function Z(e,t){e.raycaster.setFromCamera(t,u.camera);let n=[];if(u.mainObject.length>1){for(let t=0;t!0===e?.object?.userData?.isAnnotationPOI)||null}function J(e){return String(e??"").replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function Q(){const e=document.getElementById("metadata-content"),t=document.getElementById("metadata-card");if(!e||!t||!e.classList.contains("expanded"))return;const n=e.scrollHeight-e.clientHeight>8;t.classList.toggle("metadata-card-overflowing",n),e.querySelectorAll(".metadata-row").forEach(e=>{const t=e.querySelector(".metadata-value");if(!t)return;const n=e.classList.contains("metadata-row-pinned");e.classList.remove("metadata-row-pinned","metadata-row-expandable");const i=t.scrollHeight-t.clientHeight>4;e.classList.toggle("metadata-row-expandable",i),n&&i&&e.classList.add("metadata-row-pinned")})}function ee(){"true"!==u.metadataContainer.dataset.boundCollapse&&(u.metadataContainer.addEventListener("click",e=>{if(e.target.closest("#metadata-collapse"))return void function(){const e=document.getElementById("metadata-content"),t=document.getElementById("metadata-collapse"),n=document.getElementById("metadata-card");if(!e||!t)return;const i=e.classList.toggle("expanded");if(t.classList.toggle("metadata-collapsed",!i),n?.classList.toggle("metadata-open",i),t.setAttribute("aria-expanded",i),!i)return n?.classList.remove("metadata-card-overflowing"),void e.querySelectorAll(".metadata-row-pinned").forEach(e=>{e.classList.remove("metadata-row-pinned")});Q()}();const t=document.getElementById("metadata-card"),n=document.getElementById("metadata-content");if(!t||!n||!n.classList.contains("expanded"))return;const i=e.target.closest(".metadata-row");if(!i)return;const o=!i.classList.contains("metadata-row-pinned");n.querySelectorAll(".metadata-row-pinned").forEach(e=>{e.classList.remove("metadata-row-pinned")}),o&&i.classList.add("metadata-row-pinned")}),window.addEventListener("resize",Q),u.metadataContainer.dataset.boundCollapse="true")}function te(e,t){if(!e?.geometry)return 0;const n=e.geometry.index?.count,i=e.geometry.attributes?.position?.count??0;switch(t){case"vertices":return i;case"faces":return(n??i)/3;default:return 0}}async function ne(e,t,n){Viewer.clearHierarchySubmenu(),Array.isArray(n)?(O(n[0],e),await x(n[0],e)):"Scene"===n.name||n.children.length>0||"Mesh"==n.type?(O(n,e),n.traverse(function(e){if(e.isMesh){t.vertices+=te(e,"vertices"),t.faces+=te(e,"faces"),""===e.name&&(e.name="Mesh");var n=g(e.name,35);Viewer.addHierarchySubmenuItem(n,e.id),e.traverse(function(t){if(t.isMesh&&t.name!==e.name){""===t.name&&(t.name="ChildrenMesh");var n=g(t.name,35);Viewer.addHierarchySubmenuItem(n,t.id)}})}}),await x(n,e)):(O(n,e),await x(n,e),t.vertices+=te(n,"vertices"),t.faces+=te(n,"faces"),""===n.name?(Viewer.addHierarchySubmenuItem("Mesh",n.id),n.name=n.id):Viewer.addHierarchySubmenuItem(n.name,n.id)),u.metadataContainer||(u.metadataContainer=document.createElement("div"),u.metadataContainer.id="metadata-container"),u.metadataContainer.setAttribute("data-viewer-theme",u.container?.closest(".viewer-wrapper")?.getAttribute("data-viewer-theme")||"dark");var i='
",i+=await async function(){return u.CONFIG.entity.metadata.sourceType&&""!==u.CONFIG.entity.metadata.url?(console.warn("Entity ID is missing or invalid. Skipping metadata fetch."),""):""}(),u.downloadModel||(u.downloadModel.hidden=!0,u.downloadModel.removeAttribute("href")),u.viewEntity&&(u.viewEntity.hidden=!0,u.viewEntity.removeAttribute("data-embed-url")),!u.isLightweight&&u.downloadModel){const e=u.fileObject.path;""!==u.loadedFile&&(u.fileObject.filename=u.fileObject.filename.replace(u.fileObject.orgExtension,u.fileObject.extension)),u.downloadModel.href=`blob:${encodeURI(e+u.fileObject.filename)}`,u.downloadModel.setAttribute("download",u.fileObject.filename),u.downloadModel.hidden=!1,window.Viewer?.updateDownloadMenuEntryLabel?.()}if(u.viewEntity&&(u.CONFIG?.entity?.id||u.fileObject?.originalPath)){const e=window.Viewer?.getSharePayload?.();e?.url&&u.viewEntity.setAttribute("data-embed-url",e.url),window.Viewer?.updateEmbedMenuEntryState?.(),u.viewEntity.hidden=!1}(function(e){u.metadataContainer.innerHTML=e,u.container.contains(u.metadataContainer)||u.container.appendChild(u.metadataContainer)})(i+="
"),ee(),requestAnimationFrame(Q)}async function ie(e,t,n){Array.isArray(e)?(O(e[0],n),await x(e[0],n)):("Scene"===e.name||e.children.length,O(e,n),await x(e,n))}async function oe(e){if(null===e||""===e)return console.log("No metadata found due to null or empty metadata URL",e),null;try{if(u.isLocalPreview)return null;const t=await fetch(e,{cache:"no-cache"});return 404===t.status?(v("settingsNotFound","info",{filename:u.fileObject.filename}),null):(v("settingsFound","success",{filename:u.fileObject.filename}),t.json())}catch(e){return v("metadataFetchError","error",{error:e.message}),null}}async function re(e){u.PRESENTATION_MODE&&async function(e){Array.isArray(e)?(e.forEach(e=>{e.updateMatrixWorld(!0)}),await x(e,null)):("Scene"===e.name||e.children.length>0||e.type,O(e,null),await x(e,null))}(e)}function ae(e="iiif"){const t=document.createElement("div"),n="iiif"===e?"IIIF":"AIM3IF",i="iiif"===e?"iiif":"aim3if";t.id="form-manifesto";const o=document.createElement("div");o.className="form-manifesto-header",o.innerHTML=`\n ${J(y(`${i}.loader`,`${n} Loader`))}\n