Skip to content

Feature/2/migrate UI feature architecture - #4503

Merged
ChristianHuehn merged 12 commits into
mainfrom
feature/2/migrate-ui-feature-architecture
Jun 25, 2026
Merged

Feature/2/migrate UI feature architecture#4503
ChristianHuehn merged 12 commits into
mainfrom
feature/2/migrate-ui-feature-architecture

Conversation

@ChristianHuehn

Copy link
Copy Markdown
Collaborator

{Meaningful title}

Please read the CONTRIBUTING.md before opening a PR.

Closes: #

Description

Descriptive pull request text, answering:

  • What problem/issue are you fixing?
  • What does this PR implement and how?

Definition of Done

A PR is only ready for merge once all the following acceptance criteria are fulfilled:

  • Changes have been manually tested
  • All TODOs related to this PR have been closed
  • There are automated tests for newly written code and bug fixes
  • All bugs discovered while working on this PR have been submitted as issues (if not already an open issue)
  • Documentation (GH-pages, analysis/visualization READMEs, parser READMEs, --help, etc.) has been updated (almost always necessary except for bug fixes)
  • CHANGELOG.md has been updated

Screenshots or gifs

christian-huehn-mw and others added 10 commits June 24, 2026 12:00
…hared

Story #2, PR 1 of 5. Move the framework-agnostic leaf UI out of ui/ into
the feature-slice architecture:

- actionIcon, errorDialog (component+service+model+po),
  loadingFileProgressSpinner, resetSettingsButton
  -> features/shared/components/
- getPartialDefaultState(+spec) -> state/store/util/ (pure store helper)

Keep the slices dep-cruiser compliant:
- Replace direct @ngrx/store injection in loadingFileProgressSpinner and
  resetSettingsButton with shared stores/ + services/ (component -> service
  -> store), so only stores/ touch @ngrx/store.
- Convert actionIcon.component.scss to daisyUI/Tailwind host classes
  (cc-primary -> bg-primary, cc-emphasized -> hover:bg-secondary); drop the
  dead .disabled rule.
- Break the errorDialog component<->service cycle by extracting
  ErrorDialogData into errorDialog.model.ts and typing the service host via
  a local interface (features may not contain internal cycles).
- errorDialog.service lives under components/ so external (non-feature)
  callers can still import it through the slice's public surface.

Behavior unchanged. tsc, full Jest suite, and dep-cruiser (0 errors) pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Story #2, PR 2 of 5. Move ui/fileExtensionBar into the feature-slice
architecture (components/, services/, selectors/, stores/, facade.ts) and
expose the public component via features/fileExtensionBar/facade.

Keep the slice dep-cruiser compliant:
- Add stores/ (MetricDistributionStore, BlackListExtensionStore,
  DistributionMetricStore) so only stores/ touch @ngrx/store; the three
  services and the distributionMetric component now go component -> service
  -> store. BlackListExtensionStore wraps dispatchAfterPaint.
- Convert the 3 SCSS files (fileExtensionBar, distributionMetric,
  fileExtensionBarSegment) to daisyUI/Tailwind host + utility classes;
  keep cc-bar-section(-text) as semantic anchors and switch the segment
  spec to containment selectors.
- Extract the pure FileExtensionCalculator (+spec) out of the slice into
  util/fileExtension/. It is shared by codeMap's threeSceneService, so
  leaving it inside the feature created a codeMap -> fileExtensionBar
  -> facade -> component cycle. Moving it to util/ breaks that and
  pre-empts the same cycle once codeMap becomes a feature (PR 3).
- Repoint threeSceneService and codeCharta.component accordingly.

Behavior unchanged. tsc, full Jest suite (378 suites), and dep-cruiser
(0 errors) pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Story #2, PR 3 of 5. Move ui/codeMap into features/codeMap, expose its
public surface via a facade, and bring it into the feature architecture.

- Move the whole codeMap tree (component, render/tooltip/mouseEvent/arrow
  services, threeViewer/, rendering/) to features/codeMap; add facade.ts
  re-exporting the component + the render/tooltip/mouseEvent/three* services
  + CodeMapBuilding/CodeMapMesh/indicesPerNode/CodeMapPageObject. Repoint all
  66 external importers (incl. ui/viewCube) to the facade.
- Full ngrx stores refactor: add stores/ (codeMap, codeMapTooltip,
  codeMapArrow, codeMapMouseEvent, codeMapRender, threeScene) so only stores/
  touch @ngrx/store; the 6 service/component files now read/dispatch through
  purpose-specific store accessors. Move the two pure createSelector files
  (+ setEdgeVisibility helper) into selectors/.
- Convert codeMap.component.scss to Tailwind (Tailwind `hidden` + #codeMap
  utility classes; keep the id for querySelector).
- Downgrade feature-no-circular-dependencies-between-features to 'warn':
  making codeMap a feature surfaced pre-existing bidirectional couplings
  codeMap<->labelSettings and codeMap<->sidebarInspector (mouse/render events
  drive labels; labels draw into the scene). These need dependency inversion
  and are tracked as a follow-up; the rule is documented to be raised back to
  'error' once cleared.

Behavior unchanged. tsc, full Jest suite (378 suites), and dep-cruiser
(0 errors) pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Story #2, PR 4 of 5. Move ui/viewCube into features/viewCube (the last ui/
folder) and finish the feature-architecture migration of the UI.

