@ifc-lite/viewer 1.25.0 → 1.25.2

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.
Files changed (58) hide show
  1. package/.turbo/turbo-build.log +79 -84
  2. package/CHANGELOG.md +60 -0
  3. package/dist/assets/{basketViewActivator-CU8_toGq.js → basketViewActivator-CTgyKI3U.js} +6 -6
  4. package/dist/assets/{bcf-DXGDhw56.js → bcf-7jQby1qi.js} +1 -1
  5. package/dist/assets/{deflate-Bb1_H2Yf.js → deflate-Cfp9t1Df.js} +1 -1
  6. package/dist/assets/exporters-DfSvJPi4.js +4660 -0
  7. package/dist/assets/geometry.worker-Cyn5BybV.js +1 -0
  8. package/dist/assets/{geotiff-y0ZxbRJd.js → geotiff-xZoE8BkO.js} +10 -10
  9. package/dist/assets/{ids-DruUNtfD.js → ids-Cu73hD0Y.js} +21 -21
  10. package/dist/assets/ifc-lite_bg-ksLBP5cA.wasm +0 -0
  11. package/dist/assets/{index-Dr88ZlSY.js → index-WSbA5iy6.js} +31959 -31608
  12. package/dist/assets/{jpeg-B3_loqFe.js → jpeg-DhwFEbqb.js} +1 -1
  13. package/dist/assets/{lerc-nkwS8ZUe.js → lerc-Dz6BXOVb.js} +1 -1
  14. package/dist/assets/{lzw-D3cW5Wpg.js → lzw-C9z0fG2o.js} +1 -1
  15. package/dist/assets/{native-bridge-BcYJooq8.js → native-bridge-RvDmzO-2.js} +1 -1
  16. package/dist/assets/{packbits-DDN4xzB5.js → packbits-jfwifz7C.js} +1 -1
  17. package/dist/assets/parser.worker-C594dWxH.js +182 -0
  18. package/dist/assets/raw-R2QfzPAR.js +1 -0
  19. package/dist/assets/{sandbox-DETNEyQb.js → sandbox-DDSZ7rek.js} +2450 -2260
  20. package/dist/assets/{server-client-CmzJOeS7.js → server-client-Ctk8_Bof.js} +1 -1
  21. package/dist/assets/{webimage-CBjgg4up.js → webimage-XFHVyVtC.js} +1 -1
  22. package/dist/assets/{zstd-C8oQ6qdS.js → zstd-3q5qcl5V.js} +1 -1
  23. package/dist/index.html +6 -6
  24. package/package.json +22 -21
  25. package/src/App.tsx +4 -0
  26. package/src/components/viewer/BCFPanel.tsx +8 -1
  27. package/src/components/viewer/CommandPalette.tsx +5 -1
  28. package/src/components/viewer/MainToolbar.tsx +41 -19
  29. package/src/components/viewer/Section2DPanel.tsx +6 -2
  30. package/src/components/viewer/Viewport.tsx +48 -3
  31. package/src/components/viewer/bcf/BCFTopicDetail.tsx +24 -0
  32. package/src/components/viewer/hierarchy/ifc-icons.ts +60 -0
  33. package/src/components/viewer/useGeometryStreaming.ts +113 -18
  34. package/src/hooks/ingest/resolveDataStoreOrAbort.test.ts +61 -0
  35. package/src/hooks/ingest/resolveDataStoreOrAbort.ts +28 -0
  36. package/src/hooks/ingest/viewerModelIngest.ts +55 -11
  37. package/src/hooks/useBCF.ts +98 -16
  38. package/src/hooks/useDrawingGeneration.ts +149 -3
  39. package/src/hooks/useIfcCache.ts +44 -18
  40. package/src/hooks/useIfcLoader.ts +1 -23
  41. package/src/hooks/useSymbolicAnnotations.ts +240 -61
  42. package/src/store/constants.ts +19 -3
  43. package/src/store/index.ts +1 -0
  44. package/src/store/slices/visibilitySlice.ts +2 -1
  45. package/src/store/types.ts +9 -0
  46. package/src/utils/serverDataModel.test.ts +51 -1
  47. package/src/utils/serverDataModel.ts +2 -26
  48. package/vite.config.ts +0 -5
  49. package/dist/assets/exporters-DZhLN0ux.js +0 -5957
  50. package/dist/assets/geometry-controller.worker-DQOSYqtw.js +0 -7
  51. package/dist/assets/geometry.worker-B62e03Ao.js +0 -1
  52. package/dist/assets/ifc-lite-Ch2T9pP9.js +0 -7
  53. package/dist/assets/ifc-lite_bg-D7O1WHgP.wasm +0 -0
  54. package/dist/assets/ifc-lite_bg-iH_07wf8.wasm +0 -0
  55. package/dist/assets/parser.worker-BW1IMUed.js +0 -182
  56. package/dist/assets/raw-CoIXstQ-.js +0 -1
  57. package/dist/assets/wasm-bridge-CT7mK9W0.js +0 -1
  58. package/dist/assets/workerHelpers-IEQDo8r3.js +0 -36
@@ -1,23 +1,23 @@
1
1
 
2
- > @ifc-lite/viewer@1.25.0 build /home/runner/work/ifc-lite/ifc-lite/apps/viewer
2
+ > @ifc-lite/viewer@1.25.2 build /home/runner/work/ifc-lite/ifc-lite/apps/viewer
3
3
  > vite build
4
4
 
5
5
  vite v7.3.3 building client environment for production...
6
6
  transforming...
7
- [plugin vite:resolve] Module "node:fs" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0/node_modules/@anthropic-ai/sdk/lib/credentials/types.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
8
- [plugin vite:resolve] Module "node:fs" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0/node_modules/@anthropic-ai/sdk/lib/credentials/types.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
9
- [plugin vite:resolve] Module "node:path" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0/node_modules/@anthropic-ai/sdk/lib/credentials/types.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
10
- [plugin vite:resolve] Module "node:fs" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0/node_modules/@anthropic-ai/sdk/lib/credentials/credential-chain.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
11
- [plugin vite:resolve] Module "node:fs" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0/node_modules/@anthropic-ai/sdk/lib/credentials/identity-token.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
12
- [plugin vite:resolve] Module "node:fs" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0/node_modules/@anthropic-ai/sdk/core/credentials.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
13
- [plugin vite:resolve] Module "node:path" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0/node_modules/@anthropic-ai/sdk/core/credentials.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
14
- [plugin vite:resolve] Module "node:fs" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0/node_modules/@anthropic-ai/sdk/core/credentials.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
15
- [plugin vite:resolve] Module "node:path" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0/node_modules/@anthropic-ai/sdk/core/credentials.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
16
- [plugin vite:resolve] Module "node:path" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0/node_modules/@anthropic-ai/sdk/core/credentials.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
17
- [plugin vite:resolve] Module "node:fs" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0/node_modules/@anthropic-ai/sdk/core/credentials.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
18
- [plugin vite:resolve] Module "node:path" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0/node_modules/@anthropic-ai/sdk/core/credentials.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
19
- [plugin vite:resolve] Module "node:fs" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0/node_modules/@anthropic-ai/sdk/lib/credentials/user-oauth.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
20
- ✓ 4999 modules transformed.
7
+ [plugin vite:resolve] Module "node:fs" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0_zod@4.4.3/node_modules/@anthropic-ai/sdk/lib/credentials/types.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
8
+ [plugin vite:resolve] Module "node:fs" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0_zod@4.4.3/node_modules/@anthropic-ai/sdk/lib/credentials/types.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
9
+ [plugin vite:resolve] Module "node:path" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0_zod@4.4.3/node_modules/@anthropic-ai/sdk/lib/credentials/types.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
10
+ [plugin vite:resolve] Module "node:fs" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0_zod@4.4.3/node_modules/@anthropic-ai/sdk/lib/credentials/credential-chain.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
11
+ [plugin vite:resolve] Module "node:fs" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0_zod@4.4.3/node_modules/@anthropic-ai/sdk/lib/credentials/identity-token.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
12
+ [plugin vite:resolve] Module "node:fs" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0_zod@4.4.3/node_modules/@anthropic-ai/sdk/core/credentials.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
13
+ [plugin vite:resolve] Module "node:path" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0_zod@4.4.3/node_modules/@anthropic-ai/sdk/core/credentials.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
14
+ [plugin vite:resolve] Module "node:fs" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0_zod@4.4.3/node_modules/@anthropic-ai/sdk/core/credentials.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
15
+ [plugin vite:resolve] Module "node:path" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0_zod@4.4.3/node_modules/@anthropic-ai/sdk/core/credentials.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
16
+ [plugin vite:resolve] Module "node:path" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0_zod@4.4.3/node_modules/@anthropic-ai/sdk/core/credentials.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
17
+ [plugin vite:resolve] Module "node:fs" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0_zod@4.4.3/node_modules/@anthropic-ai/sdk/core/credentials.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
18
+ [plugin vite:resolve] Module "node:path" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0_zod@4.4.3/node_modules/@anthropic-ai/sdk/core/credentials.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
19
+ [plugin vite:resolve] Module "node:fs" has been externalized for browser compatibility, imported by "/home/runner/work/ifc-lite/ifc-lite/node_modules/.pnpm/@anthropic-ai+sdk@0.96.0_zod@4.4.3/node_modules/@anthropic-ai/sdk/lib/credentials/user-oauth.mjs". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
20
+ ✓ 4994 modules transformed.
21
21
  rendering chunks...
