## ADDED Requirements ### Requirement: Render a circular dynamic particle chart The system SHALL provide a `circularParticleChartComponent` dynamic component that renders a hollow-center circular particle chart through the existing Tres/three canvas pipeline and lies on the `XZ` plane by default. #### Scenario: Default chart render - **WHEN** the component is rendered with default props - **THEN** it SHALL display a visible horizontal circular particle field with a hollow center, a reference-style scan surface, a double-line border, and center text - **AND** it SHALL render through three.js objects and shaders rather than DOM or CSS animation - **AND** it SHALL avoid adding a separate hard radial radar line over the scan surface ### Requirement: Support requested particle and scan controls The component MUST expose particle size, particle color, and scan speed controls, and scan speed MUST accept values from `-1` to `1`. #### Scenario: Positive and negative scan speed - **WHEN** scan speed is positive or negative - **THEN** the scanning motion SHALL rotate in opposite directions while keeping the particle field autonomous #### Scenario: Zero scan speed - **WHEN** scan speed is `0` - **THEN** the scan position SHALL remain visible but stop advancing over time #### Scenario: Particle settings update - **WHEN** particle size or particle color changes - **THEN** visible particle size and color SHALL update without requiring a remount ### Requirement: Support configurable center text The component MUST expose title text, title size, unit text, unit size, and text color controls, and the text MUST render on planes parallel to the scan plane rather than camera-facing billboards. #### Scenario: Text settings update - **WHEN** title, unit, size, or text color values change - **THEN** the center labels SHALL update in the scene and remain independent from scene lighting #### Scenario: Text plane orientation - **WHEN** the camera moves around the scene - **THEN** the title and unit planes SHALL remain parallel to the circular scan surface instead of always facing the camera ### Requirement: Support double-line border width and color The component MUST render a double circular border and expose a `line2` control that changes the visible border line thickness plus a `lineColor` control that changes only the border color. #### Scenario: Adjust line2 - **WHEN** `line2` changes - **THEN** the double circular border SHALL update its thickness while remaining aligned with the circular scan surface #### Scenario: Adjust lineColor - **WHEN** `lineColor` changes - **THEN** the double circular border SHALL update color independently from particle color ### Requirement: Keep shader source scoped and service registration complete Shader source code MUST be stored under `src/shader/circularParticleChartComponent/`, and the component MUST be available through `src/dcsConfig.ts` with usable defaults and config-panel controls. #### Scenario: Component registry loads the chart - **WHEN** the dynamic component service reads `src/dcsConfig.ts` - **THEN** `circularParticleChartComponent` SHALL be available with defaults, default transform, preview metadata, and the requested controls including `line2` and `lineColor` #### Scenario: Shader files are externalized - **WHEN** the component creates its particle material - **THEN** it SHALL import vertex and fragment shader source from component-scoped shader files