- Move the cube component + meshGenerator/materials/mouseEvents service +
  zoomSlider into features/viewCube; add facade.ts exposing ViewCubeComponent
  and ViewCubeMouseEventsService. viewCube has no @ngrx/store usage, so no
  stores are needed. Repoint codeMap's three viewCube imports to the facade
  (codeMap <-> viewCube is a cross-feature cycle, allowed as a warning).
- Convert the 2 SCSS files to Tailwind: viewCube host (absolute/right/
  transition + [&.sideBarVisible]:right-[var(--cc-inspector-width)]) and the
  zoomSlider (vertical range input incl. ::-webkit/-moz thumb via arbitrary
  variants); tests key off data-testid, not classes. ui/ is now empty.

Fix a production-build regression introduced in PR 3: the codeMap facade
re-exported CodeMapPageObject from codeMap.po, which esbuild does not
tree-shake, pulling codeMap.po -> playwright.helper -> node "path" into the
browser bundle (ng build failed with `Could not resolve "path"`). Drop the
page-object re-export, import it directly in the one cross-feature e2e, and
exempt .e2e.ts/.po.ts from feature-cross-feature-only-via-public-api.

Behavior unchanged. tsc, full Jest suite (378 suites), dep-cruiser (0 errors)
and `ng build` (exit 0) pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Story #2, PR 5 of 5. The ui/ -> features/ migration is complete (the ui/
directory was emptied and removed across PRs 1-4), so tighten the guard rails:

- Broaden the dependency-cruiser SCSS rule from features/ to all of
  app/codeCharta/ (renamed no-component-scss-files): component SCSS is now
  forbidden app-wide; only the global app/app.scss + app/mixins.scss remain.
- Add a CHANGELOG Chore entry summarizing the migration.

Note: feature-no-circular-dependencies-between-features stays 'warn' (not
raised to 'error' as originally envisioned) because making codeMap a feature
surfaced real codeMap<->labelSettings and codeMap<->sidebarInspector cycles
that still need dependency inversion — tracked as a follow-up.

dep-cruiser (0 errors) and `ng build` (exit 0) pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…r codeMap/viewCube

Raise feature-no-circular-dependencies-between-features back to 'error'
instead of leaving it 'warn'. To keep the known rendering-cluster cycles
from blocking it:

- Scope the rule to cross-feature cycles only (add the same-feature `$1`
  exclusion the cross-feature-public-api rule uses); intra-feature cycles
  stay covered by the app-wide 'no-circular' warn. This stops dep-cruiser
  from reporting the cycles on intra-feature first-hop edges.
- Grandfather the codeMap/viewCube rendering pair via pathNot. Every current
  cross-feature cycle edge (codeMap<->viewCube, codeMap<->labelSettings,
  codeMap<->sidebarInspector, viewCube->viewCubeToolbox->codeMap) touches
  codeMap or viewCube, so the rest of the feature graph is now enforced as
  an error.

Verified the rule is live: injecting a legend<->metricsBar cycle errors,
and the clean tree reports 0 errors. Follow-up: break the cluster cycles
via dependency inversion and drop the exemption.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
idToBuilding maps node ids to CodeMapBuilding objects (a codeMap rendering
concept) and was a shared service in services/ that imported codeMap while
codeMap imported it back — a services->feature layering smell and one of the
grandfathered codeMap cycles.

- Move services/idToBuilding/idToBuilding.service.ts to
  features/codeMap/idToBuilding.service.ts and point its CodeMapBuilding
  import at the internal ./rendering/codeMapBuilding (no longer via facade).
- Repoint codeMap's internal consumers (arrow, mouseEvent, threeScene) to the
  intra-feature path; expose IdToBuildingService via the codeMap facade for
  the two external consumers (sidebarExplorer, nodeContextMenu).

The codeMap<->idToBuilding dependency is now intra-feature (covered by the
app-wide no-circular warn) instead of a cross-feature edge. Behavior
unchanged. tsc, full Jest suite (378 suites), and dep-cruiser (0 errors) pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The 3D-print export engine (3DPreview mesh models, geometry/color strategies,
generateXML, serialize3mf) lived in services/ but is consumed only by
features/3dPrint's export dialog. Move the whole services/3DExports tree to
features/3dPrint/3DExports so the print engine lives with its feature.

- It is largely self-contained; the only outward relative imports are
  codeCharta.model and codeMap's facade (indicesPerNode/CodeMapMesh) — bumped
  by one level for the deeper location. 3dPrint now depends one-way on codeMap
  via the facade (no new cycle).
- Repoint the export3DMapDialog consumer to the intra-feature path and fix the
  serialize3mf spec's __dirname fixture path (resources/minimalScene.json).

Behavior unchanged. tsc, full Jest suite (378 suites), dep-cruiser (0 errors)
and `ng build` (exit 0) pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ts to low layers

Structural prep (Tidy First) before turning the loaders into a feature:

- Extract CC_FILE_EXTENSION (".cc.json") from a static on LoadFileService into
  model/files/files.ts, so util/fileNameHelper and util/fileDownloader stop
  importing the service for a constant (removes a util->service inversion).
- Extract the MetricQueryParemter enum out of updateQueryParameters.effect into
  a sibling metricQueryParameter.ts; loadInitialFile.service imported the enum
  from the effect while the effect injects the service — extracting it breaks
  that cycle.