22
22
  [plugin vite:reporter]
23
23
  (!) /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/store.ts is dynamically imported by /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/services/extensions/host.ts but also statically imported by /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/ExtensionDockHost.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/ExtensionToolbarSlot.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/ExtensionsPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/FlavorDialog.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/IdeasPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/PrivacyPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/RepairQueuePanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/AddElementPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/BCFPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/BasepointOverlay.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/BasketPresentationDock.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/BulkPropertyEditor.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/CesiumOverlay.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/CesiumPlacementEditor.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ChatPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/CommandPalette.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/DataConnector.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/DesktopEntitlementBanner.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/DeviationPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/DrawingSettingsPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/EntityContextMenu.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ExportChangesButton.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ExportDialog.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/GLBExportDialog.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/GeometryEditCard.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/HierarchyPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/HoverTooltip.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/LensPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/MainToolbar.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/MergeLayersBanner.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/MobileToolbar.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/PointCloudClasses.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/PointCloudPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/PropertiesPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/PropertyEditor.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ScriptPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/SearchInline.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/SearchModal.filter.builder.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/SearchModal.filter.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/SearchModal.text.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/SearchModal.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/Section2DPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/SettingsPage.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/SheetSetupPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/StatusBar.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ThemeSwitch.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/TitleBlockEditor.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ToolOverlays.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ViewerLayout.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/Viewport.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ViewportContainer.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ViewportOverlays.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/annotations/AnnotationLayer.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/bcf/BCFOverlay.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/chat/ExecutableCodeBlock.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/chat/ModelSelector.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/hierarchy/treeDataBuilder.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/hierarchy/useHierarchyTree.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/lists/ListPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/lists/ListResultsTable.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/properties/BsddCard.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/properties/FederationAlignmentControls.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/properties/GeoreferencingPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/properties/RawStepCard.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/properties/RawStepRow.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/properties/TaskEditCard.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/schedule/AnimationSettingsPopover.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/schedule/GanttPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/schedule/GanttTimeline.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/schedule/GanttToolbar.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/schedule/GenerateScheduleDialog.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/schedule/schedule-utils.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/schedule/useConstructionSequence.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/schedule/useGanttBarDrag.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/schedule/useGanttSelection3DHighlight.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/schedule/useOverlayCompositor.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/selectionHandlers.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/tools/AddElementOverlay.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/tools/GizmoOverlay.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/tools/MeasurePanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/tools/SectionCapControls.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/tools/SectionPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/tools/SectionVisualization.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/tools/SplitNumericInput.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/tools/SplitOverlay.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/tools/WallEndpointOverlay.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/useDuplicateShortcut.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/useMouseControls.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/usePointCloudLifecycle.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/usePointCloudSync.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/useRenderUpdates.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useActionLogger.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useBCF.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useDrawingGeneration.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useFloorplanView.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useForkExtension.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useIDS.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useIfc.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useIfcCache.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useIfcFederation.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useIfcLoader.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useIfcServer.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useKeyboardShortcuts.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useLens.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useLensDiscovery.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useLevelDisplayEffect.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useModelSelection.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useSearchIndex.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useSymbolicAnnotations.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useViewerSelectors.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/lib/llm/context-builder.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/services/desktop-export.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/utils/loadingUtils.ts, dynamic import will not move module into another chunk.
@@ -29,83 +29,78 @@ rendering chunks...
29
29
  (!) /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/services/desktop-cache.ts is dynamically imported by /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useIfcLoader.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useIfcLoader.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useIfcLoader.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useIfcLoader.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useIfcLoader.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useIfcLoader.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/services/cacheService.ts but also statically imported by /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/services/desktop-native-metadata.ts, dynamic import will not move module into another chunk.
30
30
  
31
31
  [plugin vite:reporter]
32
- (!) /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/ui/toast.tsx is dynamically imported by /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useKeyboardShortcuts.ts but also statically imported by /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/App.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/AuditLogPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/BundlePreview.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/ExtensionDockHost.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/ExtensionToolbarSlot.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/ExtensionsPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/FlavorDialog.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/FlavorMergeDialog.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/IdeasPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/PrivacyPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/PromoteToolDialog.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/RepairQueuePanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/AddElementPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/CesiumPlacementEditor.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ChatPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/CommandPalette.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/EntityContextMenu.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ExportChangesButton.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ExportDialog.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/GLBExportDialog.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/GeometryEditCard.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/MainToolbar.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/MobileToolbar.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ScriptPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/SettingsPage.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ViewportContainer.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/chat/ByokKeyModal.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/properties/FederationAlignmentControls.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/properties/GeoreferencingPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/schedule/GanttToolbar.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/selectionHandlers.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/tools/SplitNumericInput.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/useDuplicateShortcut.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useForkExtension.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useIfcFederation.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/usePrivacyDisclosure.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useRunExtensionTests.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/sdk/ExtensionHostProvider.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/services/desktop-export.ts, dynamic import will not move module into another chunk.
32
+ (!) /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/ui/toast.tsx is dynamically imported by /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useKeyboardShortcuts.ts but also statically imported by /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/App.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/AuditLogPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/BundlePreview.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/ExtensionDockHost.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/ExtensionToolbarSlot.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/ExtensionsPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/FlavorDialog.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/FlavorMergeDialog.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/IdeasPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/PrivacyPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/PromoteToolDialog.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/extensions/RepairQueuePanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/AddElementPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/CesiumPlacementEditor.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ChatPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/CommandPalette.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/EntityContextMenu.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ExportChangesButton.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ExportDialog.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/GLBExportDialog.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/GeometryEditCard.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/MainToolbar.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/MobileToolbar.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ScriptPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/SettingsPage.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/ViewportContainer.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/chat/ByokKeyModal.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/properties/FederationAlignmentControls.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/properties/GeoreferencingPanel.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/schedule/GanttToolbar.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/selectionHandlers.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/tools/SplitNumericInput.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/useDuplicateShortcut.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/useGeometryStreaming.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useForkExtension.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useIfcFederation.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/usePrivacyDisclosure.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useRunExtensionTests.ts, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/sdk/ExtensionHostProvider.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/services/desktop-export.ts, dynamic import will not move module into another chunk.
33
33
  
34
34
  [plugin vite:reporter]