- Move the pure, ngrx-free helpers fileParser, fileRoot, and urlExtractor (+spec)
  from services/ into util/, where their util/state/feature consumers can use
  them without a layering inversion.

No behavior change. tsc, full Jest suite (378 suites), and dep-cruiser
(0 errors) pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…File slice

Move loadFile.service and loadInitialFile.service out of services/ into
features/loadFile (the services/ folder is now gone), behind a facade.

- Full ngrx stores refactor: only stores/ touch @ngrx/store. LoadFileStore
  wraps loadFile's few selects/dispatches; LoadInitialFileStore holds the
  ~53 dispatches that hydrate the whole store from a saved file/URL/IndexedDB
  (the apply*/map* settings logic moved in verbatim). The services keep the
  orchestration (flow, error dialogs, URL reading via UrlExtractor) and call
  store methods; loadInitialFile reads URL params and passes the values to
  LoadInitialFileStore.setMetricsFromUrlValues/setRenderState.
- facade.ts exposes LoadFileService, LoadInitialFileService, sampleFile1/2.
  Repoint navBar, globalSettings, codeCharta.component and the
  updateQueryParameters effect to the facade.

Behavior unchanged. tsc, full Jest suite (378 suites), dep-cruiser (0 errors)
and `ng build` (exit 0) pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 24, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 314 files, which is 164 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 49c0c6f6-0d2b-4997-8286-87e2a62c0631

📥 Commits

Reviewing files that changed from the base of the PR and between f95015d and 99a8db1.