35
35
  (!) /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/selectionHandlers.ts is dynamically imported by /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/hooks/useKeyboardShortcuts.ts but also statically imported by /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/tools/WallEndpointOverlay.tsx, /home/runner/work/ifc-lite/ifc-lite/apps/viewer/src/components/viewer/useMouseControls.ts, dynamic import will not move module into another chunk.
36
36
  
37
37
  computing gzip size...
38
38
  [vite-plugin-static-copy] Copied 389 items.
39
- dist/assets/laz-perf-DgUOSLeU.js  0.06 kB
40
- dist/assets/workerHelpers-IEQDo8r3.js  1.21 kB
41
- dist/assets/las-source-C_IGrgRq.js  2.40 kB
42
- dist/assets/las-BW6LIc_j.js  3.08 kB
43
- dist/index.html  3.65 kB │ gzip: 1.24 kB
44
- dist/assets/ascii-points-source-bTjLVmUX.js  3.98 kB
45
- dist/assets/decode-worker-CgM1iNSK.js  5.03 kB
46
- dist/assets/laz-source-BWjza0Iw.js  5.35 kB
47
- dist/assets/ply-source-C8jjyzxE.js  6.77 kB
48
- dist/assets/pcd-source-Ck0UnVDn.js  7.31 kB
49
- dist/assets/e57-source-CQHxE8n3.js  13.46 kB
50
- dist/assets/ifc-lite-Ch2T9pP9.js  51.83 kB
51
- dist/assets/geometry.worker-B62e03Ao.js  52.22 kB
52
- dist/assets/index-DMho-JA0.js  53.15 kB
53
- dist/assets/geometry-controller.worker-DQOSYqtw.js  57.51 kB
54
- dist/assets/laz-perf-CFJp03W6.wasm  214.35 kB │ gzip: 73.76 kB
55
- dist/assets/emscripten-module-uFzwHH0Y.wasm  503.13 kB │ gzip: 234.04 kB
56
- dist/assets/parser.worker-BW1IMUed.js  942.89 kB
57
- dist/assets/emscripten-module-B1g2L2eS.wasm  1,027.52 kB │ gzip: 364.87 kB
58
- dist/assets/emscripten-module-ZrHFMo7O.wasm  1,218.63 kB │ gzip: 456.85 kB
59
- dist/assets/ifc-lite_bg-D7O1WHgP.wasm  1,448.20 kB │ gzip: 521.92 kB
60
- dist/assets/ifc-lite_bg-iH_07wf8.wasm  1,508.69 kB │ gzip: 544.04 kB
61
- dist/assets/emscripten-module-DHbYPfAp.wasm  1,510.75 kB │ gzip: 497.65 kB
62
- dist/assets/arrow2_bg-4Y7xYo54.wasm  5,000.39 kB │ gzip: 1,544.22 kB
63
- dist/assets/parquet_wasm_bg-DcKVfvto.wasm  6,626.29 kB │ gzip: 1,944.12 kB
64
- dist/assets/esbuild-CzsZLPr0.wasm 13,918.74 kB │ gzip: 3,765.48 kB
65
- dist/assets/cesium-ADbP7waU.css  24.30 kB │ gzip: 5.49 kB
66
- dist/assets/index-Bws3UAkj.css  258.08 kB │ gzip: 37.31 kB
67
- dist/assets/__vite-browser-external-B1O5LaIO.js  0.03 kB │ gzip: 0.05 kB
68
- dist/assets/inline-worker-BpBzlmd6.js  0.05 kB │ gzip: 0.07 kB
69
- dist/assets/tauri-dialog-stub-r7Wksg7o.js  0.05 kB │ gzip: 0.07 kB
70
- dist/assets/esbuild-FgU11_Eg.js  0.06 kB │ gzip: 0.08 kB
71
- dist/assets/tauri-core-stub-D8Fa-u43.js  0.11 kB │ gzip: 0.12 kB
72
- dist/assets/tauri-fs-stub-BdeRC7aK.js  0.13 kB │ gzip: 0.13 kB
73
- dist/assets/raw-CoIXstQ-.js  0.21 kB │ gzip: 0.18 kB
74
- dist/assets/deflate-Bb1_H2Yf.js  0.28 kB │ gzip: 0.22 kB
75
- dist/assets/packbits-DDN4xzB5.js  0.45 kB │ gzip: 0.32 kB
76
- dist/assets/webimage-CBjgg4up.js  1.06 kB │ gzip: 0.60 kB
77
- dist/assets/event-B0kAzHa-.js  1.49 kB │ gzip: 0.68 kB
78
- dist/assets/lzw-D3cW5Wpg.js  1.60 kB │ gzip: 0.91 kB
79
- dist/assets/wasm-bridge-CT7mK9W0.js  1.60 kB │ gzip: 0.77 kB
80
- dist/assets/basketViewActivator-CU8_toGq.js  2.28 kB │ gzip: 0.79 kB
81
- dist/assets/ifc-cache-BAN4vcd4.js  2.77 kB │ gzip: 0.94 kB
82
- dist/assets/ffi-Boa1QuFa.js  6.32 kB │ gzip: 1.00 kB
83
- dist/assets/emscripten-module.browser-BLJD5hhE.js  9.16 kB │ gzip: 4.19 kB
84
- dist/assets/lens-PYsLu_MA.js  9.37 kB │ gzip: 2.91 kB
85
- dist/assets/jpeg-B3_loqFe.js  11.28 kB │ gzip: 4.27 kB
86
- dist/assets/native-bridge-BcYJooq8.js  18.61 kB │ gzip: 3.76 kB
87
- dist/assets/pako.esm-Cram60i4.js  21.58 kB │ gzip: 7.64 kB
88
- dist/assets/parquet-CEXmQNRO.js  29.67 kB │ gzip: 6.89 kB
89
- dist/assets/server-client-CmzJOeS7.js  31.43 kB │ gzip: 7.06 kB
90
- dist/assets/bcf-DXGDhw56.js  37.89 kB │ gzip: 11.39 kB
91
- dist/assets/browser-DXS29_v9.js  70.26 kB │ gzip: 19.95 kB
92
- dist/assets/drawing-2d-C71b8Ugx.js  71.89 kB │ gzip: 21.08 kB
93
- dist/assets/zstd-C8oQ6qdS.js  81.19 kB │ gzip: 32.34 kB
94
- dist/assets/zip-BJqVbRkU.js  96.95 kB │ gzip: 29.94 kB
95
- dist/assets/lerc-nkwS8ZUe.js  97.20 kB │ gzip: 37.62 kB
96
- dist/assets/ids-DruUNtfD.js  164.18 kB │ gzip: 29.22 kB
97
- dist/assets/arrow-CXWhTnNT.js  208.86 kB │ gzip: 50.09 kB
98
- dist/assets/exporters-DZhLN0ux.js  241.36 kB │ gzip: 41.62 kB
99
- dist/assets/geotiff-y0ZxbRJd.js  366.67 kB │ gzip: 118.40 kB
100
- dist/assets/three-CQBzFWY2.js  534.00 kB │ gzip: 133.77 kB
101
- dist/assets/maplibre-gl-Do6O5tDc.js  1,053.34 kB │ gzip: 284.74 kB
102
- dist/assets/epsg-index.generated-BjJrt_0S.js  4,295.95 kB │ gzip: 440.44 kB
103
- dist/assets/cesium-BoVuJvTC.js  4,778.78 kB │ gzip: 1,320.18 kB
104
- dist/assets/index-Dr88ZlSY.js  7,493.78 kB │ gzip: 1,360.36 kB
105
- dist/assets/sandbox-DETNEyQb.js  8,486.06 kB │ gzip: 512.61 kB
39
+ dist/assets/laz-perf-DgUOSLeU.js  0.06 kB
40
+ dist/assets/las-source-C_IGrgRq.js  2.40 kB
41
+ dist/assets/las-BW6LIc_j.js  3.08 kB
42
+ dist/index.html  3.65 kB │ gzip: 1.24 kB
43
+ dist/assets/ascii-points-source-bTjLVmUX.js  3.98 kB
44
+ dist/assets/decode-worker-CgM1iNSK.js  5.03 kB
45
+ dist/assets/laz-source-BWjza0Iw.js  5.35 kB
46
+ dist/assets/ply-source-C8jjyzxE.js  6.77 kB
47
+ dist/assets/pcd-source-Ck0UnVDn.js  7.31 kB
48
+ dist/assets/e57-source-CQHxE8n3.js  13.46 kB
49
+ dist/assets/geometry.worker-Cyn5BybV.js  31.45 kB
50
+ dist/assets/index-DMho-JA0.js  53.15 kB
51
+ dist/assets/laz-perf-CFJp03W6.wasm  214.35 kB │ gzip: 73.76 kB
52
+ dist/assets/emscripten-module-uFzwHH0Y.wasm  503.13 kB │ gzip: 234.04 kB
53
+ dist/assets/emscripten-module-B1g2L2eS.wasm  1,027.52 kB │ gzip: 364.87 kB
54
+ dist/assets/emscripten-module-ZrHFMo7O.wasm  1,218.63 kB │ gzip: 456.85 kB
55
+ dist/assets/emscripten-module-DHbYPfAp.wasm  1,510.75 kB │ gzip: 497.65 kB
56
+ dist/assets/parser.worker-C594dWxH.js  1,594.15 kB
57
+ dist/assets/ifc-lite_bg-ksLBP5cA.wasm  1,707.59 kB │ gzip: 615.76 kB
58
+ dist/assets/arrow2_bg-4Y7xYo54.wasm  5,000.39 kB │ gzip: 1,544.22 kB
59
+ dist/assets/parquet_wasm_bg-DcKVfvto.wasm  6,626.29 kB │ gzip: 1,944.12 kB
60
+ dist/assets/esbuild-CzsZLPr0.wasm 13,918.74 kB │ gzip: 3,765.48 kB
61
+ dist/assets/cesium-ADbP7waU.css  24.30 kB │ gzip: 5.49 kB
62
+ dist/assets/index-Bws3UAkj.css  258.08 kB │ gzip: 37.31 kB
63
+ dist/assets/__vite-browser-external-B1O5LaIO.js  0.03 kB │ gzip: 0.05 kB
64
+ dist/assets/inline-worker-BpBzlmd6.js  0.05 kB │ gzip: 0.07 kB
65
+ dist/assets/tauri-dialog-stub-r7Wksg7o.js  0.05 kB │ gzip: 0.07 kB
66
+ dist/assets/esbuild-FgU11_Eg.js  0.06 kB │ gzip: 0.08 kB
67
+ dist/assets/tauri-core-stub-D8Fa-u43.js  0.11 kB │ gzip: 0.12 kB
68
+ dist/assets/tauri-fs-stub-BdeRC7aK.js  0.13 kB │ gzip: 0.13 kB
69
+ dist/assets/raw-R2QfzPAR.js  0.21 kB │ gzip: 0.18 kB
70
+ dist/assets/deflate-Cfp9t1Df.js  0.28 kB │ gzip: 0.22 kB
71
+ dist/assets/packbits-jfwifz7C.js  0.45 kB │ gzip: 0.32 kB
72
+ dist/assets/webimage-XFHVyVtC.js  1.06 kB │ gzip: 0.60 kB
73
+ dist/assets/event-B0kAzHa-.js  1.49 kB │ gzip: 0.68 kB
74
+ dist/assets/lzw-C9z0fG2o.js  1.60 kB │ gzip: 0.91 kB
75
+ dist/assets/basketViewActivator-CTgyKI3U.js  2.28 kB │ gzip: 0.80 kB
76
+ dist/assets/ifc-cache-BAN4vcd4.js  2.77 kB │ gzip: 0.94 kB
77
+ dist/assets/ffi-Boa1QuFa.js  6.32 kB │ gzip: 1.00 kB
78
+ dist/assets/emscripten-module.browser-BLJD5hhE.js  9.16 kB │ gzip: 4.19 kB
79
+ dist/assets/lens-PYsLu_MA.js  9.37 kB │ gzip: 2.91 kB
80
+ dist/assets/jpeg-DhwFEbqb.js  11.28 kB │ gzip: 4.27 kB
81
+ dist/assets/native-bridge-RvDmzO-2.js  18.61 kB │ gzip: 3.76 kB
82
+ dist/assets/pako.esm-Cram60i4.js  21.58 kB │ gzip: 7.64 kB
83
+ dist/assets/parquet-CEXmQNRO.js  29.67 kB │ gzip: 6.89 kB
84
+ dist/assets/server-client-Ctk8_Bof.js  31.43 kB │ gzip: 7.06 kB
85
+ dist/assets/bcf-7jQby1qi.js  37.89 kB │ gzip: 11.39 kB
86
+ dist/assets/browser-DXS29_v9.js  70.26 kB │ gzip: 19.95 kB
87
+ dist/assets/drawing-2d-C71b8Ugx.js  71.89 kB │ gzip: 21.08 kB
88
+ dist/assets/zstd-3q5qcl5V.js  81.19 kB │ gzip: 32.34 kB
89
+ dist/assets/zip-BJqVbRkU.js  96.95 kB │ gzip: 29.94 kB
90
+ dist/assets/lerc-Dz6BXOVb.js  97.20 kB │ gzip: 37.62 kB
91
+ dist/assets/ids-Cu73hD0Y.js  164.18 kB │ gzip: 29.22 kB
92
+ dist/assets/exporters-DfSvJPi4.js  188.05 kB │ gzip: 35.95 kB
93
+ dist/assets/arrow-CXWhTnNT.js  208.86 kB │ gzip: 50.09 kB
94
+ dist/assets/geotiff-xZoE8BkO.js  366.67 kB │ gzip: 118.41 kB
95
+ dist/assets/three-CQBzFWY2.js  534.00 kB │ gzip: 133.77 kB
96
+ dist/assets/maplibre-gl-Do6O5tDc.js  1,053.34 kB │ gzip: 284.74 kB
97
+ dist/assets/epsg-index.generated-BjJrt_0S.js  4,295.95 kB │ gzip: 440.44 kB
98
+ dist/assets/cesium-BoVuJvTC.js  4,778.78 kB │ gzip: 1,320.18 kB
99
+ dist/assets/index-WSbA5iy6.js  7,511.97 kB │ gzip: 1,366.50 kB
100
+ dist/assets/sandbox-DDSZ7rek.js  8,489.85 kB │ gzip: 513.90 kB
106
101
  
107
102
  (!) Some chunks are larger than 6000 kB after minification. Consider:
108
103
  - Using dynamic import() to code-split the application
109
104
  - Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks
110
105
  - Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.
111
- ✓ built in 1m 17s
106
+ ✓ built in 1m 20s
package/CHANGELOG.md CHANGED
@@ -1,5 +1,65 @@
1
1
  # @ifc-lite/viewer
2
2
 
3
+ ## 1.25.2
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [[`e73ac09`](https://github.com/LTplus-AG/ifc-lite/commit/e73ac0931b85cd299ae9b723073e956b6b124c85), [`e73ac09`](https://github.com/LTplus-AG/ifc-lite/commit/e73ac0931b85cd299ae9b723073e956b6b124c85)]:
8
+ - @ifc-lite/parser@3.0.0
9
+ - @ifc-lite/export@1.19.3
10
+ - @ifc-lite/cache@1.14.8
11
+ - @ifc-lite/renderer@1.23.1
12
+ - @ifc-lite/wasm@2.0.0
13
+ - @ifc-lite/geometry@2.0.0
14
+ - @ifc-lite/data@2.0.0
15
+ - @ifc-lite/extensions@0.3.0
16
+ - @ifc-lite/create@1.15.1
17
+ - @ifc-lite/ids@1.15.4
18
+ - @ifc-lite/mcp@0.2.1
19
+ - @ifc-lite/query@1.14.8
20
+ - @ifc-lite/sdk@1.16.1
21
+ - @ifc-lite/drawing-2d@1.16.1
22
+ - @ifc-lite/spatial@1.14.6
23
+ - @ifc-lite/lists@1.14.13
24
+ - @ifc-lite/mutations@1.15.1
25
+
26
+ ## 1.25.1
27
+
28
+ ### Patch Changes
29
+
30
+ - [#839](https://github.com/LTplus-AG/ifc-lite/pull/839) [`8c1632c`](https://github.com/LTplus-AG/ifc-lite/commit/8c1632ceb63ff4cfdbac4f2936d54d2d3a7e2f1b) Thanks [@louistrue](https://github.com/louistrue)! - Improve IFC annotation legibility in 3D (issue [#812](https://github.com/LTplus-AG/ifc-lite/issues/812) follow-up):
31
+
32
+ - **All annotation text now billboards to the camera.** Previously only
33
+ IfcGridAxis tags rebuilt in the screen-aligned basis; IfcAnnotation
34
+ text (dimensions, leader labels, room tags) kept its authored
35
+ in-plane orientation. In oblique views that text collapsed to a
36
+ smeared sliver of pixels — the "distorted dimension labels in
37
+ FZK-Haus" symptom from the issue. The shader path was already
38
+ per-instance billboard-aware, so the change is just a flag flip at
39
+ upload time; anchor and alignment are unchanged.
40
+
41
+ - **Grid bubbles no longer paint a white disc behind the tag.** The
42
+ bubble interior is now transparent, so geometry behind a grid line
43
+ reads through the bubble in 3D. The black outline ring (◯) and tag
44
+ glyph are unchanged — the white ● fill instance has been removed
45
+ from `emit_bubble`, which also drops one text instance per bubble.
46
+
47
+ - **Annotation text no longer z-fights coplanar surfaces.** Now that
48
+ every glyph billboards, the quad faces the camera with zero depth
49
+ slope across its screen extent — which means the text pipeline's
50
+ `depthBiasSlopeScale: -0.5` contributes ~0 and only the small `-4`
51
+ constant survives, not enough to beat MSAA jitter on a label drawn
52
+ exactly on a wall/floor face (visible as dimension digits strobing
53
+ against terrain in 3D). The symbolic-overlay text shader now applies
54
+ the same `clip.z + 5e-5 * clip.w` reverse-Z nudge the section-2D
55
+ line pipeline already uses — depth-format-independent, slope-
56
+ independent, and large enough to clear coplanar jitter without
57
+ pulling the label visibly off the surface.
58
+
59
+ - Updated dependencies [[`8c1632c`](https://github.com/LTplus-AG/ifc-lite/commit/8c1632ceb63ff4cfdbac4f2936d54d2d3a7e2f1b), [`231e494`](https://github.com/LTplus-AG/ifc-lite/commit/231e494e7ee920c5219d7fa5c5c6dde4c2bced2a), [`279d897`](https://github.com/LTplus-AG/ifc-lite/commit/279d897dd6e28214930a6b0fffe01dd813141ee0), [`d83fc42`](https://github.com/LTplus-AG/ifc-lite/commit/d83fc424a6b9d2a786e2dfaabe1dc2fb8746d07c)]:
60
+ - @ifc-lite/renderer@1.22.2
61
+ - @ifc-lite/wasm@1.19.2
62
+
3
63
  ## 1.25.0
4
64
 
5
65
  ### Minor Changes
@@ -1,13 +1,13 @@
1
- import { u as o, __tla as __tla_0 } from "./index-Dr88ZlSY.js";
1
+ import { u as o, __tla as __tla_0 } from "./index-WSbA5iy6.js";
2
2
  import "./zip-BJqVbRkU.js";
3
3
  import "./arrow-CXWhTnNT.js";
4
- import { __tla as __tla_1 } from "./sandbox-DETNEyQb.js";
4
+ import { __tla as __tla_1 } from "./sandbox-DDSZ7rek.js";
5
5
  import "./lens-PYsLu_MA.js";
6
- import { __tla as __tla_2 } from "./exporters-DZhLN0ux.js";
7
6
  import "./drawing-2d-C71b8Ugx.js";
8
- import "./bcf-DXGDhw56.js";
9
- import { __tla as __tla_3 } from "./server-client-CmzJOeS7.js";
10
- import { __tla as __tla_4 } from "./ids-DruUNtfD.js";
7
+ import "./bcf-7jQby1qi.js";
8
+ import { __tla as __tla_2 } from "./exporters-DfSvJPi4.js";
9
+ import { __tla as __tla_3 } from "./server-client-Ctk8_Bof.js";
10
+ import { __tla as __tla_4 } from "./ids-Cu73hD0Y.js";
11
11
  import "./three-CQBzFWY2.js";
12
12
  let v;
13
13
  let __tla = Promise.all([
@@ -1,4 +1,4 @@
1
- import{J as X}from"./zip-BJqVbRkU.js";import{af as C}from"./sandbox-DETNEyQb.js";async function te(t){const e=await X.loadAsync(t),i=await Q(e),{projectId:o,name:n,extensions:s}=await tt(e),a=await et(e);return{version:i.versionId,projectId:o,name:n,topics:a,extensions:s}}async function Q(t){const e=t.file("bcf.version");if(!e)throw new Error("Invalid BCF file: missing bcf.version");const o=(await e.async("string")).match(/VersionId="([^"]+)"/);if(!o)throw new Error("Invalid BCF version file: could not parse VersionId");const n=o[1];return n!=="2.1"&&n!=="3.0"&&console.warn(`Unsupported BCF version: ${n}, treating as 2.1`),{versionId:n==="3.0"?"3.0":"2.1",detailedVersion:o[1]}}async function tt(t){const e=t.file("project.bcfp");if(!e)return{};const i=await e.async("string"),o=i.match(/ProjectId="([^"]+)"/),n=i.match(/<Name>([^<]+)<\/Name>/);return{projectId:o?.[1],name:n?.[1]}}async function et(t){const e=new Map,i=new Set;t.forEach(o=>{const n=o.match(/^([^/]+)\/markup\.bcf$/i);n&&i.add(n[1])});for(const o of i)try{const n=await it(t,o);n&&e.set(n.guid,n)}catch(n){console.warn(`Failed to parse topic ${o}:`,n)}return e}async function it(t,e){const i=t.file(`${e}/markup.bcf`);if(!i)return null;const o=await i.async("string"),n=o.match(/<Topic\s+Guid="([^"]+)"[^>]*>([\s\S]*?)<\/Topic>/);if(!n)return console.warn(`Invalid markup.bcf in ${e}: missing Topic element`),null;const s=n[1],a=n[2],r=o.match(/<Topic[^>]*TopicType="([^"]+)"/),c=o.match(/<Topic[^>]*TopicStatus="([^"]+)"/),l=h(a,"Title")||"Untitled",p=h(a,"Description"),f=h(a,"Priority"),m=h(a,"Index"),u=h(a,"CreationDate")||new Date().toISOString(),g=h(a,"CreationAuthor")||"Unknown",d=h(a,"ModifiedDate"),x=h(a,"ModifiedAuthor"),w=h(a,"DueDate"),b=h(a,"AssignedTo"),v=h(a,"Stage"),T=[],q=a.matchAll(/<Labels>([^<]+)<\/Labels>/g);for(const A of q)T.push(A[1]);const H=ot(a),O=nt(a),I=[],W=a.matchAll(/<RelatedTopic\s+Guid="([^"]+)"/g);for(const A of W)I.push(A[1]);const J=st(o),K=await at(t,e,o);return{guid:s,title:l,description:p,topicType:r?.[1],topicStatus:c?.[1],priority:f,index:m?parseInt(m,10):void 0,creationDate:u,creationAuthor:g,modifiedDate:d,modifiedAuthor:x,dueDate:w,assignedTo:b,stage:v,labels:T.length>0?T:void 0,bimSnippet:H,documentReferences:O.length>0?O:void 0,relatedTopics:I.length>0?I:void 0,comments:J,viewpoints:K}}function h(t,e){return t.match(new RegExp(`<${e}>([^<]*)<\\/${e}>`))?.[1]}function ot(t){const e=t.match(/<BimSnippet\s+SnippetType="([^"]+)"[^>]*>([\s\S]*?)<\/BimSnippet>/);if(!e)return;const i=e[0].match(/isExternal="([^"]+)"/),o=h(e[2],"Reference"),n=h(e[2],"ReferenceSchema");return{snippetType:e[1],isExternal:i?.[1]==="true",reference:o||"",referenceSchema:n}}function nt(t){const e=[],i=t.matchAll(/<DocumentReference[^>]*>([\s\S]*?)<\/DocumentReference>/g);for(const o of i){const n=o[0].match(/Guid="([^"]+)"/),s=o[0].match(/isExternal="([^"]+)"/),a=h(o[1],"ReferencedDocument"),r=h(o[1],"Description");a&&e.push({guid:n?.[1],isExternal:s?.[1]==="true",referencedDocument:a,description:r})}return e}function st(t){const e=[],i=t.matchAll(/<Comment\s+Guid="([^"]+)"[^>]*>([\s\S]*?)<\/Comment>/g);for(const o of i){const n=o[1],s=o[2],a=h(s,"Date")||new Date().toISOString(),r=h(s,"Author")||"Unknown",c=h(s,"Comment")||"",l=h(s,"ModifiedDate"),p=h(s,"ModifiedAuthor"),f=s.match(/<Viewpoint\s+Guid="([^"]+)"/);e.push({guid:n,date:a,author:r,comment:c,viewpointGuid:f?.[1],modifiedDate:l,modifiedAuthor:p})}return e}async function at(t,e,i){const o=[],n=new Map,s=/<Viewpoint\s+Guid="([^"]+)"[^>]*>([\s\S]*?)<\/Viewpoint>/g;for(const c of i.matchAll(s)){const l=c[1],p=c[2],f=p.match(/<Viewpoint>([^<]+)<\/Viewpoint>/),m=p.match(/<Snapshot>([^<]+)<\/Snapshot>/);n.set(l,{viewpointFile:f?.[1],snapshotFile:m?.[1]})}const a=i.matchAll(/<Viewpoint\s+Guid="([^"]+)"[^>]*\/>/g);for(const c of a)n.has(c[1])||n.set(c[1],{});const r=[];t.forEach(c=>{c.startsWith(`${e}/`)&&c.endsWith(".bcfv")&&r.push(c)});for(const c of r)try{const l=t.file(c);if(!l)continue;const p=await l.async("string"),f=ct(p);if(f){const m=n.get(f.guid);let u=null,g="png";if(m?.snapshotFile){const d=`${e}/${m.snapshotFile}`;u=t.file(d),(m.snapshotFile.toLowerCase().endsWith(".jpg")||m.snapshotFile.toLowerCase().endsWith(".jpeg"))&&(g="jpeg")}if(!u){const d=c.replace(".bcfv",""),x=d.replace(/Viewpoint_/i,"Snapshot_"),w=d.replace(/_viewpoint$/i,"_snapshot"),b=[`${x}.png`,`${w}.png`,`${d}.png`,`${e}/snapshot.png`,`${x}.jpg`,`${w}.jpg`,`${d}.jpg`,`${e}/snapshot.jpg`];for(const v of b)if(u=t.file(v),u){(v.toLowerCase().endsWith(".jpg")||v.toLowerCase().endsWith(".jpeg"))&&(g="jpeg");break}}if(u){const d=await u.async("uint8array");f.snapshotData=d,f.snapshot=`data:image/${g};base64,${U(d)}`}o.push(f)}}catch(l){console.warn(`Failed to parse viewpoint ${c}:`,l)}if(o.length===0){const c=t.file(`${e}/snapshot.png`)||t.file(`${e}/snapshot.jpg`);if(c){const l=c.name.toLowerCase().endsWith(".jpg"),p=await c.async("uint8array");o.push({guid:e,snapshot:`data:image/${l?"jpeg":"png"};base64,${U(p)}`,snapshotData:p})}}return o}function ct(t){const i=t.match(/<VisualizationInfo[^>]+Guid="([^"]+)"/)?.[1]||crypto.randomUUID?.()||`vp-${Date.now()}`,o=rt(t),n=lt(t),s=pt(t),a=mt(t),r=dt(t),c=ht(t);return{guid:i,perspectiveCamera:o,orthogonalCamera:n,components:s,lines:a.length>0?a:void 0,clippingPlanes:r.length>0?r:void 0,bitmaps:c.length>0?c:void 0}}function rt(t){const e=t.match(/<PerspectiveCamera>([\s\S]*?)<\/PerspectiveCamera>/);if(!e)return;const i=e[1],o=V(i,"CameraViewPoint"),n=M(i,"CameraDirection"),s=M(i,"CameraUpVector"),a=h(i,"FieldOfView");if(!(!o||!n||!s||!a))return{cameraViewPoint:o,cameraDirection:n,cameraUpVector:s,fieldOfView:parseFloat(a)}}function lt(t){const e=t.match(/<OrthogonalCamera>([\s\S]*?)<\/OrthogonalCamera>/);if(!e)return;const i=e[1],o=V(i,"CameraViewPoint"),n=M(i,"CameraDirection"),s=M(i,"CameraUpVector"),a=h(i,"ViewToWorldScale");if(!(!o||!n||!s||!a))return{cameraViewPoint:o,cameraDirection:n,cameraUpVector:s,viewToWorldScale:parseFloat(a)}}function V(t,e){const i=t.match(new RegExp(`<${e}>([\\s\\S]*?)<\\/${e}>`));if(!i)return;const o=h(i[1],"X"),n=h(i[1],"Y"),s=h(i[1],"Z");if(!(o===void 0||n===void 0||s===void 0))return{x:parseFloat(o),y:parseFloat(n),z:parseFloat(s)}}function M(t,e){return V(t,e)}function pt(t){const e=t.match(/<Components>([\s\S]*?)<\/Components>/);if(!e)return;const i=e[1],o=B(i,"Selection"),n=ft(i),s=ut(i);if(!(!o&&!n&&!s))return{selection:o?.length?o:void 0,visibility:n,coloring:s?.length?s:void 0}}function B(t,e){const i=t.match(new RegExp(`<${e}>([\\s\\S]*?)<\\/${e}>`));if(!i)return;const o=[],n=i[1].matchAll(/<Component[^>]*(?:\/>|>[\s\S]*?<\/Component>)/g);for(const s of n){const a=_(s[0]);a&&o.push(a)}return o.length>0?o:void 0}function _(t){const e=t.match(/IfcGuid="([^"]+)"/),i=t.match(/AuthoringToolId="([^"]+)"/),o=t.match(/OriginatingSystem="([^"]+)"/);if(!(!e&&!i))return{ifcGuid:e?.[1],authoringToolId:i?.[1],originatingSystem:o?.[1]}}function ft(t){const e=t.match(/<Visibility[^>]*>([\s\S]*?)<\/Visibility>/);if(!e)return;const o=t.match(/DefaultVisibility="([^"]+)"/)?.[1]!=="false",n=B(e[1],"Exceptions");return{defaultVisibility:o,exceptions:n}}function ut(t){const e=t.match(/<Coloring>([\s\S]*?)<\/Coloring>/);if(!e)return;const i=[],o=e[1].matchAll(/<Color\s+Color="([^"]+)"[^>]*>([\s\S]*?)<\/Color>/g);for(const n of o){const s=n[1],a=[],r=n[2].matchAll(/<Component[^>]*(?:\/>|>[\s\S]*?<\/Component>)/g);for(const c of r){const l=_(c[0]);l&&a.push(l)}a.length>0&&i.push({color:s,components:a})}return i.length>0?i:void 0}function mt(t){const e=[],i=t.match(/<Lines>([\s\S]*?)<\/Lines>/);if(!i)return e;const o=i[1].matchAll(/<Line>([\s\S]*?)<\/Line>/g);for(const n of o){const s=V(n[1],"StartPoint"),a=V(n[1],"EndPoint");s&&a&&e.push({startPoint:s,endPoint:a})}return e}function dt(t){const e=[],i=t.match(/<ClippingPlanes>([\s\S]*?)<\/ClippingPlanes>/);if(!i)return e;const o=i[1].matchAll(/<ClippingPlane>([\s\S]*?)<\/ClippingPlane>/g);for(const n of o){const s=V(n[1],"Location"),a=M(n[1],"Direction");s&&a&&e.push({location:s,direction:a})}return e}function ht(t){const e=[],i=t.match(/<Bitmaps>([\s\S]*?)<\/Bitmaps>/);if(!i)return e;const o=i[1].matchAll(/<Bitmap>([\s\S]*?)<\/Bitmap>/g);for(const n of o){const s=h(n[1],"Format")||h(n[1],"Bitmap"),a=h(n[1],"Reference"),r=V(n[1],"Location"),c=M(n[1],"Normal"),l=M(n[1],"Up"),p=h(n[1],"Height");s&&a&&r&&c&&l&&p&&e.push({format:s.toUpperCase()==="JPG"?"JPG":"PNG",reference:a,location:r,normal:c,up:l,height:parseFloat(p)})}return e}function U(t){let e="";for(let i=0;i<t.length;i++)e+=String.fromCharCode(t[i]);return btoa(e)}async function ee(t){const e=new X;gt(e,t.version),(t.projectId||t.name)&&yt(e,t);for(const[i,o]of t.topics)await xt(e,o);return e.generateAsync({type:"blob",compression:"DEFLATE",compressionOptions:{level:6}})}function gt(t,e){const i=`<?xml version="1.0" encoding="UTF-8"?>
1
+ import{J as X}from"./zip-BJqVbRkU.js";import{ag as C}from"./sandbox-DDSZ7rek.js";async function te(t){const e=await X.loadAsync(t),i=await Q(e),{projectId:o,name:n,extensions:s}=await tt(e),a=await et(e);return{version:i.versionId,projectId:o,name:n,topics:a,extensions:s}}async function Q(t){const e=t.file("bcf.version");if(!e)throw new Error("Invalid BCF file: missing bcf.version");const o=(await e.async("string")).match(/VersionId="([^"]+)"/);if(!o)throw new Error("Invalid BCF version file: could not parse VersionId");const n=o[1];return n!=="2.1"&&n!=="3.0"&&console.warn(`Unsupported BCF version: ${n}, treating as 2.1`),{versionId:n==="3.0"?"3.0":"2.1",detailedVersion:o[1]}}async function tt(t){const e=t.file("project.bcfp");if(!e)return{};const i=await e.async("string"),o=i.match(/ProjectId="([^"]+)"/),n=i.match(/<Name>([^<]+)<\/Name>/);return{projectId:o?.[1],name:n?.[1]}}async function et(t){const e=new Map,i=new Set;t.forEach(o=>{const n=o.match(/^([^/]+)\/markup\.bcf$/i);n&&i.add(n[1])});for(const o of i)try{const n=await it(t,o);n&&e.set(n.guid,n)}catch(n){console.warn(`Failed to parse topic ${o}:`,n)}return e}async function it(t,e){const i=t.file(`${e}/markup.bcf`);if(!i)return null;const o=await i.async("string"),n=o.match(/<Topic\s+Guid="([^"]+)"[^>]*>([\s\S]*?)<\/Topic>/);if(!n)return console.warn(`Invalid markup.bcf in ${e}: missing Topic element`),null;const s=n[1],a=n[2],r=o.match(/<Topic[^>]*TopicType="([^"]+)"/),c=o.match(/<Topic[^>]*TopicStatus="([^"]+)"/),l=h(a,"Title")||"Untitled",p=h(a,"Description"),f=h(a,"Priority"),m=h(a,"Index"),u=h(a,"CreationDate")||new Date().toISOString(),g=h(a,"CreationAuthor")||"Unknown",d=h(a,"ModifiedDate"),x=h(a,"ModifiedAuthor"),w=h(a,"DueDate"),b=h(a,"AssignedTo"),v=h(a,"Stage"),T=[],q=a.matchAll(/<Labels>([^<]+)<\/Labels>/g);for(const A of q)T.push(A[1]);const H=ot(a),O=nt(a),I=[],W=a.matchAll(/<RelatedTopic\s+Guid="([^"]+)"/g);for(const A of W)I.push(A[1]);const J=st(o),K=await at(t,e,o);return{guid:s,title:l,description:p,topicType:r?.[1],topicStatus:c?.[1],priority:f,index:m?parseInt(m,10):void 0,creationDate:u,creationAuthor:g,modifiedDate:d,modifiedAuthor:x,dueDate:w,assignedTo:b,stage:v,labels:T.length>0?T:void 0,bimSnippet:H,documentReferences:O.length>0?O:void 0,relatedTopics:I.length>0?I:void 0,comments:J,viewpoints:K}}function h(t,e){return t.match(new RegExp(`<${e}>([^<]*)<\\/${e}>`))?.[1]}function ot(t){const e=t.match(/<BimSnippet\s+SnippetType="([^"]+)"[^>]*>([\s\S]*?)<\/BimSnippet>/);if(!e)return;const i=e[0].match(/isExternal="([^"]+)"/),o=h(e[2],"Reference"),n=h(e[2],"ReferenceSchema");return{snippetType:e[1],isExternal:i?.[1]==="true",reference:o||"",referenceSchema:n}}function nt(t){const e=[],i=t.matchAll(/<DocumentReference[^>]*>([\s\S]*?)<\/DocumentReference>/g);for(const o of i){const n=o[0].match(/Guid="([^"]+)"/),s=o[0].match(/isExternal="([^"]+)"/),a=h(o[1],"ReferencedDocument"),r=h(o[1],"Description");a&&e.push({guid:n?.[1],isExternal:s?.[1]==="true",referencedDocument:a,description:r})}return e}function st(t){const e=[],i=t.matchAll(/<Comment\s+Guid="([^"]+)"[^>]*>([\s\S]*?)<\/Comment>/g);for(const o of i){const n=o[1],s=o[2],a=h(s,"Date")||new Date().toISOString(),r=h(s,"Author")||"Unknown",c=h(s,"Comment")||"",l=h(s,"ModifiedDate"),p=h(s,"ModifiedAuthor"),f=s.match(/<Viewpoint\s+Guid="([^"]+)"/);e.push({guid:n,date:a,author:r,comment:c,viewpointGuid:f?.[1],modifiedDate:l,modifiedAuthor:p})}return e}async function at(t,e,i){const o=[],n=new Map,s=/<Viewpoint\s+Guid="([^"]+)"[^>]*>([\s\S]*?)<\/Viewpoint>/g;for(const c of i.matchAll(s)){const l=c[1],p=c[2],f=p.match(/<Viewpoint>([^<]+)<\/Viewpoint>/),m=p.match(/<Snapshot>([^<]+)<\/Snapshot>/);n.set(l,{viewpointFile:f?.[1],snapshotFile:m?.[1]})}const a=i.matchAll(/<Viewpoint\s+Guid="([^"]+)"[^>]*\/>/g);for(const c of a)n.has(c[1])||n.set(c[1],{});const r=[];t.forEach(c=>{c.startsWith(`${e}/`)&&c.endsWith(".bcfv")&&r.push(c)});for(const c of r)try{const l=t.file(c);if(!l)continue;const p=await l.async("string"),f=ct(p);if(f){const m=n.get(f.guid);let u=null,g="png";if(m?.snapshotFile){const d=`${e}/${m.snapshotFile}`;u=t.file(d),(m.snapshotFile.toLowerCase().endsWith(".jpg")||m.snapshotFile.toLowerCase().endsWith(".jpeg"))&&(g="jpeg")}if(!u){const d=c.replace(".bcfv",""),x=d.replace(/Viewpoint_/i,"Snapshot_"),w=d.replace(/_viewpoint$/i,"_snapshot"),b=[`${x}.png`,`${w}.png`,`${d}.png`,`${e}/snapshot.png`,`${x}.jpg`,`${w}.jpg`,`${d}.jpg`,`${e}/snapshot.jpg`];for(const v of b)if(u=t.file(v),u){(v.toLowerCase().endsWith(".jpg")||v.toLowerCase().endsWith(".jpeg"))&&(g="jpeg");break}}if(u){const d=await u.async("uint8array");f.snapshotData=d,f.snapshot=`data:image/${g};base64,${U(d)}`}o.push(f)}}catch(l){console.warn(`Failed to parse viewpoint ${c}:`,l)}if(o.length===0){const c=t.file(`${e}/snapshot.png`)||t.file(`${e}/snapshot.jpg`);if(c){const l=c.name.toLowerCase().endsWith(".jpg"),p=await c.async("uint8array");o.push({guid:e,snapshot:`data:image/${l?"jpeg":"png"};base64,${U(p)}`,snapshotData:p})}}return o}function ct(t){const i=t.match(/<VisualizationInfo[^>]+Guid="([^"]+)"/)?.[1]||crypto.randomUUID?.()||`vp-${Date.now()}`,o=rt(t),n=lt(t),s=pt(t),a=mt(t),r=dt(t),c=ht(t);return{guid:i,perspectiveCamera:o,orthogonalCamera:n,components:s,lines:a.length>0?a:void 0,clippingPlanes:r.length>0?r:void 0,bitmaps:c.length>0?c:void 0}}function rt(t){const e=t.match(/<PerspectiveCamera>([\s\S]*?)<\/PerspectiveCamera>/);if(!e)return;const i=e[1],o=V(i,"CameraViewPoint"),n=M(i,"CameraDirection"),s=M(i,"CameraUpVector"),a=h(i,"FieldOfView");if(!(!o||!n||!s||!a))return{cameraViewPoint:o,cameraDirection:n,cameraUpVector:s,fieldOfView:parseFloat(a)}}function lt(t){const e=t.match(/<OrthogonalCamera>([\s\S]*?)<\/OrthogonalCamera>/);if(!e)return;const i=e[1],o=V(i,"CameraViewPoint"),n=M(i,"CameraDirection"),s=M(i,"CameraUpVector"),a=h(i,"ViewToWorldScale");if(!(!o||!n||!s||!a))return{cameraViewPoint:o,cameraDirection:n,cameraUpVector:s,viewToWorldScale:parseFloat(a)}}function V(t,e){const i=t.match(new RegExp(`<${e}>([\\s\\S]*?)<\\/${e}>`));if(!i)return;const o=h(i[1],"X"),n=h(i[1],"Y"),s=h(i[1],"Z");if(!(o===void 0||n===void 0||s===void 0))return{x:parseFloat(o),y:parseFloat(n),z:parseFloat(s)}}function M(t,e){return V(t,e)}function pt(t){const e=t.match(/<Components>([\s\S]*?)<\/Components>/);if(!e)return;const i=e[1],o=B(i,"Selection"),n=ft(i),s=ut(i);if(!(!o&&!n&&!s))return{selection:o?.length?o:void 0,visibility:n,coloring:s?.length?s:void 0}}function B(t,e){const i=t.match(new RegExp(`<${e}>([\\s\\S]*?)<\\/${e}>`));if(!i)return;const o=[],n=i[1].matchAll(/<Component[^>]*(?:\/>|>[\s\S]*?<\/Component>)/g);for(const s of n){const a=_(s[0]);a&&o.push(a)}return o.length>0?o:void 0}function _(t){const e=t.match(/IfcGuid="([^"]+)"/),i=t.match(/AuthoringToolId="([^"]+)"/),o=t.match(/OriginatingSystem="([^"]+)"/);if(!(!e&&!i))return{ifcGuid:e?.[1],authoringToolId:i?.[1],originatingSystem:o?.[1]}}function ft(t){const e=t.match(/<Visibility[^>]*>([\s\S]*?)<\/Visibility>/);if(!e)return;const o=t.match(/DefaultVisibility="([^"]+)"/)?.[1]!=="false",n=B(e[1],"Exceptions");return{defaultVisibility:o,exceptions:n}}function ut(t){const e=t.match(/<Coloring>([\s\S]*?)<\/Coloring>/);if(!e)return;const i=[],o=e[1].matchAll(/<Color\s+Color="([^"]+)"[^>]*>([\s\S]*?)<\/Color>/g);for(const n of o){const s=n[1],a=[],r=n[2].matchAll(/<Component[^>]*(?:\/>|>[\s\S]*?<\/Component>)/g);for(const c of r){const l=_(c[0]);l&&a.push(l)}a.length>0&&i.push({color:s,components:a})}return i.length>0?i:void 0}function mt(t){const e=[],i=t.match(/<Lines>([\s\S]*?)<\/Lines>/);if(!i)return e;const o=i[1].matchAll(/<Line>([\s\S]*?)<\/Line>/g);for(const n of o){const s=V(n[1],"StartPoint"),a=V(n[1],"EndPoint");s&&a&&e.push({startPoint:s,endPoint:a})}return e}function dt(t){const e=[],i=t.match(/<ClippingPlanes>([\s\S]*?)<\/ClippingPlanes>/);if(!i)return e;const o=i[1].matchAll(/<ClippingPlane>([\s\S]*?)<\/ClippingPlane>/g);for(const n of o){const s=V(n[1],"Location"),a=M(n[1],"Direction");s&&a&&e.push({location:s,direction:a})}return e}function ht(t){const e=[],i=t.match(/<Bitmaps>([\s\S]*?)<\/Bitmaps>/);if(!i)return e;const o=i[1].matchAll(/<Bitmap>([\s\S]*?)<\/Bitmap>/g);for(const n of o){const s=h(n[1],"Format")||h(n[1],"Bitmap"),a=h(n[1],"Reference"),r=V(n[1],"Location"),c=M(n[1],"Normal"),l=M(n[1],"Up"),p=h(n[1],"Height");s&&a&&r&&c&&l&&p&&e.push({format:s.toUpperCase()==="JPG"?"JPG":"PNG",reference:a,location:r,normal:c,up:l,height:parseFloat(p)})}return e}function U(t){let e="";for(let i=0;i<t.length;i++)e+=String.fromCharCode(t[i]);return btoa(e)}async function ee(t){const e=new X;gt(e,t.version),(t.projectId||t.name)&&yt(e,t);for(const[i,o]of t.topics)await xt(e,o);return e.generateAsync({type:"blob",compression:"DEFLATE",compressionOptions:{level:6}})}function gt(t,e){const i=`<?xml version="1.0" encoding="UTF-8"?>
2
2
  <Version xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" VersionId="${e}">
3
3
  <DetailedVersion>${e}</DetailedVersion>
4
4
  </Version>`;t.file("bcf.version",i)}function yt(t,e){const i=e.projectId||C(),o=e.name?`
@@ -1 +1 @@
1
- import{i as r}from"./pako.esm-Cram60i4.js";import{B as o}from"./geotiff-y0ZxbRJd.js";import"./sandbox-DETNEyQb.js";import"./lens-PYsLu_MA.js";import"./__vite-browser-external-B1O5LaIO.js";class d extends o{decodeBlock(e){return r(new Uint8Array(e)).buffer}}export{d as default};
1
+ import{i as r}from"./pako.esm-Cram60i4.js";import{B as o}from"./geotiff-xZoE8BkO.js";import"./sandbox-DDSZ7rek.js";import"./lens-PYsLu_MA.js";import"./__vite-browser-external-B1O5LaIO.js";class d extends o{decodeBlock(e){return r(new Uint8Array(e)).buffer}}export{d as default};