⛔ Files ignored due to path filters (9)
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/CreateGeometryStrategies/__snapshots__/createBaseplateGeometryStrategy.spec.ts.snap is excluded by !**/*.snap
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/CreateGeometryStrategies/__snapshots__/createSvgGeometryStrategy.spec.ts.snap is excluded by !**/*.snap
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/CreateGeometryStrategies/__snapshots__/createTextGeometryStrategy.spec.ts.snap is excluded by !**/*.snap
  • visualization/app/codeCharta/features/codeMap/__snapshots__/codeMap.render.service.spec.ts.snap is excluded by !**/*.snap
  • visualization/app/codeCharta/features/codeMap/arrow/__snapshots__/codeMap.arrow.service.spec.ts.snap is excluded by !**/*.snap
  • visualization/app/codeCharta/features/codeMap/rendering/__snapshots__/rendering.spec.ts.snap is excluded by !**/*.snap
  • visualization/app/codeCharta/features/codeMap/rendering/shaders/glsl/codeMapFragmentShader.glsl is excluded by !**/*.glsl
  • visualization/app/codeCharta/features/codeMap/rendering/shaders/glsl/codeMapVertexShader.glsl is excluded by !**/*.glsl
  • visualization/app/codeCharta/features/codeMap/threeViewer/__snapshots__/threeMapControls.service.spec.ts.snap is excluded by !**/*.snap
📒 Files selected for processing (314)
  • visualization/.dependency-cruiser.js
  • visualization/CHANGELOG.md
  • visualization/app/codeCharta/codeCharta.component.spec.ts
  • visualization/app/codeCharta/codeCharta.component.ts
  • visualization/app/codeCharta/e2e/url.e2e.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/ColorChangeStrategies/backPrintColorChangeStrategy.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/ColorChangeStrategies/backPrintColorChangeStrategy.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/ColorChangeStrategies/baseplateColorChangeStrategy.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/ColorChangeStrategies/baseplateColorChangeStrategy.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/ColorChangeStrategies/colorChangeStrategy.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/ColorChangeStrategies/frontPrintColorChangeStrategy.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/ColorChangeStrategies/frontPrintColorChangeStrategy.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/ColorChangeStrategies/negativePrintColorChangeStrategy.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/ColorChangeStrategies/negativePrintColorChangeStrategy.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/ColorChangeStrategies/neutralPrintColorChangeStrategy.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/ColorChangeStrategies/neutralPrintColorChangeStrategy.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/ColorChangeStrategies/positivePrintColorChangeStrategy.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/ColorChangeStrategies/positivePrintColorChangeStrategy.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/CreateGeometryStrategies/createBaseplateGeometryStrategy.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/CreateGeometryStrategies/createBaseplateGeometryStrategy.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/CreateGeometryStrategies/createGeometryStrategy.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/CreateGeometryStrategies/createSvgGeometryStrategy.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/CreateGeometryStrategies/createSvgGeometryStrategy.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/CreateGeometryStrategies/createTextGeometryStrategy.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/CreateGeometryStrategies/createTextGeometryStrategy.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/BackMeshModels/backBelowLogoTextMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/BackMeshModels/backBelowLogoTextMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/BackMeshModels/backMWLogoMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/BackMeshModels/backMWLogoMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/BackMeshModels/backPrintContainerMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/BackMeshModels/backPrintContainerMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/BackMeshModels/codeChartaLogoMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/BackMeshModels/codeChartaLogoMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/BackMeshModels/codeChartaTextMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/BackMeshModels/codeChartaTextMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/BackMeshModels/colorMetricDescriptionBlockMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/BackMeshModels/colorMetricDescriptionBlockMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/BackMeshModels/metricDescriptionBlockMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/BackMeshModels/metricDescriptionBlockMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/BackMeshModels/metricDescriptionsContainerMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/BackMeshModels/metricDescriptionsContainerMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/BackMeshModels/qrCodeMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/BackMeshModels/qrCodeMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/FrontMeshModels/customLogoMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/FrontMeshModels/customLogoMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/FrontMeshModels/frontLogo.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/FrontMeshModels/frontLogo.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/FrontMeshModels/frontMWLogoMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/FrontMeshModels/frontMWLogoMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/FrontMeshModels/frontPrintContainerMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/FrontMeshModels/frontPrintContainerMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/FrontMeshModels/frontTextMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/FrontMeshModels/frontTextMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/FrontMeshModels/secondRowTextMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/FrontMeshModels/secondRowTextMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/baseplateMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/baseplateMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/customVisibilityMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/customVisibilityMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/generalMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/generalMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/mapMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/mapMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/textMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/MeshModels/textMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/preview3DPrintMesh.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/3DPreview/preview3DPrintMesh.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/generateXML/build3mfModel.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/generateXML/build3mfModel.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/generateXML/build3mfModelConfig.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/generateXML/build3mfModelConfig.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/generateXML/build3mfStatics.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/generateXML/build3mfStatics.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/serialize3mf.service.spec.ts
  • visualization/app/codeCharta/features/3dPrint/3DExports/serialize3mf.service.ts
  • visualization/app/codeCharta/features/3dPrint/components/export3DMapButton/export3DMapButton.component.spec.ts
  • visualization/app/codeCharta/features/3dPrint/components/export3DMapButton/export3DMapButton.component.ts
  • visualization/app/codeCharta/features/3dPrint/components/export3DMapDialog/export3DMapDialog.component.spec.ts
  • visualization/app/codeCharta/features/3dPrint/components/export3DMapDialog/export3DMapDialog.component.ts
  • visualization/app/codeCharta/features/changelog/components/changelogButton/changelogButton.component.ts
  • visualization/app/codeCharta/features/codeMap/arrow/codeMap.arrow.service.spec.ts
  • visualization/app/codeCharta/features/codeMap/arrow/codeMap.arrow.service.ts
  • visualization/app/codeCharta/features/codeMap/codeMap.component.html
  • visualization/app/codeCharta/features/codeMap/codeMap.component.spec.ts
  • visualization/app/codeCharta/features/codeMap/codeMap.component.ts
  • visualization/app/codeCharta/features/codeMap/codeMap.mouseEvent.service.spec.ts
  • visualization/app/codeCharta/features/codeMap/codeMap.mouseEvent.service.ts
  • visualization/app/codeCharta/features/codeMap/codeMap.po.ts
  • visualization/app/codeCharta/features/codeMap/codeMap.render.service.spec.ts
  • visualization/app/codeCharta/features/codeMap/codeMap.render.service.ts
  • visualization/app/codeCharta/features/codeMap/codeMap.tooltip.service.spec.ts
  • visualization/app/codeCharta/features/codeMap/codeMap.tooltip.service.ts
  • visualization/app/codeCharta/features/codeMap/facade.ts
  • visualization/app/codeCharta/features/codeMap/idToBuilding.service.ts
  • visualization/app/codeCharta/features/codeMap/rendering/codeMapBuilding.spec.ts
  • visualization/app/codeCharta/features/codeMap/rendering/codeMapBuilding.ts
  • visualization/app/codeCharta/features/codeMap/rendering/codeMapGeometricDescription.spec.ts
  • visualization/app/codeCharta/features/codeMap/rendering/codeMapGeometricDescription.ts
  • visualization/app/codeCharta/features/codeMap/rendering/codeMapMesh.spec.ts
  • visualization/app/codeCharta/features/codeMap/rendering/codeMapMesh.ts
  • visualization/app/codeCharta/features/codeMap/rendering/geometryGenerationHelper.ts
  • visualization/app/codeCharta/features/codeMap/rendering/geometryGenerator.spec.ts
  • visualization/app/codeCharta/features/codeMap/rendering/geometryGenerator.ts
  • visualization/app/codeCharta/features/codeMap/rendering/rendering.spec.ts
  • visualization/app/codeCharta/features/codeMap/rendering/shaders/loaders/codeMapShaderStrings.ts
  • visualization/app/codeCharta/features/codeMap/selectTopNByValue.spec.ts
  • visualization/app/codeCharta/features/codeMap/selectTopNByValue.ts
  • visualization/app/codeCharta/features/codeMap/selectors/edgePreviewNodes.selector.spec.ts
  • visualization/app/codeCharta/features/codeMap/selectors/edgePreviewNodes.selector.ts
  • visualization/app/codeCharta/features/codeMap/selectors/edgeVisibility.selector.ts
  • visualization/app/codeCharta/features/codeMap/selectors/setEdgeVisibility.spec.ts
  • visualization/app/codeCharta/features/codeMap/selectors/setEdgeVisibility.ts
  • visualization/app/codeCharta/features/codeMap/stores/codeMap.store.ts
  • visualization/app/codeCharta/features/codeMap/stores/codeMapArrow.store.ts
  • visualization/app/codeCharta/features/codeMap/stores/codeMapMouseEvent.store.ts
  • visualization/app/codeCharta/features/codeMap/stores/codeMapRender.store.ts
  • visualization/app/codeCharta/features/codeMap/stores/codeMapTooltip.store.ts
  • visualization/app/codeCharta/features/codeMap/stores/threeScene.store.ts
  • visualization/app/codeCharta/features/codeMap/threeViewer/floorLabels/floorLabelDrawer.spec.ts
  • visualization/app/codeCharta/features/codeMap/threeViewer/floorLabels/floorLabelDrawer.ts
  • visualization/app/codeCharta/features/codeMap/threeViewer/floorLabels/floorLabelHelper.spec.ts
  • visualization/app/codeCharta/features/codeMap/threeViewer/floorLabels/floorLabelHelper.ts
  • visualization/app/codeCharta/features/codeMap/threeViewer/threeCamera.service.spec.ts
  • visualization/app/codeCharta/features/codeMap/threeViewer/threeCamera.service.ts
  • visualization/app/codeCharta/features/codeMap/threeViewer/threeMapControls.service.spec.ts
  • visualization/app/codeCharta/features/codeMap/threeViewer/threeMapControls.service.ts
  • visualization/app/codeCharta/features/codeMap/threeViewer/threeRenderer.service.spec.ts
  • visualization/app/codeCharta/features/codeMap/threeViewer/threeRenderer.service.ts
  • visualization/app/codeCharta/features/codeMap/threeViewer/threeSceneService.spec.ts
  • visualization/app/codeCharta/features/codeMap/threeViewer/threeSceneService.ts
  • visualization/app/codeCharta/features/codeMap/threeViewer/threeStats.service.spec.ts
  • visualization/app/codeCharta/features/codeMap/threeViewer/threeStats.service.ts
  • visualization/app/codeCharta/features/codeMap/threeViewer/threeViewer.service.spec.ts
  • visualization/app/codeCharta/features/codeMap/threeViewer/threeViewer.service.ts
  • visualization/app/codeCharta/features/fileExtensionBar/components/distributionMetric/distributionMetric.component.html
  • visualization/app/codeCharta/features/fileExtensionBar/components/distributionMetric/distributionMetric.component.ts
  • visualization/app/codeCharta/features/fileExtensionBar/components/fileExtensionBar/fileExtensionBar.component.html
  • visualization/app/codeCharta/features/fileExtensionBar/components/fileExtensionBar/fileExtensionBar.component.spec.ts
  • visualization/app/codeCharta/features/fileExtensionBar/components/fileExtensionBar/fileExtensionBar.component.ts
  • visualization/app/codeCharta/features/fileExtensionBar/components/fileExtensionBarSegment/fileExtensionBarSegment.component.html
  • visualization/app/codeCharta/features/fileExtensionBar/components/fileExtensionBarSegment/fileExtensionBarSegment.component.spec.ts
  • visualization/app/codeCharta/features/fileExtensionBar/components/fileExtensionBarSegment/fileExtensionBarSegment.component.ts
  • visualization/app/codeCharta/features/fileExtensionBar/facade.ts
  • visualization/app/codeCharta/features/fileExtensionBar/selectors/hoveredNodeMetricDistribution.selector.spec.ts
  • visualization/app/codeCharta/features/fileExtensionBar/selectors/hoveredNodeMetricDistribution.selector.ts
  • visualization/app/codeCharta/features/fileExtensionBar/selectors/metricDistribution.selector.ts
  • visualization/app/codeCharta/features/fileExtensionBar/services/blackListExtension.service.spec.ts
  • visualization/app/codeCharta/features/fileExtensionBar/services/blackListExtension.service.ts
  • visualization/app/codeCharta/features/fileExtensionBar/services/distributionMetric.service.ts
  • visualization/app/codeCharta/features/fileExtensionBar/services/highlightBuildingsByFileExtension.service.spec.ts
  • visualization/app/codeCharta/features/fileExtensionBar/services/highlightBuildingsByFileExtension.service.ts
  • visualization/app/codeCharta/features/fileExtensionBar/services/metricDistribution.service.spec.ts
  • visualization/app/codeCharta/features/fileExtensionBar/services/metricDistribution.service.ts
  • visualization/app/codeCharta/features/fileExtensionBar/stores/blackListExtension.store.ts
  • visualization/app/codeCharta/features/fileExtensionBar/stores/distributionMetric.store.ts
  • visualization/app/codeCharta/features/fileExtensionBar/stores/metricDistribution.store.ts
  • visualization/app/codeCharta/features/globalSettings/components/globalConfigurationButton/globalConfigurationButton.component.spec.ts
  • visualization/app/codeCharta/features/globalSettings/components/globalConfigurationButton/globalConfigurationButton.component.ts
  • visualization/app/codeCharta/features/globalSettings/components/globalConfigurationDialog/confirmResetMapDialog/confirmResetMapDialog.component.ts
  • visualization/app/codeCharta/features/globalSettings/components/globalConfigurationDialog/confirmResetMapDialog/confirmResetMapDialog.spec.ts
  • visualization/app/codeCharta/features/globalSettings/components/globalConfigurationDialog/globalConfigurationDialog.component.spec.ts
  • visualization/app/codeCharta/features/globalSettings/components/globalConfigurationDialog/resetMapButton/resetMapButton.component.spec.ts
  • visualization/app/codeCharta/features/globalSettings/stores/resetSettings.store.spec.ts
  • visualization/app/codeCharta/features/globalSettings/stores/resetSettings.store.ts
  • visualization/app/codeCharta/features/labelSettings/components/labelSettingsPanel/labelSettingsPanel.component.spec.ts
  • visualization/app/codeCharta/features/labelSettings/components/labelSettingsPanel/labelSettingsPanel.component.ts
  • visualization/app/codeCharta/features/labelSettings/services/connectorDrawing.service.spec.ts
  • visualization/app/codeCharta/features/labelSettings/services/connectorDrawing.service.ts
  • visualization/app/codeCharta/features/labelSettings/services/labelCollision.service.spec.ts
  • visualization/app/codeCharta/features/labelSettings/services/labelCollision.service.ts
  • visualization/app/codeCharta/features/labelSettings/services/labelCreation.service.spec.ts
  • visualization/app/codeCharta/features/labelSettings/services/labelCreation.service.ts
  • visualization/app/codeCharta/features/labelSettings/stores/stateAccess.store.ts
  • visualization/app/codeCharta/features/loadFile/facade.ts
  • visualization/app/codeCharta/features/loadFile/services/loadFile.service.spec.ts
  • visualization/app/codeCharta/features/loadFile/services/loadFile.service.ts
  • visualization/app/codeCharta/features/loadFile/services/loadFilesValidationToErrorDialog.spec.ts
  • visualization/app/codeCharta/features/loadFile/services/loadFilesValidationToErrorDialog.ts
  • visualization/app/codeCharta/features/loadFile/services/loadInitialFile.service.spec.ts
  • visualization/app/codeCharta/features/loadFile/services/loadInitialFile.service.ts
  • visualization/app/codeCharta/features/loadFile/stores/loadFile.store.ts
  • visualization/app/codeCharta/features/loadFile/stores/loadInitialFile.store.ts
  • visualization/app/codeCharta/features/metricsBar/components/areaSegment/areaSegment.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/components/areaSettingsPopover/areaSettingsPopover.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/components/areaSettingsPopover/areaSettingsPopover.component.ts
  • visualization/app/codeCharta/features/metricsBar/components/colorSegment/colorSegment.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/components/colorSettingsPopover/colorBandsSection.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/components/colorSettingsPopover/colorBandsSection.component.ts
  • visualization/app/codeCharta/features/metricsBar/components/colorSettingsPopover/colorSettingsPopover.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/components/colorSettingsPopover/invertResetRow.component.ts
  • visualization/app/codeCharta/features/metricsBar/components/colorSettingsPopover/metricColorRangeDiagram.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/components/edgeSegment/edgeSegment.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/components/edgeSettingsPopover/edgeMetricToggle.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/components/edgeSettingsPopover/edgeSettingsPopover.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/components/edgeSettingsPopover/edgeSettingsPopover.component.ts
  • visualization/app/codeCharta/features/metricsBar/components/heightSegment/heightSegment.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/components/heightSettingsPopover/heightSettingsPopover.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/components/heightSettingsPopover/heightSettingsPopover.component.ts
  • visualization/app/codeCharta/features/metricsBar/components/labelsScenariosSegment/labelsScenariosSegment.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/components/linkColorHeightButton/linkColorHeightButton.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/components/metricMetaValue/metricChooserType.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/components/metricMetaValue/metricMetaValue.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/components/metricSegment/metricSegment.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/components/metricSelectPopover/metricSelectPopover.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/components/metricsBar/metricsBar.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/services/nodeSelection.service.spec.ts
  • visualization/app/codeCharta/features/metricsBar/services/nodeSelection.service.ts
  • visualization/app/codeCharta/features/navBar/components/deltaSelector/deltaSelector.component.ts
  • visualization/app/codeCharta/features/navBar/components/mapSelector/mapSelector.component.ts
  • visualization/app/codeCharta/features/navBar/components/navBarFolderButton/navBarFolderButton.e2e.ts
  • visualization/app/codeCharta/features/navBar/components/print3DButton/print3DButton.component.ts
  • visualization/app/codeCharta/features/navBar/components/settingsButton/settingsButton.component.spec.ts
  • visualization/app/codeCharta/features/navBar/removeExtension.pipe.spec.ts
  • visualization/app/codeCharta/features/navBar/removeExtension.pipe.ts
  • visualization/app/codeCharta/features/navBar/services/createCCFileInput.spec.ts
  • visualization/app/codeCharta/features/navBar/services/createCCFileInput.ts
  • visualization/app/codeCharta/features/navBar/services/readFiles.spec.ts
  • visualization/app/codeCharta/features/navBar/services/readFiles.ts
  • visualization/app/codeCharta/features/navBar/services/uploadFiles.service.spec.ts
  • visualization/app/codeCharta/features/navBar/services/uploadFiles.service.ts
  • visualization/app/codeCharta/features/nodeContextMenu/components/nodeContextMenu/nodeContextMenu.component.spec.ts
  • visualization/app/codeCharta/features/nodeContextMenu/components/nodeContextMenu/nodeContextMenu.component.ts
  • visualization/app/codeCharta/features/nodeContextMenu/components/nodeContextMenu/nodeContextMenu.e2e.ts
  • visualization/app/codeCharta/features/scenarios/services/scenarioApplier.service.spec.ts
  • visualization/app/codeCharta/features/scenarios/services/scenarioApplier.service.ts
  • visualization/app/codeCharta/features/scenarios/services/scenarioImportExport.service.spec.ts
  • visualization/app/codeCharta/features/scenarios/services/scenarios.service.spec.ts
  • visualization/app/codeCharta/features/scenarios/services/scenarios.service.ts
  • visualization/app/codeCharta/features/shared/components/actionIcon/actionIcon.component.html
  • visualization/app/codeCharta/features/shared/components/actionIcon/actionIcon.component.ts
  • visualization/app/codeCharta/features/shared/components/errorDialog/errorDialog.component.html
  • visualization/app/codeCharta/features/shared/components/errorDialog/errorDialog.component.po.ts
  • visualization/app/codeCharta/features/shared/components/errorDialog/errorDialog.component.ts
  • visualization/app/codeCharta/features/shared/components/errorDialog/errorDialog.model.ts
  • visualization/app/codeCharta/features/shared/components/errorDialog/errorDialog.service.ts
  • visualization/app/codeCharta/features/shared/components/loadingFileProgressSpinner/loadingFileProgressSpinner.component.html
  • visualization/app/codeCharta/features/shared/components/loadingFileProgressSpinner/loadingFileProgressSpinner.component.ts
  • visualization/app/codeCharta/features/shared/components/resetSettingsButton/resetSettingsButton.component.html
  • visualization/app/codeCharta/features/shared/components/resetSettingsButton/resetSettingsButton.component.spec.ts
  • visualization/app/codeCharta/features/shared/components/resetSettingsButton/resetSettingsButton.component.ts
  • visualization/app/codeCharta/features/shared/services/loadingFileProgressSpinner.service.ts
  • visualization/app/codeCharta/features/shared/services/resetSettingsButton.service.ts
  • visualization/app/codeCharta/features/shared/stores/isLoadingFile.store.ts
  • visualization/app/codeCharta/features/shared/stores/resetSettingsButton.store.ts
  • visualization/app/codeCharta/features/sidebarExplorer/components/explorerCountChip/explorerCountChip.component.ts
  • visualization/app/codeCharta/features/sidebarExplorer/components/explorerTree/explorerTree.component.spec.ts
  • visualization/app/codeCharta/features/sidebarExplorer/components/explorerTreeLevel/explorerTreeLevel.component.spec.ts
  • visualization/app/codeCharta/features/sidebarExplorer/components/explorerTreeLevel/explorerTreeLevel.component.ts
  • visualization/app/codeCharta/features/sidebarExplorer/components/sidebarExplorer/sidebarExplorer.component.spec.ts
  • visualization/app/codeCharta/features/sidebarExplorer/formatCompactNumber.spec.ts
  • visualization/app/codeCharta/features/sidebarExplorer/formatCompactNumber.ts
  • visualization/app/codeCharta/features/sidebarInspector/components/inspectorHeader/inspectorHeader.component.spec.ts
  • visualization/app/codeCharta/features/sidebarInspector/components/sidebarInspector/sidebarInspector.component.spec.ts
  • visualization/app/codeCharta/features/sidebarInspector/services/inspectorVisibility.service.spec.ts
  • visualization/app/codeCharta/features/sidebarInspector/services/inspectorVisibility.service.ts
  • visualization/app/codeCharta/features/viewCube/facade.ts
  • visualization/app/codeCharta/features/viewCube/viewCube.component.html
  • visualization/app/codeCharta/features/viewCube/viewCube.component.spec.ts
  • visualization/app/codeCharta/features/viewCube/viewCube.component.ts
  • visualization/app/codeCharta/features/viewCube/viewCube.materials.ts
  • visualization/app/codeCharta/features/viewCube/viewCube.meshGenerator.spec.ts
  • visualization/app/codeCharta/features/viewCube/viewCube.meshGenerator.ts
  • visualization/app/codeCharta/features/viewCube/viewCube.mouseEvents.service.spec.ts
  • visualization/app/codeCharta/features/viewCube/viewCube.mouseEvents.service.ts
  • visualization/app/codeCharta/features/viewCube/zoomSlider/zoomSlider.component.html
  • visualization/app/codeCharta/features/viewCube/zoomSlider/zoomSlider.component.spec.ts
  • visualization/app/codeCharta/features/viewCube/zoomSlider/zoomSlider.component.ts
  • visualization/app/codeCharta/features/viewCubeToolbox/components/centerMapButton/centerMapButton.component.spec.ts
  • visualization/app/codeCharta/features/viewCubeToolbox/components/centerMapButton/centerMapButton.component.ts
  • visualization/app/codeCharta/features/viewCubeToolbox/components/viewCubeToolbox/viewCubeToolbox.component.spec.ts
  • visualization/app/codeCharta/features/viewCubeToolbox/services/clipboardWriter.spec.ts
  • visualization/app/codeCharta/features/viewCubeToolbox/services/clipboardWriter.ts
  • visualization/app/codeCharta/features/viewCubeToolbox/services/screenshot.service.spec.ts
  • visualization/app/codeCharta/features/viewCubeToolbox/services/screenshot.service.ts
  • visualization/app/codeCharta/model/files/files.ts
  • visualization/app/codeCharta/services/loadInitialFile/loadInitialFile.service.ts
  • visualization/app/codeCharta/state/effects/addBlacklistItemsIfNotResultsInEmptyMap/addBlacklistItemsIfNotResultsInEmptyMap.effect.spec.ts
  • visualization/app/codeCharta/state/effects/addBlacklistItemsIfNotResultsInEmptyMap/addBlacklistItemsIfNotResultsInEmptyMap.effect.ts
  • visualization/app/codeCharta/state/effects/autoFitCodeMapChange/autoFitCodeMap.effect.spec.ts
  • visualization/app/codeCharta/state/effects/autoFitCodeMapChange/autoFitCodeMap.effect.ts
  • visualization/app/codeCharta/state/effects/renderCodeMapEffect/renderCodeMap.effect.spec.ts
  • visualization/app/codeCharta/state/effects/renderCodeMapEffect/renderCodeMap.effect.ts
  • visualization/app/codeCharta/state/effects/updateQueryParameters/metricQueryParameter.ts
  • visualization/app/codeCharta/state/effects/updateQueryParameters/updateQueryParameters.effect.ts
  • visualization/app/codeCharta/state/effects/updateQueryParameters/updateQueryParameters.spec.ts
  • visualization/app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.reducer.ts
  • visualization/app/codeCharta/state/store/util/getPartialDefaultState.spec.ts
  • visualization/app/codeCharta/state/store/util/getPartialDefaultState.ts
  • visualization/app/codeCharta/ui/actionIcon/actionIcon.component.html
  • visualization/app/codeCharta/ui/actionIcon/actionIcon.component.scss
  • visualization/app/codeCharta/ui/codeMap/codeMap.component.html
  • visualization/app/codeCharta/ui/codeMap/codeMap.component.scss
  • visualization/app/codeCharta/ui/fileExtensionBar/distributionMetric/distributionMetric.component.scss
  • visualization/app/codeCharta/ui/fileExtensionBar/distributionMetric/distributionMetric.component.ts
  • visualization/app/codeCharta/ui/fileExtensionBar/fileExtensionBar.component.scss
  • visualization/app/codeCharta/ui/fileExtensionBar/fileExtensionBarSegment/fileExtensionBarSegment.component.scss
  • visualization/app/codeCharta/ui/fileExtensionBar/metricDistribution.service.ts
  • visualization/app/codeCharta/ui/loadingFileProgressSpinner/loadingFileProgressSpinner.component.ts
  • visualization/app/codeCharta/ui/viewCube/viewCube.component.scss
  • visualization/app/codeCharta/ui/viewCube/zoomSlider/zoomSlider.component.html
  • visualization/app/codeCharta/ui/viewCube/zoomSlider/zoomSlider.component.scss
  • visualization/app/codeCharta/util/aggregationGenerator.ts
  • visualization/app/codeCharta/util/algorithm/treeMapLayout/treeMapHelper.ts
  • visualization/app/codeCharta/util/dataMocks.ts
  • visualization/app/codeCharta/util/deltaGenerator.ts
  • visualization/app/codeCharta/util/fileDownloader.ts
  • visualization/app/codeCharta/util/fileExtension/fileExtensionCalculator.spec.ts
  • visualization/app/codeCharta/util/fileExtension/fileExtensionCalculator.ts
  • visualization/app/codeCharta/util/fileNameHelper.ts
  • visualization/app/codeCharta/util/fileParser.ts
  • visualization/app/codeCharta/util/fileRoot.ts
  • visualization/app/codeCharta/util/nodePathHelper.ts
  • visualization/app/codeCharta/util/urlExtractor.spec.ts
  • visualization/app/codeCharta/util/urlExtractor.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/2/migrate-ui-feature-architecture

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

christian-huehn-mw and others added 2 commits June 24, 2026 16:20
…gration

Address the 32 new code smells flagged on the PR:

- S3863 (x27): merge the duplicate same-module imports left by repointing
  several symbols to one feature facade (Biome's organizeImports is off, so it
  didn't merge them). 11 files across codeMap/viewCube/loadFile facade users.
- S7735 (x3): invert the negated `if (!(key in saved)) ... else` conditions in
  LoadInitialFileStore.apply{File,Dynamic,App}Settings (branch swap, equivalent).
- S2933 (x2): mark ThreeSceneService#subscription and #threeSceneStore readonly.

No behavior change. tsc, full Jest suite (378 suites), and dep-cruiser
(0 errors) pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ices

Move utils that are used exclusively by a single feature out of util/ and
co-locate them next to their consumer, following the feature-slice
architecture (features have no util/ folder):

- selectTopNByValue -> features/codeMap/
- formatCompactNumber -> features/sidebarExplorer/
- clipboardWriter -> features/viewCubeToolbox/services/
- loadFilesValidationToErrorDialog -> features/loadFile/services/
- uploadFiles/{createCCFileInput,readFiles} -> features/navBar/services/
- pipes/removeExtension.pipe -> features/navBar/

Also relocate the misplaced loadFilesValidationToErrorDialog.spec.ts (it
sat under util/uploadFiles/) next to its source, and fix the clipboardWriter
spec filename casing. Shared utils (algorithm/, codeMapHelper, color/,
blacklist/, ...) remain in util/.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@sonarqubecloud

Copy link
Copy Markdown

@ChristianHuehn
ChristianHuehn merged commit 066912e into main Jun 25, 2026
8 checks passed
@ChristianHuehn
ChristianHuehn deleted the feature/2/migrate-ui-feature-architecture branch June 25, 2026 06:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants