├── .editorconfig ├── .gitattributes ├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ ├── bug_report.yaml │ ├── development_task.yaml │ ├── feature_request.yaml │ └── question.yaml ├── codecov.yml ├── dependabot.yml ├── labeler.yml ├── scripts │ ├── bake-metadata.py │ └── check-commit-titles.sh └── workflows │ ├── build.yml │ ├── chart-build.yml │ ├── chart-publish.yml │ ├── interface-change.yml │ ├── osrd-ui-publish.yml │ ├── osrd-ui-website.yml │ ├── pr.yml │ ├── release.yml │ ├── ui-icons-optimize.yml │ └── update_nix_flake.yml ├── .gitignore ├── .taplo.toml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── GOVERNANCE.md ├── LICENSES ├── GPL-3.0-only.txt └── LGPL-3.0-only.txt ├── MAINTAINERS.md ├── README.md ├── REUSE.toml ├── SECURITY.md ├── assets ├── PMPC_badge.svg ├── branding │ ├── osrd_small.svg │ └── osrd_small_dark.svg ├── sponsors │ ├── european-union.svg │ ├── france-dot.svg │ └── sncf-reseau.svg └── static_resources │ └── speed_limit_tags.yml ├── chart ├── .helmignore ├── Chart.yaml ├── README.md ├── templates │ ├── _helpers.tpl │ ├── editoast │ │ ├── autoscaler.yaml │ │ ├── deployment.yaml │ │ ├── init_script.yaml │ │ ├── migration_job.yaml │ │ └── service.yaml │ ├── gateway │ │ ├── configmap.yaml │ │ ├── deployment.yaml │ │ ├── ingress.yaml │ │ └── service.yaml │ ├── images │ │ ├── deployment.yaml │ │ └── service.yaml │ ├── openfga │ │ ├── deployment.yaml │ │ └── service.yaml │ ├── osrdyne │ │ ├── configmap.yaml │ │ ├── deployment.yaml │ │ ├── rbac.yaml │ │ └── service.yaml │ └── stateful_editoast │ │ ├── deployment.yaml │ │ └── service.yaml └── values.yaml ├── core ├── .dockerignore ├── .gitignore ├── Dockerfile ├── README.md ├── build.gradle ├── config │ └── spotbugs │ │ ├── exclude-railjson.xml │ │ └── exclude.xml ├── envelope-sim │ ├── build.gradle │ └── src │ │ ├── main │ │ ├── java │ │ │ └── fr │ │ │ │ └── sncf │ │ │ │ └── osrd │ │ │ │ ├── envelope │ │ │ │ ├── Envelope.kt │ │ │ │ ├── EnvelopeBuilder.java │ │ │ │ ├── EnvelopeConcat.java │ │ │ │ ├── EnvelopeCursor.java │ │ │ │ ├── EnvelopeDebug.java │ │ │ │ ├── EnvelopeInterpolate.kt │ │ │ │ ├── EnvelopePhysics.java │ │ │ │ ├── EnvelopePoint.java │ │ │ │ ├── EnvelopeSpeedCap.java │ │ │ │ ├── EnvelopeSpeedInterpolate.java │ │ │ │ ├── EnvelopeTimeInterpolate.java │ │ │ │ ├── MRSPEnvelopeBuilder.java │ │ │ │ ├── OverlayEnvelopeBuilder.java │ │ │ │ ├── SearchableEnvelope.java │ │ │ │ ├── package-info.java │ │ │ │ └── part │ │ │ │ │ ├── ConstrainedEnvelopePartBuilder.java │ │ │ │ │ ├── EnvelopePart.kt │ │ │ │ │ ├── EnvelopePartBuilder.java │ │ │ │ │ ├── EnvelopePartConsumer.java │ │ │ │ │ ├── InteractiveEnvelopePartConsumer.java │ │ │ │ │ └── constraints │ │ │ │ │ ├── EnvelopeConstraint.java │ │ │ │ │ ├── EnvelopePartConstraint.java │ │ │ │ │ ├── EnvelopePartConstraintType.java │ │ │ │ │ ├── PositionConstraint.java │ │ │ │ │ └── SpeedConstraint.java │ │ │ │ ├── envelope_sim │ │ │ │ ├── Action.java │ │ │ │ ├── EnvelopeProfile.java │ │ │ │ ├── EnvelopeSimPath.java │ │ │ │ ├── IntegrationStep.java │ │ │ │ ├── PhysicsPath.java │ │ │ │ ├── PhysicsRollingStock.java │ │ │ │ ├── TrainPhysicsIntegrator.java │ │ │ │ ├── electrification │ │ │ │ │ ├── Electrification.java │ │ │ │ │ ├── Electrified.java │ │ │ │ │ ├── Neutral.java │ │ │ │ │ └── NonElectrified.java │ │ │ │ ├── overlays │ │ │ │ │ ├── EnvelopeAcceleration.java │ │ │ │ │ ├── EnvelopeCoasting.java │ │ │ │ │ ├── EnvelopeDeceleration.java │ │ │ │ │ └── EnvelopeMaintain.java │ │ │ │ └── package-info.java │ │ │ │ └── envelope_utils │ │ │ │ ├── CmpOperator.java │ │ │ │ ├── DistanceAverage.java │ │ │ │ ├── DoubleBinarySearch.java │ │ │ │ ├── DoubleUtils.java │ │ │ │ ├── ExcludeFromGeneratedCodeCoverage.java │ │ │ │ ├── RangeMapUtils.java │ │ │ │ └── SwingUtils.java │ │ └── kotlin │ │ │ └── fr │ │ │ └── sncf │ │ │ └── osrd │ │ │ ├── DriverBehaviour.kt │ │ │ └── envelope_sim │ │ │ ├── EnvelopeSimContext.kt │ │ │ ├── allowances │ │ │ ├── AbstractAllowanceWithRanges.kt │ │ │ ├── Allowance.kt │ │ │ ├── LinearAllowance.kt │ │ │ ├── MarecoAllowance.kt │ │ │ └── mareco_impl │ │ │ │ ├── AcceleratingSlopeCoast.kt │ │ │ │ ├── BrakingPhaseCoast.kt │ │ │ │ ├── CoastingGenerator.kt │ │ │ │ └── CoastingOpportunity.kt │ │ │ ├── etcs │ │ │ ├── Constants.kt │ │ │ ├── ETCSBrakingCurves.kt │ │ │ └── ETCSBrakingSimulator.kt │ │ │ └── pipelines │ │ │ ├── MaxEffortEnvelope.kt │ │ │ └── MaxSpeedEnvelope.kt │ │ ├── test │ │ ├── java │ │ │ └── fr │ │ │ │ └── sncf │ │ │ │ └── osrd │ │ │ │ ├── envelope │ │ │ │ ├── ConstraintBuilderTest.java │ │ │ │ ├── EnvelopeBuilderTest.java │ │ │ │ ├── EnvelopeConcatTest.java │ │ │ │ ├── EnvelopeCursorTest.java │ │ │ │ ├── EnvelopeIntersectionTest.java │ │ │ │ ├── EnvelopeOverlayTest.java │ │ │ │ ├── EnvelopePartSliceTest.java │ │ │ │ ├── EnvelopePartTest.kt │ │ │ │ ├── EnvelopeSpeedCapTest.java │ │ │ │ ├── EnvelopeTest.kt │ │ │ │ ├── EnvelopeTransitions.java │ │ │ │ ├── IntegrationStepTest.java │ │ │ │ ├── MRSPEnvelopeBuilderTest.java │ │ │ │ └── NullEnvelopePartConsumer.java │ │ │ │ └── envelope_utils │ │ │ │ ├── DoubleBinarySearchTest.java │ │ │ │ ├── DoubleUtilsTests.java │ │ │ │ ├── RangeMapUtilsTest.java │ │ │ │ └── SignUtilsTest.java │ │ └── kotlin │ │ │ └── fr │ │ │ └── sncf │ │ │ └── osrd │ │ │ └── envelope_sim │ │ │ ├── AllowanceRangesTests.kt │ │ │ ├── AllowanceTests.kt │ │ │ ├── AllowanceValueTest.kt │ │ │ ├── EnvelopeMaintainSpeedTest.kt │ │ │ ├── EnvelopeSimPathTest.kt │ │ │ ├── MarecoDecelerationTests.kt │ │ │ ├── MaxEffortEnvelopeTest.kt │ │ │ ├── MaxSpeedEnvelopeTest.kt │ │ │ └── TrainPhysicsIntegratorTest.kt │ │ └── testFixtures │ │ └── java │ │ └── fr │ │ └── sncf │ │ └── osrd │ │ ├── envelope │ │ ├── EnvelopeShape.java │ │ └── EnvelopeTestUtils.java │ │ └── envelope_sim │ │ ├── EnvelopeSimPathBuilder.java │ │ ├── FlatPath.java │ │ ├── MaxEffortEnvelopeBuilder.kt │ │ ├── SimpleContextBuilder.java │ │ ├── SimpleRollingStock.java │ │ └── TestMRSPBuilder.java ├── gradle.properties ├── gradle │ ├── libs.versions.toml │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── justfile ├── kt-fast-collections-annotations │ ├── build.gradle │ └── src │ │ └── main │ │ └── kotlin │ │ ├── Annotations.kt │ │ └── Common.kt ├── kt-fast-collections-generator │ ├── build.gradle │ └── src │ │ └── main │ │ ├── kotlin │ │ ├── CollectionGenerator.kt │ │ ├── PrimitiveSymbolProcessor.kt │ │ ├── WrapperSymbolProcessor.kt │ │ └── collections │ │ │ ├── Array.kt │ │ │ ├── ArrayList.kt │ │ │ ├── ArraySortedSet.kt │ │ │ ├── Interfaces.kt │ │ │ └── RingBuffer.kt │ │ └── resources │ │ └── META-INF │ │ └── services │ │ └── com.google.devtools.ksp.processing.SymbolProcessorProvider ├── kt-fast-collections │ ├── build.gradle │ └── src │ │ ├── main │ │ └── kotlin │ │ │ └── PrimitiveCollections.kt │ │ └── test │ │ └── kotlin │ │ ├── TestArrayList.kt │ │ ├── TestArraySet.kt │ │ ├── TestIndex.kt │ │ └── TestRingBuffer.kt ├── kt-osrd-rjs-parser │ ├── build.gradle │ └── src │ │ └── main │ │ └── kotlin │ │ └── fr │ │ └── sncf │ │ └── osrd │ │ └── RawInfraRJSParser.kt ├── kt-osrd-signaling │ ├── build.gradle │ └── src │ │ ├── main │ │ └── kotlin │ │ │ └── fr │ │ │ └── sncf │ │ │ └── osrd │ │ │ └── signaling │ │ │ ├── SignalDriver.kt │ │ │ ├── SignalingSimulator.kt │ │ │ └── impl │ │ │ ├── BlockBuilder.kt │ │ │ ├── MockSigSystemManager.kt │ │ │ ├── SigSettingsEvaluator.kt │ │ │ ├── SigSystemManagerImpl.kt │ │ │ └── SignalingSimulatorImpl.kt │ │ └── test │ │ └── kotlin │ │ └── fr │ │ └── sncf │ │ └── osrd │ │ └── signaling │ │ └── BlockBuilderTest.kt ├── kt-osrd-sim-infra │ ├── build.gradle │ └── src │ │ └── main │ │ └── kotlin │ │ └── fr │ │ └── sncf │ │ └── osrd │ │ └── sim_infra │ │ ├── api │ │ ├── InterlockingInfra.kt │ │ ├── LoadedSignalingInfra.kt │ │ ├── LoadingGaugeConstraint.kt │ │ ├── PathProperties.kt │ │ ├── RawSignalingInfra.kt │ │ ├── SigSchema.kt │ │ ├── TrackInfra.kt │ │ ├── TrackNetworkInfra.kt │ │ └── TrackProperties.kt │ │ ├── impl │ │ ├── BlockInfraBuilder.kt │ │ ├── BlockInfraImpl.kt │ │ ├── DebugViewers.kt │ │ ├── LoadedSignalingInfraBuilder.kt │ │ ├── LoadedSignalingInfraImpl.kt │ │ ├── PathPropertiesImpl.kt │ │ ├── RawInfraBuilder.kt │ │ ├── RawInfraImpl.kt │ │ └── TemporarySpeedLimitManager.kt │ │ └── utils │ │ ├── BlockRecovery.kt │ │ ├── InfraUtils.kt │ │ └── PathPropertiesView.kt ├── kt-osrd-sim-interlocking │ ├── build.gradle │ └── src │ │ ├── main │ │ └── kotlin │ │ │ └── fr │ │ │ └── sncf │ │ │ └── osrd │ │ │ └── sim │ │ │ └── interlocking │ │ │ ├── api │ │ │ └── InterlockingSim.kt │ │ │ └── impl │ │ │ ├── Location.kt │ │ │ ├── MovableElements.kt │ │ │ ├── Reservation.kt │ │ │ └── Routing.kt │ │ └── test │ │ └── kotlin │ │ └── fr │ │ └── sncf │ │ └── osrd │ │ └── sim │ │ ├── TestLocation.kt │ │ ├── TestMovableElement.kt │ │ ├── TestReservation.kt │ │ └── TestRouting.kt ├── kt-osrd-sncf-signaling │ ├── build.gradle │ └── src │ │ ├── main │ │ └── kotlin │ │ │ └── fr │ │ │ └── sncf │ │ │ └── osrd │ │ │ └── signaling │ │ │ ├── bal │ │ │ ├── BAL.kt │ │ │ ├── BALtoBAL.kt │ │ │ ├── BALtoBAPR.kt │ │ │ ├── BALtoETCS_LEVEL2.kt │ │ │ ├── BALtoTVM300.kt │ │ │ └── BALtoTVM430.kt │ │ │ ├── bapr │ │ │ ├── BAPR.kt │ │ │ ├── BAPRtoBAL.kt │ │ │ ├── BAPRtoBAPR.kt │ │ │ ├── BAPRtoETCS_LEVEL2.kt │ │ │ ├── BAPRtoTVM300.kt │ │ │ └── BAPRtoTVM430.kt │ │ │ ├── etcs_level2 │ │ │ ├── ETCS_LEVEL2.kt │ │ │ ├── ETCS_LEVEL2toBAL.kt │ │ │ ├── ETCS_LEVEL2toBAPR.kt │ │ │ ├── ETCS_LEVEL2toETCS_LEVEL2.kt │ │ │ ├── ETCS_LEVEL2toTVM300.kt │ │ │ └── ETCS_LEVEL2toTVM430.kt │ │ │ ├── tvm300 │ │ │ ├── TVM300.kt │ │ │ ├── TVM300toBAL.kt │ │ │ ├── TVM300toBAPR.kt │ │ │ ├── TVM300toETCS_LEVEL2.kt │ │ │ ├── TVM300toTVM300.kt │ │ │ └── TVM300toTVM430.kt │ │ │ └── tvm430 │ │ │ ├── TVM430.kt │ │ │ ├── TVM430toBAL.kt │ │ │ ├── TVM430toBAPR.kt │ │ │ ├── TVM430toETCS_LEVEL2.kt │ │ │ ├── TVM430toTVM300.kt │ │ │ └── TVM430toTVM430.kt │ │ └── test │ │ └── kotlin │ │ └── fr │ │ └── sncf │ │ └── osrd │ │ └── signaling │ │ └── bal │ │ ├── TestBALtoBAL.kt │ │ ├── TestBAPRtoBAL.kt │ │ └── TestTVM300toBAL.kt ├── kt-osrd-utils │ ├── build.gradle │ └── src │ │ ├── main │ │ ├── java │ │ │ └── fr │ │ │ │ └── sncf │ │ │ │ └── osrd │ │ │ │ └── utils │ │ │ │ └── UnionFind.java │ │ └── kotlin │ │ │ └── fr │ │ │ └── sncf │ │ │ └── osrd │ │ │ └── utils │ │ │ ├── AppendOnlyLinkedList.kt │ │ │ ├── AppendOnlyMap.kt │ │ │ ├── Direction.kt │ │ │ ├── DirectionalMap.kt │ │ │ ├── DistanceRangeMap.kt │ │ │ ├── DistanceRangeMapImpl.kt │ │ │ ├── DistanceRangeSet.kt │ │ │ ├── DistanceRangeSetImpl.kt │ │ │ ├── Endpoint.kt │ │ │ ├── Extensions.kt │ │ │ ├── Hash.kt │ │ │ ├── LogAggregator.kt │ │ │ ├── SelfTypeHolder.kt │ │ │ ├── indexing │ │ │ ├── Arena.kt │ │ │ ├── ArenaMap.kt │ │ │ ├── ArrayAccess.kt │ │ │ ├── BaseArena.kt │ │ │ ├── DirStaticIdx.kt │ │ │ ├── DynIdx.kt │ │ │ ├── IdxMap.kt │ │ │ ├── NumIdx.kt │ │ │ └── StaticIdx.kt │ │ │ ├── json │ │ │ └── UnitJsonAdapters.kt │ │ │ └── units │ │ │ ├── Distance.kt │ │ │ ├── Duration.kt │ │ │ └── Speed.kt │ │ └── test │ │ └── kotlin │ │ └── fr │ │ └── sncf │ │ └── osrd │ │ └── utils │ │ ├── TestArena.kt │ │ ├── TestDistanceRangeMap.kt │ │ ├── TestIndexes.kt │ │ └── UnionFindTest.kt ├── kt-railjson-builder │ ├── build.gradle │ └── src │ │ ├── main │ │ └── kotlin │ │ │ └── fr │ │ │ └── sncf │ │ │ └── osrd │ │ │ └── railjson │ │ │ └── builder │ │ │ └── RJSInfraBuilder.kt │ │ └── test │ │ └── kotlin │ │ └── RJSInfraBuilderTest.kt ├── osrd-geom │ ├── build.gradle │ └── src │ │ └── main │ │ └── java │ │ └── fr │ │ └── sncf │ │ └── osrd │ │ └── geom │ │ ├── LineString.java │ │ ├── Point.java │ │ └── WGS84Interpolator.java ├── osrd-railjson │ ├── build.gradle │ └── src │ │ └── main │ │ └── java │ │ └── fr │ │ └── sncf │ │ └── osrd │ │ └── railjson │ │ └── schema │ │ ├── common │ │ ├── ExcludeFromGeneratedCodeCoverage.java │ │ ├── ID.java │ │ ├── Identified.java │ │ ├── RJSTemporarySpeedLimit.kt │ │ ├── RJSTrackLocation.java │ │ ├── RJSWaypointRef.java │ │ └── graph │ │ │ ├── ApplicableDirection.java │ │ │ ├── EdgeDirection.java │ │ │ └── EdgeEndpoint.java │ │ ├── external_generated_inputs │ │ └── RJSElectricalProfileSet.java │ │ ├── geom │ │ └── RJSLineString.java │ │ ├── infra │ │ ├── RJSInfra.java │ │ ├── RJSOperationalPoint.java │ │ ├── RJSOperationalPointExtensions.java │ │ ├── RJSOperationalPointIdentifierExtension.java │ │ ├── RJSOperationalPointSncfExtension.java │ │ ├── RJSRoute.java │ │ ├── RJSRoutePath.java │ │ ├── RJSSwitch.java │ │ ├── RJSSwitchType.java │ │ ├── RJSTrackEndpoint.java │ │ ├── RJSTrackSection.java │ │ ├── trackobjects │ │ │ ├── RJSBufferStop.java │ │ │ ├── RJSRouteWaypoint.java │ │ │ ├── RJSSignal.java │ │ │ ├── RJSTrackObject.java │ │ │ └── RJSTrainDetector.java │ │ └── trackranges │ │ │ ├── RJSApplicableDirectionsTrackRange.java │ │ │ ├── RJSCurve.java │ │ │ ├── RJSDirectionalTrackRange.java │ │ │ ├── RJSElectrification.java │ │ │ ├── RJSLoadingGaugeLimit.java │ │ │ ├── RJSNeutralSection.java │ │ │ ├── RJSOperationalPointPart.java │ │ │ ├── RJSOperationalPointPartExtensions.java │ │ │ ├── RJSOperationalPointPartSncfExtension.java │ │ │ ├── RJSRange.java │ │ │ ├── RJSSlope.java │ │ │ ├── RJSSpeedSection.java │ │ │ └── RJSTrackRange.java │ │ ├── rollingstock │ │ ├── Comfort.java │ │ ├── RJSEffortCurves.java │ │ ├── RJSEtcsBrakeParams.java │ │ ├── RJSLoadingGaugeType.java │ │ └── RJSRollingResistance.java │ │ └── schedule │ │ ├── RJSAllowance.java │ │ ├── RJSAllowanceDistribution.java │ │ ├── RJSAllowanceRange.java │ │ ├── RJSAllowanceValue.java │ │ ├── RJSPowerRestrictionRange.java │ │ ├── RJSSchedulePoint.java │ │ ├── RJSStandaloneTrainSchedule.java │ │ ├── RJSTrainPath.java │ │ ├── RJSTrainScheduleOptions.java │ │ └── RJSTrainStop.java ├── osrd-reporting │ ├── build.gradle │ └── src │ │ └── main │ │ └── java │ │ └── fr │ │ └── sncf │ │ └── osrd │ │ └── reporting │ │ ├── ErrorContext.java │ │ ├── exceptions │ │ ├── ErrorCause.java │ │ ├── ErrorType.java │ │ └── OSRDError.java │ │ └── warnings │ │ ├── DiagnosticRecorder.java │ │ ├── DiagnosticRecorderImpl.java │ │ └── Warning.java ├── settings.gradle ├── src │ ├── main │ │ ├── java │ │ │ └── fr │ │ │ │ └── sncf │ │ │ │ └── osrd │ │ │ │ ├── App.java │ │ │ │ ├── api │ │ │ │ ├── APIClient.java │ │ │ │ ├── ElectricalProfileSetManager.java │ │ │ │ ├── ExceptionHandler.java │ │ │ │ ├── FullInfra.java │ │ │ │ ├── InfraLoadEndpoint.java │ │ │ │ ├── InfraManager.java │ │ │ │ ├── InfraProvider.java │ │ │ │ ├── SignalingSimulator.kt │ │ │ │ └── VersionEndpoint.java │ │ │ │ ├── cli │ │ │ │ ├── CliCommand.java │ │ │ │ ├── EnvProvider.java │ │ │ │ ├── ReproduceRequest.kt │ │ │ │ ├── TkOpenTelemetry.kt │ │ │ │ ├── ValidateInfra.java │ │ │ │ └── WorkerCommand.kt │ │ │ │ ├── standalone_sim │ │ │ │ ├── EnvelopeStopWrapper.java │ │ │ │ └── result │ │ │ │ │ ├── ElectrificationRange.java │ │ │ │ │ ├── ResultPosition.kt │ │ │ │ │ ├── ResultSpeed.java │ │ │ │ │ └── ResultStops.java │ │ │ │ ├── train │ │ │ │ ├── RollingStock.java │ │ │ │ └── TrainStop.java │ │ │ │ └── utils │ │ │ │ ├── CurveSimplification.kt │ │ │ │ └── jacoco │ │ │ │ └── ExcludeFromGeneratedCodeCoverage.java │ │ ├── kotlin │ │ │ └── fr │ │ │ │ └── sncf │ │ │ │ └── osrd │ │ │ │ ├── api │ │ │ │ ├── CommonSchemas.kt │ │ │ │ ├── RequirementsParser.kt │ │ │ │ ├── RollingStockParser.kt │ │ │ │ ├── SimulationParser.kt │ │ │ │ ├── conflicts │ │ │ │ │ ├── ConflictDetectionEndpoint.kt │ │ │ │ │ ├── ConflictDetectionRequest.kt │ │ │ │ │ └── ConflictDetectionResponse.kt │ │ │ │ ├── etcs │ │ │ │ │ ├── ETCSBrakingCurvesEndpoint.kt │ │ │ │ │ ├── ETCSBrakingCurvesRequest.kt │ │ │ │ │ └── ETCSBrakingCurvesResponse.kt │ │ │ │ ├── path_properties │ │ │ │ │ ├── PathPropEndpoint.kt │ │ │ │ │ ├── PathPropRequest.kt │ │ │ │ │ ├── PathPropResponse.kt │ │ │ │ │ └── PathPropResponseConverter.kt │ │ │ │ ├── pathfinding │ │ │ │ │ ├── IncompatibleConstraintsPostProcessing.kt │ │ │ │ │ ├── PathfindingBlockRequest.kt │ │ │ │ │ ├── PathfindingBlockResponse.kt │ │ │ │ │ ├── PathfindingBlocksEndpoint.kt │ │ │ │ │ └── PathfindingPostProcessing.kt │ │ │ │ ├── project_signals │ │ │ │ │ ├── SignalProjectionEndpoint.kt │ │ │ │ │ ├── SignalProjectionRequest.kt │ │ │ │ │ └── SignalProjectionResponse.kt │ │ │ │ ├── standalone_sim │ │ │ │ │ ├── SimulationEndpoint.kt │ │ │ │ │ ├── SimulationRequest.kt │ │ │ │ │ └── SimulationResponse.kt │ │ │ │ └── stdcm │ │ │ │ │ ├── STDCMEndpoint.kt │ │ │ │ │ ├── STDCMRequest.kt │ │ │ │ │ └── STDCMResponse.kt │ │ │ │ ├── conflicts │ │ │ │ ├── Conflicts.kt │ │ │ │ ├── IncrementalConflictDetector.kt │ │ │ │ ├── IncrementalPath.kt │ │ │ │ ├── IncrementalRequirementEnvelopeAdapter.kt │ │ │ │ ├── RequirementTypes.kt │ │ │ │ ├── Resources.kt │ │ │ │ └── SpacingResourceGenerator.kt │ │ │ │ ├── envelope_sim_infra │ │ │ │ ├── EnvelopeTrainPath.kt │ │ │ │ └── MRSP.kt │ │ │ │ ├── external_generated_inputs │ │ │ │ └── ElectricalProfileMapping.kt │ │ │ │ ├── graph │ │ │ │ ├── Graph.kt │ │ │ │ ├── GraphAdapter.kt │ │ │ │ ├── Interfaces.kt │ │ │ │ └── NetworkGraphAdapter.kt │ │ │ │ ├── pathfinding │ │ │ │ ├── Pathfinding.kt │ │ │ │ ├── PathfindingGraph.kt │ │ │ │ ├── RemainingDistanceEstimator.kt │ │ │ │ └── constraints │ │ │ │ │ ├── ConstraintCombiner.kt │ │ │ │ │ ├── ElectrificationConstraints.kt │ │ │ │ │ ├── LoadingGaugeConstraints.kt │ │ │ │ │ └── SignalingSystemConstraints.kt │ │ │ │ ├── signal_projection │ │ │ │ └── SignalProjection.kt │ │ │ │ ├── standalone_sim │ │ │ │ ├── SafetySpeed.kt │ │ │ │ ├── ScheduleMetadataExtractor.kt │ │ │ │ ├── StandaloneSimulation.kt │ │ │ │ └── etcsContextBuilder.kt │ │ │ │ ├── stdcm │ │ │ │ ├── BacktrackingEnvelopeAttr.kt │ │ │ │ ├── ProgressLogger.kt │ │ │ │ ├── STDCMHeuristic.kt │ │ │ │ ├── STDCMResult.kt │ │ │ │ ├── STDCMStep.kt │ │ │ │ ├── graph │ │ │ │ │ ├── BacktrackingManager.kt │ │ │ │ │ ├── BlockSimulationParameters.kt │ │ │ │ │ ├── DelayManager.kt │ │ │ │ │ ├── EngineeringAllowanceManager.kt │ │ │ │ │ ├── EnvelopeSimContextBuilder.kt │ │ │ │ │ ├── PostProcessingSimulation.kt │ │ │ │ │ ├── STDCMEdge.kt │ │ │ │ │ ├── STDCMEdgeBuilder.kt │ │ │ │ │ ├── STDCMGraph.kt │ │ │ │ │ ├── STDCMNode.kt │ │ │ │ │ ├── STDCMPathfinding.kt │ │ │ │ │ ├── STDCMPostProcessing.kt │ │ │ │ │ ├── STDCMSimulations.kt │ │ │ │ │ ├── STDCMUtils.kt │ │ │ │ │ ├── TimeData.kt │ │ │ │ │ └── visited_node_tracking │ │ │ │ │ │ ├── VisitedNodes.kt │ │ │ │ │ │ ├── VisitedRange.kt │ │ │ │ │ │ └── VisitedRangeMap.kt │ │ │ │ ├── infra_exploration │ │ │ │ │ ├── InfraExplorer.kt │ │ │ │ │ ├── InfraExplorerWithEnvelope.kt │ │ │ │ │ ├── InfraExplorerWithEnvelopeImpl.kt │ │ │ │ │ └── StepTracker.kt │ │ │ │ └── preprocessing │ │ │ │ │ ├── implementation │ │ │ │ │ └── BlockAvailability.kt │ │ │ │ │ └── interfaces │ │ │ │ │ └── BlockAvailabilityInterface.kt │ │ │ │ └── utils │ │ │ │ ├── CachedBlockMRSPBuilder.kt │ │ │ │ ├── DebugUtils.kt │ │ │ │ ├── EnvelopeTrainPathUtils.kt │ │ │ │ ├── JavaInteroperabilityTools.kt │ │ │ │ ├── OffsetConversions.kt │ │ │ │ └── PathPropUtils.kt │ │ └── resources │ │ │ └── logback.xml │ └── test │ │ ├── java │ │ └── fr │ │ │ └── sncf │ │ │ └── osrd │ │ │ ├── DriverBehaviourTest.kt │ │ │ ├── api │ │ │ ├── ApiTest.java │ │ │ ├── ElectricalProfileSetManagerTest.java │ │ │ └── InfraLoadingTest.java │ │ │ ├── conflicts │ │ │ └── SpacingResourceGeneratorTest.kt │ │ │ ├── external_generated_inputs │ │ │ └── ExternalGeneratedInputsHelpers.java │ │ │ ├── standalone_sim │ │ │ └── EnvelopeStopWrapperTests.java │ │ │ ├── train │ │ │ ├── TestRollingStock.java │ │ │ └── TestTrains.java │ │ │ └── utils │ │ │ ├── CurveSimplificationTest.java │ │ │ ├── RangeMapUtils.java │ │ │ ├── graph │ │ │ ├── AStarTests.kt │ │ │ └── PathfindingTests.kt │ │ │ ├── moshi │ │ │ └── MoshiUtils.java │ │ │ └── takes │ │ │ └── TakesUtils.java │ │ └── kotlin │ │ └── fr │ │ └── sncf │ │ └── osrd │ │ ├── conflicts │ │ └── IncrementalConflictDetectorTests.kt │ │ ├── envelope_sim_infra │ │ └── MRSPTest.kt │ │ ├── external_generated_inputs │ │ └── ElectricalProfileMappingTest.kt │ │ ├── pathfinding │ │ ├── PathPropEndpointTest.kt │ │ ├── PathfindingBlocksEndpointTest.kt │ │ ├── PathfindingElectrificationTest.kt │ │ ├── PathfindingSignalingTest.kt │ │ ├── PathfindingTest.kt │ │ ├── RemainingDistanceEstimatorTest.kt │ │ └── constraints │ │ │ ├── ElectrificationConstraintsTest.kt │ │ │ ├── LoadingGaugeConstraintsTest.kt │ │ │ └── SignalingSystemConstraintsTest.kt │ │ ├── sim_infra_adapter │ │ ├── EnvelopeTrainPathTest.kt │ │ ├── PathPropertiesTests.kt │ │ ├── RawInfraAdapterTest.kt │ │ └── SignalLoadingTest.kt │ │ ├── standalone_sim │ │ ├── ETCSTests.kt │ │ ├── SimulationScheduleItemsParserTests.kt │ │ └── StandaloneSimulationTest.kt │ │ ├── stdcm │ │ ├── BacktrackingTests.kt │ │ ├── ConditionalOccupancyTests.kt │ │ ├── DepartureTimeShiftTests.kt │ │ ├── EngineeringAllowanceTests.kt │ │ ├── FullSTDCMTests.kt │ │ ├── PerformanceTests.kt │ │ ├── STDCMHelpers.kt │ │ ├── STDCMPathfindingBuilder.kt │ │ ├── STDCMPathfindingTests.kt │ │ ├── StandardAllowanceTests.kt │ │ ├── StopTests.kt │ │ ├── TemporarySpeedLimitTests.kt │ │ ├── VisitedNodesTests.kt │ │ ├── infra_exploration │ │ │ ├── InfraExplorerTests.kt │ │ │ ├── InfraExplorerWithEnvelopeTests.kt │ │ │ └── StepTrackerTests.kt │ │ └── preprocessing │ │ │ ├── BlockAvailabilityTests.kt │ │ │ ├── DummyBlockAvailability.kt │ │ │ ├── OccupancySegment.kt │ │ │ └── STDCMHeuristicTests.kt │ │ └── utils │ │ ├── DummyInfra.kt │ │ ├── ElectricalProfileMappingUtils.kt │ │ ├── Helpers.kt │ │ ├── OffsetConversionTests.kt │ │ └── PathUtils.kt └── stdcm_debugging_tips.md ├── docker-compose.yml ├── docker ├── Dockerfile.playwright-ci ├── README.md ├── docker-bake.hcl ├── docker-compose.front.yml ├── docker-compose.host-front.yml ├── docker-compose.host.yml ├── docker-compose.pr-tests.yml ├── docker-compose.single-worker.yml ├── gateway.dev.front.toml ├── gateway.dev.host-front.toml ├── gateway.dev.host.toml ├── gateway.pr-tests.simple.toml ├── init_db.sql ├── osrdyne-pr-tests.yml ├── osrdyne.yml ├── rabbitmq-pr-tests.conf ├── rabbitmq.conf └── valkey.conf ├── editoast ├── .dockerignore ├── .env ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── Dockerfile ├── README.md ├── assets │ ├── fonts │ │ ├── Roboto Bold.ttf │ │ ├── Roboto Condensed Italic.ttf │ │ ├── Roboto Condensed.ttf │ │ ├── Roboto Italic.ttf │ │ ├── Roboto Medium.ttf │ │ ├── Roboto Regular.ttf │ │ ├── SNCF.ttf │ │ └── generate-glyphs.sh │ └── sprites │ │ ├── BAL │ │ ├── CARRE A CLI.svg │ │ ├── CARRE A.svg │ │ ├── CARRE R30.svg │ │ ├── CARRE R60.svg │ │ ├── CARRE RR30.svg │ │ ├── CARRE RR60.svg │ │ ├── CARRE VL.svg │ │ ├── CARRE.svg │ │ ├── S A.svg │ │ ├── S VL.svg │ │ └── S.svg │ │ ├── BAPR │ │ ├── CARRE A CLI.svg │ │ ├── CARRE A.svg │ │ ├── CARRE R30.svg │ │ ├── CARRE R60.svg │ │ ├── CARRE RR30.svg │ │ ├── CARRE RR60.svg │ │ ├── CARRE VL.svg │ │ ├── CARRE.svg │ │ ├── DISQUE A.svg │ │ ├── DISQUE VL.svg │ │ ├── S A.svg │ │ ├── S VL.svg │ │ └── S.svg │ │ ├── ETCS_LEVEL2 │ │ └── STOP MARKER.svg │ │ ├── TVM300 │ │ └── REP TGV.svg │ │ ├── TVM430 │ │ └── REP TGV.svg │ │ ├── default │ │ ├── BP DIS.svg │ │ ├── BP EXE.svg │ │ ├── BP FIN.svg │ │ ├── CC EXE.svg │ │ ├── CC FIN.svg │ │ ├── HEURTOIR.svg │ │ ├── MATD.svg │ │ ├── MATG.svg │ │ ├── R.svg │ │ ├── REV.svg │ │ ├── SECT.svg │ │ ├── TIV D FIXE 10.svg │ │ ├── TIV D FIXE 100.svg │ │ ├── TIV D FIXE 105.svg │ │ ├── TIV D FIXE 110.svg │ │ ├── TIV D FIXE 115.svg │ │ ├── TIV D FIXE 120.svg │ │ ├── TIV D FIXE 125.svg │ │ ├── TIV D FIXE 130.svg │ │ ├── TIV D FIXE 135.svg │ │ ├── TIV D FIXE 140.svg │ │ ├── TIV D FIXE 15 35.svg │ │ ├── TIV D FIXE 15.svg │ │ ├── TIV D FIXE 150.svg │ │ ├── TIV D FIXE 160.svg │ │ ├── TIV D FIXE 20 35.svg │ │ ├── TIV D FIXE 20.svg │ │ ├── TIV D FIXE 25.svg │ │ ├── TIV D FIXE 30 35.svg │ │ ├── TIV D FIXE 30 40.svg │ │ ├── TIV D FIXE 30.svg │ │ ├── TIV D FIXE 35.svg │ │ ├── TIV D FIXE 4.svg │ │ ├── TIV D FIXE 40 60.svg │ │ ├── TIV D FIXE 40.svg │ │ ├── TIV D FIXE 45.svg │ │ ├── TIV D FIXE 50 30.svg │ │ ├── TIV D FIXE 50 60.svg │ │ ├── TIV D FIXE 50 70.svg │ │ ├── TIV D FIXE 50.svg │ │ ├── TIV D FIXE 55.svg │ │ ├── TIV D FIXE 60 40.svg │ │ ├── TIV D FIXE 60 50.svg │ │ ├── TIV D FIXE 60 70.svg │ │ ├── TIV D FIXE 60.svg │ │ ├── TIV D FIXE 65.svg │ │ ├── TIV D FIXE 70 50.svg │ │ ├── TIV D FIXE 70 60.svg │ │ ├── TIV D FIXE 70 80.svg │ │ ├── TIV D FIXE 70.svg │ │ ├── TIV D FIXE 75.svg │ │ ├── TIV D FIXE 80 70.svg │ │ ├── TIV D FIXE 80.svg │ │ ├── TIV D FIXE 85.svg │ │ ├── TIV D FIXE 90.svg │ │ ├── TIV D FIXE 95.svg │ │ ├── TIV D FIXE.svg │ │ ├── TIVD B FIX 100 110.svg │ │ ├── TIVD B FIX 100.svg │ │ ├── TIVD B FIX 110.svg │ │ ├── TIVD B FIX 120.svg │ │ ├── TIVD B FIX 130.svg │ │ ├── TIVD B FIX 135.svg │ │ ├── TIVD B FIX 140 150.svg │ │ ├── TIVD B FIX 140.svg │ │ ├── TIVD B FIX 145 155.svg │ │ ├── TIVD B FIX 145.svg │ │ ├── TIVD B FIX 150 155.svg │ │ ├── TIVD B FIX 150.svg │ │ ├── TIVD B FIX 155.svg │ │ ├── TIVD B FIX 160.svg │ │ ├── TIVD B FIX 170.svg │ │ ├── TIVD B FIX 180.svg │ │ ├── TIVD B FIX 190.svg │ │ ├── TIVD B FIX 200.svg │ │ ├── TIVD B FIX 30.svg │ │ ├── TIVD B FIX 60.svg │ │ ├── TIVD B FIX 70.svg │ │ ├── TIVD B FIX 80.svg │ │ ├── TIVD B FIX 85.svg │ │ ├── TIVD B FIX 90.svg │ │ ├── TIVD B FIX 95.svg │ │ ├── UNKNOWN.svg │ │ ├── UNKNOWN2.svg │ │ └── Z.svg │ │ └── generate-atlas.sh ├── core_client │ ├── Cargo.toml │ └── src │ │ ├── conflict_detection.rs │ │ ├── etcs_braking_curves.rs │ │ ├── infra_loading.rs │ │ ├── lib.rs │ │ ├── mocking.rs │ │ ├── mq_client.rs │ │ ├── path_properties.rs │ │ ├── pathfinding.rs │ │ ├── signal_projection.rs │ │ ├── simulation.rs │ │ ├── stdcm.rs │ │ └── version.rs ├── diesel.toml ├── editoast_authz │ ├── Cargo.toml │ ├── authorization_model.fga │ └── src │ │ ├── authorizer.rs │ │ ├── identity.rs │ │ ├── lib.rs │ │ ├── model.rs │ │ └── regulator.rs ├── editoast_common │ ├── Cargo.toml │ └── src │ │ ├── geometry.rs │ │ ├── hash_rounded_float.rs │ │ ├── lib.rs │ │ ├── rangemap_utils.rs │ │ ├── schemas.rs │ │ ├── tracing.rs │ │ └── units.rs ├── editoast_derive │ ├── Cargo.toml │ └── src │ │ ├── annotate_units.rs │ │ ├── error.rs │ │ ├── lib.rs │ │ ├── model.rs │ │ ├── model │ │ ├── args.rs │ │ ├── codegen.rs │ │ ├── codegen │ │ │ ├── changeset_builder_impl_block.rs │ │ │ ├── changeset_decl.rs │ │ │ ├── changeset_from_model.rs │ │ │ ├── count_impl.rs │ │ │ ├── create_batch_impl.rs │ │ │ ├── create_batch_with_key_impl.rs │ │ │ ├── create_impl.rs │ │ │ ├── delete_batch_impl.rs │ │ │ ├── delete_impl.rs │ │ │ ├── delete_static_impl.rs │ │ │ ├── exists_impl.rs │ │ │ ├── identifiable_impl.rs │ │ │ ├── list_impl.rs │ │ │ ├── model_field_api_impl_block.rs │ │ │ ├── model_fields_impl_block.rs │ │ │ ├── model_from_row_impl.rs │ │ │ ├── model_impl.rs │ │ │ ├── preferred_id_impl.rs │ │ │ ├── retrieve_batch_impl.rs │ │ │ ├── retrieve_impl.rs │ │ │ ├── row_decl.rs │ │ │ ├── update_batch_impl.rs │ │ │ └── update_impl.rs │ │ ├── config.rs │ │ ├── crud.rs │ │ ├── identifier.rs │ │ ├── parsing.rs │ │ └── utils.rs │ │ ├── search.rs │ │ └── snapshots │ │ ├── editoast_derive__error__tests__construction.snap │ │ ├── editoast_derive__model__tests__construction.snap │ │ ├── editoast_derive__model__tests__single_pk_model.snap │ │ ├── editoast_derive__search__tests__search_construction.snap │ │ └── editoast_derive__search__tests__store_construction.snap ├── editoast_models │ ├── Cargo.toml │ └── src │ │ ├── db_connection_pool.rs │ │ ├── db_connection_pool │ │ └── tracing_instrumentation.rs │ │ ├── lib.rs │ │ ├── model.rs │ │ ├── rolling_stock.rs │ │ ├── rolling_stock │ │ └── train_category.rs │ │ └── tables.rs ├── editoast_osrdyne_client │ ├── Cargo.toml │ └── src │ │ ├── lib.rs │ │ └── mock_client.rs ├── editoast_schemas │ ├── Cargo.toml │ └── src │ │ ├── errors.rs │ │ ├── fixtures.rs │ │ ├── infra.rs │ │ ├── infra │ │ ├── applicable_directions.rs │ │ ├── applicable_directions_track_range.rs │ │ ├── buffer_stop.rs │ │ ├── curve.rs │ │ ├── detector.rs │ │ ├── direction.rs │ │ ├── directional_track_range.rs │ │ ├── electrical_profiles.rs │ │ ├── electrification.rs │ │ ├── endpoint.rs │ │ ├── infra_object.rs │ │ ├── loading_gauge_limit.rs │ │ ├── neutral_section.rs │ │ ├── operational_point.rs │ │ ├── railjson.rs │ │ ├── route.rs │ │ ├── side.rs │ │ ├── sign.rs │ │ ├── signal.rs │ │ ├── slope.rs │ │ ├── speed_section.rs │ │ ├── switch.rs │ │ ├── switch_type.rs │ │ ├── track_endpoint.rs │ │ ├── track_location.rs │ │ ├── track_offset.rs │ │ ├── track_range.rs │ │ ├── track_section.rs │ │ ├── track_section_extensions.rs │ │ ├── track_section_sncf_extension.rs │ │ ├── track_section_source_extension.rs │ │ └── waypoint.rs │ │ ├── lib.rs │ │ ├── paced_train.rs │ │ ├── primitives.rs │ │ ├── primitives │ │ ├── bounding_box.rs │ │ ├── duration.rs │ │ ├── identifier.rs │ │ ├── non_blank_string.rs │ │ ├── object_ref.rs │ │ └── object_type.rs │ │ ├── rolling_stock.rs │ │ ├── rolling_stock │ │ ├── effort_curves.rs │ │ ├── energy_source.rs │ │ ├── etcs_brake_params.rs │ │ ├── loading_gauge_type.rs │ │ ├── rolling_resistance.rs │ │ ├── rolling_stock_livery.rs │ │ ├── rolling_stock_metadata.rs │ │ ├── supported_signaling_systems.rs │ │ ├── towed_rolling_stock.rs │ │ └── train_category.rs │ │ ├── tests │ │ └── train_schedule_simple.json │ │ ├── train_schedule.rs │ │ └── train_schedule │ │ ├── allowance.rs │ │ ├── comfort.rs │ │ ├── distribution.rs │ │ ├── margins.rs │ │ ├── path_item.rs │ │ ├── power_restriction_item.rs │ │ ├── rjs_power_restriction_range.rs │ │ ├── schedule_item.rs │ │ └── train_schedule_options.rs ├── editoast_search │ ├── Cargo.toml │ └── src │ │ ├── context.rs │ │ ├── dsl.rs │ │ ├── lib.rs │ │ ├── process.rs │ │ ├── search_object.rs │ │ ├── searchast.rs │ │ ├── sql │ │ ├── insert_trigger_template.sql │ │ └── update_trigger_template.sql │ │ ├── sqlquery.rs │ │ └── typing.rs ├── fga │ ├── Cargo.toml │ ├── src │ │ ├── client.rs │ │ ├── client │ │ │ ├── authorization_models.rs │ │ │ ├── healthz.rs │ │ │ ├── queries.rs │ │ │ ├── stores.rs │ │ │ └── tuples.rs │ │ ├── doctest_setup.rs │ │ ├── lib.rs │ │ └── model.rs │ └── tests │ │ ├── doctest.fga │ │ └── model.fga ├── fga_derive │ ├── Cargo.toml │ └── src │ │ └── lib.rs ├── justfile ├── map_layers.yml ├── migrations │ ├── 00000000000000_diesel_initial_setup │ │ ├── down.sql │ │ └── up.sql │ ├── 2023-09-06-161017_initial │ │ ├── down.sql │ │ └── up.sql │ ├── 2023-09-15-135824_lpv_to_psl_and_panel_to_sign │ │ ├── down.sql │ │ └── up.sql │ ├── 2023-10-03-161614_rolling-stock-base-power-class-null │ │ ├── down.sql │ │ └── up.sql │ ├── 2023-10-05-081952_add_kilometric_points │ │ ├── down.sql │ │ └── up.sql │ ├── 2023-10-10-085312_fix_kilometric_point │ │ ├── down.sql │ │ └── up.sql │ ├── 2023-10-11-135746_adapt_signal_layer_sprites │ │ ├── down.sql │ │ └── up.sql │ ├── 2023-10-11-222214_delete_track_links │ │ ├── down.sql │ │ └── up.sql │ ├── 2023-10-12-063036_split_op_parts_layer │ │ ├── down.sql │ │ └── up.sql │ ├── 2023-10-12-092806_fix_sign_value │ │ ├── down.sql │ │ └── up.sql │ ├── 2023-10-18-164705_logical_signals_search │ │ ├── down.sql │ │ └── up.sql │ ├── 2023-10-20-140824_fix_layer_operational_point_geometry │ │ ├── down.sql │ │ └── up.sql │ ├── 2023-10-24-071333_signal_remove_legacy_fields │ │ ├── down.sql │ │ └── up.sql │ ├── 2023-10-25-000250_delete_switch_types_from_db │ │ ├── down.sql │ │ └── up.sql │ ├── 2023-11-24-162712_add_errors_hash │ │ ├── down.sql │ │ └── up.sql │ ├── 2023-12-18-145922_search_op_rename_table │ │ ├── down.sql │ │ └── up.sql │ ├── 2023-12-19-122428_search_op_ci_code │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-01-03-133658_catenary_to_electrification │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-01-05-092226_delete_applicable_directions_from_detectors │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-01-11-150914_split_tvm │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-01-11-152659_add_electrification_unit │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-01-26-150237_change_zero_speed_limit_to_null │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-01-30-232707_add_neutral_sign │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-02-01-130425_add-rolling-stock-field-supported-signaling-systems │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-02-05-140856_rolling_stock_power_restrictions_not_null │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-02-06-171107_remove_features_from_rollingstock │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-02-09-132408_speed_section_on_routes │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-02-21-002011_create_v2_trainschedule_timetable │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-02-23-155103_create_v2_scenario │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-03-12-143107_make_budget_nullable │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-03-14-112655_jaune_cli │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-03-18-141345_change_loading_gauge_to_smallint │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-03-20-155119_infra-default-values │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-03-28-102224_tvm_sight_distance │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-04-02-142925_create_work_schedule │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-04-16-074707_project_study_default_values │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-05-02-082903_remove_schematic │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-06-06-142842_drop_search_signal_layer │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-06-20-091624_users_and_permissions │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-07-15-150521_move_electrical_profile_set_id │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-07-18-092453_adapt-train-schedules-v2 │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-07-27-125642_create-stdcm-search-env │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-08-13-140358_delete_tsv1_tables │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-08-21-213611_rename_tsv2_table │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-09-02-132335_replace_mode_ac_with_air_conditioning │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-09-06-153144_add_ltv_table │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-09-20-080633_reception_signal_with_short_slip_distance │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-10-04-140134_add-towed-rolling-stock │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-10-24-143158_add-towed-rolling-stock-field-description │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-10-29-145440_search_cache │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-11-05-113351_macro_nodes │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-11-06-175550_add_temporary_speed_limit_group_to_stdcm_search_environment │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-11-21-145205_create_stdcm_logs │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-11-22-151624_group-name-unique │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-11-27-095410_add_track_section_operational_point_layer │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-11-27-101658_remove_rolling_stock_gamma_type │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-12-03-144258_towed-rolling-stock-add-field-max-speed │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-12-19-152854_index_infra_layer_operational_point │ │ ├── down.sql │ │ └── up.sql │ ├── 2024-12-20-140458_add_rs_etcs_brake_params │ │ ├── down.sql │ │ └── up.sql │ ├── 2025-01-07-163822_index_stdcm_log_trace_id │ │ ├── down.sql │ │ └── up.sql │ ├── 2025-01-14-154647_make_stdcm_log_trace_id_nullable │ │ ├── down.sql │ │ └── up.sql │ ├── 2025-02-03-094532_add_primary_and_other_categories_to_rolling_stock │ │ ├── down.sql │ │ └── up.sql │ ├── 2025-02-13-090913_add_missing_fkey_index │ │ ├── down.sql │ │ └── up.sql │ ├── 2025-02-13-115126_create_paced_trains │ │ ├── down.sql │ │ └── up.sql │ ├── 2025-02-18-122020_stdcm_log_allow_error_response │ │ ├── down.sql │ │ └── up.sql │ ├── 2025-02-19-173042_adapt_search_environment_adding_enabled_window │ │ ├── down.sql │ │ └── up.sql │ ├── 2025-03-04-132534_roles_simplification │ │ ├── down.sql │ │ └── up.sql │ ├── 2025-03-12-095345_openfga_roles │ │ ├── down.sql │ │ └── up.sql │ ├── 2025-03-16-172133_model_update_errors │ │ ├── down.sql │ │ └── up.sql │ ├── 2025-03-21-153132_search-user │ │ ├── down.sql │ │ └── up.sql │ ├── 2025-03-26-090235_rename_paced_train_fields │ │ ├── down.sql │ │ └── up.sql │ ├── 2025-04-18-101338_infra_version_to_integer │ │ ├── down.sql │ │ └── up.sql │ ├── 2025-04-22-114821_add_category_to_train_schedule_and_paced_train │ │ ├── down.sql │ │ └── up.sql │ ├── 2025-04-24-081446_paced_train_exceptions │ │ ├── down.sql │ │ └── up.sql │ └── 2025-04-24-135143_rename_rolling_stock_category_to_train_category │ │ ├── down.sql │ │ └── up.sql ├── openapi.yaml ├── osm_to_railjson │ ├── Cargo.toml │ ├── README.md │ ├── justfile │ └── src │ │ ├── generate_routes.rs │ │ ├── lib.rs │ │ ├── main.rs │ │ ├── osm_to_railjson.rs │ │ ├── tests │ │ ├── minimal_rail.osm.pbf │ │ ├── routes.osm.pbf │ │ ├── signal_at_end_of_line.osm.pbf │ │ ├── signals.osm.pbf │ │ ├── station.osm.pbf │ │ └── switches.osm.pbf │ │ └── utils.rs ├── signal_sprites.yml └── src │ ├── client │ ├── electrical_profiles_commands.rs │ ├── group.rs │ ├── healthcheck.rs │ ├── import_rolling_stock.rs │ ├── infra_commands.rs │ ├── mod.rs │ ├── openfga_config.rs │ ├── postgres_config.rs │ ├── roles.rs │ ├── runserver.rs │ ├── search_commands.rs │ ├── stdcm_search_env_commands.rs │ ├── telemetry_config.rs │ ├── timetables_commands.rs │ ├── user.rs │ └── valkey_config.rs │ ├── error.rs │ ├── generated_data │ ├── buffer_stop.rs │ ├── detector.rs │ ├── electrification.rs │ ├── error │ │ ├── buffer_stops.rs │ │ ├── detectors.rs │ │ ├── electrifications.rs │ │ ├── infra_error.rs │ │ ├── mod.rs │ │ ├── operational_points.rs │ │ ├── routes.rs │ │ ├── signals.rs │ │ ├── speed_sections.rs │ │ ├── sql │ │ │ ├── buffer_stops_insert_errors.sql │ │ │ ├── detectors_insert_errors.sql │ │ │ ├── electrifications_insert_errors.sql │ │ │ ├── neutral_sections_insert_errors.sql │ │ │ ├── operational_points_insert_errors.sql │ │ │ ├── routes_insert_errors.sql │ │ │ ├── signals_insert_errors.sql │ │ │ ├── speed_sections_insert_errors.sql │ │ │ ├── switch_types_insert_errors.sql │ │ │ ├── switches_insert_errors.sql │ │ │ └── track_sections_insert_errors.sql │ │ ├── switch_types.rs │ │ ├── switches.rs │ │ └── track_sections.rs │ ├── mod.rs │ ├── neutral_section.rs │ ├── neutral_sign.rs │ ├── operational_point.rs │ ├── psl_sign.rs │ ├── signal.rs │ ├── speed_limit_tags_config.rs │ ├── speed_section.rs │ ├── sprite_config.rs │ ├── sql │ │ ├── generate_buffer_stop_layer.sql │ │ ├── generate_detector_layer.sql │ │ ├── generate_electrification_layer.sql │ │ ├── generate_neutral_section_layer.sql │ │ ├── generate_neutral_sign_layer.sql │ │ ├── generate_operational_point_layer.sql │ │ ├── generate_psl_sign_layer.sql │ │ ├── generate_signal_layer.sql │ │ ├── generate_speed_section_layer.sql │ │ ├── generate_switch_layer.sql │ │ ├── generate_track_section_layer.sql │ │ ├── insert_electrification_layer.sql │ │ ├── insert_neutral_sign_layer.sql │ │ ├── insert_operational_point_layer.sql │ │ ├── insert_psl_sign_layer.sql │ │ ├── insert_speed_section_layer.sql │ │ ├── insert_update_buffer_stop_layer.sql │ │ ├── insert_update_detector_layer.sql │ │ ├── insert_update_signal_layer.sql │ │ ├── insert_update_switch_layer.sql │ │ └── insert_update_track_section_layer.sql │ ├── switch.rs │ ├── track_section.rs │ └── utils.rs │ ├── infra_cache │ ├── graph.rs │ ├── mod.rs │ ├── object_cache.rs │ ├── object_cache │ │ ├── buffer_stop_cache.rs │ │ ├── detector_cache.rs │ │ ├── electrification_cache.rs │ │ ├── neutral_section_cache.rs │ │ ├── operational_point_cache.rs │ │ ├── route_cache.rs │ │ ├── signal_cache.rs │ │ ├── speed_section_cache.rs │ │ ├── switch_cache.rs │ │ ├── switch_type_cache.rs │ │ └── track_section_cache.rs │ └── operation │ │ ├── create.rs │ │ ├── delete.rs │ │ ├── mod.rs │ │ └── update.rs │ ├── main.rs │ ├── map │ ├── layer_cache.rs │ ├── layers.rs │ └── mod.rs │ ├── models │ ├── auth_driver.rs │ ├── documents.rs │ ├── electrical_profiles.rs │ ├── fixtures.rs │ ├── group.rs │ ├── infra.rs │ ├── infra │ │ ├── errors.rs │ │ ├── object_queryable.rs │ │ ├── railjson_data.rs │ │ ├── route_from_waypoint_result.rs │ │ ├── speed_limit_tags.rs │ │ ├── split_track_section_with_data.rs │ │ ├── sql │ │ │ ├── get_all_voltages_and_modes.sql │ │ │ ├── get_routes_from_waypoint.sql │ │ │ ├── get_speed_limit_tags.sql │ │ │ ├── get_split_track_section_with_data.sql │ │ │ ├── get_voltages_with_rolling_stocks_modes.sql │ │ │ └── get_voltages_without_rolling_stocks_modes.sql │ │ └── voltage.rs │ ├── infra_objects.rs │ ├── layers.rs │ ├── layers │ │ └── geo_json_and_data.rs │ ├── macro_node.rs │ ├── mod.rs │ ├── paced_train.rs │ ├── pagination.rs │ ├── prelude │ │ ├── create.rs │ │ ├── delete.rs │ │ ├── list.rs │ │ ├── mod.rs │ │ ├── retrieve.rs │ │ └── update.rs │ ├── project.rs │ ├── railjson.rs │ ├── rolling_stock.rs │ ├── rolling_stock │ │ ├── power_restrictions.rs │ │ ├── schedules_from_rolling_stock.rs │ │ └── sql │ │ │ └── get_power_restrictions.sql │ ├── rolling_stock_image.rs │ ├── rolling_stock_livery.rs │ ├── scenario.rs │ ├── stdcm_log.rs │ ├── stdcm_search_environment.rs │ ├── study.rs │ ├── subject.rs │ ├── tags.rs │ ├── temporary_speed_limits.rs │ ├── timetable.rs │ ├── timetable │ │ └── sql │ │ │ └── get_train_schedules_in_time_window.sql │ ├── towed_rolling_stock.rs │ ├── train_schedule.rs │ ├── user.rs │ └── work_schedules.rs │ ├── tests │ ├── electrical_profile_set.json │ ├── example_rolling_stock_1.json │ ├── example_rolling_stock_2_energy_sources.json │ ├── example_rolling_stock_3.json │ ├── example_rolling_stock_image_1.gif │ ├── example_rolling_stock_image_2.gif │ ├── example_towed_rolling_stock_1.json │ ├── small_infra │ │ ├── pathfinding_core_response.json │ │ ├── pathfinding_fixture_payload.json │ │ ├── pathfinding_post_multiple_waypoints_payload.json │ │ ├── pathfinding_post_payload.json │ │ └── stdcm │ │ │ └── test_1 │ │ │ ├── project_signal_response.json │ │ │ ├── stdcm_core_payload.json │ │ │ ├── stdcm_core_response.json │ │ │ ├── stdcm_post_expected_response.json │ │ │ └── stdcm_post_payload.json │ ├── test_role_config.toml │ ├── track_occupancy │ │ ├── example_pathfinding_track_occupancy.json │ │ ├── example_simulation_track_occupancy.json │ │ └── simple_train_schedule.json │ ├── train_schedule.json │ └── train_schedules │ │ ├── simple.json │ │ └── simple_array.json │ ├── valkey_utils.rs │ └── views │ ├── authz.rs │ ├── documents.rs │ ├── electrical_profiles.rs │ ├── fonts.rs │ ├── infra │ ├── attached.rs │ ├── auto_fixes │ │ ├── buffer_stop.rs │ │ ├── detector.rs │ │ ├── electrifications.rs │ │ ├── mod.rs │ │ ├── operational_point.rs │ │ ├── route.rs │ │ ├── signal.rs │ │ ├── speed_section.rs │ │ ├── switch.rs │ │ └── track_section.rs │ ├── delimited_area.rs │ ├── edition.rs │ ├── errors.rs │ ├── lines.rs │ ├── mod.rs │ ├── objects.rs │ ├── pathfinding.rs │ ├── railjson.rs │ └── routes.rs │ ├── layers.rs │ ├── mod.rs │ ├── openapi.rs │ ├── operational_studies.rs │ ├── pagination.rs │ ├── params.rs │ ├── path.rs │ ├── path │ ├── path_item_cache.rs │ ├── pathfinding.rs │ ├── projection.rs │ └── properties.rs │ ├── project.rs │ ├── projection.rs │ ├── rolling_stock.rs │ ├── rolling_stock │ ├── form.rs │ ├── light.rs │ └── towed.rs │ ├── round_trips.rs │ ├── scenario.rs │ ├── scenario │ └── macro_nodes.rs │ ├── search.rs │ ├── sprites.rs │ ├── stdcm_logs.rs │ ├── stdcm_search_environment.rs │ ├── study.rs │ ├── temporary_speed_limits.rs │ ├── test_app.rs │ ├── timetable.rs │ ├── timetable │ ├── occupancy_blocks.rs │ ├── paced_train.rs │ ├── similar_schedules.rs │ ├── simulation.rs │ ├── stdcm.rs │ ├── stdcm │ │ ├── failure_handler.rs │ │ └── request.rs │ └── train_schedule.rs │ └── work_schedules.rs ├── flake.lock ├── flake.nix ├── front ├── .dockerignore ├── .env.local.defaults ├── .eslintrc ├── .gitattributes ├── .gitignore ├── .nvmrc ├── .prettierignore ├── .prettierrc.json ├── README.md ├── docker │ ├── Dockerfile │ ├── Dockerfile.devel │ ├── Dockerfile.playwright │ ├── dev-entrypoint.sh │ └── exec-as.c ├── index.html ├── jsdoc.json ├── justfile ├── lerna.json ├── package-lock.json ├── package.json ├── playwright.config.ts ├── public │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── apple-touch-icon.png │ ├── browserconfig.xml │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon.ico │ ├── locales │ │ ├── de │ │ │ ├── errors.json │ │ │ ├── infraEditor.json │ │ │ ├── operational-studies.json │ │ │ ├── stdcm-help-section.json │ │ │ ├── stdcm.json │ │ │ └── translation.json │ │ ├── en │ │ │ ├── errors.json │ │ │ ├── infraEditor.json │ │ │ ├── operational-studies.json │ │ │ ├── stdcm-help-section.json │ │ │ ├── stdcm.json │ │ │ └── translation.json │ │ └── fr │ │ │ ├── errors.json │ │ │ ├── infraEditor.json │ │ │ ├── operational-studies.json │ │ │ ├── stdcm-help-section.json │ │ │ ├── stdcm.json │ │ │ └── translation.json │ ├── manifest.json │ ├── mstile-150x150.png │ ├── newFonts │ │ ├── IBM-Plex-Mono │ │ │ ├── IBMPlexMono-Bold.ttf │ │ │ ├── IBMPlexMono-Italic.ttf │ │ │ ├── IBMPlexMono-Medium.ttf │ │ │ ├── IBMPlexMono-Regular.ttf │ │ │ ├── IBMPlexMono-SemiBold.ttf │ │ │ └── IBMPlexMono-SemiBoldItalic.ttf │ │ ├── IBM-Plex-Sans │ │ │ ├── IBMPlexSans-Bold.ttf │ │ │ ├── IBMPlexSans-BoldItalic.ttf │ │ │ ├── IBMPlexSans-Italic.ttf │ │ │ ├── IBMPlexSans-Medium.ttf │ │ │ ├── IBMPlexSans-Regular.ttf │ │ │ ├── IBMPlexSans-SemiBold.ttf │ │ │ └── IBMPlexSans-SemiBoldItalic.ttf │ │ └── IBM-Plex-Serif │ │ │ ├── IBMPlexSerif-Italic.ttf │ │ │ ├── IBMPlexSerif-Regular.ttf │ │ │ ├── IBMPlexSerif-SemiBold.ttf │ │ │ └── IBMPlexSerif-SemiBoldItalic.ttf │ ├── pictures │ │ ├── minimotrices │ │ │ ├── motrice_0.png │ │ │ ├── motrice_1.png │ │ │ ├── motrice_10.png │ │ │ ├── motrice_11.png │ │ │ ├── motrice_12.png │ │ │ ├── motrice_13.png │ │ │ ├── motrice_14.png │ │ │ ├── motrice_15.png │ │ │ ├── motrice_16.png │ │ │ ├── motrice_17.png │ │ │ ├── motrice_18.png │ │ │ ├── motrice_19.png │ │ │ ├── motrice_2.png │ │ │ ├── motrice_20.png │ │ │ ├── motrice_21.png │ │ │ ├── motrice_3.png │ │ │ ├── motrice_4.png │ │ │ ├── motrice_5.png │ │ │ ├── motrice_6.png │ │ │ ├── motrice_7.png │ │ │ ├── motrice_8.png │ │ │ └── motrice_9.png │ │ └── signals │ │ │ ├── A.svg │ │ │ ├── BANDEJAUNE.svg │ │ │ ├── CARRE.svg │ │ │ ├── CV.svg │ │ │ ├── D.svg │ │ │ ├── REP_TGV.svg │ │ │ └── S.svg │ ├── robots.txt │ ├── safari-pinned-tab.svg │ └── site.webmanifest ├── scripts │ ├── generate-types.sh │ ├── i18n-api-errors.ts │ ├── i18n-checker.ts │ └── i18n-order-checker.sh ├── src │ ├── applications │ │ ├── editor │ │ │ ├── Editor.tsx │ │ │ ├── Home.tsx │ │ │ ├── Map.tsx │ │ │ ├── components │ │ │ │ ├── EditorForm.tsx │ │ │ │ ├── EntityError.tsx │ │ │ │ ├── EntitySumUp.tsx │ │ │ │ ├── ForceRemount.tsx │ │ │ │ ├── InfraErrors │ │ │ │ │ ├── InfraError.tsx │ │ │ │ │ ├── InfraErrorCorrector.tsx │ │ │ │ │ ├── InfraErrorCorrectorModal.tsx │ │ │ │ │ ├── InfraErrorDescription.tsx │ │ │ │ │ ├── InfraErrorIcon.tsx │ │ │ │ │ ├── InfraErrorMapControl.tsx │ │ │ │ │ ├── InfraErrorTypeLabel.tsx │ │ │ │ │ ├── InfraErrorsList.tsx │ │ │ │ │ ├── InfraErrorsModal.tsx │ │ │ │ │ ├── consts.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── LayersModal.tsx │ │ │ │ └── LinearMetadata │ │ │ │ │ ├── FormBeginEndWidget.tsx │ │ │ │ │ ├── FormComponent.tsx │ │ │ │ │ ├── FormLineStringLength.tsx │ │ │ │ │ ├── HelpModal.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── tooltip.tsx │ │ │ ├── consts.ts │ │ │ ├── context.ts │ │ │ ├── data │ │ │ │ ├── api.ts │ │ │ │ └── utils.ts │ │ │ ├── tools │ │ │ │ ├── consts.ts │ │ │ │ ├── constsToolNames.ts │ │ │ │ ├── constsTools.ts │ │ │ │ ├── pointEdition │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ └── utils.spec.ts │ │ │ │ │ ├── components │ │ │ │ │ │ ├── CustomFlagSignalCheckbox.tsx │ │ │ │ │ │ ├── CustomPosition.tsx │ │ │ │ │ │ ├── PointEditionLayers.tsx │ │ │ │ │ │ ├── PointEditionLeftPanel.tsx │ │ │ │ │ │ ├── PointEditionMessages.ts │ │ │ │ │ │ ├── RoutesList.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── consts.ts │ │ │ │ │ ├── tool-factory.tsx │ │ │ │ │ ├── tools.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── rangeEdition │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ └── utils.spec.ts │ │ │ │ │ ├── components │ │ │ │ │ │ ├── EyeToggle.tsx │ │ │ │ │ │ ├── GroupedTrackRangeList.tsx │ │ │ │ │ │ ├── RangeEditionLeftPanel.tsx │ │ │ │ │ │ ├── RouteList.tsx │ │ │ │ │ │ ├── TrackRange.tsx │ │ │ │ │ │ ├── TrackRangeApplicableDirections.tsx │ │ │ │ │ │ ├── TrackRangeButtons.tsx │ │ │ │ │ │ ├── TrackRangeList.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── consts.ts │ │ │ │ │ ├── electrification │ │ │ │ │ │ ├── ElectrificationEditionLayers.tsx │ │ │ │ │ │ └── ElectrificationMetadataForm.tsx │ │ │ │ │ ├── speedSection │ │ │ │ │ │ ├── EditPSLSection.tsx │ │ │ │ │ │ ├── PslSignCard.tsx │ │ │ │ │ │ ├── PslSignSubSection.tsx │ │ │ │ │ │ ├── SpeedInput.tsx │ │ │ │ │ │ ├── SpeedSectionEditionLayers.tsx │ │ │ │ │ │ ├── SpeedSectionMetadataForm.tsx │ │ │ │ │ │ └── SwitchList.tsx │ │ │ │ │ ├── tool-factory.tsx │ │ │ │ │ ├── tools.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── routeEdition │ │ │ │ │ ├── components │ │ │ │ │ │ ├── EndPoints.tsx │ │ │ │ │ │ ├── RouteEditionLayers.tsx │ │ │ │ │ │ ├── RouteEditionLeftPanel.tsx │ │ │ │ │ │ ├── RouteEditionMessages.ts │ │ │ │ │ │ ├── RouteMetadata.tsx │ │ │ │ │ │ ├── SearchRoute.tsx │ │ │ │ │ │ ├── SearchRouteItem.tsx │ │ │ │ │ │ ├── WayPointInput.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── tool.tsx │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils.spec.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── selection │ │ │ │ │ ├── components │ │ │ │ │ │ ├── SelectionLayers.tsx │ │ │ │ │ │ ├── SelectionLeftPanel.tsx │ │ │ │ │ │ ├── SelectionMessages.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── tool.tsx │ │ │ │ │ └── types.ts │ │ │ │ ├── switchEdition │ │ │ │ │ ├── components │ │ │ │ │ │ ├── CustomSchemaField.tsx │ │ │ │ │ │ ├── SwitchEditionLayers.tsx │ │ │ │ │ │ ├── SwitchEditionLeftPanel.tsx │ │ │ │ │ │ ├── SwitchMessages.ts │ │ │ │ │ │ ├── TrackNodeTypeDiagram.tsx │ │ │ │ │ │ ├── TrackSectionEndpointSelector.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── tool.tsx │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── useSwitch.ts │ │ │ │ │ ├── useSwitchTypes.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── switchProps.ts │ │ │ │ ├── trackEdition │ │ │ │ │ ├── components │ │ │ │ │ │ ├── AttachedRangesItemsList.tsx │ │ │ │ │ │ ├── TrackEditionLayers.tsx │ │ │ │ │ │ ├── TrackEditionLeftPanel.tsx │ │ │ │ │ │ ├── TrackEditionMessages.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── consts.ts │ │ │ │ │ ├── tool.tsx │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── trackSplit │ │ │ │ │ ├── components │ │ │ │ │ │ ├── TrackSplitLayers.tsx │ │ │ │ │ │ ├── TrackSplitLeftPanel.tsx │ │ │ │ │ │ ├── TrackSplitMessages.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── tool.tsx │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── translationTools.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ ├── types.ts │ │ │ └── typesEditorEntity.ts │ │ ├── operationalStudies │ │ │ ├── Home.tsx │ │ │ ├── __tests__ │ │ │ │ ├── sampleData.ts │ │ │ │ ├── upsertMapWaypointsInOperationalPoints.spec.ts │ │ │ │ └── utils.spec.ts │ │ │ ├── components │ │ │ │ ├── AddNewCard.tsx │ │ │ │ ├── BreadCrumbs.tsx │ │ │ │ ├── FilterTextField.tsx │ │ │ │ ├── MacroEditor │ │ │ │ │ ├── MacroEditorState.ts │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── ngeToOsrd.spec.ts │ │ │ │ │ │ ├── outOfOrderSourceTarget-output.json │ │ │ │ │ │ ├── outOfOrderSourceTarget-sharedSource-dto.json │ │ │ │ │ │ └── outOfOrderSourceTarget-sharedTarget-dto.json │ │ │ │ │ ├── consts.ts │ │ │ │ │ ├── ngeToOsrd.ts │ │ │ │ │ ├── osrdToNge.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── MicroMacroSwitch.tsx │ │ │ │ ├── NGE │ │ │ │ │ ├── NGE.tsx │ │ │ │ │ ├── consts.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Project │ │ │ │ │ └── PictureUploader.tsx │ │ │ │ ├── Scenario │ │ │ │ │ ├── EditedElementContainerContext.tsx │ │ │ │ │ ├── InfraLoadingState.tsx │ │ │ │ │ ├── ScenarioContent.tsx │ │ │ │ │ └── ScenarioDescription.tsx │ │ │ │ └── Study │ │ │ │ │ ├── DateBox.tsx │ │ │ │ │ └── StateStep.tsx │ │ │ ├── consts.ts │ │ │ ├── helpers │ │ │ │ ├── TrainProjectionLazyLoader.ts │ │ │ │ ├── TrainSimulationLazyLoader.ts │ │ │ │ ├── captureMap.ts │ │ │ │ ├── upsertMapWaypointsInOperationalPoints.ts │ │ │ │ └── upsertNewProjectedTrains.ts │ │ │ ├── hooks │ │ │ │ ├── useAutoUpdateProjection.ts │ │ │ │ ├── useCachedTrackSections.ts │ │ │ │ ├── useLazySimulateTrains.ts │ │ │ │ ├── useManageTrainScheduleContext.tsx │ │ │ │ ├── useMultiSelection.ts │ │ │ │ ├── usePathProjection.ts │ │ │ │ ├── useScenario.ts │ │ │ │ ├── useScenarioContext.tsx │ │ │ │ ├── useScenarioData.ts │ │ │ │ ├── useScenarioQueryParams.ts │ │ │ │ └── useSimulationResults.ts │ │ │ ├── types.ts │ │ │ ├── utils.ts │ │ │ ├── v2 │ │ │ │ └── components │ │ │ │ │ └── ScenarioHeader.tsx │ │ │ └── views │ │ │ │ ├── ImportTimetableItem.tsx │ │ │ │ ├── ManageTrainSchedule.tsx │ │ │ │ ├── ManageTrainScheduleModal.tsx │ │ │ │ ├── Project.tsx │ │ │ │ ├── Scenario.tsx │ │ │ │ ├── SimulationResults.tsx │ │ │ │ └── Study.tsx │ │ ├── referenceMap │ │ │ ├── Home.tsx │ │ │ └── Map.tsx │ │ ├── rollingStockEditor │ │ │ ├── Home.tsx │ │ │ └── views │ │ │ │ └── RollingStockEditor.tsx │ │ └── stdcm │ │ │ ├── components │ │ │ ├── StdcmEmptyConfigError.tsx │ │ │ ├── StdcmForm │ │ │ │ ├── StdcmCard.tsx │ │ │ │ ├── StdcmConfig.tsx │ │ │ │ ├── StdcmConsist.tsx │ │ │ │ ├── StdcmDefaultCard.tsx │ │ │ │ ├── StdcmDestination.tsx │ │ │ │ ├── StdcmLinkedTrainResults.tsx │ │ │ │ ├── StdcmLinkedTrainSearch.tsx │ │ │ │ ├── StdcmOpSchedule.tsx │ │ │ │ ├── StdcmOperationalPoint.tsx │ │ │ │ ├── StdcmOrigin.tsx │ │ │ │ ├── StdcmStopType.tsx │ │ │ │ ├── StdcmVias.tsx │ │ │ │ └── StopDurationInput.tsx │ │ │ ├── StdcmHeader.tsx │ │ │ ├── StdcmHelpModule │ │ │ │ ├── HelpSection.tsx │ │ │ │ ├── SectionContentManager.tsx │ │ │ │ ├── StdcmHelpModule.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── StdcmLayersModal.tsx │ │ │ ├── StdcmLoader.tsx │ │ │ ├── StdcmResults │ │ │ │ ├── StdcmDebugResults.tsx │ │ │ │ ├── StdcmFeedback.tsx │ │ │ │ ├── StdcmResults.tsx │ │ │ │ ├── StdcmResultsTable.tsx │ │ │ │ ├── StdcmSimulationNavigator.tsx │ │ │ │ ├── StdcmSimulationReportSheet.tsx │ │ │ │ ├── StdcmUpgrade.tsx │ │ │ │ └── index.ts │ │ │ ├── StdcmSimulationParams.tsx │ │ │ ├── StdcmStatusBanner.tsx │ │ │ └── StdcmWarningBox.tsx │ │ │ ├── consts.ts │ │ │ ├── hooks │ │ │ ├── useConflictsMessages.ts │ │ │ ├── useConsistFieldStatus.ts │ │ │ ├── useHorizontalScroll.ts │ │ │ ├── useLinkedTrainSearch.ts │ │ │ ├── useProjectedTrainsForStdcm.ts │ │ │ ├── useStaticPathfinding.ts │ │ │ ├── useStdcm.ts │ │ │ ├── useStdcmConsist.ts │ │ │ ├── useStdcmEnv.tsx │ │ │ ├── useStdcmForm.ts │ │ │ └── useStdcmTowedRollingStock.ts │ │ │ ├── styles │ │ │ └── styles.d.ts │ │ │ ├── types.ts │ │ │ ├── utils │ │ │ ├── __tests__ │ │ │ │ └── findClosestOperationalPoint.spec.ts │ │ │ ├── adjustSimulationInputs.ts │ │ │ ├── calculateConsistMaxSpeed.ts │ │ │ ├── checkStdcmConfigErrors.ts │ │ │ ├── computeOpSchedules.ts │ │ │ ├── consistValidation.ts │ │ │ ├── createMargin.ts │ │ │ ├── fetchPathProperties.ts │ │ │ ├── filterMissingFields.ts │ │ │ ├── formatConflicts.ts │ │ │ ├── formatStdcmConf.ts │ │ │ ├── formatStdcmIntoSpaceTimeData.ts │ │ │ ├── getInvalidFields.ts │ │ │ ├── index.ts │ │ │ ├── maxSpeedFromSpeedLimitByTag.ts │ │ │ ├── simulationOutputUtils.ts │ │ │ └── stdcmComputeChartData.ts │ │ │ └── views │ │ │ └── StdcmView.tsx │ ├── assets │ │ ├── defaultRSImages │ │ │ ├── example_rolling_stock_image_1.gif │ │ │ └── example_rolling_stock_image_2.gif │ │ ├── logo-color.svg │ │ ├── logo-osrd-color-white.svg │ │ ├── logo_sncf_bw.png │ │ ├── mapstyles │ │ │ ├── OSMDarkStyle.json │ │ │ ├── OSMMinimalStyle.json │ │ │ └── OSMStyle.json │ │ ├── operationStudies │ │ │ └── stdcmPerimeterOperationalPoints.ts │ │ ├── pictures │ │ │ ├── components │ │ │ │ ├── allowances.svg │ │ │ │ ├── electricalProfiles.svg │ │ │ │ ├── missing_tracks.svg │ │ │ │ ├── missing_train.svg │ │ │ │ ├── noElectricalProfiles.svg │ │ │ │ ├── pathfinding.svg │ │ │ │ ├── power_restrictions.svg │ │ │ │ ├── simulationSettings.svg │ │ │ │ ├── speedometer.svg │ │ │ │ ├── tracks.svg │ │ │ │ ├── tracks_edit.svg │ │ │ │ ├── train.svg │ │ │ │ └── trains_timetable.svg │ │ │ ├── destination.svg │ │ │ ├── home │ │ │ │ ├── editor-white.svg │ │ │ │ ├── editor.svg │ │ │ │ ├── map-white.svg │ │ │ │ ├── map.svg │ │ │ │ ├── operationalStudies-white.svg │ │ │ │ ├── operationalStudies.svg │ │ │ │ ├── rollingstockeditor-white.svg │ │ │ │ ├── rollingstockeditor.svg │ │ │ │ ├── stdcm-white.svg │ │ │ │ └── stdcm.svg │ │ │ ├── layersicons │ │ │ │ ├── bufferstop.svg │ │ │ │ ├── detectors.svg │ │ │ │ ├── layer_adv.svg │ │ │ │ ├── layer_itineraire.svg │ │ │ │ ├── layer_jdz.svg │ │ │ │ ├── layer_pn.svg │ │ │ │ ├── layer_signal.svg │ │ │ │ ├── layer_signal_open.svg │ │ │ │ ├── layer_stops.svg │ │ │ │ ├── layer_tivs.svg │ │ │ │ ├── layer_zep.svg │ │ │ │ ├── ops.svg │ │ │ │ └── switches.svg │ │ │ ├── mapMarkers │ │ │ │ ├── destination.svg │ │ │ │ ├── intermediate-point.svg │ │ │ │ └── start.svg │ │ │ ├── mapbuttons │ │ │ │ ├── mapstyle-3d-buildings.jpg │ │ │ │ ├── mapstyle-cadastre.jpg │ │ │ │ ├── mapstyle-dark.jpg │ │ │ │ ├── mapstyle-minimal.jpg │ │ │ │ ├── mapstyle-normal.jpg │ │ │ │ ├── mapstyle-ortho.jpg │ │ │ │ ├── mapstyle-osm-tracks.jpg │ │ │ │ ├── mapstyle-scan25.jpg │ │ │ │ ├── osm.png │ │ │ │ └── osmLight.png │ │ │ ├── misc │ │ │ │ ├── cat.svg │ │ │ │ ├── cheese.svg │ │ │ │ ├── dog.svg │ │ │ │ ├── ghibli.svg │ │ │ │ ├── meat.svg │ │ │ │ ├── panda.svg │ │ │ │ ├── redpanda.svg │ │ │ │ ├── sncf.svg │ │ │ │ ├── teddybear.svg │ │ │ │ ├── tiger.svg │ │ │ │ └── train.svg │ │ │ ├── origin.svg │ │ │ ├── placeholder_rollingstock_elec.gif │ │ │ ├── placeholder_rollingstock_thermal.gif │ │ │ ├── trackNodeTypes │ │ │ │ ├── crossing.svg │ │ │ │ ├── double_slip_switch.svg │ │ │ │ ├── link.svg │ │ │ │ ├── point_switch.svg │ │ │ │ └── single_slip_switch.svg │ │ │ ├── via.svg │ │ │ ├── views │ │ │ │ ├── projects.svg │ │ │ │ ├── scenarioExplorator.svg │ │ │ │ ├── scenarios.svg │ │ │ │ ├── studies.svg │ │ │ │ └── study.svg │ │ │ └── workSchedules │ │ │ │ └── ScheduledMaintenanceUp.svg │ │ ├── proud-logo-color.svg │ │ ├── proud-logo-osrd-color-white.svg │ │ ├── rollingStock │ │ │ └── freightRollingStocks.ts │ │ ├── simulationReportSheet │ │ │ ├── icon_alert_fill.png │ │ │ └── logo_sncf_reseau.png │ │ ├── xmas-logo-color.svg │ │ └── xmas-logo-osrd-color-white.svg │ ├── common │ │ ├── AlertBox.tsx │ │ ├── AnchoredMenu.tsx │ │ ├── BootstrapSNCF │ │ │ ├── CardSNCF │ │ │ │ ├── CardSNCF.scss │ │ │ │ ├── CardSNCF.tsx │ │ │ │ └── index.ts │ │ │ ├── CheckboxRadioSNCF.scss │ │ │ ├── CheckboxRadioSNCF.tsx │ │ │ ├── ChipsSNCF.tsx │ │ │ ├── DropdownSNCF.tsx │ │ │ ├── FormSNCF │ │ │ │ └── DebouncedNumberInputSNCF.tsx │ │ │ ├── HelpModalSNCF.tsx │ │ │ ├── InputGroupSNCF.scss │ │ │ ├── InputGroupSNCF.tsx │ │ │ ├── InputSNCF.tsx │ │ │ ├── ModalSNCF │ │ │ │ ├── ConfirmModal.tsx │ │ │ │ ├── DeleteModal.tsx │ │ │ │ ├── Modal.tsx │ │ │ │ ├── ModalBodySNCF.tsx │ │ │ │ ├── ModalFooterSNCF.tsx │ │ │ │ ├── ModalHeaderSNCF.tsx │ │ │ │ ├── ModalProvider.tsx │ │ │ │ ├── ModalStyle.scss │ │ │ │ ├── index.ts │ │ │ │ └── useModal.tsx │ │ │ ├── MultiSelectSNCF.tsx │ │ │ ├── NavBarSNCF.scss │ │ │ ├── NavBarSNCF.tsx │ │ │ ├── OptionsSNCF.scss │ │ │ ├── OptionsSNCF.tsx │ │ │ ├── SelectImprovedSNCF.scss │ │ │ ├── SelectImprovedSNCF.tsx │ │ │ ├── SelectSNCF.tsx │ │ │ ├── SwitchSNCF │ │ │ │ ├── SwitchSNCF.scss │ │ │ │ ├── SwitchSNCF.tsx │ │ │ │ └── index.ts │ │ │ ├── TextareaSNCF.tsx │ │ │ └── ToastSNCF.tsx │ │ ├── ButtonFullscreen.tsx │ │ ├── ChangeLanguageModal.tsx │ │ ├── Collapsable.tsx │ │ ├── DotsLoader │ │ │ ├── DotsLoader.scss │ │ │ ├── DotsLoader.tsx │ │ │ └── index.ts │ │ ├── ErrorBoundary.tsx │ │ ├── Grid │ │ │ ├── Grid.scss │ │ │ ├── Grid.tsx │ │ │ └── index.ts │ │ ├── IntervalsDataViz │ │ │ ├── IntervalItem.tsx │ │ │ ├── Scales.tsx │ │ │ ├── data.spec.ts │ │ │ ├── data.ts │ │ │ ├── dataviz.tsx │ │ │ ├── style.scss │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ ├── IntervalsEditor │ │ │ ├── IntervalsEditor.tsx │ │ │ ├── IntervalsEditorCommonForm.tsx │ │ │ ├── IntervalsEditorMarginForm.tsx │ │ │ ├── IntervalsEditorSelectForm.tsx │ │ │ ├── IntervalsEditorToolButtons.tsx │ │ │ ├── IntervalsEditorTooltip.tsx │ │ │ ├── ZoomButtons.tsx │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ ├── Loaders │ │ │ ├── Loader.scss │ │ │ ├── Loader.tsx │ │ │ └── index.ts │ │ ├── Map │ │ │ ├── BaseMap.tsx │ │ │ ├── Buttons │ │ │ │ ├── ButtonMapInfraErrors.tsx │ │ │ │ ├── ButtonMapInfras.tsx │ │ │ │ ├── MapButton.tsx │ │ │ │ └── MapButtons.tsx │ │ │ ├── Consts │ │ │ │ └── colors.ts │ │ │ ├── DefaultBaseMap.tsx │ │ │ ├── Layers │ │ │ │ ├── Errors.ts │ │ │ │ ├── Hillshade.tsx │ │ │ │ ├── IGNLayers │ │ │ │ │ ├── IGNLayers.tsx │ │ │ │ │ ├── IGN_BD_ORTHO.tsx │ │ │ │ │ ├── IGN_CADASTRE.tsx │ │ │ │ │ ├── IGN_SCAN25.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── InfraObjectLayers │ │ │ │ │ ├── BufferStops.tsx │ │ │ │ │ ├── Detectors.tsx │ │ │ │ │ ├── Electrifications.tsx │ │ │ │ │ ├── GeoJSONs.tsx │ │ │ │ │ ├── InfraObjectLayers.tsx │ │ │ │ │ ├── OperationalPoints.tsx │ │ │ │ │ ├── Routes.tsx │ │ │ │ │ ├── Signals.tsx │ │ │ │ │ ├── SpeedLimits.tsx │ │ │ │ │ ├── Switches.tsx │ │ │ │ │ ├── TracksGeographic.tsx │ │ │ │ │ ├── extensions │ │ │ │ │ │ └── SNCF │ │ │ │ │ │ │ ├── NeutralSectionSigns.tsx │ │ │ │ │ │ │ ├── NeutralSections.tsx │ │ │ │ │ │ │ ├── PSL.tsx │ │ │ │ │ │ │ └── PSLSigns.tsx │ │ │ │ │ ├── geoSignalsLayers.ts │ │ │ │ │ ├── getGeographicLayerProps.ts │ │ │ │ │ ├── getKPLabelLayerProps.ts │ │ │ │ │ ├── getMastLayerProps.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── LineSearchLayer.tsx │ │ │ │ ├── OSMLayers │ │ │ │ │ ├── Background.tsx │ │ │ │ │ ├── OSM.tsx │ │ │ │ │ ├── OSMLayers.tsx │ │ │ │ │ ├── Platforms.tsx │ │ │ │ │ ├── TracksOSM.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── OrderedLayer.tsx │ │ │ │ ├── SearchMarker.tsx │ │ │ │ ├── SnappedMarker.tsx │ │ │ │ ├── VirtualLayers.tsx │ │ │ │ ├── commonLayers.ts │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ └── useMapBlankStyle.ts │ │ │ ├── MapKey.scss │ │ │ ├── MapKey.tsx │ │ │ ├── MapModalHeader.tsx │ │ │ ├── Search │ │ │ │ ├── MapSearch.tsx │ │ │ │ ├── MapSearchLine.tsx │ │ │ │ ├── MapSearchOperationalPoint.tsx │ │ │ │ ├── MapSearchSignal.tsx │ │ │ │ ├── SignalCard.tsx │ │ │ │ └── useSearchOperationalPoint.tsx │ │ │ ├── Settings │ │ │ │ ├── MapSettings.tsx │ │ │ │ ├── MapSettingsBackgroundSwitches.tsx │ │ │ │ ├── MapSettingsLayers.tsx │ │ │ │ ├── MapSettingsMapStyle.tsx │ │ │ │ └── MapSettingsSpeedLimits.tsx │ │ │ ├── Sources │ │ │ │ ├── OpenStreetMap.tsx │ │ │ │ └── Terrain.tsx │ │ │ ├── WarpedMap │ │ │ │ ├── DataLoader.tsx │ │ │ │ ├── SimulationWarpedMap.scss │ │ │ │ ├── SimulationWarpedMap.tsx │ │ │ │ ├── WarpedMap.tsx │ │ │ │ ├── core │ │ │ │ │ ├── grids.tsx │ │ │ │ │ ├── helpers.ts │ │ │ │ │ ├── projection.ts │ │ │ │ │ ├── quadtree.ts │ │ │ │ │ └── vec-lib.ts │ │ │ │ ├── getWarping.ts │ │ │ │ └── index.ts │ │ │ ├── components │ │ │ │ └── MapMarkers.tsx │ │ │ ├── const.ts │ │ │ └── utils.ts │ │ ├── MotriceRelated │ │ │ ├── holyLand.ts │ │ │ └── motriceParty.tsx │ │ ├── Notifications │ │ │ ├── Notifications.scss │ │ │ ├── Notifications.tsx │ │ │ └── index.ts │ │ ├── OSRDMenu.tsx │ │ ├── ReleaseInformations │ │ │ ├── LicenseAttributions.tsx │ │ │ ├── ReleaseInformations.tsx │ │ │ ├── index.ts │ │ │ └── json │ │ │ │ ├── licenseCustomFormat.json │ │ │ │ └── licenses.json │ │ ├── ResizableSection.tsx │ │ ├── SelectionToolbar.tsx │ │ ├── Selector │ │ │ ├── SelectNewItemButton.tsx │ │ │ ├── Selector.tsx │ │ │ └── index.ts │ │ ├── SpeedLimitByTagSelector │ │ │ ├── SpeedLimitByTagSelector.scss │ │ │ ├── SpeedLimitByTagSelector.tsx │ │ │ ├── index.ts │ │ │ └── useStoreDataForSpeedLimitByTagSelector.ts │ │ ├── StationCard.tsx │ │ ├── Tabs.tsx │ │ ├── UserActionsDropdown.tsx │ │ ├── UserSettings.tsx │ │ ├── api │ │ │ ├── baseGeneratedApis.ts │ │ │ ├── documentApi.ts │ │ │ ├── generatedEditoastApi.ts │ │ │ ├── graouApi.ts │ │ │ ├── osrdEditoastApi.ts │ │ │ └── osrdGatewayApi.ts │ │ ├── authorization │ │ │ ├── _grantsManager.scss │ │ │ ├── components │ │ │ │ ├── Error403.tsx │ │ │ │ ├── GrantManagerAddSubjectForm.tsx │ │ │ │ ├── GrantsManager.tsx │ │ │ │ ├── GrantsManagerSubject.tsx │ │ │ │ ├── GrantsManagerSubjects.tsx │ │ │ │ ├── InitialRedirect.tsx │ │ │ │ └── ProtectedRoute.tsx │ │ │ ├── consts.ts │ │ │ ├── hooks │ │ │ │ ├── useAllowedUserRoles.ts │ │ │ │ ├── useAuthz.tsx │ │ │ │ ├── useCheckUserPrivileges.ts │ │ │ │ ├── useCheckUserRole.ts │ │ │ │ ├── useProtectedAction.ts │ │ │ │ └── useResourceListUser.tsx │ │ │ ├── roleBaseAccessControl.ts │ │ │ ├── types.ts │ │ │ └── utils │ │ │ │ └── generateGrantSelectProps.ts │ │ ├── common.scss │ │ ├── osrdContext.tsx │ │ ├── types.ts │ │ ├── uploadFileModal.tsx │ │ └── useSearchUsers.ts │ ├── config │ │ ├── config.ts │ │ ├── layerOrder.ts │ │ ├── openapi-editoast-config.cts │ │ └── openapi-gateway-config.cts │ ├── i18n.ts │ ├── index.tsx │ ├── main │ │ ├── app.tsx │ │ ├── consts.ts │ │ ├── history.ts │ │ └── home.tsx │ ├── modules │ │ ├── SimulationReportSheet │ │ │ ├── Consist.tsx │ │ │ ├── ConsistAndRoute.tsx │ │ │ ├── Header.tsx │ │ │ ├── RCInfo.tsx │ │ │ ├── Route.tsx │ │ │ ├── SimulationReportSheet.tsx │ │ │ ├── SimulationTable.tsx │ │ │ ├── StdcmLogo.tsx │ │ │ ├── index.ts │ │ │ ├── styles │ │ │ │ └── SimulationReportStyleSheet.ts │ │ │ ├── types.ts │ │ │ └── utils │ │ │ │ ├── __tests__ │ │ │ │ └── simulationReportSheet.spec.ts │ │ │ │ ├── formatSimulationReportSheet.ts │ │ │ │ └── formatSimulationTable.ts │ │ ├── conflict │ │ │ ├── components │ │ │ │ ├── ConflictCard.tsx │ │ │ │ └── ConflictsList.tsx │ │ │ ├── styles │ │ │ │ ├── _conflictList.scss │ │ │ │ └── conflict.scss │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ ├── infra │ │ │ ├── components │ │ │ │ └── InfraSelector │ │ │ │ │ ├── InfraSelector.tsx │ │ │ │ │ ├── InfraSelectorEditionActionsBar.tsx │ │ │ │ │ ├── InfraSelectorEditionActionsBarDelete.tsx │ │ │ │ │ ├── InfraSelectorEditionItem.tsx │ │ │ │ │ ├── InfraSelectorModal.tsx │ │ │ │ │ ├── InfraSelectorModalBodyEdition.tsx │ │ │ │ │ ├── InfraSelectorModalBodyStandard.tsx │ │ │ │ │ └── index.ts │ │ │ ├── styles │ │ │ │ ├── _infraSelector.scss │ │ │ │ └── infra.scss │ │ │ └── useInfra.ts │ │ ├── modules.scss │ │ ├── operationalPoint │ │ │ └── helpers │ │ │ │ └── buildOpSearchQuery.ts │ │ ├── pathfinding │ │ │ ├── components │ │ │ │ ├── IncompatibleConstraints │ │ │ │ │ ├── IncompatibleConstrainstFilters.tsx │ │ │ │ │ ├── IncompatibleConstraints.tsx │ │ │ │ │ ├── IncompatibleConstraintsItem.tsx │ │ │ │ │ ├── IncompatibleConstraintsLayer.tsx │ │ │ │ │ ├── IncompatibleConstraintsList.tsx │ │ │ │ │ ├── IncompatibleConstraintsMapFocus.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Itinerary │ │ │ │ │ ├── DisplayItinerary │ │ │ │ │ │ ├── Destination.tsx │ │ │ │ │ │ ├── Origin.tsx │ │ │ │ │ │ └── Vias.tsx │ │ │ │ │ ├── Itinerary.tsx │ │ │ │ │ ├── ModalSuggestedVias.tsx │ │ │ │ │ └── index.ts │ │ │ │ └── Pathfinding │ │ │ │ │ ├── InfraError.tsx │ │ │ │ │ ├── Pathfinding.tsx │ │ │ │ │ ├── TypeAndPath.tsx │ │ │ │ │ └── index.ts │ │ │ ├── helpers │ │ │ │ ├── __tests__ │ │ │ │ │ ├── findTrackSectionOffset.spec.ts │ │ │ │ │ ├── getPathVoltages.spec.ts │ │ │ │ │ ├── getTrackLengthCumulativeSums.spec.ts │ │ │ │ │ └── reversePathSteps.spec.ts │ │ │ │ ├── findTrackSectionOffset.ts │ │ │ │ ├── getPathVoltages.ts │ │ │ │ ├── getPointOnPathCoordinates.ts │ │ │ │ ├── getStepLocation.ts │ │ │ │ ├── getTrackLengthCumulativeSums.ts │ │ │ │ └── reversePathSteps.ts │ │ │ ├── hooks │ │ │ │ ├── useInfraStatus.ts │ │ │ │ ├── usePathProperties.ts │ │ │ │ └── usePathfinding.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ ├── powerRestriction │ │ │ ├── components │ │ │ │ └── PowerRestrictionsSelector.tsx │ │ │ ├── consts.ts │ │ │ ├── helpers │ │ │ │ ├── __tests__ │ │ │ │ │ ├── createPathStep.spec.ts │ │ │ │ │ ├── formatPowerRestrictions.spec.ts │ │ │ │ │ ├── formatPowerRestrionRangesWithHandle.spec.ts │ │ │ │ │ ├── generateEffortCurvesForTests.ts │ │ │ │ │ ├── powerRestrictionWarnings.spec.ts │ │ │ │ │ └── sampleData.ts │ │ │ │ ├── createPathStep.ts │ │ │ │ ├── formatPowerRestrictionRangesWithHandled.ts │ │ │ │ ├── formatPowerRestrictions.ts │ │ │ │ ├── getRestrictionsToResize.ts │ │ │ │ ├── powerRestrictionWarnings.ts │ │ │ │ └── utils.ts │ │ │ ├── hooks │ │ │ │ ├── usePowerRestrictionSelectorBehaviours.ts │ │ │ │ └── usePowerRestrictionSelectorData.ts │ │ │ └── types.ts │ │ ├── project │ │ │ ├── components │ │ │ │ ├── AddOrEditProjectModal.tsx │ │ │ │ ├── DeleteItemsModal.tsx │ │ │ │ └── ProjectCard.tsx │ │ │ ├── helpers │ │ │ │ └── cleanLocalStorageByProject.ts │ │ │ ├── styles │ │ │ │ ├── _addOrEditProjectModal.scss │ │ │ │ ├── _projectCard.scss │ │ │ │ ├── _selectionToolbar.scss │ │ │ │ └── project.scss │ │ │ └── utils.ts │ │ ├── rollingStock │ │ │ ├── components │ │ │ │ ├── RollingStock2Img.tsx │ │ │ │ ├── RollingStockCard │ │ │ │ │ ├── RollingStockCard.tsx │ │ │ │ │ ├── RollingStockCardButtons.tsx │ │ │ │ │ ├── RollingStockCardDetail.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── RollingStockCurve.tsx │ │ │ │ ├── RollingStockEditor │ │ │ │ │ ├── CurveParamSelectors.tsx │ │ │ │ │ ├── CurveSpreadsheet.tsx │ │ │ │ │ ├── PowerRestrictionGridModal.tsx │ │ │ │ │ ├── RollingStockEditorButtons.tsx │ │ │ │ │ ├── RollingStockEditorCurves.tsx │ │ │ │ │ ├── RollingStockEditorForm.tsx │ │ │ │ │ ├── RollingStockEditorFormHelpers.tsx │ │ │ │ │ ├── RollingStockEditorFormModal.tsx │ │ │ │ │ ├── RollingStockInformationPanel.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── RollingStockEditorCurves.spec.ts │ │ │ │ │ │ └── RollingStockEditorForm.spec.ts │ │ │ │ │ ├── formatSpreadSheetCurve.ts │ │ │ │ │ └── index.ts │ │ │ │ └── RollingStockSelector │ │ │ │ │ ├── RollingStockDarkMode.scss │ │ │ │ │ ├── RollingStockHelpers.tsx │ │ │ │ │ ├── RollingStockModal.tsx │ │ │ │ │ ├── RollingStockSelector.tsx │ │ │ │ │ ├── SearchRollingStock.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ └── RollingStockModal.spec.ts │ │ │ │ │ ├── consts │ │ │ │ │ └── colors.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── useStoreDataForRollingStockSelector.ts │ │ │ ├── consts.ts │ │ │ ├── helpers │ │ │ │ ├── __tests__ │ │ │ │ │ ├── electric.spec.ts │ │ │ │ │ ├── powerRestrictions.spec.ts │ │ │ │ │ └── utils.spec.ts │ │ │ │ ├── curves.ts │ │ │ │ ├── electric.ts │ │ │ │ ├── powerRestrictions.ts │ │ │ │ ├── rollingStockEditor.ts │ │ │ │ └── utils.ts │ │ │ ├── hooks │ │ │ │ ├── __tests__ │ │ │ │ │ └── useFilterRollingStock.spec.ts │ │ │ │ ├── useCategoryOptions.ts │ │ │ │ ├── useCompleteRollingStockSchemasProperties.ts │ │ │ │ └── useFilterRollingStock.ts │ │ │ ├── styles │ │ │ │ ├── _rollingStockCard.scss │ │ │ │ ├── _rollingStockCurves.scss │ │ │ │ ├── _rollingStockSelector.scss │ │ │ │ └── rollingStock.scss │ │ │ └── types.ts │ │ ├── scenario │ │ │ ├── components │ │ │ │ ├── AddOrEditScenarioModal.tsx │ │ │ │ ├── ScenarioCard.tsx │ │ │ │ ├── ScenarioExplorer │ │ │ │ │ ├── MiniCards.tsx │ │ │ │ │ ├── ScenarioExplorer.tsx │ │ │ │ │ ├── ScenarioExplorerModal.tsx │ │ │ │ │ ├── ScenarioExplorerProject2Image.tsx │ │ │ │ │ └── index.ts │ │ │ │ └── ScenarioLoaderMessage.tsx │ │ │ ├── helpers │ │ │ │ ├── __tests__ │ │ │ │ │ └── scenario.spec.ts │ │ │ │ └── utils.ts │ │ │ └── styles │ │ │ │ ├── _addOrEditScenarioModal.scss │ │ │ │ ├── _scenarioCard.scss │ │ │ │ ├── _scenarioExplorer.scss │ │ │ │ ├── _scenarioLoaderMessage.scss │ │ │ │ └── scenario.scss │ │ ├── simulationResult │ │ │ ├── SimulationResultExport │ │ │ │ ├── SimulationResultsExport.tsx │ │ │ │ ├── __tests__ │ │ │ │ │ └── utils.spec.ts │ │ │ │ ├── exportTrainCSV.ts │ │ │ │ └── utils.ts │ │ │ ├── components │ │ │ │ ├── ManchetteWithSpaceTimeChart │ │ │ │ │ ├── ManchetteWithSpaceTimeChart.tsx │ │ │ │ │ ├── SettingsPanel.tsx │ │ │ │ │ └── utils.ts │ │ │ │ ├── SimulationResultsMap │ │ │ │ │ ├── RenderItinerary.tsx │ │ │ │ │ ├── SimulationResultsMap.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── SpaceTimeChart │ │ │ │ │ ├── ManchetteMenuButton.tsx │ │ │ │ │ ├── ProjectionLoadingMessage.tsx │ │ │ │ │ ├── WaypointsPanel.tsx │ │ │ │ │ ├── helpers │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── utils.spec.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── useGetProjectedTrainOperationalPoints.ts │ │ │ │ │ ├── useLazyProjectTrains.ts │ │ │ │ │ ├── useProjectedConflicts.ts │ │ │ │ │ └── useWaypointMenu.tsx │ │ │ │ └── SpeedSpaceChart │ │ │ │ │ ├── SpeedSpaceChartContainer.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ └── helpers.spec.ts │ │ │ │ │ ├── consts.ts │ │ │ │ │ └── helpers.ts │ │ │ ├── consts.ts │ │ │ ├── helpers │ │ │ │ └── formatTimetableItemSummaries.ts │ │ │ ├── hooks │ │ │ │ └── useFormattedOperationalPoints.ts │ │ │ ├── styles │ │ │ │ ├── _timeline.scss │ │ │ │ ├── manchetteWithSpaceTimeChart.scss │ │ │ │ └── simulationResult.scss │ │ │ └── types.ts │ │ ├── stdcmAllowances │ │ │ └── components │ │ │ │ └── StdcmAllowances.tsx │ │ ├── study │ │ │ ├── components │ │ │ │ ├── AddOrEditStudyModal.tsx │ │ │ │ └── StudyCard.tsx │ │ │ ├── styles │ │ │ │ ├── _addOrEditStudyModal.scss │ │ │ │ ├── _studyCard.scss │ │ │ │ └── study.scss │ │ │ └── utils.ts │ │ ├── timesStops │ │ │ ├── ReadOnlyTime.tsx │ │ │ ├── TimeInput.tsx │ │ │ ├── TimesStops.tsx │ │ │ ├── TimesStopsInput.tsx │ │ │ ├── TimesStopsOutput.tsx │ │ │ ├── consts.ts │ │ │ ├── helpers │ │ │ │ ├── __tests__ │ │ │ │ │ ├── computeMargins.spec.ts │ │ │ │ │ ├── scheduleData.spec.ts │ │ │ │ │ └── utils.spec.ts │ │ │ │ ├── arrivalTime.ts │ │ │ │ ├── computeMargins.ts │ │ │ │ ├── scheduleData.ts │ │ │ │ └── utils.ts │ │ │ ├── hooks │ │ │ │ ├── useOutputTableData.ts │ │ │ │ └── useTimesStopsColumns.tsx │ │ │ ├── styles │ │ │ │ ├── _readOnlyTime.scss │ │ │ │ ├── _timeInput.scss │ │ │ │ ├── _timesStopsDatasheet.scss │ │ │ │ └── timesStops.scss │ │ │ └── types.ts │ │ ├── towedRollingStock │ │ │ └── hooks │ │ │ │ └── useFilterTowedRollingStock.ts │ │ └── trainschedule │ │ │ ├── components │ │ │ ├── ImportTimetableItem │ │ │ │ ├── ImportTimetableItemConfig.tsx │ │ │ │ ├── ImportTimetableItemStationSelector.tsx │ │ │ │ ├── ImportTimetableItemTrainsList.tsx │ │ │ │ ├── generateTrainSchedulesPayloads.ts │ │ │ │ ├── helpers │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ └── importTimetableItem.spec.ts │ │ │ │ │ ├── buildStepsFromOcp.ts │ │ │ │ │ ├── findMostFrequentXmlSchedule.ts │ │ │ │ │ └── parseXML.ts │ │ │ │ ├── index.ts │ │ │ │ ├── rollingstock_opendata2osrd.json │ │ │ │ └── types.ts │ │ │ ├── ManageTrainSchedule │ │ │ │ ├── ConstraintDistributionSwitch.tsx │ │ │ │ ├── CreateTimetableItemButton.tsx │ │ │ │ ├── ElectricalProfiles.tsx │ │ │ │ ├── ManageTrainScheduleMap │ │ │ │ │ ├── AddPathStepPopup.tsx │ │ │ │ │ ├── ItineraryLayer.tsx │ │ │ │ │ ├── ItineraryMarkers.tsx │ │ │ │ │ ├── OperationalPointPopupDetails.tsx │ │ │ │ │ └── setPointIti.ts │ │ │ │ ├── Map.tsx │ │ │ │ ├── PacedTrainSettings │ │ │ │ │ ├── AddedOccurrences.tsx │ │ │ │ │ ├── PacedTrainSettings.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── SimulationSettings.tsx │ │ │ │ ├── TimetableManageTrainSchedule.tsx │ │ │ │ ├── TrainSettings.tsx │ │ │ │ ├── consts.ts │ │ │ │ ├── helpers │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── formatSchedule.spec.ts │ │ │ │ │ │ └── formatTimetableItemPayload.spec.ts │ │ │ │ │ ├── buildPacedTrainException.ts │ │ │ │ │ ├── checkCurrentConfig.ts │ │ │ │ │ ├── findValidTrainNameKey.ts │ │ │ │ │ ├── formatMargin.ts │ │ │ │ │ ├── formatSchedule.ts │ │ │ │ │ ├── formatTimetableItemPayload.ts │ │ │ │ │ └── handleParseFiles.ts │ │ │ │ ├── hooks │ │ │ │ │ └── useUpdateTimetableItem.ts │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ └── Timetable │ │ │ │ ├── ArrivalTimeLoader.tsx │ │ │ │ ├── FilterPanel.tsx │ │ │ │ ├── PacedTrain │ │ │ │ ├── OccurrenceIndicator.tsx │ │ │ │ ├── OccurrenceItem.tsx │ │ │ │ ├── PacedTrainItem.tsx │ │ │ │ └── hooks │ │ │ │ │ ├── useOccurrenceActions.ts │ │ │ │ │ └── useOccurrences.ts │ │ │ │ ├── Timetable.tsx │ │ │ │ ├── TimetableItemActions.tsx │ │ │ │ ├── TimetableToolbar.tsx │ │ │ │ ├── TrainScheduleItem.tsx │ │ │ │ ├── consts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ ├── useFilterTimetableItems.ts │ │ │ │ └── utils.ts │ │ │ ├── helpers │ │ │ ├── __tests__ │ │ │ │ ├── computeOccurrenceName.spec.ts │ │ │ │ └── pacedTrain.spec.ts │ │ │ ├── computeBasePathStep.ts │ │ │ ├── computeOccurrenceName.ts │ │ │ ├── formatBaseTimetableItemWithDetails.ts │ │ │ ├── pacedTrain.ts │ │ │ └── updateTimetableItemHelpers.ts │ │ │ ├── hooks │ │ │ └── useSelectedTrain.tsx │ │ │ └── styles │ │ │ ├── ImportTimetableItem │ │ │ └── _importTimetableItemTrainsList.scss │ │ │ ├── ManageTimetableItem │ │ │ ├── _itinerary.scss │ │ │ └── _pacedTrainsSettings.scss │ │ │ └── timetableItem.scss │ ├── reducers │ │ ├── editor │ │ │ ├── __tests__ │ │ │ │ ├── editorReducer.spec.ts │ │ │ │ └── editorTestDataBuilder.ts │ │ │ ├── index.ts │ │ │ ├── selectors.ts │ │ │ └── thunkActions.ts │ │ ├── index.ts │ │ ├── infra │ │ │ ├── generateGrantSelectProps.spec.ts │ │ │ ├── index.ts │ │ │ └── selectors.ts │ │ ├── main │ │ │ ├── index.ts │ │ │ ├── mainReducer.spec.ts │ │ │ └── mainSelector.ts │ │ ├── map │ │ │ ├── index.ts │ │ │ ├── mapReducer.spec.ts │ │ │ └── selectors.ts │ │ ├── mapViewer │ │ │ ├── __tests__ │ │ │ │ └── mapViewerReducer.spec.ts │ │ │ ├── index.ts │ │ │ └── selectors.ts │ │ ├── osrdconf │ │ │ ├── __tests__ │ │ │ │ └── helpers.spec.ts │ │ │ ├── helpers.ts │ │ │ ├── infra_schema.json │ │ │ ├── operationalStudiesConf │ │ │ │ ├── __tests__ │ │ │ │ │ ├── itineraryReducer.ts │ │ │ │ │ ├── operationalStudiesConfReducer.spec.ts │ │ │ │ │ └── trainSettingsReducer.ts │ │ │ │ ├── index.ts │ │ │ │ ├── itineraryReducer.ts │ │ │ │ ├── powerRestrictionReducer.ts │ │ │ │ ├── selectors.ts │ │ │ │ ├── trainSettingsReducer.ts │ │ │ │ └── utils.ts │ │ │ ├── osrdConfCommon │ │ │ │ ├── __tests__ │ │ │ │ │ ├── commonConfBuilder.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── index.ts │ │ │ │ └── selectors.ts │ │ │ ├── stdcmConf │ │ │ │ ├── index.ts │ │ │ │ ├── selectors.ts │ │ │ │ └── stdcmConfReducers.spec.ts │ │ │ └── types.ts │ │ ├── simulationResults │ │ │ ├── index.ts │ │ │ ├── selectors.ts │ │ │ ├── simulationResultsReducer.spec.ts │ │ │ └── types.ts │ │ └── user │ │ │ ├── index.ts │ │ │ ├── userReducer.spec.ts │ │ │ └── userSelectors.ts │ ├── store │ │ ├── index.ts │ │ └── listeners │ │ │ ├── authorization.ts │ │ │ ├── listenerMiddleware.ts │ │ │ ├── types.ts │ │ │ └── user.ts │ ├── styles │ │ ├── scss │ │ │ ├── _body.scss │ │ │ ├── _fonts.scss │ │ │ ├── _home.scss │ │ │ ├── _overrideBootstrapSNCF.scss │ │ │ ├── _uiCoreIntegration.scss │ │ │ ├── _uiManchette.scss │ │ │ ├── _uiSpaceTimeChart.scss │ │ │ ├── _uiSpeedSpaceChart.scss │ │ │ ├── _variables.scss │ │ │ ├── applications │ │ │ │ ├── _operationalStudies.scss │ │ │ │ ├── _stdcm.scss │ │ │ │ ├── editor │ │ │ │ │ ├── _editor.scss │ │ │ │ │ ├── _editorForm.scss │ │ │ │ │ └── _speedSection.scss │ │ │ │ ├── operationalStudies │ │ │ │ │ ├── _home.scss │ │ │ │ │ ├── _importTimetableItem.scss │ │ │ │ │ ├── _manageTimetableItem.scss │ │ │ │ │ ├── _nge.scss │ │ │ │ │ ├── _pacedTrain.scss │ │ │ │ │ ├── _project.scss │ │ │ │ │ ├── _scenario.scss │ │ │ │ │ ├── _scenarioContentV2.scss │ │ │ │ │ ├── _scenarioV2.scss │ │ │ │ │ ├── _simulationresults.scss │ │ │ │ │ ├── _study.scss │ │ │ │ │ └── _waypointsPanel.scss │ │ │ │ ├── rollingStockEditor │ │ │ │ │ └── _rollingStockForm.scss │ │ │ │ └── stdcm │ │ │ │ │ ├── _card.scss │ │ │ │ │ ├── _configError.scss │ │ │ │ │ ├── _header.scss │ │ │ │ │ ├── _helpModule.scss │ │ │ │ │ ├── _home.scss │ │ │ │ │ ├── _linkedTrain.scss │ │ │ │ │ ├── _loader.scss │ │ │ │ │ └── _results.scss │ │ │ └── common │ │ │ │ ├── _common.scss │ │ │ │ ├── _components.scss │ │ │ │ ├── _rc-slider.scss │ │ │ │ ├── components │ │ │ │ ├── _debouncedNumberInput.scss │ │ │ │ ├── _infraLoadingState.scss │ │ │ │ ├── _intervalsEditor.scss │ │ │ │ ├── _manchetteWithSpaceTimeChart.scss │ │ │ │ ├── _osrdMenu.scss │ │ │ │ ├── _pathfinding.scss │ │ │ │ ├── _releaseInformations.scss │ │ │ │ ├── _resizableSection.scss │ │ │ │ ├── _selector.scss │ │ │ │ ├── _stationCard.scss │ │ │ │ ├── _tabs.scss │ │ │ │ └── _typeAndPath.scss │ │ │ │ └── map │ │ │ │ ├── _map.scss │ │ │ │ ├── _mapSearch.scss │ │ │ │ └── _popup.scss │ │ └── styles.scss │ ├── test-data │ │ └── geojson.ts │ ├── types │ │ ├── geospatial.ts │ │ └── index.ts │ ├── utils │ │ ├── __tests__ │ │ │ ├── array.spec.ts │ │ │ ├── assets │ │ │ │ ├── line-northern-latitude.json │ │ │ │ ├── line-point-on-left.json │ │ │ │ ├── line-point-on-right.json │ │ │ │ ├── line-point-on-vertex-up.json │ │ │ │ ├── line-point-on-vertex.json │ │ │ │ ├── line1.json │ │ │ │ ├── route1.json │ │ │ │ └── route2.json │ │ │ ├── constants.spec.ts │ │ │ ├── date.spec.ts │ │ │ ├── geometry.spec.ts │ │ │ ├── numbers.spec.ts │ │ │ ├── physics.spec.ts │ │ │ ├── strings.spec.ts │ │ │ ├── timeManipulation.spec.ts │ │ │ └── trainId.spec.ts │ │ ├── array.ts │ │ ├── constants.ts │ │ ├── date.ts │ │ ├── duration.ts │ │ ├── error.ts │ │ ├── geometry.ts │ │ ├── helpers.ts │ │ ├── hooks │ │ │ ├── state.ts │ │ │ ├── useAuth.ts │ │ │ ├── useDeploymentSettings.tsx │ │ │ ├── useInputChange.ts │ │ │ ├── useKeyboardShortcuts.ts │ │ │ ├── useModalFocusTrap.ts │ │ │ └── useOutsideClick.ts │ │ ├── inputManipulation.ts │ │ ├── mapHelper.ts │ │ ├── numbers.ts │ │ ├── object.ts │ │ ├── physics.ts │ │ ├── selectors.ts │ │ ├── strings.ts │ │ ├── timeManipulation.ts │ │ ├── trainId.ts │ │ ├── types.ts │ │ ├── uiCoreHelpers.ts │ │ └── useAsyncMemo.ts │ └── vite-env.d.ts ├── tests │ ├── 001-home-page.spec.ts │ ├── 002-project-management.spec.ts │ ├── 003-study-management.spec.ts │ ├── 004-scenario-management.spec.ts │ ├── 005-rolling-stock-editor.spec.ts │ ├── 006-op-rolling-stock-tab.spec.ts │ ├── 007-op-route-tab.spec.ts │ ├── 008-op-times-and-stops-tab.spec.ts │ ├── 009-op-simulation-settings-tab.spec.ts │ ├── 009-op-simulation-settings-tab.spec.ts-snapshots │ │ ├── SpeedSpaceChart-AllSettingsEnabled-chromium-linux.png │ │ ├── SpeedSpaceChart-AllSettingsEnabled-firefox-linux.png │ │ ├── SpeedSpaceChart-ElectricalProfileActivated-chromium-linux.png │ │ ├── SpeedSpaceChart-ElectricalProfileActivated-firefox-linux.png │ │ ├── SpeedSpaceChart-ElectricalProfileDisabled-chromium-linux.png │ │ ├── SpeedSpaceChart-ElectricalProfileDisabled-firefox-linux.png │ │ ├── SpeedSpaceChart-LinearMargin-chromium-linux.png │ │ ├── SpeedSpaceChart-LinearMargin-firefox-linux.png │ │ ├── SpeedSpaceChart-MarecoMargin-chromium-linux.png │ │ ├── SpeedSpaceChart-MarecoMargin-firefox-linux.png │ │ ├── SpeedSpaceChart-SpeedLimitTagActivated-chromium-linux.png │ │ ├── SpeedSpaceChart-SpeedLimitTagActivated-firefox-linux.png │ │ ├── SpeedSpaceChart-SpeedLimitTagDisabled-chromium-linux.png │ │ └── SpeedSpaceChart-SpeedLimitTagDisabled-firefox-linux.png │ ├── 010-stdcm.spec.ts │ ├── 011-stdcm-simulation-sheet.spec.ts │ ├── 012-stdcm-feedback-mail.spec.ts │ ├── 013-stdcm-linked-train.spec.ts │ ├── 014-stdcm-missing-fields.spec.ts │ ├── 015-train-timetable.spec.ts │ ├── 016-train-timetable-multiselection.spec.ts │ ├── 017-paced-train-management.spec.ts │ ├── 017-paced-train-management.spec.ts-snapshots │ │ ├── SpeedSpaceChart-InitialInputs-chromium-linux.png │ │ └── SpeedSpaceChart-InitialInputs-firefox-linux.png │ ├── 018-train-edition.spec.ts │ ├── 019-scenario-page-synchronization.spec.ts │ ├── 020-paced-train-exceptions.spec.ts │ ├── assets │ │ ├── constants │ │ │ ├── linked-train-const.ts │ │ │ ├── mail-feedback-const.ts │ │ │ ├── missing-fields.ts │ │ │ ├── operational-studies-const.ts │ │ │ ├── project-const.ts │ │ │ ├── simulation-sheet-const.ts │ │ │ ├── stdcm-const.ts │ │ │ └── timetable-items-count.ts │ │ ├── infrastructure │ │ │ └── infra.json │ │ ├── operation-studies │ │ │ ├── project.json │ │ │ ├── scenario.json │ │ │ ├── simulation-settings │ │ │ │ ├── all-settings.json │ │ │ │ ├── electrical-profiles │ │ │ │ │ ├── electrical-profile-off.json │ │ │ │ │ ├── electrical-profile-on.json │ │ │ │ │ └── electrical-profile.json │ │ │ │ ├── margin │ │ │ │ │ ├── linear-margin.json │ │ │ │ │ └── mareco-margin.json │ │ │ │ └── speed-limit-tag │ │ │ │ │ ├── speed-limit-tag-off.json │ │ │ │ │ └── speed-limit-tag-on.json │ │ │ ├── study.json │ │ │ └── times-and-stops │ │ │ │ ├── expected-inputs-cells-data.json │ │ │ │ ├── expected-outputs-cells-data.json │ │ │ │ ├── initial-inputs.json │ │ │ │ ├── updated-inputs-cells-data.json │ │ │ │ └── updated-inputs.json │ │ ├── paced-train │ │ │ ├── const.ts │ │ │ ├── output-table-data.json │ │ │ └── paced_trains.json │ │ ├── rolling-stock │ │ │ ├── dual-mode_rolling_stock.json │ │ │ ├── fast_rolling_stock.json │ │ │ ├── improbable_rolling_stock.json │ │ │ ├── rolling-stock-details.json │ │ │ └── slow_rolling_stock.json │ │ ├── stdcm │ │ │ ├── linked-train │ │ │ │ ├── anterior-linked-train-table.json │ │ │ │ └── posterior-linked-train-table.json │ │ │ ├── stdcm-all-stops.json │ │ │ ├── stdcm-with-all-via.json │ │ │ ├── stdcm-without-all-via.json │ │ │ └── towed-rolling-stock │ │ │ │ ├── towed-rolling-stock-table-result.json │ │ │ │ └── towed-rolling-stock.json │ │ └── train-schedule │ │ │ └── train_schedules.json │ ├── global-setup.ts │ ├── global-teardown.ts │ ├── logging-fixture.ts │ ├── pages │ │ ├── common-page.ts │ │ ├── home-page.ts │ │ ├── operational-studies │ │ │ ├── operational-studies-page.ts │ │ │ ├── paced-train-section.ts │ │ │ ├── project-page.ts │ │ │ ├── route-tab.ts │ │ │ ├── scenario-page.ts │ │ │ ├── scenario-timetable-section.ts │ │ │ ├── simulation-results-page.ts │ │ │ ├── simulation-settings-tab.ts │ │ │ ├── study-page.ts │ │ │ ├── time-stop-simulation-outputs.ts │ │ │ └── times-and-stops-tab.ts │ │ ├── rolling-stock │ │ │ ├── rolling-stock-editor-page.ts │ │ │ └── rolling-stock-selector.ts │ │ └── stdcm │ │ │ ├── consist-section.ts │ │ │ ├── destination-section.ts │ │ │ ├── linked-train-section.ts │ │ │ ├── origin-section.ts │ │ │ ├── simulation-results-page.ts │ │ │ ├── stdcm-page.ts │ │ │ └── via-section.ts │ └── utils │ │ ├── api-utils.ts │ │ ├── data-normalizer.ts │ │ ├── date-utils.ts │ │ ├── file-utils.ts │ │ ├── index.ts │ │ ├── paced-train.ts │ │ ├── pdf-parser.ts │ │ ├── scenario.ts │ │ ├── scroll-helper.ts │ │ ├── setup-utils.ts │ │ ├── teardown-utils.ts │ │ ├── train-schedule.ts │ │ └── types.ts ├── tsconfig.json ├── ui │ ├── .eslintrc │ ├── .gitignore │ ├── .prettierrc.json │ ├── README.md │ ├── base │ │ └── package.json │ ├── postcss-base.config.cjs │ ├── rollup-base.config.js │ ├── storybook │ │ ├── .storybook │ │ │ ├── main.ts │ │ │ └── preview.ts │ │ ├── package.json │ │ ├── postcss.config.cjs │ │ ├── public │ │ │ ├── nantes-ancenis.json │ │ │ ├── nantes-angers.json │ │ │ ├── nantes-copenhagen.json │ │ │ └── nantes-marseille.json │ │ ├── stories │ │ │ ├── ui-charts │ │ │ │ ├── manchette │ │ │ │ │ ├── Manchette.stories.tsx │ │ │ │ │ ├── ManchetteSplit.stories.tsx │ │ │ │ │ └── assets │ │ │ │ │ │ └── sampleData.ts │ │ │ │ ├── manchetteWithSpaceTimeChart │ │ │ │ │ ├── AnchoredMenu.tsx │ │ │ │ │ ├── Menu.tsx │ │ │ │ │ ├── assets │ │ │ │ │ │ ├── sampleData.ts │ │ │ │ │ │ └── trackOccupancyData.ts │ │ │ │ │ ├── base-with-waypoint-menu.stories.tsx │ │ │ │ │ ├── base.stories.tsx │ │ │ │ │ ├── rectangle-zoom.stories.tsx │ │ │ │ │ ├── simple.stories.tsx │ │ │ │ │ ├── split.stories.tsx │ │ │ │ │ ├── styles │ │ │ │ │ │ └── rectangle-zoom.css │ │ │ │ │ └── track-occupancy.stories.tsx │ │ │ │ ├── spaceTimeChart │ │ │ │ │ ├── additional-data.stories.tsx │ │ │ │ │ ├── assets │ │ │ │ │ │ └── images │ │ │ │ │ │ │ └── ScheduledMaintenanceUp.svg │ │ │ │ │ ├── base-rendering.stories.tsx │ │ │ │ │ ├── custom-styles.stories.tsx │ │ │ │ │ ├── helpers │ │ │ │ │ │ ├── components.tsx │ │ │ │ │ │ ├── consts.ts │ │ │ │ │ │ ├── paths.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── horizontal-zoom.stories.tsx │ │ │ │ │ ├── layers.stories.tsx │ │ │ │ │ ├── measuring.stories.tsx │ │ │ │ │ ├── options.stories.tsx │ │ │ │ │ ├── paths-interactions.stories.tsx │ │ │ │ │ ├── performances.stories.tsx │ │ │ │ │ ├── quadrilateral.stories.tsx │ │ │ │ │ ├── rectangle-zoom.stories.tsx │ │ │ │ │ ├── scroll-navigation.stories.tsx │ │ │ │ │ ├── split.stories.tsx │ │ │ │ │ ├── stage-interactions.stories.tsx │ │ │ │ │ ├── styles │ │ │ │ │ │ └── rectangle-zoom.css │ │ │ │ │ ├── tooltip.stories.tsx │ │ │ │ │ └── work-schedules.stories.tsx │ │ │ │ ├── speedSpaceChart │ │ │ │ │ ├── SpeedSpaceChart.stories.tsx │ │ │ │ │ ├── assets │ │ │ │ │ │ ├── path_properties_PMP_LM.ts │ │ │ │ │ │ ├── power_restrictions_PMP_LM.ts │ │ │ │ │ │ ├── simulation_PMP_LM.ts │ │ │ │ │ │ └── speed_limit_tags_PMP_LM.ts │ │ │ │ │ ├── consts.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils.ts │ │ │ │ └── trackOccupancyDiagram │ │ │ │ │ ├── assets │ │ │ │ │ ├── occupancyZones.ts │ │ │ │ │ └── tracks.ts │ │ │ │ │ ├── rendering.stories.tsx │ │ │ │ │ └── styles │ │ │ │ │ └── track-occupancy.css │ │ │ ├── ui-core │ │ │ │ ├── Button.stories.tsx │ │ │ │ ├── Checkbox.stories.tsx │ │ │ │ ├── CheckboxTree.stories.tsx │ │ │ │ ├── ComboBox.stories.tsx │ │ │ │ ├── ComboBoxCustom.stories.tsx │ │ │ │ ├── DatePicker.stories.tsx │ │ │ │ ├── Input.stories.tsx │ │ │ │ ├── PasswordInput.stories.tsx │ │ │ │ ├── RadioButton.stories.tsx │ │ │ │ ├── RadioGroup.stories.tsx │ │ │ │ ├── Select.stories.tsx │ │ │ │ ├── Slider.stories.tsx │ │ │ │ ├── TextArea.stories.tsx │ │ │ │ ├── TimePicker.stories.tsx │ │ │ │ ├── TokenInput.stories.tsx │ │ │ │ ├── TolerancePicker.stories.tsx │ │ │ │ └── stories.css │ │ │ ├── ui-icons │ │ │ │ ├── ErrorBoundary.tsx │ │ │ │ ├── Icons.stories.tsx │ │ │ │ └── SearchIcons.tsx │ │ │ └── ui-warped-map │ │ │ │ ├── Algorithms.stories.ts │ │ │ │ ├── Algorithms.tsx │ │ │ │ ├── SampleMap.stories.ts │ │ │ │ ├── SampleMap.tsx │ │ │ │ ├── helpers.ts │ │ │ │ └── useAsyncMemo.ts │ │ ├── tailwind.config.js │ │ └── tsconfig.json │ ├── tailwind-preset.js │ ├── tsconfig.base.json │ ├── ui-charts │ │ ├── README.md │ │ ├── package.json │ │ ├── postcss.config.cjs │ │ ├── rollup.config.js │ │ ├── src │ │ │ ├── index.ts │ │ │ ├── manchette │ │ │ │ ├── components │ │ │ │ │ ├── Manchette.tsx │ │ │ │ │ ├── ManchetteWithSpaceTimeChart.tsx │ │ │ │ │ └── Waypoint.tsx │ │ │ │ ├── consts.ts │ │ │ │ ├── hooks │ │ │ │ │ ├── useManchetteWithSpaceTimeChart.tsx │ │ │ │ │ └── usePaths.ts │ │ │ │ ├── index.ts │ │ │ │ ├── styles │ │ │ │ │ ├── main.css │ │ │ │ │ ├── manchette.css │ │ │ │ │ ├── menu.css │ │ │ │ │ └── waypoint.css │ │ │ │ ├── types.ts │ │ │ │ └── utils │ │ │ │ │ ├── __tests__ │ │ │ │ │ └── helpers.spec.ts │ │ │ │ │ ├── helpers.ts │ │ │ │ │ └── index.ts │ │ │ ├── spaceTimeChart │ │ │ │ ├── README.md │ │ │ │ ├── __tests__ │ │ │ │ │ ├── canvas.spec.ts │ │ │ │ │ ├── geometry.spec.ts │ │ │ │ │ ├── paths.spec.ts │ │ │ │ │ ├── scales.spec.ts │ │ │ │ │ └── snapping.spec.ts │ │ │ │ ├── components │ │ │ │ │ ├── ConflictLayer.tsx │ │ │ │ │ ├── ConflictTooltip.tsx │ │ │ │ │ ├── OccupancyBlockLayer.tsx │ │ │ │ │ ├── PathLayer.tsx │ │ │ │ │ ├── PatternRect.tsx │ │ │ │ │ ├── Quadrilateral.tsx │ │ │ │ │ ├── SpaceGraduations.tsx │ │ │ │ │ ├── SpaceTimeChart.tsx │ │ │ │ │ ├── TimeCaptions.tsx │ │ │ │ │ ├── TimeGraduations.tsx │ │ │ │ │ ├── Tooltip.tsx │ │ │ │ │ ├── WorkScheduleLayer.tsx │ │ │ │ │ └── ZoomRect.tsx │ │ │ │ ├── config.ts │ │ │ │ ├── hooks │ │ │ │ │ ├── useCanvas.ts │ │ │ │ │ ├── useDevicePixelRatio.ts │ │ │ │ │ ├── useMouseInteractions.ts │ │ │ │ │ ├── useMouseTracking.ts │ │ │ │ │ └── useSize.ts │ │ │ │ ├── index.ts │ │ │ │ ├── lib │ │ │ │ │ ├── consts.ts │ │ │ │ │ ├── context.ts │ │ │ │ │ ├── theme.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── styles │ │ │ │ │ └── main.css │ │ │ │ └── utils │ │ │ │ │ ├── __tests__ │ │ │ │ │ ├── canvas.spec.ts │ │ │ │ │ └── scales.spec.ts │ │ │ │ │ ├── canvas.ts │ │ │ │ │ ├── colors.ts │ │ │ │ │ ├── events.ts │ │ │ │ │ ├── geometry.ts │ │ │ │ │ ├── paths.ts │ │ │ │ │ ├── png.ts │ │ │ │ │ ├── scales.ts │ │ │ │ │ ├── snapping.ts │ │ │ │ │ └── vectors.ts │ │ │ ├── speedSpaceChart │ │ │ │ ├── README.md │ │ │ │ ├── __tests__ │ │ │ │ │ └── utils.spec.ts │ │ │ │ ├── components │ │ │ │ │ ├── SpeedSpaceChart.tsx │ │ │ │ │ ├── common │ │ │ │ │ │ ├── DetailsBox.tsx │ │ │ │ │ │ ├── InteractionButtons.tsx │ │ │ │ │ │ ├── SettingsPanel.tsx │ │ │ │ │ │ └── Tooltip.tsx │ │ │ │ │ ├── const.ts │ │ │ │ │ ├── helpers │ │ │ │ │ │ ├── drawElements │ │ │ │ │ │ │ ├── axisY.ts │ │ │ │ │ │ │ ├── curve.ts │ │ │ │ │ │ │ ├── declivity.ts │ │ │ │ │ │ │ ├── electricalProfile.ts │ │ │ │ │ │ │ ├── powerRestrictions.ts │ │ │ │ │ │ │ ├── reticle.ts │ │ │ │ │ │ │ ├── speedLimitTags.ts │ │ │ │ │ │ │ ├── speedLimits.ts │ │ │ │ │ │ │ ├── steps.ts │ │ │ │ │ │ │ ├── tickX.ts │ │ │ │ │ │ │ └── tickYRight.ts │ │ │ │ │ │ ├── frontFrame.ts │ │ │ │ │ │ └── layersManager.ts │ │ │ │ │ ├── hooks.ts │ │ │ │ │ ├── layers │ │ │ │ │ │ ├── CurveLayer.tsx │ │ │ │ │ │ ├── DeclivityLayer.tsx │ │ │ │ │ │ ├── ElectricalProfileLayer.tsx │ │ │ │ │ │ ├── FrontInteractivityLayer.tsx │ │ │ │ │ │ ├── PowerRestrictionsLayer.tsx │ │ │ │ │ │ ├── ReticleLayer.tsx │ │ │ │ │ │ ├── SpeedLimitTagsLayer.tsx │ │ │ │ │ │ ├── SpeedLimitsLayer.tsx │ │ │ │ │ │ ├── StepsLayer.tsx │ │ │ │ │ │ ├── TickLayerX.tsx │ │ │ │ │ │ ├── TickLayerY.tsx │ │ │ │ │ │ ├── TickLayerYRight.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── index.ts │ │ │ │ ├── styles │ │ │ │ │ └── main.css │ │ │ │ └── types.ts │ │ │ └── trackOccupancyDiagram │ │ │ │ ├── __tests__ │ │ │ │ └── utils.spec.ts │ │ │ │ ├── components │ │ │ │ ├── TrackOccupancyCanvas.tsx │ │ │ │ ├── TrackOccupancyManchette.tsx │ │ │ │ ├── TrackOccupancyStandalone.tsx │ │ │ │ ├── consts.ts │ │ │ │ ├── helpers │ │ │ │ │ └── drawElements │ │ │ │ │ │ ├── drawOccupancyZones.ts │ │ │ │ │ │ ├── drawOccupancyZonesTexts.ts │ │ │ │ │ │ ├── drawTrack.ts │ │ │ │ │ │ └── drawTracks.ts │ │ │ │ ├── layers │ │ │ │ │ ├── OccupancyZonesLayer.tsx │ │ │ │ │ └── TracksLayer.tsx │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ │ ├── index.ts │ │ │ │ └── styles │ │ │ │ └── main.css │ │ ├── tailwind.config.js │ │ ├── tsconfig.json │ │ └── vitest.config.mts │ ├── ui-core │ │ ├── .gitignore │ │ ├── README.md │ │ ├── fonts │ │ │ ├── IBMPlexMono-Italic.ttf │ │ │ ├── IBMPlexMono-Regular.ttf │ │ │ ├── IBMPlexMono-SemiBold.ttf │ │ │ ├── IBMPlexMono-SemiBoldItalic.ttf │ │ │ ├── IBMPlexSans-Bold.ttf │ │ │ ├── IBMPlexSans-BoldItalic.ttf │ │ │ ├── IBMPlexSans-Italic.ttf │ │ │ ├── IBMPlexSans-Regular.ttf │ │ │ ├── IBMPlexSans-SemiBold.ttf │ │ │ ├── IBMPlexSans-SemiBoldItalic.ttf │ │ │ ├── IBMPlexSerif-Italic.ttf │ │ │ ├── IBMPlexSerif-Regular.ttf │ │ │ ├── IBMPlexSerif-SemiBold.ttf │ │ │ └── IBMPlexSerif-SemiBoldItalic.ttf │ │ ├── package.json │ │ ├── postcss.config.cjs │ │ ├── rollup.config.js │ │ ├── src │ │ │ ├── assets │ │ │ │ ├── check_readonly.svg │ │ │ │ ├── check_regular.svg │ │ │ │ ├── check_regular_shadow.svg │ │ │ │ ├── check_regular_without_shadow.svg │ │ │ │ ├── check_small.svg │ │ │ │ ├── check_small_disabled.svg │ │ │ │ ├── check_small_readonly.svg │ │ │ │ ├── check_small_shadow.svg │ │ │ │ ├── indeterminateCheckbox_readonly.svg │ │ │ │ ├── indeterminateCheckbox_regular.svg │ │ │ │ ├── indeterminateCheckbox_regular_shadow.svg │ │ │ │ ├── indeterminateCheckbox_regular_without_shadow.svg │ │ │ │ ├── indeterminateCheckbox_small.svg │ │ │ │ ├── indeterminateCheckbox_small_disabled.svg │ │ │ │ ├── indeterminateCheckbox_small_readonly.svg │ │ │ │ ├── indeterminateCheckbox_small_shadow.svg │ │ │ │ └── triangle-up-down.svg │ │ │ ├── components │ │ │ │ ├── Modal.tsx │ │ │ │ ├── Select.tsx │ │ │ │ ├── buttons │ │ │ │ │ └── Button.tsx │ │ │ │ └── inputs │ │ │ │ │ ├── Checkbox │ │ │ │ │ ├── Checkbox.tsx │ │ │ │ │ ├── CheckboxList.tsx │ │ │ │ │ ├── CheckboxTree.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ └── utils.spec.ts │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── type.ts │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── ComboBox │ │ │ │ │ ├── ComboBox.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── useDefaultComboBox.ts │ │ │ │ │ ├── FieldWrapper.tsx │ │ │ │ │ ├── Hint.tsx │ │ │ │ │ ├── Input.tsx │ │ │ │ │ ├── InputStatusIcon.tsx │ │ │ │ │ ├── Label.tsx │ │ │ │ │ ├── PasswordInput.tsx │ │ │ │ │ ├── RadioButton.tsx │ │ │ │ │ ├── RadioGroup.tsx │ │ │ │ │ ├── Slider.tsx │ │ │ │ │ ├── StatusMessage.tsx │ │ │ │ │ ├── TextArea.tsx │ │ │ │ │ ├── TimePicker.tsx │ │ │ │ │ ├── TokenInput.tsx │ │ │ │ │ ├── datePicker │ │ │ │ │ ├── Calendar.tsx │ │ │ │ │ ├── CalendarPicker.tsx │ │ │ │ │ ├── DatePicker.tsx │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── useCalendar.spec.ts │ │ │ │ │ │ ├── useCalendarPicker.spec.ts │ │ │ │ │ │ ├── useDatePicker.spec.ts │ │ │ │ │ │ └── utils.spec.ts │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── type.ts │ │ │ │ │ ├── useCalendar.ts │ │ │ │ │ ├── useCalendarPicker.ts │ │ │ │ │ ├── useDatePicker.ts │ │ │ │ │ └── utils.ts │ │ │ │ │ └── tolerancePicker │ │ │ │ │ ├── TolerancePicker.tsx │ │ │ │ │ ├── ToleranceRangeGrid.tsx │ │ │ │ │ └── consts.ts │ │ │ ├── hooks │ │ │ │ ├── useFocusByTab.tsx │ │ │ │ ├── useModalPosition.tsx │ │ │ │ └── useOutsideClick.tsx │ │ │ ├── index.ts │ │ │ └── styles │ │ │ │ ├── animations.css │ │ │ │ ├── button.css │ │ │ │ ├── inputs │ │ │ │ ├── checkbox.css │ │ │ │ ├── comboBox.css │ │ │ │ ├── datePicker.css │ │ │ │ ├── fieldWrapper.css │ │ │ │ ├── hint.css │ │ │ │ ├── index.css │ │ │ │ ├── input.css │ │ │ │ ├── label.css │ │ │ │ ├── modal.css │ │ │ │ ├── passwordInput.css │ │ │ │ ├── radioButton.css │ │ │ │ ├── slider.css │ │ │ │ ├── statusIcon.css │ │ │ │ ├── statusMessage.css │ │ │ │ ├── textArea.css │ │ │ │ ├── timePicker.css │ │ │ │ ├── tokenInput.css │ │ │ │ └── tolerancePicker.css │ │ │ │ ├── main.css │ │ │ │ └── select.css │ │ ├── tailwind.config.js │ │ ├── tsconfig.json │ │ └── vitest.config.mts │ ├── ui-icons │ │ ├── .gitignore │ │ ├── .prettierignore │ │ ├── README.md │ │ ├── icons │ │ │ ├── alert-16.svg │ │ │ ├── alert-24.svg │ │ │ ├── alert-fill-16.svg │ │ │ ├── alert-fill-24.svg │ │ │ ├── archive-16.svg │ │ │ ├── archive-24.svg │ │ │ ├── arrow-both-16.svg │ │ │ ├── arrow-both-24.svg │ │ │ ├── arrow-down-16.svg │ │ │ ├── arrow-down-24.svg │ │ │ ├── arrow-down-left-16.svg │ │ │ ├── arrow-down-left-24.svg │ │ │ ├── arrow-down-right-16.svg │ │ │ ├── arrow-down-right-24.svg │ │ │ ├── arrow-left-16.svg │ │ │ ├── arrow-left-24.svg │ │ │ ├── arrow-right-16.svg │ │ │ ├── arrow-right-24.svg │ │ │ ├── arrow-switch-16.svg │ │ │ ├── arrow-switch-24.svg │ │ │ ├── arrow-up-16.svg │ │ │ ├── arrow-up-24.svg │ │ │ ├── arrow-up-left-16.svg │ │ │ ├── arrow-up-left-24.svg │ │ │ ├── arrow-up-right-16.svg │ │ │ ├── arrow-up-right-24.svg │ │ │ ├── beaker-16.svg │ │ │ ├── beaker-24.svg │ │ │ ├── bell-16.svg │ │ │ ├── bell-24.svg │ │ │ ├── bell-fill-16.svg │ │ │ ├── bell-fill-24.svg │ │ │ ├── bell-slash-16.svg │ │ │ ├── bell-slash-24.svg │ │ │ ├── blocked-16.svg │ │ │ ├── blocked-24.svg │ │ │ ├── blocked-fill-16.svg │ │ │ ├── blocked-fill-24.svg │ │ │ ├── bold-16.svg │ │ │ ├── bold-24.svg │ │ │ ├── book-16.svg │ │ │ ├── book-24.svg │ │ │ ├── book-fill-16.svg │ │ │ ├── book-fill-24.svg │ │ │ ├── bookmark-16.svg │ │ │ ├── bookmark-24.svg │ │ │ ├── bookmark-fill-16.svg │ │ │ ├── bookmark-fill-24.svg │ │ │ ├── bookmark-slash-16.svg │ │ │ ├── bookmark-slash-24.svg │ │ │ ├── bookmark-slash-fill-16.svg │ │ │ ├── bookmark-slash-fill-24.svg │ │ │ ├── briefcase-16.svg │ │ │ ├── briefcase-24.svg │ │ │ ├── broadcast-16.svg │ │ │ ├── broadcast-24.svg │ │ │ ├── browser-16.svg │ │ │ ├── browser-24.svg │ │ │ ├── bug-16.svg │ │ │ ├── bug-24.svg │ │ │ ├── calendar-16.svg │ │ │ ├── calendar-24.svg │ │ │ ├── check-16.svg │ │ │ ├── check-24.svg │ │ │ ├── check-box-16.svg │ │ │ ├── check-box-24.svg │ │ │ ├── check-circle-16.svg │ │ │ ├── check-circle-24.svg │ │ │ ├── check-circle-fill-16.svg │ │ │ ├── check-circle-fill-24.svg │ │ │ ├── checklist-16.svg │ │ │ ├── checklist-24.svg │ │ │ ├── chevron-down-16.svg │ │ │ ├── chevron-down-24.svg │ │ │ ├── chevron-left-16.svg │ │ │ ├── chevron-left-24.svg │ │ │ ├── chevron-right-16.svg │ │ │ ├── chevron-right-24.svg │ │ │ ├── chevron-up-16.svg │ │ │ ├── chevron-up-24.svg │ │ │ ├── clock-16.svg │ │ │ ├── clock-24.svg │ │ │ ├── cloud-16.svg │ │ │ ├── cloud-24.svg │ │ │ ├── cloud-offline-16.svg │ │ │ ├── cloud-offline-24.svg │ │ │ ├── codescan-checkmark-16.svg │ │ │ ├── codescan-checkmark-24.svg │ │ │ ├── comment-16.svg │ │ │ ├── comment-24.svg │ │ │ ├── comment-discussion-16.svg │ │ │ ├── comment-discussion-24.svg │ │ │ ├── compass-cardinal-16.svg │ │ │ ├── compass-cardinal-24.svg │ │ │ ├── compass-cardinal-v2-16.svg │ │ │ ├── compass-needle-16.svg │ │ │ ├── compass-needle-24.svg │ │ │ ├── compass-needle-v2-16.svg │ │ │ ├── container-16.svg │ │ │ ├── container-24.svg │ │ │ ├── copy-16.svg │ │ │ ├── copy-24.svg │ │ │ ├── cpu-16.svg │ │ │ ├── cpu-24.svg │ │ │ ├── cross-reference-16.svg │ │ │ ├── cross-reference-24.svg │ │ │ ├── dash-16.svg │ │ │ ├── dash-24.svg │ │ │ ├── database-16.svg │ │ │ ├── database-24.svg │ │ │ ├── desktop-download-16.svg │ │ │ ├── desktop-download-24.svg │ │ │ ├── device-camera-video-16.svg │ │ │ ├── device-camera-video-24.svg │ │ │ ├── device-desktop-16.svg │ │ │ ├── device-desktop-24.svg │ │ │ ├── device-mobile-16.svg │ │ │ ├── device-mobile-24.svg │ │ │ ├── devices-16.svg │ │ │ ├── devices-24.svg │ │ │ ├── dot-16.svg │ │ │ ├── dot-24.svg │ │ │ ├── dot-fill-16.svg │ │ │ ├── dot-fill-24.svg │ │ │ ├── download-16.svg │ │ │ ├── download-24.svg │ │ │ ├── duplicate-16.svg │ │ │ ├── duplicate-24.svg │ │ │ ├── ellipsis-16.svg │ │ │ ├── ellipsis-24.svg │ │ │ ├── engine-16.svg │ │ │ ├── engine-24.svg │ │ │ ├── eye-16.svg │ │ │ ├── eye-24.svg │ │ │ ├── eye-closed-16.svg │ │ │ ├── eye-closed-24.svg │ │ │ ├── file-16.svg │ │ │ ├── file-24.svg │ │ │ ├── file-added-16.svg │ │ │ ├── file-added-24.svg │ │ │ ├── file-directory-16.svg │ │ │ ├── file-directory-24.svg │ │ │ ├── file-directory-fill-16.svg │ │ │ ├── file-directory-fill-24.svg │ │ │ ├── file-directory-open-fill-16.svg │ │ │ ├── file-directory-open-fill-24.svg │ │ │ ├── file-directory-symlink-16.svg │ │ │ ├── file-directory-symlink-24.svg │ │ │ ├── file-media-16.svg │ │ │ ├── file-media-24.svg │ │ │ ├── file-moved-16.svg │ │ │ ├── file-moved-24.svg │ │ │ ├── file-removed-16.svg │ │ │ ├── file-removed-24.svg │ │ │ ├── file-submodule-16.svg │ │ │ ├── file-submodule-24.svg │ │ │ ├── file-symlink-16.svg │ │ │ ├── file-symlink-24.svg │ │ │ ├── file-zip-16.svg │ │ │ ├── file-zip-24.svg │ │ │ ├── filter-16.svg │ │ │ ├── filter-24.svg │ │ │ ├── filter-remove-16.svg │ │ │ ├── filter-remove-24.svg │ │ │ ├── flame-16.svg │ │ │ ├── flame-24.svg │ │ │ ├── fold-16.svg │ │ │ ├── fold-24.svg │ │ │ ├── fold-down-16.svg │ │ │ ├── fold-down-24.svg │ │ │ ├── fold-up-16.svg │ │ │ ├── fold-up-24.svg │ │ │ ├── gauge-16.svg │ │ │ ├── gauge-24.svg │ │ │ ├── gear-16.svg │ │ │ ├── gear-24.svg │ │ │ ├── gear-fill-16.svg │ │ │ ├── gear-fill-24.svg │ │ │ ├── gift-16.svg │ │ │ ├── gift-24.svg │ │ │ ├── globe-16.svg │ │ │ ├── globe-24.svg │ │ │ ├── goal-16.svg │ │ │ ├── goal-24.svg │ │ │ ├── grabber-16.svg │ │ │ ├── grabber-24.svg │ │ │ ├── graph-16.svg │ │ │ ├── graph-24.svg │ │ │ ├── heading-16.svg │ │ │ ├── heading-24.svg │ │ │ ├── heart-16.svg │ │ │ ├── heart-24.svg │ │ │ ├── heart-fill-16.svg │ │ │ ├── heart-fill-24.svg │ │ │ ├── history-16.svg │ │ │ ├── history-24.svg │ │ │ ├── home-16.svg │ │ │ ├── home-24.svg │ │ │ ├── home-fill-16.svg │ │ │ ├── home-fill-24.svg │ │ │ ├── horizontal-rule-16.svg │ │ │ ├── horizontal-rule-24.svg │ │ │ ├── hourglass-16.svg │ │ │ ├── hourglass-24.svg │ │ │ ├── hubot-16.svg │ │ │ ├── hubot-24.svg │ │ │ ├── id-badge-16.svg │ │ │ ├── id-badge-24.svg │ │ │ ├── image-16.svg │ │ │ ├── image-24.svg │ │ │ ├── inbox-16.svg │ │ │ ├── inbox-24.svg │ │ │ ├── info-16.svg │ │ │ ├── info-24.svg │ │ │ ├── info-fill-16.svg │ │ │ ├── info-fill-24.svg │ │ │ ├── infrastructure-16.svg │ │ │ ├── infrastructure-24.svg │ │ │ ├── italic-16.svg │ │ │ ├── italic-24.svg │ │ │ ├── iterations-16.svg │ │ │ ├── iterations-24.svg │ │ │ ├── kebab-horizontal-16.svg │ │ │ ├── kebab-horizontal-24.svg │ │ │ ├── key-16.svg │ │ │ ├── key-24.svg │ │ │ ├── law-16.svg │ │ │ ├── law-24.svg │ │ │ ├── light-bulb-16.svg │ │ │ ├── light-bulb-24.svg │ │ │ ├── link-16.svg │ │ │ ├── link-24.svg │ │ │ ├── link-external-16.svg │ │ │ ├── link-external-24.svg │ │ │ ├── list-ordered-16.svg │ │ │ ├── list-ordered-24.svg │ │ │ ├── list-unordered-16.svg │ │ │ ├── list-unordered-24.svg │ │ │ ├── location-16.svg │ │ │ ├── location-24.svg │ │ │ ├── lock-16.svg │ │ │ ├── lock-24.svg │ │ │ ├── lock-fill-16.svg │ │ │ ├── lock-fill-24.svg │ │ │ ├── log-16.svg │ │ │ ├── log-24.svg │ │ │ ├── mail-16.svg │ │ │ ├── mail-24.svg │ │ │ ├── manchette-16.svg │ │ │ ├── megaphone-16.svg │ │ │ ├── megaphone-24.svg │ │ │ ├── mention-16.svg │ │ │ ├── mention-24.svg │ │ │ ├── meter-16.svg │ │ │ ├── meter-24.svg │ │ │ ├── milestone-16.svg │ │ │ ├── milestone-24.svg │ │ │ ├── mirror-16.svg │ │ │ ├── mirror-24.svg │ │ │ ├── moon-16.svg │ │ │ ├── moon-24.svg │ │ │ ├── mortar-board-16.svg │ │ │ ├── mortar-board-24.svg │ │ │ ├── move-down-16.svg │ │ │ ├── move-down-24.svg │ │ │ ├── move-to-left-16.svg │ │ │ ├── move-to-left-24.svg │ │ │ ├── move-to-right-16.svg │ │ │ ├── move-to-right-24.svg │ │ │ ├── move-to-top-16.svg │ │ │ ├── move-to-top-24.svg │ │ │ ├── mute-16.svg │ │ │ ├── mute-24.svg │ │ │ ├── no-entry-16.svg │ │ │ ├── no-entry-24.svg │ │ │ ├── north-star-16.svg │ │ │ ├── north-star-24.svg │ │ │ ├── note-16.svg │ │ │ ├── note-24.svg │ │ │ ├── number-16.svg │ │ │ ├── number-24.svg │ │ │ ├── organization-16.svg │ │ │ ├── organization-24.svg │ │ │ ├── package-16.svg │ │ │ ├── package-24.svg │ │ │ ├── package-dependencies-16.svg │ │ │ ├── package-dependencies-24.svg │ │ │ ├── package-dependents-16.svg │ │ │ ├── package-dependents-24.svg │ │ │ ├── paper-airplane-16.svg │ │ │ ├── paper-airplane-24.svg │ │ │ ├── paperclip-16.svg │ │ │ ├── paperclip-24.svg │ │ │ ├── passkey-fill-16.svg │ │ │ ├── passkey-fill-24.svg │ │ │ ├── paste-16.svg │ │ │ ├── paste-24.svg │ │ │ ├── pencil-16.svg │ │ │ ├── pencil-24.svg │ │ │ ├── people-16.svg │ │ │ ├── people-24.svg │ │ │ ├── person-16.svg │ │ │ ├── person-24.svg │ │ │ ├── person-add-16.svg │ │ │ ├── person-add-24.svg │ │ │ ├── person-fill-16.svg │ │ │ ├── person-fill-24.svg │ │ │ ├── pin-16.svg │ │ │ ├── pin-24.svg │ │ │ ├── pin-slash-16.svg │ │ │ ├── pin-slash-24.svg │ │ │ ├── play-16.svg │ │ │ ├── play-24.svg │ │ │ ├── plug-16.svg │ │ │ ├── plug-24.svg │ │ │ ├── plus-16.svg │ │ │ ├── plus-24.svg │ │ │ ├── plus-circle-16.svg │ │ │ ├── plus-circle-24.svg │ │ │ ├── project-16.svg │ │ │ ├── project-24.svg │ │ │ ├── project-roadmap-16.svg │ │ │ ├── project-roadmap-24.svg │ │ │ ├── pulse-16.svg │ │ │ ├── pulse-24.svg │ │ │ ├── question-16.svg │ │ │ ├── question-24.svg │ │ │ ├── quote-16.svg │ │ │ ├── quote-24.svg │ │ │ ├── read-16.svg │ │ │ ├── read-24.svg │ │ │ ├── reply-16.svg │ │ │ ├── reply-24.svg │ │ │ ├── report-16.svg │ │ │ ├── report-24.svg │ │ │ ├── required-input-16.svg │ │ │ ├── reverse-16.svg │ │ │ ├── reverse-24.svg │ │ │ ├── rocket-16.svg │ │ │ ├── rocket-24.svg │ │ │ ├── route-16.svg │ │ │ ├── route-24.svg │ │ │ ├── rss-16.svg │ │ │ ├── rss-24.svg │ │ │ ├── ruby-16.svg │ │ │ ├── ruby-24.svg │ │ │ ├── screen-full-16.svg │ │ │ ├── screen-full-24.svg │ │ │ ├── screen-normal-16.svg │ │ │ ├── screen-normal-24.svg │ │ │ ├── search-16.svg │ │ │ ├── search-24.svg │ │ │ ├── server-16.svg │ │ │ ├── server-24.svg │ │ │ ├── share-16.svg │ │ │ ├── share-24.svg │ │ │ ├── shield-16.svg │ │ │ ├── shield-24.svg │ │ │ ├── shield-check-16.svg │ │ │ ├── shield-check-24.svg │ │ │ ├── shield-lock-16.svg │ │ │ ├── shield-lock-24.svg │ │ │ ├── shield-slash-16.svg │ │ │ ├── shield-slash-24.svg │ │ │ ├── shield-x-16.svg │ │ │ ├── shield-x-24.svg │ │ │ ├── sidebar-right-collapse-16.svg │ │ │ ├── sidebar-right-collapse-24.svg │ │ │ ├── sidebar-right-expand-16.svg │ │ │ ├── sidebar-right-expand-24.svg │ │ │ ├── sign-in-16.svg │ │ │ ├── sign-in-24.svg │ │ │ ├── sign-out-16.svg │ │ │ ├── sign-out-24.svg │ │ │ ├── signals-16.svg │ │ │ ├── signals-24.svg │ │ │ ├── skip-16.svg │ │ │ ├── skip-24.svg │ │ │ ├── skip-fill-16.svg │ │ │ ├── skip-fill-24.svg │ │ │ ├── sliders-16.svg │ │ │ ├── sliders-24.svg │ │ │ ├── smiley-16.svg │ │ │ ├── smiley-24.svg │ │ │ ├── sort-asc-16.svg │ │ │ ├── sort-asc-24.svg │ │ │ ├── sort-desc-16.svg │ │ │ ├── sort-desc-24.svg │ │ │ ├── sparkle-fill-16.svg │ │ │ ├── sparkle-fill-24.svg │ │ │ ├── speed-16.svg │ │ │ ├── speed-24.svg │ │ │ ├── square-16.svg │ │ │ ├── square-24.svg │ │ │ ├── square-fill-16.svg │ │ │ ├── square-fill-24.svg │ │ │ ├── squirrel-16.svg │ │ │ ├── squirrel-24.svg │ │ │ ├── stack-16.svg │ │ │ ├── stack-24.svg │ │ │ ├── star-16.svg │ │ │ ├── star-24.svg │ │ │ ├── star-fill-16.svg │ │ │ ├── star-fill-24.svg │ │ │ ├── stop-16.svg │ │ │ ├── stop-24.svg │ │ │ ├── stopwatch-16.svg │ │ │ ├── stopwatch-24.svg │ │ │ ├── strikethrough-16.svg │ │ │ ├── strikethrough-24.svg │ │ │ ├── sun-16.svg │ │ │ ├── sun-24.svg │ │ │ ├── sync-16.svg │ │ │ ├── sync-24.svg │ │ │ ├── tag-16.svg │ │ │ ├── tag-24.svg │ │ │ ├── tasklist-16.svg │ │ │ ├── tasklist-24.svg │ │ │ ├── telescope-16.svg │ │ │ ├── telescope-24.svg │ │ │ ├── telescope-fill-16.svg │ │ │ ├── telescope-fill-24.svg │ │ │ ├── three-bars-16.svg │ │ │ ├── thumbsdown-16.svg │ │ │ ├── thumbsdown-24.svg │ │ │ ├── thumbsup-16.svg │ │ │ ├── thumbsup-24.svg │ │ │ ├── tools-16.svg │ │ │ ├── tools-24.svg │ │ │ ├── trash-16.svg │ │ │ ├── trash-24.svg │ │ │ ├── triangle-down-16.svg │ │ │ ├── triangle-down-24.svg │ │ │ ├── triangle-left-16.svg │ │ │ ├── triangle-left-24.svg │ │ │ ├── triangle-right-16.svg │ │ │ ├── triangle-right-24.svg │ │ │ ├── triangle-up-16.svg │ │ │ ├── triangle-up-24.svg │ │ │ ├── trophy-16.svg │ │ │ ├── trophy-24.svg │ │ │ ├── typography-16.svg │ │ │ ├── typography-24.svg │ │ │ ├── unfold-16.svg │ │ │ ├── unfold-24.svg │ │ │ ├── unlink-16.svg │ │ │ ├── unlink-24.svg │ │ │ ├── unlock-16.svg │ │ │ ├── unlock-24.svg │ │ │ ├── unmute-16.svg │ │ │ ├── unmute-24.svg │ │ │ ├── unread-16.svg │ │ │ ├── unread-24.svg │ │ │ ├── unverified-16.svg │ │ │ ├── unverified-24.svg │ │ │ ├── upload-16.svg │ │ │ ├── upload-24.svg │ │ │ ├── verified-16.svg │ │ │ ├── verified-24.svg │ │ │ ├── video-16.svg │ │ │ ├── video-24.svg │ │ │ ├── wand-16.svg │ │ │ ├── wand-24.svg │ │ │ ├── workflow-16.svg │ │ │ ├── workflow-24.svg │ │ │ ├── x-16.svg │ │ │ ├── x-24.svg │ │ │ ├── x-circle-16.svg │ │ │ ├── x-circle-24.svg │ │ │ ├── x-circle-fill-16.svg │ │ │ ├── x-circle-fill-24.svg │ │ │ ├── zap-16.svg │ │ │ ├── zap-24.svg │ │ │ ├── zap-fill-16.svg │ │ │ ├── zap-fill-24.svg │ │ │ ├── zoom-in-16.svg │ │ │ ├── zoom-in-24.svg │ │ │ ├── zoom-out-16.svg │ │ │ └── zoom-out-24.svg │ │ ├── package.json │ │ ├── requirements.txt │ │ ├── rollup.config.js │ │ ├── scripts │ │ │ ├── build-sprite.js │ │ │ └── build.js │ │ ├── src │ │ │ ├── components │ │ │ │ └── _template.tsx │ │ │ └── types │ │ │ │ └── icon-data.ts │ │ ├── svgo.config.cjs │ │ └── tsconfig.json │ └── ui-warped-map │ │ ├── package.json │ │ ├── rollup.config.js │ │ ├── src │ │ ├── components │ │ │ ├── BaseMap.tsx │ │ │ ├── DataLoader.tsx │ │ │ ├── Loader.tsx │ │ │ ├── TransformedDataMap.tsx │ │ │ └── WarpedMap.tsx │ │ ├── core │ │ │ ├── getWarping.ts │ │ │ ├── grids.ts │ │ │ ├── helpers.ts │ │ │ ├── projection.ts │ │ │ ├── quadtree.ts │ │ │ ├── types.ts │ │ │ └── vec-lib.ts │ │ └── index.ts │ │ └── tsconfig.json ├── vite.config.ts └── vitest.global-setup.ts ├── gateway ├── .dockerignore ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── Dockerfile ├── README.md ├── actix_auth │ ├── Cargo.toml │ └── src │ │ ├── auth_context.rs │ │ ├── auth_middleware.rs │ │ ├── dyn_session_provider.rs │ │ ├── lib.rs │ │ ├── providers │ │ ├── bearer.rs │ │ ├── mock.rs │ │ ├── mod.rs │ │ ├── oidc.rs │ │ └── provider_context.rs │ │ ├── request_auth.rs │ │ └── service.rs ├── actix_proxy │ ├── Cargo.toml │ └── src │ │ ├── header_classifier.rs │ │ ├── lib.rs │ │ └── websocket.rs ├── entrypoint.sh ├── gateway.bundled.toml ├── gateway.toml ├── justfile ├── openapi.yaml ├── src │ ├── config.rs │ ├── config_parser.rs │ ├── main.rs │ └── request_modifier.rs └── test_server.py ├── nix ├── geojson-pydantic.nix ├── kdtree.nix ├── python_env.nix └── scripts.nix ├── osrd-compose ├── osrdyne ├── .dockerignore ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── Dockerfile ├── configuration_templates │ ├── process-compose-driver.yaml │ └── process-compose.yaml ├── justfile └── src │ ├── api.rs │ ├── config.rs │ ├── drivers.rs │ ├── drivers │ ├── docker.rs │ ├── kubernetes.rs │ ├── kubernetes │ │ └── keda.rs │ ├── noop.rs │ ├── process_compose.rs │ └── worker_driver.rs │ ├── key.rs │ ├── main.rs │ ├── management_client.rs │ ├── pool.rs │ ├── queue_controller.rs │ ├── status_tracker.rs │ ├── target_tracker.rs │ ├── target_tracker │ ├── actor.rs │ └── client.rs │ └── watch_logger.rs ├── publiccode.yml ├── python ├── osrd_schemas │ ├── .gitignore │ ├── README.md │ ├── justfile │ ├── osrd_schemas │ │ ├── __init__.py │ │ ├── external_generated_inputs.py │ │ ├── generated.py │ │ ├── infra.py │ │ ├── infra_editor.py │ │ ├── path.py │ │ ├── rolling_stock.py │ │ ├── study.py │ │ ├── switch_type.py │ │ └── train_schedule.py │ ├── pyproject.toml │ └── uv.lock └── railjson_generator │ ├── .gitignore │ ├── README.md │ ├── justfile │ ├── pyproject.toml │ ├── railjson_generator │ ├── __init__.py │ ├── __main__.py │ ├── external_generated_inputs.py │ ├── infra_builder.py │ ├── rjs_static │ │ ├── __init__.py │ │ └── switch_types.json │ ├── schema │ │ ├── __init__.py │ │ ├── infra │ │ │ ├── __init__.py │ │ │ ├── direction.py │ │ │ ├── electrification.py │ │ │ ├── endpoint.py │ │ │ ├── infra.py │ │ │ ├── make_geo_data.py │ │ │ ├── neutral_section.py │ │ │ ├── operational_point.py │ │ │ ├── range_elements.py │ │ │ ├── route.py │ │ │ ├── signal.py │ │ │ ├── speed_section.py │ │ │ ├── switch.py │ │ │ ├── track_section.py │ │ │ └── waypoint.py │ │ ├── location.py │ │ ├── simulation │ │ │ ├── __init__.py │ │ │ ├── simulation.py │ │ │ ├── stop.py │ │ │ └── train_schedule.py │ │ └── test_location.py │ ├── simulation_builder.py │ ├── test_external_generated_inputs.py │ ├── test_infra_builder.py │ ├── test_simulation_builder.py │ ├── test_speed_section.py │ ├── test_track_section.py │ └── utils │ │ ├── __init__.py │ │ ├── routes_generator.py │ │ └── test_routes_generator.py │ └── uv.lock ├── scripts ├── build-core.sh ├── cleanup-db.sh ├── create-backup.sh ├── diff-infra.py ├── download_timetable.py ├── drop-core.sh ├── load-backup.sh ├── load-railjson-infra.sh ├── load-railjson-rolling-stock.sh ├── pr-tests-compose.sh ├── run-front-playwright-container.sh ├── sync-infra-schema.sh └── sync-openapi.sh └── tests ├── .gitignore ├── README.md ├── assets ├── small_infra.png └── west_to_south_east_parking.png ├── conftest.py ├── data ├── infras │ ├── circle_infra │ │ ├── external_generated_inputs.json │ │ └── infra.json │ ├── etcs_infra │ │ ├── external_generated_inputs.json │ │ └── infra.json │ ├── example_script │ │ ├── external_generated_inputs.json │ │ └── infra.json │ ├── nested_switches │ │ ├── external_generated_inputs.json │ │ └── infra.json │ ├── one_line │ │ ├── external_generated_inputs.json │ │ └── infra.json │ ├── overlapping_routes │ │ ├── external_generated_inputs.json │ │ └── infra.json │ ├── small_infra │ │ ├── external_generated_inputs.json │ │ └── infra.json │ ├── takeover │ │ ├── external_generated_inputs.json │ │ └── infra.json │ ├── three_trains │ │ ├── external_generated_inputs.json │ │ └── infra.json │ └── tiny_infra │ │ ├── external_generated_inputs.json │ │ └── infra.json └── rolling_stocks │ ├── electric_rolling_stock.json │ ├── etcs_level2_rolling_stock.json │ ├── fast_rolling_stock.json │ ├── fast_rolling_stock_high_gamma.json │ ├── realistic │ ├── commuter-train.json │ ├── d-tram-train.json │ ├── dmu-regional-train.json │ ├── e-tram-train.json │ ├── emu-regional-train.json │ ├── freight-train.json │ ├── high-speed-train.json │ ├── intercity-train.json │ ├── light-freight-train.json │ ├── night-train.json │ └── touristic-train.json │ ├── short_fast_rolling_stock.json │ ├── short_slow_rolling_stock.json │ └── slow_rolling_stock.json ├── fuzzer ├── __init__.py ├── fuzzer.py └── fuzzer_stdcm_single_timetable.py ├── infra-scripts ├── README.md ├── circle_infra.py ├── etcs_infra.py ├── example_script.py ├── nested_switches.py ├── one_line.py ├── overlapping_routes.py ├── small_infra.py ├── small_infra_creator │ └── __init__.py ├── takeover.py ├── three_trains.py └── tiny_infra.py ├── justfile ├── pyproject.toml ├── tests ├── __init__.py ├── infra.py ├── path.py ├── regression_tests_data │ ├── coasting_not_intersecting_v2.json │ ├── forward_coasting_not_intersecting.json │ ├── stdcm_conflict_in_result.json │ ├── stdcm_timetable_conflict.json │ └── stdcm_zone_transition_near_start.json ├── scenario.py ├── services.py ├── test_infra.py ├── test_paced_train.py ├── test_pathfinding.py ├── test_regressions.py ├── test_rolling_stock.py ├── test_scenario.py ├── test_simulation.py ├── test_stdcm.py ├── test_timetable.py ├── test_train_schedule.py ├── test_version.py ├── test_with_fuzzer.py └── utils │ ├── __init__.py │ ├── approximations.py │ └── timetable.py └── uv.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | insert_final_newline = true 7 | trim_trailing_whitespace = true 8 | indent_style = space 9 | 10 | [*.{tsx,ts,js,scss,json,toml,yml,yaml,nix}] 11 | indent_size = 2 12 | 13 | [*.{rs,kt,java,sql,py,sh}] 14 | indent_size = 4 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.yaml: -------------------------------------------------------------------------------- 1 | name: "🤔 Question" 2 | description: Ask for help with using, understanding, or anything related to OSRD 3 | labels: kind:question 4 | body: 5 | - type: textarea 6 | id: question 7 | attributes: 8 | label: How can we help? 9 | validations: 10 | required: true 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.backup 3 | __pycache__ 4 | .vscode 5 | .idea 6 | .zed 7 | 8 | # Direnv 9 | .envrc 10 | .direnv 11 | 12 | # Helper script 13 | .osrd-compose-state 14 | -------------------------------------------------------------------------------- /REUSE.toml: -------------------------------------------------------------------------------- 1 | version = 1 2 | 3 | [[annotations]] 4 | path = ["*", "**/"] 5 | SPDX-FileCopyrightText = "Copyright © 2022 The OSRD Contributors" 6 | SPDX-License-Identifier = "LGPL-3.0-only" 7 | 8 | [[annotations]] 9 | path = ["README.md"] 10 | SPDX-FileCopyrightText = "Copyright © 2022 The OSRD Contributors" 11 | SPDX-License-Identifier = "LGPL-3.0-only OR GPL-3.0-only" 12 | -------------------------------------------------------------------------------- /chart/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | description: A Helm chart for deploying OSRD 3 | type: application 4 | appVersion: "0.1.5" 5 | # Replaced by sed in .github/workflows/helm.yaml 6 | name: NAME_REPLACE_ME 7 | version: VERSION_REPLACE_ME 8 | -------------------------------------------------------------------------------- /core/.dockerignore: -------------------------------------------------------------------------------- 1 | build 2 | Dockerfile 3 | .gradle 4 | .idea 5 | .kotlin 6 | kls_database.db 7 | -------------------------------------------------------------------------------- /core/.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | .kotlin 3 | build 4 | *.iml 5 | *.jar 6 | .jqwik-database 7 | __pycache__/ 8 | .classpath 9 | .project 10 | .settings/ 11 | bin 12 | kls_database.db 13 | 14 | # vscode 15 | .project 16 | .settings 17 | bin 18 | .classpath 19 | 20 | # avoid mistakenly adding proprietary files 21 | *.rsl 22 | *.xml 23 | *.railml 24 | *.railml3 25 | -------------------------------------------------------------------------------- /core/config/spotbugs/exclude-railjson.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /core/envelope-sim/src/main/java/fr/sncf/osrd/envelope/EnvelopeInterpolate.kt: -------------------------------------------------------------------------------- 1 | package fr.sncf.osrd.envelope 2 | 3 | interface EnvelopeInterpolate : EnvelopeTimeInterpolate, EnvelopeSpeedInterpolate 4 | -------------------------------------------------------------------------------- /core/envelope-sim/src/main/java/fr/sncf/osrd/envelope/EnvelopeSpeedInterpolate.java: -------------------------------------------------------------------------------- 1 | package fr.sncf.osrd.envelope; 2 | 3 | public interface EnvelopeSpeedInterpolate { 4 | double maxSpeedInRange(double beginPos, double endPos); 5 | } 6 | -------------------------------------------------------------------------------- /core/envelope-sim/src/main/java/fr/sncf/osrd/envelope/part/constraints/EnvelopePartConstraintType.java: -------------------------------------------------------------------------------- 1 | package fr.sncf.osrd.envelope.part.constraints; 2 | 3 | public enum EnvelopePartConstraintType { 4 | FLOOR, 5 | CEILING, 6 | EQUAL, 7 | } 8 | -------------------------------------------------------------------------------- /core/envelope-sim/src/main/java/fr/sncf/osrd/envelope_sim/Action.java: -------------------------------------------------------------------------------- 1 | package fr.sncf.osrd.envelope_sim; 2 | 3 | public enum Action { 4 | ACCELERATE, 5 | BRAKE, 6 | MAINTAIN, 7 | COAST 8 | } 9 | -------------------------------------------------------------------------------- /core/envelope-sim/src/main/java/fr/sncf/osrd/envelope_sim/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Envelope sim is a library to run simulations over envelopes. 3 | * 4 | *

It can be used independently from the rest of the project. 5 | */ 6 | package fr.sncf.osrd.envelope_sim; 7 | -------------------------------------------------------------------------------- /core/gradle.properties: -------------------------------------------------------------------------------- 1 | kotlin.code.style=official 2 | org.gradle.parallel=true 3 | -------------------------------------------------------------------------------- /core/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/core/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /core/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /core/kt-fast-collections-generator/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider: -------------------------------------------------------------------------------- 1 | fr.sncf.osrd.fast_collections.generator.PrimitiveWrapperCollectionsProcessorProvider 2 | fr.sncf.osrd.fast_collections.generator.PrimitiveCollectionsProcessorProvider 3 | -------------------------------------------------------------------------------- /core/kt-osrd-utils/src/main/kotlin/fr/sncf/osrd/utils/indexing/NumIdx.kt: -------------------------------------------------------------------------------- 1 | package fr.sncf.osrd.utils.indexing 2 | 3 | /** Classes which implement this interface can be used as an index */ 4 | interface NumIdx { 5 | val index: UInt 6 | } 7 | -------------------------------------------------------------------------------- /core/osrd-railjson/src/main/java/fr/sncf/osrd/railjson/schema/common/Identified.java: -------------------------------------------------------------------------------- 1 | package fr.sncf.osrd.railjson.schema.common; 2 | 3 | public interface Identified { 4 | /** Returns a unique identifier for this object */ 5 | String getID(); 6 | } 7 | -------------------------------------------------------------------------------- /core/osrd-railjson/src/main/java/fr/sncf/osrd/railjson/schema/common/graph/EdgeEndpoint.java: -------------------------------------------------------------------------------- 1 | package fr.sncf.osrd.railjson.schema.common.graph; 2 | 3 | /** Encodes an end, an endpoint, the tip of an edge. */ 4 | public enum EdgeEndpoint { 5 | BEGIN(0), 6 | END(1); 7 | 8 | public final int id; 9 | 10 | EdgeEndpoint(int id) { 11 | this.id = id; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /core/osrd-railjson/src/main/java/fr/sncf/osrd/railjson/schema/infra/trackobjects/RJSBufferStop.java: -------------------------------------------------------------------------------- 1 | package fr.sncf.osrd.railjson.schema.infra.trackobjects; 2 | 3 | public class RJSBufferStop extends RJSRouteWaypoint { 4 | /** Constructor */ 5 | public RJSBufferStop(String id, double position, String track) { 6 | super(id, position, track); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /core/osrd-railjson/src/main/java/fr/sncf/osrd/railjson/schema/infra/trackobjects/RJSTrainDetector.java: -------------------------------------------------------------------------------- 1 | package fr.sncf.osrd.railjson.schema.infra.trackobjects; 2 | 3 | public class RJSTrainDetector extends RJSRouteWaypoint { 4 | /** Constructor */ 5 | public RJSTrainDetector(String id, double position, String track) { 6 | super(id, position, track); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /core/osrd-railjson/src/main/java/fr/sncf/osrd/railjson/schema/infra/trackranges/RJSOperationalPointPartSncfExtension.java: -------------------------------------------------------------------------------- 1 | package fr.sncf.osrd.railjson.schema.infra.trackranges; 2 | 3 | public class RJSOperationalPointPartSncfExtension { 4 | public String kp; 5 | 6 | public RJSOperationalPointPartSncfExtension(String kp) { 7 | this.kp = kp; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /core/osrd-railjson/src/main/java/fr/sncf/osrd/railjson/schema/rollingstock/Comfort.java: -------------------------------------------------------------------------------- 1 | package fr.sncf.osrd.railjson.schema.rollingstock; 2 | 3 | public enum Comfort { 4 | AIR_CONDITIONING, 5 | HEATING, 6 | STANDARD 7 | } 8 | -------------------------------------------------------------------------------- /core/osrd-railjson/src/main/java/fr/sncf/osrd/railjson/schema/schedule/RJSAllowanceDistribution.java: -------------------------------------------------------------------------------- 1 | package fr.sncf.osrd.railjson.schema.schedule; 2 | 3 | public enum RJSAllowanceDistribution { 4 | MARECO, 5 | LINEAR 6 | } 7 | -------------------------------------------------------------------------------- /core/osrd-reporting/src/main/java/fr/sncf/osrd/reporting/exceptions/ErrorCause.java: -------------------------------------------------------------------------------- 1 | package fr.sncf.osrd.reporting.exceptions; 2 | 3 | import com.squareup.moshi.Json; 4 | 5 | public enum ErrorCause { 6 | @Json(name = "Internal") 7 | INTERNAL, 8 | @Json(name = "User") 9 | USER 10 | } 11 | -------------------------------------------------------------------------------- /core/src/main/java/fr/sncf/osrd/api/InfraProvider.java: -------------------------------------------------------------------------------- 1 | package fr.sncf.osrd.api; 2 | 3 | import fr.sncf.osrd.reporting.warnings.DiagnosticRecorder; 4 | 5 | public interface InfraProvider { 6 | /** Get an infra given an id */ 7 | FullInfra getInfra(String infraId, Integer expectedVersion, DiagnosticRecorder diagnosticRecorder) 8 | throws InterruptedException; 9 | } 10 | -------------------------------------------------------------------------------- /core/src/main/java/fr/sncf/osrd/cli/CliCommand.java: -------------------------------------------------------------------------------- 1 | package fr.sncf.osrd.cli; 2 | 3 | public interface CliCommand { 4 | /** Runs the command, and return a status code */ 5 | int run(); 6 | } 7 | -------------------------------------------------------------------------------- /core/src/main/kotlin/fr/sncf/osrd/stdcm/BacktrackingEnvelopeAttr.kt: -------------------------------------------------------------------------------- 1 | package fr.sncf.osrd.stdcm 2 | 3 | import fr.sncf.osrd.utils.SelfTypeHolder 4 | 5 | class BacktrackingSelfTypeHolder : SelfTypeHolder { 6 | override val selfType: Class 7 | get() = BacktrackingSelfTypeHolder::class.java 8 | } 9 | -------------------------------------------------------------------------------- /docker/Dockerfile.playwright-ci: -------------------------------------------------------------------------------- 1 | ARG PLAYWRIGHT_VERSION=latest 2 | ARG FRONT_TESTS_IMAGE=front_tests:latest 3 | 4 | FROM $FRONT_TESTS_IMAGE AS front-tests 5 | 6 | FROM mcr.microsoft.com/playwright:$PLAYWRIGHT_VERSION 7 | COPY --from=front-tests /app /app/front 8 | COPY --from=front-tests /tests /app/tests 9 | WORKDIR /app/front 10 | -------------------------------------------------------------------------------- /docker/README.md: -------------------------------------------------------------------------------- 1 | # Building and tagging images 2 | 3 | Images are built using docker buildx: 4 | 5 | ```sh 6 | # # Controls how built images are tagged. By default, tags with what docker-compose uses 7 | # export TAG_PATTERNS=osrd-%s:latest,osrd-%s:foobar 8 | export OSRD_GIT_DESCRIBE=$(git describe) 9 | docker buildx bake --file=docker/docker-bake.hcl --file=docker/docker-bake-simple.hcl 10 | ``` 11 | -------------------------------------------------------------------------------- /docker/rabbitmq-pr-tests.conf: -------------------------------------------------------------------------------- 1 | listeners.tcp.port = 5673 2 | management.tcp.port = 15673 3 | distribution.listener.port_range.min = 25673 4 | distribution.listener.port_range.max = 25673 5 | -------------------------------------------------------------------------------- /docker/rabbitmq.conf: -------------------------------------------------------------------------------- 1 | max_message_size = 536870912 2 | -------------------------------------------------------------------------------- /docker/valkey.conf: -------------------------------------------------------------------------------- 1 | maxmemory-policy allkeys-lru 2 | maxmemory 1gb 3 | -------------------------------------------------------------------------------- /editoast/.dockerignore: -------------------------------------------------------------------------------- 1 | target 2 | Dockerfile 3 | .env 4 | -------------------------------------------------------------------------------- /editoast/.env: -------------------------------------------------------------------------------- 1 | DATABASE_URL=postgres://osrd:password@localhost:5432/osrd 2 | -------------------------------------------------------------------------------- /editoast/.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | *.snap.new 3 | assets/sprites/*/sprites* 4 | assets/fonts/glyphs/* 5 | 6 | # allows using nightly rustfmt options locally without imposing nightly to everyone publicly 7 | rustfmt.toml 8 | -------------------------------------------------------------------------------- /editoast/assets/fonts/Roboto Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/editoast/assets/fonts/Roboto Bold.ttf -------------------------------------------------------------------------------- /editoast/assets/fonts/Roboto Condensed Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/editoast/assets/fonts/Roboto Condensed Italic.ttf -------------------------------------------------------------------------------- /editoast/assets/fonts/Roboto Condensed.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/editoast/assets/fonts/Roboto Condensed.ttf -------------------------------------------------------------------------------- /editoast/assets/fonts/Roboto Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/editoast/assets/fonts/Roboto Italic.ttf -------------------------------------------------------------------------------- /editoast/assets/fonts/Roboto Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/editoast/assets/fonts/Roboto Medium.ttf -------------------------------------------------------------------------------- /editoast/assets/fonts/Roboto Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/editoast/assets/fonts/Roboto Regular.ttf -------------------------------------------------------------------------------- /editoast/assets/fonts/SNCF.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/editoast/assets/fonts/SNCF.ttf -------------------------------------------------------------------------------- /editoast/assets/sprites/default/MATG.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /editoast/diesel.toml: -------------------------------------------------------------------------------- 1 | # For documentation on how to configure this file, 2 | # see https://diesel.rs/guides/configuring-diesel-cli 3 | 4 | [print_schema] 5 | file = "editoast_models/src/tables.rs" 6 | filter = { except_tables = ["spatial_ref_sys"] } 7 | import_types = ["diesel::sql_types::*", "postgis_diesel::sql_types::*"] 8 | 9 | [migrations_directory] 10 | dir = "migrations" 11 | -------------------------------------------------------------------------------- /editoast/editoast_models/src/rolling_stock.rs: -------------------------------------------------------------------------------- 1 | mod train_category; 2 | pub use train_category::TrainCategories; 3 | pub use train_category::TrainCategory; 4 | -------------------------------------------------------------------------------- /editoast/editoast_schemas/src/errors.rs: -------------------------------------------------------------------------------- 1 | use thiserror::Error; 2 | 3 | #[derive(Debug, Error)] 4 | pub enum GeometryError { 5 | #[error("expected geometry {expected} but got {actual}")] 6 | UnexpectedGeometry { expected: String, actual: String }, 7 | } 8 | -------------------------------------------------------------------------------- /editoast/editoast_schemas/src/infra/curve.rs: -------------------------------------------------------------------------------- 1 | use serde::Deserialize; 2 | use serde::Serialize; 3 | use utoipa::ToSchema; 4 | 5 | #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ToSchema)] 6 | #[serde(deny_unknown_fields)] 7 | pub struct Curve { 8 | pub radius: f64, 9 | pub begin: f64, 10 | pub end: f64, 11 | } 12 | -------------------------------------------------------------------------------- /editoast/editoast_schemas/src/infra/endpoint.rs: -------------------------------------------------------------------------------- 1 | use serde::Deserialize; 2 | use serde::Serialize; 3 | use utoipa::ToSchema; 4 | 5 | editoast_common::schemas! { 6 | Endpoint, 7 | } 8 | 9 | #[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, Hash, ToSchema)] 10 | #[serde(rename_all = "SCREAMING_SNAKE_CASE")] 11 | pub enum Endpoint { 12 | Begin, 13 | End, 14 | } 15 | -------------------------------------------------------------------------------- /editoast/editoast_schemas/src/infra/slope.rs: -------------------------------------------------------------------------------- 1 | use serde::Deserialize; 2 | use serde::Serialize; 3 | use utoipa::ToSchema; 4 | 5 | #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ToSchema)] 6 | #[serde(deny_unknown_fields)] 7 | pub struct Slope { 8 | pub gradient: f64, 9 | pub begin: f64, 10 | pub end: f64, 11 | } 12 | -------------------------------------------------------------------------------- /editoast/editoast_search/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "editoast_search" 3 | version = "0.1.0" 4 | edition = "2021" 5 | license = "LGPL-3.0" 6 | 7 | [dependencies] 8 | itertools.workspace = true 9 | serde.workspace = true 10 | serde_json.workspace = true 11 | strum.workspace = true 12 | thiserror.workspace = true 13 | utoipa.workspace = true 14 | 15 | [lints] 16 | workspace = true 17 | -------------------------------------------------------------------------------- /editoast/fga/tests/doctest.fga: -------------------------------------------------------------------------------- 1 | model 2 | schema 1.1 3 | 4 | type person 5 | 6 | type group 7 | relations 8 | define member: [person] 9 | 10 | type document 11 | relations 12 | define reader: [person, group#member] 13 | define can_read: reader or can_write 14 | define writer: [person, group#member] 15 | define can_write: writer 16 | -------------------------------------------------------------------------------- /editoast/fga_derive/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "fga_derive" 3 | edition = "2021" 4 | version.workspace = true 5 | license.workspace = true 6 | 7 | [lib] 8 | proc-macro = true 9 | 10 | [dependencies] 11 | darling.workspace = true 12 | quote.workspace = true 13 | syn.workspace = true 14 | 15 | [lints] 16 | workspace = true 17 | -------------------------------------------------------------------------------- /editoast/migrations/00000000000000_diesel_initial_setup/down.sql: -------------------------------------------------------------------------------- 1 | -- This file was automatically created by Diesel to setup helper functions 2 | -- and other internal bookkeeping. This file is safe to edit, any future 3 | -- changes will be added to existing projects as new migrations. 4 | 5 | DROP FUNCTION IF EXISTS diesel_manage_updated_at(_tbl regclass); 6 | DROP FUNCTION IF EXISTS diesel_set_updated_at(); 7 | -------------------------------------------------------------------------------- /editoast/migrations/2023-10-03-161614_rolling-stock-base-power-class-null/down.sql: -------------------------------------------------------------------------------- 1 | -- This file should undo anything in `up.sql` 2 | alter table rolling_stock 3 | drop constraint base_power_class_null_or_non_empty; 4 | 5 | update 6 | rolling_stock 7 | set 8 | base_power_class = '' 9 | where 10 | base_power_class is null; 11 | 12 | alter table rolling_stock alter column base_power_class set not null; 13 | -------------------------------------------------------------------------------- /editoast/migrations/2023-10-10-085312_fix_kilometric_point/down.sql: -------------------------------------------------------------------------------- 1 | -- This file should undo anything in `up.sql` 2 | UPDATE infra_object_operational_point SET data = jsonb_set(data, '{extensions, sncf, kp}', '""'); 3 | -------------------------------------------------------------------------------- /editoast/migrations/2023-10-10-085312_fix_kilometric_point/up.sql: -------------------------------------------------------------------------------- 1 | -- Your SQL goes here 2 | UPDATE infra_object_operational_point SET data = data #- '{extensions, sncf, kp}'; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2023-10-11-135746_adapt_signal_layer_sprites/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE infra_layer_signal DROP signaling_system; 2 | ALTER TABLE infra_layer_signal DROP sprite; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2023-10-11-135746_adapt_signal_layer_sprites/up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE infra_layer_signal 2 | ADD signaling_system VARCHAR(255) NULL; 3 | ALTER TABLE infra_layer_signal 4 | ADD sprite VARCHAR(255) NULL; 5 | -------------------------------------------------------------------------------- /editoast/migrations/2023-10-11-222214_delete_track_links/up.sql: -------------------------------------------------------------------------------- 1 | -- Your SQL goes here 2 | DROP TABLE infra_layer_track_section_link; 3 | DROP TABLE infra_object_track_section_link; 4 | DELETE FROM infra_layer_error 5 | WHERE information->>'obj_type' = 'TrackSectionLink'; 6 | ALTER TABLE infra 7 | ALTER column railjson_version 8 | SET DEFAULT '3.4.4'; 9 | UPDATE infra 10 | SET railjson_version = '3.4.4'; 11 | -------------------------------------------------------------------------------- /editoast/migrations/2023-10-12-063036_split_op_parts_layer/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE infra_layer_operational_point DROP COLUMN kp; 2 | ALTER TABLE infra_layer_operational_point ADD CONSTRAINT infra_layer_operational_point_infra_id_obj_id_key UNIQUE (infra_id, obj_id); 3 | -------------------------------------------------------------------------------- /editoast/migrations/2023-10-12-063036_split_op_parts_layer/up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE infra_layer_operational_point ADD COLUMN kp text; 2 | ALTER TABLE infra_layer_operational_point DROP CONSTRAINT infra_layer_operational_point_infra_id_obj_id_key; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2023-10-18-164705_logical_signals_search/down.sql: -------------------------------------------------------------------------------- 1 | -- DO NOT EDIT THIS FILE MANUALLY! 2 | 3 | DROP TABLE IF EXISTS "search_signal"; 4 | DROP TRIGGER IF EXISTS search_signal__ins_trig ON "infra_object_signal"; 5 | DROP TRIGGER IF EXISTS search_signal__upd_trig ON "infra_object_signal"; 6 | DROP FUNCTION IF EXISTS search_signal__ins_trig; 7 | DROP FUNCTION IF EXISTS search_signal__upd_trig; 8 | -------------------------------------------------------------------------------- /editoast/migrations/2023-10-20-140824_fix_layer_operational_point_geometry/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE infra_layer_operational_point 2 | ALTER COLUMN geographic TYPE GEOMETRY(MULTIPOINT, 3857) USING ST_Multi(geographic); 3 | ALTER TABLE infra_layer_operational_point 4 | ALTER COLUMN schematic TYPE GEOMETRY(MULTIPOINT, 3857) USING ST_Multi(schematic); 5 | -------------------------------------------------------------------------------- /editoast/migrations/2023-10-20-140824_fix_layer_operational_point_geometry/up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE infra_layer_operational_point 2 | ALTER COLUMN geographic TYPE GEOMETRY(POINT, 3857) USING ST_SetSRID(ST_GeometryN(geographic, 1), 3857); 3 | ALTER TABLE infra_layer_operational_point 4 | ALTER COLUMN schematic TYPE GEOMETRY(POINT, 3857) USING ST_SetSRID(ST_GeometryN(schematic, 1), 3857); 5 | -------------------------------------------------------------------------------- /editoast/migrations/2023-10-25-000250_delete_switch_types_from_db/down.sql: -------------------------------------------------------------------------------- 1 | DELETE FROM infra_object_extended_switch_type; 2 | ALTER TABLE infra_object_extended_switch_type 3 | RENAME TO infra_object_switch_type; 4 | ALTER TABLE infra 5 | ALTER column railjson_version 6 | SET DEFAULT '3.4.5'; 7 | UPDATE infra 8 | SET railjson_version = '3.4.5'; 9 | -------------------------------------------------------------------------------- /editoast/migrations/2023-10-25-000250_delete_switch_types_from_db/up.sql: -------------------------------------------------------------------------------- 1 | DELETE FROM infra_object_switch_type; 2 | ALTER TABLE infra_object_switch_type 3 | RENAME TO infra_object_extended_switch_type; 4 | ALTER TABLE infra 5 | ALTER column railjson_version 6 | SET DEFAULT '3.4.6'; 7 | UPDATE infra 8 | SET railjson_version = '3.4.6'; 9 | -------------------------------------------------------------------------------- /editoast/migrations/2023-11-24-162712_add_errors_hash/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE infra_layer_error DROP COLUMN info_hash; 2 | -------------------------------------------------------------------------------- /editoast/migrations/2023-11-24-162712_add_errors_hash/up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE infra_layer_error ADD info_hash varchar(40) NOT NULL DEFAULT 'undefined'; 2 | UPDATE infra_layer_error SET info_hash = id::text; 3 | ALTER TABLE infra_layer_error ADD CONSTRAINT error_hash_unique UNIQUE (info_hash, infra_id); 4 | -------------------------------------------------------------------------------- /editoast/migrations/2024-01-03-133658_catenary_to_electrification/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE infra_object_electrification 2 | RENAME TO infra_object_catenary; 3 | ALTER TABLE infra_layer_electrification 4 | RENAME TO infra_layer_catenary; 5 | -------------------------------------------------------------------------------- /editoast/migrations/2024-01-03-133658_catenary_to_electrification/up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE infra_object_catenary 2 | RENAME TO infra_object_electrification; 3 | ALTER TABLE infra_layer_catenary 4 | RENAME TO infra_layer_electrification; 5 | -------------------------------------------------------------------------------- /editoast/migrations/2024-01-05-092226_delete_applicable_directions_from_detectors/down.sql: -------------------------------------------------------------------------------- 1 | UPDATE infra_object_detector 2 | SET data = jsonb_set(data, '{applicable_directions}', '"BOTH"'); 3 | 4 | UPDATE infra 5 | SET railjson_version = '3.4.6'; 6 | -------------------------------------------------------------------------------- /editoast/migrations/2024-01-05-092226_delete_applicable_directions_from_detectors/up.sql: -------------------------------------------------------------------------------- 1 | UPDATE infra_object_detector 2 | SET data = data - 'applicable_directions'; 3 | 4 | UPDATE infra 5 | SET railjson_version = '3.4.7'; 6 | -------------------------------------------------------------------------------- /editoast/migrations/2024-01-26-150237_change_zero_speed_limit_to_null/down.sql: -------------------------------------------------------------------------------- 1 | -- This file should undo anything in `up.sql` 2 | -------------------------------------------------------------------------------- /editoast/migrations/2024-02-01-130425_add-rolling-stock-field-supported-signaling-systems/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE rolling_stock 2 | DROP COLUMN supported_signaling_systems; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-02-01-130425_add-rolling-stock-field-supported-signaling-systems/up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE rolling_stock 2 | ADD supported_signaling_systems jsonb NOT NULL DEFAULT ('["BAPR", "BAL", "TVM300", "TVM430"]'); 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-02-05-140856_rolling_stock_power_restrictions_not_null/down.sql: -------------------------------------------------------------------------------- 1 | -- This file should undo anything in `up.sql` 2 | 3 | ALTER TABLE rolling_stock 4 | ALTER power_restrictions TYPE jsonb, 5 | ALTER power_restrictions DROP DEFAULT, 6 | ALTER power_restrictions DROP NOT NULL; 7 | -------------------------------------------------------------------------------- /editoast/migrations/2024-02-05-140856_rolling_stock_power_restrictions_not_null/up.sql: -------------------------------------------------------------------------------- 1 | -- Your SQL goes here 2 | 3 | UPDATE rolling_stock 4 | SET power_restrictions = '{}'::jsonb 5 | WHERE power_restrictions IS NULL; 6 | 7 | ALTER TABLE rolling_stock 8 | ALTER power_restrictions TYPE jsonb, 9 | ALTER power_restrictions SET DEFAULT '{}', 10 | ALTER power_restrictions SET NOT NULL; 11 | -------------------------------------------------------------------------------- /editoast/migrations/2024-02-06-171107_remove_features_from_rollingstock/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE rolling_stock 2 | ADD features text [] NOT NULL DEFAULT '{}', 3 | ALTER COLUMN supported_signaling_systems type jsonb USING Array_to_json(supported_signaling_systems::text []), 4 | ALTER COLUMN supported_signaling_systems 5 | SET DEFAULT ('["BAPR", "BAL", "TVM300", "TVM430"]'); 6 | -------------------------------------------------------------------------------- /editoast/migrations/2024-02-06-171107_remove_features_from_rollingstock/up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE rolling_stock DROP COLUMN features, 2 | ALTER COLUMN supported_signaling_systems DROP DEFAULT, 3 | ALTER COLUMN supported_signaling_systems TYPE TEXT [] USING TRANSLATE( 4 | supported_signaling_systems::jsonb::text, '[]', '{}')::TEXT []; 5 | -------------------------------------------------------------------------------- /editoast/migrations/2024-02-09-132408_speed_section_on_routes/down.sql: -------------------------------------------------------------------------------- 1 | UPDATE infra 2 | SET railjson_version = '3.4.9'; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-02-09-132408_speed_section_on_routes/up.sql: -------------------------------------------------------------------------------- 1 | UPDATE infra 2 | SET railjson_version = '3.4.10'; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-02-21-002011_create_v2_trainschedule_timetable/down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE train_schedule_v2; 2 | DROP TABLE timetable_v2; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-02-23-155103_create_v2_scenario/down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE scenario_v2; 2 | -------------------------------------------------------------------------------- /editoast/migrations/2024-03-12-143107_make_budget_nullable/down.sql: -------------------------------------------------------------------------------- 1 | UPDATE study SET budget = COALESCE(budget, 0); 2 | ALTER TABLE study ALTER COLUMN budget SET NOT NULL; 3 | 4 | UPDATE project SET budget = COALESCE(budget, 0); 5 | ALTER TABLE project ALTER COLUMN budget SET NOT NULL; 6 | -------------------------------------------------------------------------------- /editoast/migrations/2024-03-12-143107_make_budget_nullable/up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE study ALTER COLUMN budget DROP NOT NULL; 2 | ALTER TABLE project ALTER COLUMN budget DROP NOT NULL; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-03-28-102224_tvm_sight_distance/down.sql: -------------------------------------------------------------------------------- 1 | UPDATE infra_object_signal 2 | SET data = jsonb_set(data, '{sight_distance}', '400.0') 3 | WHERE '"TVM300"'::jsonb <@ jsonb_path_query_array(data, '$.logical_signals[*].signaling_system') 4 | OR '"TVM430"'::jsonb <@ jsonb_path_query_array(data, '$.logical_signals[*].signaling_system'); 5 | -------------------------------------------------------------------------------- /editoast/migrations/2024-03-28-102224_tvm_sight_distance/up.sql: -------------------------------------------------------------------------------- 1 | UPDATE infra_object_signal 2 | SET data = jsonb_set(data, '{sight_distance}', '0.0') 3 | WHERE '"TVM300"'::jsonb <@ jsonb_path_query_array(data, '$.logical_signals[*].signaling_system') 4 | OR '"TVM430"'::jsonb <@ jsonb_path_query_array(data, '$.logical_signals[*].signaling_system'); 5 | -------------------------------------------------------------------------------- /editoast/migrations/2024-04-02-142925_create_work_schedule/down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE work_schedule; 2 | DROP TABLE work_schedule_group; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-07-18-092453_adapt-train-schedules-v2/down.sql: -------------------------------------------------------------------------------- 1 | UPDATE train_schedule_v2 2 | SET margins = REGEXP_REPLACE(margins::text, '0%', 'none', 'g')::jsonb; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-07-18-092453_adapt-train-schedules-v2/up.sql: -------------------------------------------------------------------------------- 1 | UPDATE train_schedule_v2 2 | SET margins = REGEXP_REPLACE(margins::text, 'none', '0%', 'g')::jsonb; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-07-27-125642_create-stdcm-search-env/down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE stdcm_search_environment; 2 | -------------------------------------------------------------------------------- /editoast/migrations/2024-08-13-140358_delete_tsv1_tables/up.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE scenario CASCADE; 2 | DROP TABLE simulation_output; 3 | DROP TABLE timetable CASCADE; 4 | DROP TABLE pathfinding CASCADE; 5 | DROP TABLE train_schedule CASCADE; 6 | -------------------------------------------------------------------------------- /editoast/migrations/2024-08-21-213611_rename_tsv2_table/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE scenario RENAME TO scenario_v2; 2 | ALTER TABLE timetable RENAME TO timetable_v2; 3 | ALTER TABLE train_schedule RENAME TO train_schedule_v2; 4 | -------------------------------------------------------------------------------- /editoast/migrations/2024-08-21-213611_rename_tsv2_table/up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE scenario_v2 RENAME TO scenario; 2 | ALTER TABLE timetable_v2 RENAME TO timetable; 3 | ALTER TABLE train_schedule_v2 RENAME TO train_schedule; 4 | -------------------------------------------------------------------------------- /editoast/migrations/2024-09-02-132335_replace_mode_ac_with_air_conditioning/down.sql: -------------------------------------------------------------------------------- 1 | UPDATE rolling_stock 2 | SET effort_curves = REGEXP_REPLACE(effort_curves::text, '"AIR_CONDITIONING"', '"AC"', 'g')::jsonb; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-09-02-132335_replace_mode_ac_with_air_conditioning/up.sql: -------------------------------------------------------------------------------- 1 | UPDATE rolling_stock 2 | SET effort_curves = REGEXP_REPLACE(effort_curves::text, '"AC"', '"AIR_CONDITIONING"', 'g')::jsonb; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-09-06-153144_add_ltv_table/down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE temporary_speed_limit; 2 | DROP TABLE temporary_speed_limit_group; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-10-04-140134_add-towed-rolling-stock/down.sql: -------------------------------------------------------------------------------- 1 | -- This file should undo anything in `up.sql` 2 | DROP TABLE towed_rolling_stock; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-10-24-143158_add-towed-rolling-stock-field-description/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE towed_rolling_stock 2 | DROP label; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-10-24-143158_add-towed-rolling-stock-field-description/up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE towed_rolling_stock 2 | ADD label VARCHAR(255) NOT NULL DEFAULT ''; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-10-29-145440_search_cache/down.sql: -------------------------------------------------------------------------------- 1 | -- DO NOT EDIT THIS FILE MANUALLY! 2 | 3 | DROP TABLE IF EXISTS "search_scenario"; 4 | DROP TRIGGER IF EXISTS search_scenario__ins_trig ON "scenario"; 5 | DROP TRIGGER IF EXISTS search_scenario__upd_trig ON "scenario"; 6 | DROP FUNCTION IF EXISTS search_scenario__ins_trig_fun; 7 | DROP FUNCTION IF EXISTS search_scenario__upd_trig_fun; 8 | -------------------------------------------------------------------------------- /editoast/migrations/2024-11-05-113351_macro_nodes/down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE IF EXISTS macro_node; 2 | -------------------------------------------------------------------------------- /editoast/migrations/2024-11-06-175550_add_temporary_speed_limit_group_to_stdcm_search_environment/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE stdcm_search_environment 2 | DROP COLUMN IF EXISTS temporary_speed_limit_group_id; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-11-06-175550_add_temporary_speed_limit_group_to_stdcm_search_environment/up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE stdcm_search_environment 2 | ADD COLUMN temporary_speed_limit_group_id int8 REFERENCES temporary_speed_limit_group(id); 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-11-21-145205_create_stdcm_logs/down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE stdcm_logs; 2 | -------------------------------------------------------------------------------- /editoast/migrations/2024-11-21-145205_create_stdcm_logs/up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE stdcm_logs ( 2 | id int8 PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, 3 | trace_id VARCHAR(32) UNIQUE NOT NULL, 4 | request jsonb NOT NULL, 5 | response jsonb NOT NULL, 6 | created timestamptz NOT NULL DEFAULT NOW(), 7 | user_id bigint REFERENCES authn_user ON DELETE CASCADE 8 | ); 9 | -------------------------------------------------------------------------------- /editoast/migrations/2024-11-22-151624_group-name-unique/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE authn_group DROP CONSTRAINT group_name_unique; 2 | -------------------------------------------------------------------------------- /editoast/migrations/2024-11-22-151624_group-name-unique/up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE authn_group ADD CONSTRAINT group_name_unique UNIQUE (name); 2 | -------------------------------------------------------------------------------- /editoast/migrations/2024-11-27-095410_add_track_section_operational_point_layer/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE infra_layer_operational_point DROP COLUMN track_section; 2 | -------------------------------------------------------------------------------- /editoast/migrations/2024-12-03-144258_towed-rolling-stock-add-field-max-speed/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE towed_rolling_stock 2 | DROP max_speed; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-12-03-144258_towed-rolling-stock-add-field-max-speed/up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE towed_rolling_stock 2 | ADD max_speed FLOAT8; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2024-12-19-152854_index_infra_layer_operational_point/down.sql: -------------------------------------------------------------------------------- 1 | -- This file should undo anything in `up.sql` 2 | DROP INDEX IF EXISTS idx_infra_layer_operational_point_infra_id; 3 | 4 | DROP INDEX IF EXISTS idx_infra_layer_operational_point_obj_id; 5 | -------------------------------------------------------------------------------- /editoast/migrations/2024-12-19-152854_index_infra_layer_operational_point/up.sql: -------------------------------------------------------------------------------- 1 | CREATE INDEX IF NOT EXISTS idx_infra_layer_operational_point_infra_id ON infra_layer_operational_point (infra_id); 2 | 3 | CREATE INDEX IF NOT EXISTS idx_infra_layer_operational_point_obj_id ON infra_layer_operational_point (obj_id); 4 | -------------------------------------------------------------------------------- /editoast/migrations/2024-12-20-140458_add_rs_etcs_brake_params/down.sql: -------------------------------------------------------------------------------- 1 | -- Remove etcs_brake_params columns from rolling stock tables 2 | ALTER TABLE rolling_stock 3 | DROP COLUMN IF EXISTS etcs_brake_params; 4 | -------------------------------------------------------------------------------- /editoast/migrations/2024-12-20-140458_add_rs_etcs_brake_params/up.sql: -------------------------------------------------------------------------------- 1 | -- Add etcs_brake_params columns to rolling stock tables (default to NULL) 2 | ALTER TABLE rolling_stock 3 | ADD COLUMN IF NOT EXISTS etcs_brake_params jsonb NOT NULL DEFAULT 'null'::jsonb; 4 | -------------------------------------------------------------------------------- /editoast/migrations/2025-01-07-163822_index_stdcm_log_trace_id/down.sql: -------------------------------------------------------------------------------- 1 | DROP INDEX IF EXISTS stdcm_logs_trace_id; 2 | -------------------------------------------------------------------------------- /editoast/migrations/2025-01-07-163822_index_stdcm_log_trace_id/up.sql: -------------------------------------------------------------------------------- 1 | CREATE INDEX IF NOT EXISTS stdcm_logs_trace_id ON stdcm_logs (trace_id); 2 | -------------------------------------------------------------------------------- /editoast/migrations/2025-01-14-154647_make_stdcm_log_trace_id_nullable/down.sql: -------------------------------------------------------------------------------- 1 | UPDATE stdcm_logs 2 | SET trace_id = REPLACE(gen_random_uuid()::text, '-', '') 3 | WHERE trace_id IS NULL; 4 | 5 | ALTER TABLE stdcm_logs ALTER COLUMN trace_id SET NOT NULL; 6 | -------------------------------------------------------------------------------- /editoast/migrations/2025-01-14-154647_make_stdcm_log_trace_id_nullable/up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE stdcm_logs ALTER COLUMN trace_id DROP NOT NULL; 2 | -------------------------------------------------------------------------------- /editoast/migrations/2025-02-03-094532_add_primary_and_other_categories_to_rolling_stock/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE rolling_stock 2 | DROP COLUMN primary_category, 3 | DROP COLUMN other_categories; 4 | 5 | UPDATE rolling_stock SET railjson_version = '3.2'; 6 | 7 | DROP TYPE rolling_stock_category; 8 | -------------------------------------------------------------------------------- /editoast/migrations/2025-02-13-115126_create_paced_trains/down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE paced_train; 2 | -------------------------------------------------------------------------------- /editoast/migrations/2025-02-18-122020_stdcm_log_allow_error_response/down.sql: -------------------------------------------------------------------------------- 1 | DELETE FROM stdcm_logs WHERE response ? 'response' = FALSE; 2 | UPDATE stdcm_logs SET response = response->'response'; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2025-02-18-122020_stdcm_log_allow_error_response/up.sql: -------------------------------------------------------------------------------- 1 | UPDATE stdcm_logs SET response = jsonb_build_object('response', response); 2 | -------------------------------------------------------------------------------- /editoast/migrations/2025-02-19-173042_adapt_search_environment_adding_enabled_window/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE stdcm_search_environment 2 | DROP COLUMN enabled_from, 3 | DROP COLUMN enabled_until; 4 | -------------------------------------------------------------------------------- /editoast/migrations/2025-03-04-132534_roles_simplification/down.sql: -------------------------------------------------------------------------------- 1 | -- It's safe to do so for the same reasons as stated in up.sql. 2 | DELETE FROM authz_role; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2025-03-04-132534_roles_simplification/up.sql: -------------------------------------------------------------------------------- 1 | -- Removes all setup roles. It's fine to do so as we have a script attributing the right roles for all our groups in production and we don't have mocked data yet. 2 | DELETE FROM authz_role; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2025-03-16-172133_model_update_errors/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE project ADD CONSTRAINT project_image_id_key UNIQUE (image_id); 2 | 3 | ALTER TABLE project 4 | DROP CONSTRAINT IF EXISTS project_image_id_fkey; 5 | 6 | ALTER TABLE project ADD CONSTRAINT project_image_id_fkey FOREIGN KEY (image_id) REFERENCES document (id) DEFERRABLE INITIALLY DEFERRED; 7 | -------------------------------------------------------------------------------- /editoast/migrations/2025-03-21-153132_search-user/down.sql: -------------------------------------------------------------------------------- 1 | -- DO NOT EDIT THIS FILE MANUALLY! 2 | 3 | DROP TABLE IF EXISTS "search_user"; 4 | DROP TRIGGER IF EXISTS search_user__ins_trig ON "authn_user"; 5 | DROP TRIGGER IF EXISTS search_user__upd_trig ON "authn_user"; 6 | DROP FUNCTION IF EXISTS search_user__ins_trig_fun; 7 | DROP FUNCTION IF EXISTS search_user__upd_trig_fun; 8 | -------------------------------------------------------------------------------- /editoast/migrations/2025-03-26-090235_rename_paced_train_fields/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE paced_train RENAME COLUMN interval TO step; 2 | ALTER TABLE paced_train RENAME COLUMN time_window TO duration; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2025-03-26-090235_rename_paced_train_fields/up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE paced_train RENAME COLUMN step TO interval; 2 | ALTER TABLE paced_train RENAME COLUMN duration TO time_window; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2025-04-22-114821_add_category_to_train_schedule_and_paced_train/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE train_schedule 2 | DROP COLUMN category; 3 | 4 | ALTER TABLE paced_train 5 | DROP COLUMN category; 6 | -------------------------------------------------------------------------------- /editoast/migrations/2025-04-22-114821_add_category_to_train_schedule_and_paced_train/up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE train_schedule 2 | ADD COLUMN category rolling_stock_category; 3 | 4 | ALTER TABLE paced_train 5 | ADD COLUMN category rolling_stock_category; 6 | -------------------------------------------------------------------------------- /editoast/migrations/2025-04-24-081446_paced_train_exceptions/down.sql: -------------------------------------------------------------------------------- 1 | -- This file should undo anything in `up.sql` 2 | ALTER TABLE paced_train 3 | DROP exceptions; 4 | -------------------------------------------------------------------------------- /editoast/migrations/2025-04-24-081446_paced_train_exceptions/up.sql: -------------------------------------------------------------------------------- 1 | -- Your SQL goes here 2 | ALTER TABLE paced_train ADD exceptions jsonb NOT NULL DEFAULT '[]'::jsonb; 3 | -------------------------------------------------------------------------------- /editoast/migrations/2025-04-24-135143_rename_rolling_stock_category_to_train_category/down.sql: -------------------------------------------------------------------------------- 1 | ALTER TYPE train_category 2 | RENAME TO rolling_stock_category 3 | -------------------------------------------------------------------------------- /editoast/migrations/2025-04-24-135143_rename_rolling_stock_category_to_train_category/up.sql: -------------------------------------------------------------------------------- 1 | ALTER TYPE rolling_stock_category 2 | RENAME TO train_category 3 | -------------------------------------------------------------------------------- /editoast/osm_to_railjson/src/lib.rs: -------------------------------------------------------------------------------- 1 | mod generate_routes; 2 | mod osm_to_railjson; 3 | mod utils; 4 | 5 | pub use osm_to_railjson::osm_to_railjson; 6 | -------------------------------------------------------------------------------- /editoast/osm_to_railjson/src/tests/minimal_rail.osm.pbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/editoast/osm_to_railjson/src/tests/minimal_rail.osm.pbf -------------------------------------------------------------------------------- /editoast/osm_to_railjson/src/tests/routes.osm.pbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/editoast/osm_to_railjson/src/tests/routes.osm.pbf -------------------------------------------------------------------------------- /editoast/osm_to_railjson/src/tests/signal_at_end_of_line.osm.pbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/editoast/osm_to_railjson/src/tests/signal_at_end_of_line.osm.pbf -------------------------------------------------------------------------------- /editoast/osm_to_railjson/src/tests/signals.osm.pbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/editoast/osm_to_railjson/src/tests/signals.osm.pbf -------------------------------------------------------------------------------- /editoast/osm_to_railjson/src/tests/station.osm.pbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/editoast/osm_to_railjson/src/tests/station.osm.pbf -------------------------------------------------------------------------------- /editoast/osm_to_railjson/src/tests/switches.osm.pbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/editoast/osm_to_railjson/src/tests/switches.osm.pbf -------------------------------------------------------------------------------- /editoast/src/generated_data/sql/generate_track_section_layer.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO infra_layer_track_section (obj_id, infra_id, geographic) 2 | SELECT obj_id, 3 | $1, 4 | ST_Transform(ST_GeomFromGeoJSON(data->'geo'), 3857) 5 | FROM infra_object_track_section 6 | WHERE infra_id = $1 7 | -------------------------------------------------------------------------------- /editoast/src/generated_data/sql/insert_update_track_section_layer.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO infra_layer_track_section (obj_id, infra_id, geographic) 2 | SELECT obj_id, 3 | $1, 4 | ST_Transform(ST_GeomFromGeoJSON(data->'geo'), 3857) 5 | FROM infra_object_track_section 6 | WHERE infra_id = $1 7 | AND obj_id = ANY($2) ON CONFLICT (infra_id, obj_id) DO 8 | UPDATE 9 | SET geographic = EXCLUDED.geographic 10 | -------------------------------------------------------------------------------- /editoast/src/models/group.rs: -------------------------------------------------------------------------------- 1 | use editoast_derive::Model; 2 | 3 | #[derive(Debug, Clone, Model)] 4 | #[model(table = editoast_models::tables::authn_group)] 5 | #[model(gen(ops = r, list))] 6 | pub struct Group { 7 | pub id: i64, 8 | pub name: String, 9 | } 10 | -------------------------------------------------------------------------------- /editoast/src/models/infra/sql/get_speed_limit_tags.sql: -------------------------------------------------------------------------------- 1 | SELECT DISTINCT jsonb_object_keys(data->'speed_limit_by_tag') AS tag 2 | FROM infra_object_speed_section 3 | WHERE infra_id = $1 4 | ORDER BY tag 5 | -------------------------------------------------------------------------------- /editoast/src/models/infra/sql/get_voltages_without_rolling_stocks_modes.sql: -------------------------------------------------------------------------------- 1 | SELECT DISTINCT ((data->'voltage')->>0) AS voltage 2 | FROM infra_object_electrification 3 | WHERE infra_id = $1 4 | ORDER BY voltage 5 | -------------------------------------------------------------------------------- /editoast/src/models/layers.rs: -------------------------------------------------------------------------------- 1 | pub mod geo_json_and_data; 2 | -------------------------------------------------------------------------------- /editoast/src/models/rolling_stock/sql/get_power_restrictions.sql: -------------------------------------------------------------------------------- 1 | SELECT DISTINCT jsonb_object_keys(power_restrictions) AS power_restriction 2 | FROM rolling_stock 3 | -------------------------------------------------------------------------------- /editoast/src/models/subject.rs: -------------------------------------------------------------------------------- 1 | use editoast_derive::Model; 2 | 3 | #[derive(Debug, Clone, Model)] 4 | #[model(table = editoast_models::tables::authn_subject)] 5 | #[model(gen(list))] 6 | pub struct Subject { 7 | pub id: i64, 8 | } 9 | -------------------------------------------------------------------------------- /editoast/src/models/user.rs: -------------------------------------------------------------------------------- 1 | use editoast_derive::Model; 2 | 3 | #[derive(Debug, Clone, Model)] 4 | #[model(table = editoast_models::tables::authn_user)] 5 | #[model(gen(ops = r, list))] 6 | pub struct User { 7 | pub id: i64, 8 | pub identity_id: String, 9 | pub name: String, 10 | } 11 | -------------------------------------------------------------------------------- /editoast/src/tests/example_rolling_stock_image_1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/editoast/src/tests/example_rolling_stock_image_1.gif -------------------------------------------------------------------------------- /editoast/src/tests/example_rolling_stock_image_2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/editoast/src/tests/example_rolling_stock_image_2.gif -------------------------------------------------------------------------------- /front/.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | npm-debug.log 3 | Dockerfile 4 | playwright-report 5 | -------------------------------------------------------------------------------- /front/.env.local.defaults: -------------------------------------------------------------------------------- 1 | OSRD_GIT_DESCRIBE= 2 | OSRD_VITE_PORT=3000 3 | OSRD_VITE_OVERLAY=true 4 | OSRD_VITE_OVERLAY_OPEN_BY_DEFAULT=false 5 | -------------------------------------------------------------------------------- /front/.gitattributes: -------------------------------------------------------------------------------- 1 | # Explicitly mark end of line so Windows compilation is not blocked by prettier 2 | 3 | *.ts text eol=lf 4 | *.js text eol=lf 5 | *.tsx text eol=lf 6 | *.jsx text eol=lf 7 | -------------------------------------------------------------------------------- /front/.nvmrc: -------------------------------------------------------------------------------- 1 | 20 2 | -------------------------------------------------------------------------------- /front/.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 100, 3 | "singleQuote": true, 4 | "arrowParens": "always", 5 | "proseWrap": "always", 6 | "trailingComma": "es5", 7 | "overrides": [ 8 | { 9 | "files": ["*.jsonc", ".eslintrc", "tsconfig*.json"], 10 | "options": { 11 | "trailingComma": "none" 12 | } 13 | } 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /front/docker/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM front_build AS tests 2 | 3 | # Allow to import tests data files 4 | COPY --from=test_data . /tests/data 5 | -------------------------------------------------------------------------------- /front/docker/Dockerfile.playwright: -------------------------------------------------------------------------------- 1 | ARG PLAYWRIGHT_VERSION=latest 2 | FROM mcr.microsoft.com/playwright:$PLAYWRIGHT_VERSION 3 | 4 | COPY front/package.json front/package-lock.json /app/front/ 5 | WORKDIR /app/front 6 | RUN --mount=type=cache,target=/root/.npm \ 7 | npm install --frozen-lockfile 8 | 9 | COPY front /app/front/ 10 | COPY tests /app/tests 11 | RUN chmod a+w /app/front/ 12 | -------------------------------------------------------------------------------- /front/lerna.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "node_modules/lerna/schemas/lerna-schema.json", 3 | "version": "0.0.0", 4 | "private": false, 5 | "push": false, 6 | "includeMergedTags": true 7 | } 8 | -------------------------------------------------------------------------------- /front/public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /front/public/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/android-chrome-512x512.png -------------------------------------------------------------------------------- /front/public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/apple-touch-icon.png -------------------------------------------------------------------------------- /front/public/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #2d89ef 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /front/public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/favicon-16x16.png -------------------------------------------------------------------------------- /front/public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/favicon-32x32.png -------------------------------------------------------------------------------- /front/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/favicon.ico -------------------------------------------------------------------------------- /front/public/locales/de/errors.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /front/public/locales/de/infraEditor.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /front/public/locales/de/stdcm-help-section.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /front/public/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/mstile-150x150.png -------------------------------------------------------------------------------- /front/public/newFonts/IBM-Plex-Mono/IBMPlexMono-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/newFonts/IBM-Plex-Mono/IBMPlexMono-Bold.ttf -------------------------------------------------------------------------------- /front/public/newFonts/IBM-Plex-Mono/IBMPlexMono-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/newFonts/IBM-Plex-Mono/IBMPlexMono-Italic.ttf -------------------------------------------------------------------------------- /front/public/newFonts/IBM-Plex-Mono/IBMPlexMono-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/newFonts/IBM-Plex-Mono/IBMPlexMono-Medium.ttf -------------------------------------------------------------------------------- /front/public/newFonts/IBM-Plex-Mono/IBMPlexMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/newFonts/IBM-Plex-Mono/IBMPlexMono-Regular.ttf -------------------------------------------------------------------------------- /front/public/newFonts/IBM-Plex-Mono/IBMPlexMono-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/newFonts/IBM-Plex-Mono/IBMPlexMono-SemiBold.ttf -------------------------------------------------------------------------------- /front/public/newFonts/IBM-Plex-Mono/IBMPlexMono-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/newFonts/IBM-Plex-Mono/IBMPlexMono-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /front/public/newFonts/IBM-Plex-Sans/IBMPlexSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/newFonts/IBM-Plex-Sans/IBMPlexSans-Bold.ttf -------------------------------------------------------------------------------- /front/public/newFonts/IBM-Plex-Sans/IBMPlexSans-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/newFonts/IBM-Plex-Sans/IBMPlexSans-BoldItalic.ttf -------------------------------------------------------------------------------- /front/public/newFonts/IBM-Plex-Sans/IBMPlexSans-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/newFonts/IBM-Plex-Sans/IBMPlexSans-Italic.ttf -------------------------------------------------------------------------------- /front/public/newFonts/IBM-Plex-Sans/IBMPlexSans-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/newFonts/IBM-Plex-Sans/IBMPlexSans-Medium.ttf -------------------------------------------------------------------------------- /front/public/newFonts/IBM-Plex-Sans/IBMPlexSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/newFonts/IBM-Plex-Sans/IBMPlexSans-Regular.ttf -------------------------------------------------------------------------------- /front/public/newFonts/IBM-Plex-Sans/IBMPlexSans-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/newFonts/IBM-Plex-Sans/IBMPlexSans-SemiBold.ttf -------------------------------------------------------------------------------- /front/public/newFonts/IBM-Plex-Sans/IBMPlexSans-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/newFonts/IBM-Plex-Sans/IBMPlexSans-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /front/public/newFonts/IBM-Plex-Serif/IBMPlexSerif-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/newFonts/IBM-Plex-Serif/IBMPlexSerif-Italic.ttf -------------------------------------------------------------------------------- /front/public/newFonts/IBM-Plex-Serif/IBMPlexSerif-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/newFonts/IBM-Plex-Serif/IBMPlexSerif-Regular.ttf -------------------------------------------------------------------------------- /front/public/newFonts/IBM-Plex-Serif/IBMPlexSerif-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/newFonts/IBM-Plex-Serif/IBMPlexSerif-SemiBold.ttf -------------------------------------------------------------------------------- /front/public/newFonts/IBM-Plex-Serif/IBMPlexSerif-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/newFonts/IBM-Plex-Serif/IBMPlexSerif-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_0.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_1.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_10.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_11.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_12.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_13.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_14.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_15.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_16.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_17.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_18.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_19.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_2.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_20.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_21.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_3.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_4.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_5.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_6.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_7.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_8.png -------------------------------------------------------------------------------- /front/public/pictures/minimotrices/motrice_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/public/pictures/minimotrices/motrice_9.png -------------------------------------------------------------------------------- /front/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | -------------------------------------------------------------------------------- /front/src/applications/editor/components/InfraErrors/index.ts: -------------------------------------------------------------------------------- 1 | export { INFRA_ERRORS, INFRA_ERRORS_BY_LEVEL } from './consts'; 2 | export type { InfraErrorLevel } from './types'; 3 | 4 | export { InfraErrorLine } from './InfraError'; 5 | export { default as InfraErrorIcon } from './InfraErrorIcon'; 6 | export { default as InfraErrorTypeLabel } from './InfraErrorTypeLabel'; 7 | -------------------------------------------------------------------------------- /front/src/applications/editor/components/InfraErrors/types.ts: -------------------------------------------------------------------------------- 1 | import type { GetInfraByInfraIdErrorsApiArg } from 'common/api/osrdEditoastApi'; 2 | 3 | // Error level 4 | export type InfraErrorLevel = GetInfraByInfraIdErrorsApiArg['level']; 5 | -------------------------------------------------------------------------------- /front/src/applications/editor/components/LinearMetadata/index.tsx: -------------------------------------------------------------------------------- 1 | export * from './FormComponent'; 2 | export * from './FormLineStringLength'; 3 | -------------------------------------------------------------------------------- /front/src/applications/editor/context.ts: -------------------------------------------------------------------------------- 1 | import { type Context, createContext } from 'react'; 2 | 3 | import type { EditorContextType } from './types'; 4 | 5 | const EditorContext = createContext(null) as Context; 6 | 7 | export default EditorContext; 8 | -------------------------------------------------------------------------------- /front/src/applications/editor/tools/consts.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/prefer-default-export */ 2 | import type { CommonToolState } from './types'; 3 | 4 | export const DEFAULT_COMMON_TOOL_STATE: CommonToolState = { 5 | mousePosition: null, 6 | hovered: null, 7 | }; 8 | -------------------------------------------------------------------------------- /front/src/applications/editor/tools/pointEdition/consts.ts: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line import/prefer-default-export 2 | export const POINT_LAYER_ID = 'pointEditionTool/new-entity'; 3 | -------------------------------------------------------------------------------- /front/src/applications/editor/tools/rangeEdition/components/index.ts: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line import/prefer-default-export 2 | export { default as RangeEditionLeftPanel } from './RangeEditionLeftPanel'; 3 | -------------------------------------------------------------------------------- /front/src/applications/editor/tools/rangeEdition/consts.ts: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line import/prefer-default-export 2 | export const APPLICABLE_DIRECTIONS = ['BOTH', 'START_TO_STOP', 'STOP_TO_START'] as const; 3 | -------------------------------------------------------------------------------- /front/src/applications/editor/tools/routeEdition/components/index.ts: -------------------------------------------------------------------------------- 1 | export { default as RouteEditionLeftPanel } from './RouteEditionLeftPanel'; 2 | export { default as RouteEditionLayers } from './RouteEditionLayers'; 3 | export { default as RouteEditionMessages } from './RouteEditionMessages'; 4 | -------------------------------------------------------------------------------- /front/src/applications/editor/tools/selection/components/index.ts: -------------------------------------------------------------------------------- 1 | export { default as SelectionLayers } from './SelectionLayers'; 2 | export { default as SelectionLeftPanel } from './SelectionLeftPanel'; 3 | export { default as SelectionMessages } from './SelectionMessages'; 4 | -------------------------------------------------------------------------------- /front/src/applications/editor/tools/switchEdition/components/index.ts: -------------------------------------------------------------------------------- 1 | export { default as SwitchEditionLayers } from './SwitchEditionLayers'; 2 | export { default as SwitchEditionLeftPanel } from './SwitchEditionLeftPanel'; 3 | export { default as SwitchMessages } from './SwitchMessages'; 4 | -------------------------------------------------------------------------------- /front/src/applications/editor/tools/trackEdition/components/index.ts: -------------------------------------------------------------------------------- 1 | export { default as TrackEditionLayers } from './TrackEditionLayers'; 2 | export { default as TrackEditionLeftPanel } from './TrackEditionLeftPanel'; 3 | export { default as TrackEditionMessages } from './TrackEditionMessages'; 4 | -------------------------------------------------------------------------------- /front/src/applications/editor/tools/trackEdition/consts.ts: -------------------------------------------------------------------------------- 1 | export const TRACK_LAYER_ID = 'trackEditionTool/new-track-path'; 2 | export const POINTS_LAYER_ID = 'trackEditionTool/new-track-points'; 3 | -------------------------------------------------------------------------------- /front/src/applications/editor/tools/trackSplit/components/index.ts: -------------------------------------------------------------------------------- 1 | export { default as TrackSplitLayers } from './TrackSplitLayers'; 2 | export { default as TrackSplitLeftPanel } from './TrackSplitLeftPanel'; 3 | export { default as TrackSplitMessages } from './TrackSplitMessages'; 4 | -------------------------------------------------------------------------------- /front/src/applications/operationalStudies/components/NGE/index.ts: -------------------------------------------------------------------------------- 1 | import NGE from './NGE'; 2 | 3 | export default NGE; 4 | -------------------------------------------------------------------------------- /front/src/applications/stdcm/components/StdcmHelpModule/index.ts: -------------------------------------------------------------------------------- 1 | import StdcmHelpModule from './StdcmHelpModule'; 2 | 3 | export default StdcmHelpModule; 4 | -------------------------------------------------------------------------------- /front/src/applications/stdcm/components/StdcmResults/index.ts: -------------------------------------------------------------------------------- 1 | import StdcmResults from './StdcmResults'; 2 | 3 | export default StdcmResults; 4 | -------------------------------------------------------------------------------- /front/src/applications/stdcm/styles/styles.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.scss' { 2 | const content: Record; 3 | export default content; 4 | } 5 | -------------------------------------------------------------------------------- /front/src/assets/defaultRSImages/example_rolling_stock_image_1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/src/assets/defaultRSImages/example_rolling_stock_image_1.gif -------------------------------------------------------------------------------- /front/src/assets/defaultRSImages/example_rolling_stock_image_2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/src/assets/defaultRSImages/example_rolling_stock_image_2.gif -------------------------------------------------------------------------------- /front/src/assets/logo_sncf_bw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/src/assets/logo_sncf_bw.png -------------------------------------------------------------------------------- /front/src/assets/pictures/layersicons/detectors.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/src/assets/pictures/layersicons/ops.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/src/assets/pictures/layersicons/switches.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/src/assets/pictures/mapbuttons/mapstyle-3d-buildings.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/src/assets/pictures/mapbuttons/mapstyle-3d-buildings.jpg -------------------------------------------------------------------------------- /front/src/assets/pictures/mapbuttons/mapstyle-cadastre.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/src/assets/pictures/mapbuttons/mapstyle-cadastre.jpg -------------------------------------------------------------------------------- /front/src/assets/pictures/mapbuttons/mapstyle-dark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/src/assets/pictures/mapbuttons/mapstyle-dark.jpg -------------------------------------------------------------------------------- /front/src/assets/pictures/mapbuttons/mapstyle-minimal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/src/assets/pictures/mapbuttons/mapstyle-minimal.jpg -------------------------------------------------------------------------------- /front/src/assets/pictures/mapbuttons/mapstyle-normal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/src/assets/pictures/mapbuttons/mapstyle-normal.jpg -------------------------------------------------------------------------------- /front/src/assets/pictures/mapbuttons/mapstyle-ortho.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/src/assets/pictures/mapbuttons/mapstyle-ortho.jpg -------------------------------------------------------------------------------- /front/src/assets/pictures/mapbuttons/mapstyle-osm-tracks.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/src/assets/pictures/mapbuttons/mapstyle-osm-tracks.jpg -------------------------------------------------------------------------------- /front/src/assets/pictures/mapbuttons/mapstyle-scan25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/src/assets/pictures/mapbuttons/mapstyle-scan25.jpg -------------------------------------------------------------------------------- /front/src/assets/pictures/mapbuttons/osm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/src/assets/pictures/mapbuttons/osm.png -------------------------------------------------------------------------------- /front/src/assets/pictures/mapbuttons/osmLight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/src/assets/pictures/mapbuttons/osmLight.png -------------------------------------------------------------------------------- /front/src/assets/pictures/origin.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /front/src/assets/pictures/placeholder_rollingstock_elec.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/src/assets/pictures/placeholder_rollingstock_elec.gif -------------------------------------------------------------------------------- /front/src/assets/pictures/placeholder_rollingstock_thermal.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/src/assets/pictures/placeholder_rollingstock_thermal.gif -------------------------------------------------------------------------------- /front/src/assets/pictures/via.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /front/src/assets/simulationReportSheet/icon_alert_fill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/src/assets/simulationReportSheet/icon_alert_fill.png -------------------------------------------------------------------------------- /front/src/assets/simulationReportSheet/logo_sncf_reseau.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/src/assets/simulationReportSheet/logo_sncf_reseau.png -------------------------------------------------------------------------------- /front/src/common/BootstrapSNCF/CardSNCF/CardSNCF.scss: -------------------------------------------------------------------------------- 1 | .card-img-top { 2 | padding: 32px; 3 | } 4 | .card-body { 5 | display: flex; 6 | align-items: center; 7 | justify-content: center; 8 | padding: 8px; 9 | height: 64px; 10 | } 11 | -------------------------------------------------------------------------------- /front/src/common/BootstrapSNCF/CardSNCF/index.ts: -------------------------------------------------------------------------------- 1 | import CardSNCF from './CardSNCF'; 2 | 3 | export default CardSNCF; 4 | -------------------------------------------------------------------------------- /front/src/common/BootstrapSNCF/CheckboxRadioSNCF.scss: -------------------------------------------------------------------------------- 1 | .custom-control .custom-control-input:disabled ~ .custom-control-label { 2 | color: var(--coolgray5) !important; 3 | &:before { 4 | border-color: var(--coolgray3) !important; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /front/src/common/BootstrapSNCF/ModalSNCF/ModalBodySNCF.tsx: -------------------------------------------------------------------------------- 1 | import { type CSSProperties, type PropsWithChildren } from 'react'; 2 | 3 | const ModalBodySNCF = ({ children, style }: PropsWithChildren<{ style?: CSSProperties }>) => ( 4 |

7 | ); 8 | 9 | export default ModalBodySNCF; 10 | -------------------------------------------------------------------------------- /front/src/common/BootstrapSNCF/ModalSNCF/ModalFooterSNCF.tsx: -------------------------------------------------------------------------------- 1 | import { type PropsWithChildren } from 'react'; 2 | 3 | const ModalFooterSNCF = ({ children }: PropsWithChildren) => ( 4 |
{children}
5 | ); 6 | 7 | export default ModalFooterSNCF; 8 | -------------------------------------------------------------------------------- /front/src/common/BootstrapSNCF/ModalSNCF/ModalStyle.scss: -------------------------------------------------------------------------------- 1 | .modal { 2 | .modal-content { 3 | position: relative; 4 | overflow-y: auto; 5 | .modal-body { 6 | max-height: 90vh; 7 | } 8 | .modal-footer { 9 | padding-top: 8px; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /front/src/common/BootstrapSNCF/ModalSNCF/useModal.tsx: -------------------------------------------------------------------------------- 1 | import { useContext } from 'react'; 2 | 3 | import { ModalContext } from './ModalProvider'; 4 | 5 | export default function useModal() { 6 | const { openModal, closeModal } = useContext(ModalContext); 7 | return { 8 | openModal, 9 | closeModal, 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /front/src/common/BootstrapSNCF/NavBarSNCF.scss: -------------------------------------------------------------------------------- 1 | .user-settings-btn:disabled { 2 | cursor: not-allowed; 3 | color: #c0c0c0 !important; 4 | pointer-events: auto; 5 | } 6 | -------------------------------------------------------------------------------- /front/src/common/BootstrapSNCF/SelectImprovedSNCF.scss: -------------------------------------------------------------------------------- 1 | .d-flex .select-improved { 2 | flex-grow: 4; 3 | } 4 | 5 | .add-border-top { 6 | border-top: var(--coolgray3) solid 1px; 7 | border-top-right-radius: 7px; 8 | border-top-left-radius: 7px; 9 | } 10 | -------------------------------------------------------------------------------- /front/src/common/BootstrapSNCF/SwitchSNCF/SwitchSNCF.scss: -------------------------------------------------------------------------------- 1 | .options-control.warning { 2 | background-color: var(--red); 3 | } 4 | -------------------------------------------------------------------------------- /front/src/common/BootstrapSNCF/SwitchSNCF/index.ts: -------------------------------------------------------------------------------- 1 | import SwitchSNCF from './SwitchSNCF'; 2 | 3 | export default SwitchSNCF; 4 | 5 | export { SWITCH_TYPES, type SwitchSNCFProps } from './SwitchSNCF'; 6 | -------------------------------------------------------------------------------- /front/src/common/DotsLoader/DotsLoader.tsx: -------------------------------------------------------------------------------- 1 | const DotsLoader = () => ( 2 |
3 |
4 |
5 |
6 |
7 | ); 8 | 9 | export default DotsLoader; 10 | -------------------------------------------------------------------------------- /front/src/common/DotsLoader/index.ts: -------------------------------------------------------------------------------- 1 | import DotsLoader from './DotsLoader'; 2 | 3 | export default DotsLoader; 4 | -------------------------------------------------------------------------------- /front/src/common/Grid/index.ts: -------------------------------------------------------------------------------- 1 | import Grid from './Grid'; 2 | 3 | export default Grid; 4 | -------------------------------------------------------------------------------- /front/src/common/IntervalsEditor/index.ts: -------------------------------------------------------------------------------- 1 | import IntervalsEditor from './IntervalsEditor'; 2 | 3 | export default IntervalsEditor; 4 | -------------------------------------------------------------------------------- /front/src/common/Loaders/index.ts: -------------------------------------------------------------------------------- 1 | export { Loader, LoaderFill, LoaderState, ThreeDots, Spinner } from './Loader'; 2 | -------------------------------------------------------------------------------- /front/src/common/Map/Layers/IGNLayers/index.ts: -------------------------------------------------------------------------------- 1 | import IGNLayers from './IGNLayers'; 2 | 3 | export default IGNLayers; 4 | -------------------------------------------------------------------------------- /front/src/common/Map/Layers/OSMLayers/index.ts: -------------------------------------------------------------------------------- 1 | import OSMLayers from './OSMLayers'; 2 | 3 | export { genOSMLayerProps } from './OSM'; 4 | export { Platforms } from './Platforms'; 5 | 6 | export default OSMLayers; 7 | -------------------------------------------------------------------------------- /front/src/common/Map/WarpedMap/index.ts: -------------------------------------------------------------------------------- 1 | import WarpedMap from './WarpedMap'; 2 | 3 | export default WarpedMap; 4 | -------------------------------------------------------------------------------- /front/src/common/Notifications/index.ts: -------------------------------------------------------------------------------- 1 | import { NotificationsState } from './Notifications'; 2 | 3 | export default NotificationsState; 4 | -------------------------------------------------------------------------------- /front/src/common/ReleaseInformations/index.ts: -------------------------------------------------------------------------------- 1 | import ReleaseInformations from './ReleaseInformations'; 2 | 3 | export default ReleaseInformations; 4 | -------------------------------------------------------------------------------- /front/src/common/ReleaseInformations/json/licenseCustomFormat.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "", 3 | "version": "", 4 | "license": "", 5 | "copyright": "", 6 | "publisher": "", 7 | "licenseFile": false, 8 | "licenseText": false, 9 | "email": false, 10 | "repository": false, 11 | "path": false 12 | } 13 | -------------------------------------------------------------------------------- /front/src/common/ReleaseInformations/json/licenses.json: -------------------------------------------------------------------------------- 1 | { 2 | "@osrd/example-library@0.4.2": { 3 | "license": "The updated list is generated at build", 4 | "publisher": "Joseph Marchand", 5 | "copyright": "This is an example", 6 | "name": "@osrd/example-library", 7 | "version": "0.4.2" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /front/src/common/Selector/index.ts: -------------------------------------------------------------------------------- 1 | import Selector from './Selector'; 2 | 3 | export default Selector; 4 | -------------------------------------------------------------------------------- /front/src/common/SpeedLimitByTagSelector/SpeedLimitByTagSelector.scss: -------------------------------------------------------------------------------- 1 | .gap-10 { 2 | gap: 8px; 3 | } 4 | -------------------------------------------------------------------------------- /front/src/common/SpeedLimitByTagSelector/index.ts: -------------------------------------------------------------------------------- 1 | import SpeedLimitByTagSelector from './SpeedLimitByTagSelector'; 2 | 3 | export default SpeedLimitByTagSelector; 4 | -------------------------------------------------------------------------------- /front/src/common/authorization/consts.ts: -------------------------------------------------------------------------------- 1 | // The order is important here, as it is used to determine the order of the grants 2 | export enum GRANTS_LABEL { 3 | NONE = 'none', 4 | READER = 'read', 5 | WRITER = 'edit', 6 | OWNER = 'full', 7 | } 8 | 9 | export enum SUBJECT_TYPES { 10 | USER = 'User', 11 | GROUP = 'Group', 12 | } 13 | -------------------------------------------------------------------------------- /front/src/config/config.ts: -------------------------------------------------------------------------------- 1 | export const MAIN_API = { 2 | proxy_editoast: import.meta.env.VITE_PROXY_EDITOAST || '/api', 3 | proxy_gateway: import.meta.env.VITE_PROXY_GATEWAY || '', 4 | version: '0.0.1', 5 | editor: { 6 | component_identifier: { database: 'gaia', name: 'Test' }, 7 | }, 8 | }; 9 | 10 | export default MAIN_API; 11 | -------------------------------------------------------------------------------- /front/src/main/consts.ts: -------------------------------------------------------------------------------- 1 | interface MODES_Types { 2 | [n: string]: string; 3 | } 4 | 5 | export const MODES: MODES_Types = Object.freeze({ 6 | simulation: 'SIMULATION', 7 | stdcm: 'STDCM', 8 | editor: 'EDITOR', 9 | mapViewer: 'MAP_VIEWER', 10 | }); 11 | 12 | export const DEFAULT_MODE = MODES.simulation; 13 | -------------------------------------------------------------------------------- /front/src/main/history.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Crée un historique accesible dans tous les composants 3 | * et dans l'arbre redux 4 | */ 5 | import { createBrowserHistory } from 'history'; 6 | 7 | const history = createBrowserHistory(); 8 | 9 | export default history; 10 | -------------------------------------------------------------------------------- /front/src/modules/SimulationReportSheet/index.ts: -------------------------------------------------------------------------------- 1 | import SimulationReportSheet from './SimulationReportSheet'; 2 | 3 | export default SimulationReportSheet; 4 | -------------------------------------------------------------------------------- /front/src/modules/conflict/styles/conflict.scss: -------------------------------------------------------------------------------- 1 | @use './conflictList'; 2 | -------------------------------------------------------------------------------- /front/src/modules/conflict/types.ts: -------------------------------------------------------------------------------- 1 | import type { Conflict } from 'common/api/osrdEditoastApi'; 2 | 3 | export type ConflictWithTrainNames = Conflict & { 4 | trainNames: string[]; 5 | }; 6 | -------------------------------------------------------------------------------- /front/src/modules/infra/components/InfraSelector/InfraSelector.tsx: -------------------------------------------------------------------------------- 1 | import InfraSelectorModal from './InfraSelectorModal'; 2 | 3 | type InfraSelectorProps = { 4 | isInEditor?: boolean; 5 | }; 6 | 7 | const InfraSelector = ({ isInEditor }: InfraSelectorProps) => ( 8 | 9 | ); 10 | 11 | export default InfraSelector; 12 | -------------------------------------------------------------------------------- /front/src/modules/infra/components/InfraSelector/index.ts: -------------------------------------------------------------------------------- 1 | import InfraSelector from './InfraSelector'; 2 | 3 | export { default as InfraSelectorModal } from './InfraSelectorModal'; 4 | 5 | export default InfraSelector; 6 | -------------------------------------------------------------------------------- /front/src/modules/infra/styles/infra.scss: -------------------------------------------------------------------------------- 1 | @use './infraSelector'; 2 | -------------------------------------------------------------------------------- /front/src/modules/pathfinding/components/IncompatibleConstraints/index.ts: -------------------------------------------------------------------------------- 1 | import IncompatibleConstraints from './IncompatibleConstraints'; 2 | 3 | export default IncompatibleConstraints; 4 | -------------------------------------------------------------------------------- /front/src/modules/pathfinding/components/Itinerary/index.ts: -------------------------------------------------------------------------------- 1 | import Itinerary from './Itinerary'; 2 | 3 | export default Itinerary; 4 | -------------------------------------------------------------------------------- /front/src/modules/pathfinding/components/Pathfinding/index.ts: -------------------------------------------------------------------------------- 1 | import Pathfinding from './Pathfinding'; 2 | 3 | export default Pathfinding; 4 | -------------------------------------------------------------------------------- /front/src/modules/pathfinding/types.ts: -------------------------------------------------------------------------------- 1 | export type PathfindingState = { 2 | isMissingParam: boolean; 3 | isRunning: boolean; 4 | isDone: boolean; 5 | error?: string; 6 | }; 7 | -------------------------------------------------------------------------------- /front/src/modules/powerRestriction/consts.ts: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line import/prefer-default-export 2 | export const NO_POWER_RESTRICTION = 'NO_POWER_RESTRICTION'; 3 | -------------------------------------------------------------------------------- /front/src/modules/project/styles/_selectionToolbar.scss: -------------------------------------------------------------------------------- 1 | .selection-toolbar { 2 | display: flex; 3 | align-items: center; 4 | justify-content: flex-end; 5 | gap: 8px; 6 | height: 48px; 7 | color: var(--purple); 8 | font-weight: 500; 9 | } 10 | -------------------------------------------------------------------------------- /front/src/modules/project/styles/project.scss: -------------------------------------------------------------------------------- 1 | @use './addOrEditProjectModal'; 2 | @use './projectCard'; 3 | @use './selectionToolbar'; 4 | -------------------------------------------------------------------------------- /front/src/modules/rollingStock/components/RollingStockCard/index.ts: -------------------------------------------------------------------------------- 1 | export { default as RollingStockCard } from 'modules/rollingStock/components/RollingStockCard/RollingStockCard'; 2 | export { default as RollingStockCardButtons } from 'modules/rollingStock/components/RollingStockCard/RollingStockCardButtons'; 3 | -------------------------------------------------------------------------------- /front/src/modules/rollingStock/components/RollingStockEditor/index.ts: -------------------------------------------------------------------------------- 1 | import RollingStockForm from './RollingStockEditorForm'; 2 | 3 | export default RollingStockForm; 4 | -------------------------------------------------------------------------------- /front/src/modules/rollingStock/components/RollingStockSelector/index.ts: -------------------------------------------------------------------------------- 1 | export { default as RollingStockSelector } from './RollingStockSelector'; 2 | export { default as RollingStockModal } from './RollingStockModal'; 3 | export { default as SearchRollingStock } from './SearchRollingStock'; 4 | -------------------------------------------------------------------------------- /front/src/modules/rollingStock/styles/rollingStock.scss: -------------------------------------------------------------------------------- 1 | @use './rollingStockCard'; 2 | @use './rollingStockCurves'; 3 | @use './rollingStockSelector'; 4 | 5 | .comfort-AC { 6 | color: #0088ce; 7 | } 8 | .comfort-HEATING { 9 | color: var(--yellow); 10 | } 11 | .comfort-STANDARD { 12 | font-weight: bold; 13 | } 14 | -------------------------------------------------------------------------------- /front/src/modules/scenario/components/ScenarioExplorer/index.ts: -------------------------------------------------------------------------------- 1 | import ScenarioExplorer from './ScenarioExplorer'; 2 | 3 | export default ScenarioExplorer; 4 | -------------------------------------------------------------------------------- /front/src/modules/scenario/styles/scenario.scss: -------------------------------------------------------------------------------- 1 | @use './addOrEditScenarioModal'; 2 | @use './scenarioExplorer'; 3 | @use './scenarioCard'; 4 | @use './scenarioLoaderMessage'; 5 | -------------------------------------------------------------------------------- /front/src/modules/simulationResult/components/SimulationResultsMap/index.ts: -------------------------------------------------------------------------------- 1 | import SimulationResultMap from './SimulationResultsMap'; 2 | 3 | export default SimulationResultMap; 4 | -------------------------------------------------------------------------------- /front/src/modules/study/styles/study.scss: -------------------------------------------------------------------------------- 1 | @use './addOrEditStudyModal'; 2 | @use './studyCard'; 3 | -------------------------------------------------------------------------------- /front/src/modules/timesStops/consts.ts: -------------------------------------------------------------------------------- 1 | import { Duration } from 'utils/duration'; 2 | 3 | export const marginRegExValidation = /^(\d+(\.\d+)?)(%|min\/100km)$/; 4 | 5 | export const MarginUnit = { 6 | percent: '%', 7 | minPer100km: 'min/100km', 8 | second: 's', 9 | } as const; 10 | 11 | export const ARRIVAL_TIME_ACCEPTABLE_ERROR = new Duration({ seconds: 2 }); 12 | -------------------------------------------------------------------------------- /front/src/modules/timesStops/styles/_readOnlyTime.scss: -------------------------------------------------------------------------------- 1 | .read-only-time { 2 | // using px to conform with the padding in the react-datasheet-grid library class .dsg-input 3 | padding: 0 10px; 4 | width: 100%; 5 | } 6 | -------------------------------------------------------------------------------- /front/src/modules/timesStops/styles/_timeInput.scss: -------------------------------------------------------------------------------- 1 | .time-input-container { 2 | padding-left: 11px; 3 | 4 | input.dsg-input { 5 | display: inline; 6 | padding-left: 0; 7 | padding-right: 4px; 8 | margin-left: -3px; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /front/src/modules/timesStops/styles/timesStops.scss: -------------------------------------------------------------------------------- 1 | @use './timesStopsDatasheet'; 2 | @use './timeInput'; 3 | @use './readOnlyTime'; 4 | -------------------------------------------------------------------------------- /front/src/modules/trainschedule/components/ImportTimetableItem/types.ts: -------------------------------------------------------------------------------- 1 | import type rollingstockOpenData2OSRD from 'modules/trainschedule/components/ImportTimetableItem/rollingstock_opendata2osrd.json'; 2 | 3 | export type RollingstockOpenData2OSRDKeys = keyof typeof rollingstockOpenData2OSRD; 4 | -------------------------------------------------------------------------------- /front/src/modules/trainschedule/components/ManageTrainSchedule/PacedTrainSettings/index.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-restricted-exports */ 2 | export { default } from './PacedTrainSettings'; 3 | -------------------------------------------------------------------------------- /front/src/modules/trainschedule/components/ManageTrainSchedule/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Map } from 'modules/trainschedule/components/ManageTrainSchedule/Map'; 2 | export { default as TrainSettings } from 'modules/trainschedule/components/ManageTrainSchedule/TrainSettings'; 3 | export { default as ElectricalProfiles } from 'modules/trainschedule/components/ManageTrainSchedule/ElectricalProfiles'; 4 | -------------------------------------------------------------------------------- /front/src/modules/trainschedule/components/Timetable/index.ts: -------------------------------------------------------------------------------- 1 | import Timetable from './Timetable'; 2 | 3 | export default Timetable; 4 | -------------------------------------------------------------------------------- /front/src/modules/trainschedule/styles/timetableItem.scss: -------------------------------------------------------------------------------- 1 | @use './ImportTimetableItem/importTimetableItemTrainsList'; 2 | 3 | @use './ManageTimetableItem/itinerary'; 4 | 5 | @use './ManageTimetableItem/pacedTrainsSettings'; 6 | -------------------------------------------------------------------------------- /front/src/reducers/mapViewer/selectors.ts: -------------------------------------------------------------------------------- 1 | import buildInfraStateSelectors from 'reducers/infra/selectors'; 2 | import { mapViewerSlice } from 'reducers/mapViewer'; 3 | 4 | const selectors = { 5 | ...buildInfraStateSelectors(mapViewerSlice), 6 | }; 7 | 8 | export type MapViewerSelectors = typeof selectors; 9 | 10 | export default selectors; 11 | -------------------------------------------------------------------------------- /front/src/store/listeners/types.ts: -------------------------------------------------------------------------------- 1 | import type { TypedStartListening, ListenerEffectAPI } from '@reduxjs/toolkit'; 2 | 3 | import type { RootState } from 'reducers'; 4 | import type { AppDispatch } from 'store'; 5 | 6 | export type AppStartListening = TypedStartListening; 7 | export type AppListenerEffectApi = ListenerEffectAPI; 8 | -------------------------------------------------------------------------------- /front/src/styles/scss/_uiManchette.scss: -------------------------------------------------------------------------------- 1 | @use '@osrd-project/ui-charts/dist/theme.css'; 2 | -------------------------------------------------------------------------------- /front/src/styles/scss/_uiSpaceTimeChart.scss: -------------------------------------------------------------------------------- 1 | @use '@osrd-project/ui-charts/dist/theme.css'; 2 | -------------------------------------------------------------------------------- /front/src/styles/scss/_uiSpeedSpaceChart.scss: -------------------------------------------------------------------------------- 1 | @use '@osrd-project/ui-charts/dist/theme.css'; 2 | -------------------------------------------------------------------------------- /front/src/styles/scss/applications/_stdcm.scss: -------------------------------------------------------------------------------- 1 | @use 'stdcm/card'; 2 | @use 'stdcm/configError'; 3 | @use 'stdcm/header'; 4 | @use 'stdcm/helpModule'; 5 | @use 'stdcm/home'; 6 | @use 'stdcm/linkedTrain'; 7 | @use 'stdcm/loader'; 8 | @use 'stdcm/results'; 9 | -------------------------------------------------------------------------------- /front/src/styles/scss/applications/editor/_speedSection.scss: -------------------------------------------------------------------------------- 1 | .speed-section { 2 | .switch-list { 3 | .incompatible-configuration-switch { 4 | label::before { 5 | border-color: var(--yellow); 6 | } 7 | } 8 | 9 | .incompatible-tooltip { 10 | text-wrap: balance; 11 | width: 192px; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /front/src/styles/scss/applications/operationalStudies/_nge.scss: -------------------------------------------------------------------------------- 1 | .nge-iframe-container { 2 | width: 100%; 3 | height: 100%; 4 | border-radius: 10px; 5 | box-shadow: 6 | -4px 0 8px var(--coolgray1), 7 | 4px 0 8px var(--coolgray1), 8 | 0 2px 8px var(--coolgray13); 9 | } 10 | -------------------------------------------------------------------------------- /front/src/styles/scss/common/components/_debouncedNumberInput.scss: -------------------------------------------------------------------------------- 1 | .debounced-number-input { 2 | display: flex; 3 | justify-content: space-between; 4 | align-items: baseline; 5 | } 6 | -------------------------------------------------------------------------------- /front/src/styles/scss/common/components/_intervalsEditor.scss: -------------------------------------------------------------------------------- 1 | .intervals-editor-form { 2 | display: flex; 3 | width: 100%; 4 | 5 | .intervals-editor-select-form { 6 | width: 20em; 7 | padding-right: 1em; 8 | } 9 | 10 | .intervals-editor-form-column { 11 | width: 20em; 12 | padding-right: 1em; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /front/src/utils/hooks/state.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/prefer-default-export */ 2 | import { useRef, useEffect } from 'react'; 3 | 4 | export function usePrevious(value: T) { 5 | const ref = useRef(); 6 | useEffect(() => { 7 | ref.current = value; 8 | }, [value]); 9 | return ref.current; 10 | } 11 | -------------------------------------------------------------------------------- /front/src/utils/object.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/prefer-default-export */ 2 | import { isEqual, pick } from 'lodash'; 3 | /** 4 | compare two objects based on a list of keys 5 | */ 6 | export const partialIsEqual = (keys: string[], a: object, b: object) => 7 | isEqual(pick(a, keys), pick(b, keys)); 8 | -------------------------------------------------------------------------------- /front/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | interface ImportMetaEnv { 4 | VITE_OSRD_GIT_DESCRIBE: string; 5 | } 6 | -------------------------------------------------------------------------------- /front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-AllSettingsEnabled-chromium-linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-AllSettingsEnabled-chromium-linux.png -------------------------------------------------------------------------------- /front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-AllSettingsEnabled-firefox-linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-AllSettingsEnabled-firefox-linux.png -------------------------------------------------------------------------------- /front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-ElectricalProfileActivated-chromium-linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-ElectricalProfileActivated-chromium-linux.png -------------------------------------------------------------------------------- /front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-ElectricalProfileActivated-firefox-linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-ElectricalProfileActivated-firefox-linux.png -------------------------------------------------------------------------------- /front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-ElectricalProfileDisabled-chromium-linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-ElectricalProfileDisabled-chromium-linux.png -------------------------------------------------------------------------------- /front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-ElectricalProfileDisabled-firefox-linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-ElectricalProfileDisabled-firefox-linux.png -------------------------------------------------------------------------------- /front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-LinearMargin-chromium-linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-LinearMargin-chromium-linux.png -------------------------------------------------------------------------------- /front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-LinearMargin-firefox-linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-LinearMargin-firefox-linux.png -------------------------------------------------------------------------------- /front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-MarecoMargin-chromium-linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-MarecoMargin-chromium-linux.png -------------------------------------------------------------------------------- /front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-MarecoMargin-firefox-linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-MarecoMargin-firefox-linux.png -------------------------------------------------------------------------------- /front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-SpeedLimitTagActivated-chromium-linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-SpeedLimitTagActivated-chromium-linux.png -------------------------------------------------------------------------------- /front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-SpeedLimitTagActivated-firefox-linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-SpeedLimitTagActivated-firefox-linux.png -------------------------------------------------------------------------------- /front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-SpeedLimitTagDisabled-chromium-linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-SpeedLimitTagDisabled-chromium-linux.png -------------------------------------------------------------------------------- /front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-SpeedLimitTagDisabled-firefox-linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/tests/009-op-simulation-settings-tab.spec.ts-snapshots/SpeedSpaceChart-SpeedLimitTagDisabled-firefox-linux.png -------------------------------------------------------------------------------- /front/tests/017-paced-train-management.spec.ts-snapshots/SpeedSpaceChart-InitialInputs-chromium-linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/tests/017-paced-train-management.spec.ts-snapshots/SpeedSpaceChart-InitialInputs-chromium-linux.png -------------------------------------------------------------------------------- /front/tests/017-paced-train-management.spec.ts-snapshots/SpeedSpaceChart-InitialInputs-firefox-linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/tests/017-paced-train-management.spec.ts-snapshots/SpeedSpaceChart-InitialInputs-firefox-linux.png -------------------------------------------------------------------------------- /front/tests/assets/operation-studies/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "project_test_e2e", 3 | "objectives": "# Title 1 \n## Title 2 \n### Title 3 \n* List item \n- [ ] List item with checkbox", 4 | "description": "This is an e2e test for the project description", 5 | "funders": "Funded by developers", 6 | "budget": "1234567890", 7 | "tags": ["tag1", "tag2", "tag3"] 8 | } 9 | -------------------------------------------------------------------------------- /front/tests/assets/operation-studies/scenario.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "scenario_test_e2e", 3 | "description": "scenario description", 4 | "tags": ["tag1", "tag2", "tag3"] 5 | } 6 | -------------------------------------------------------------------------------- /front/ui/.gitignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | node_modules/ 3 | *.tgz 4 | storybook-static 5 | -------------------------------------------------------------------------------- /front/ui/.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 100, 3 | "singleQuote": true, 4 | "arrowParens": "always", 5 | "proseWrap": "always", 6 | "trailingComma": "es5", 7 | "overrides": [ 8 | { 9 | "files": ["*.jsonc", ".eslintrc", "tsconfig*.json"], 10 | "options": { 11 | "trailingComma": "none" 12 | } 13 | } 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /front/ui/storybook/postcss.config.cjs: -------------------------------------------------------------------------------- 1 | const generateBasePostcssConfig = require('../postcss-base.config.cjs'); 2 | 3 | module.exports = generateBasePostcssConfig(); 4 | -------------------------------------------------------------------------------- /front/ui/storybook/stories/ui-charts/manchetteWithSpaceTimeChart/assets/trackOccupancyData.ts: -------------------------------------------------------------------------------- 1 | export const TRACKS = [ 2 | { id: '1', name: 'EV', line: '123456' }, 3 | { id: '2', name: '2', line: '456123' }, 4 | { id: '3', name: '2bis', line: '135246' }, 5 | { id: '4', name: 'Z', line: '654321' }, 6 | { id: '5', name: '1bis', line: '615243' }, 7 | { id: '6', name: '1', line: '523416' }, 8 | ]; 9 | -------------------------------------------------------------------------------- /front/ui/storybook/stories/ui-charts/trackOccupancyDiagram/styles/track-occupancy.css: -------------------------------------------------------------------------------- 1 | #track-occupancy-diagram-base-story { 2 | padding: 50px; 3 | } 4 | -------------------------------------------------------------------------------- /front/ui/storybook/tailwind.config.js: -------------------------------------------------------------------------------- 1 | import osrdUiPreset from '../tailwind-preset.js'; 2 | /** @type {import('tailwindcss').Config} */ 3 | export default { 4 | presets: [osrdUiPreset], 5 | content: ['./stories/**/*.{js,jsx,ts,tsx}'], 6 | }; 7 | -------------------------------------------------------------------------------- /front/ui/storybook/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.base.json", 3 | "include": [".storybook/**/*", "stories/**/*"], 4 | "compilerOptions": { 5 | "rootDir": "../", 6 | "outDir": "./dist", 7 | "declarationDir": "./dist" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /front/ui/ui-charts/postcss.config.cjs: -------------------------------------------------------------------------------- 1 | const generateBasePostcssConfig = require('../postcss-base.config.cjs'); 2 | module.exports = generateBasePostcssConfig(); 3 | -------------------------------------------------------------------------------- /front/ui/ui-charts/rollup.config.js: -------------------------------------------------------------------------------- 1 | import generateBaseRollupConfig from '../rollup-base.config.js'; 2 | 3 | export default generateBaseRollupConfig(); 4 | -------------------------------------------------------------------------------- /front/ui/ui-charts/src/index.ts: -------------------------------------------------------------------------------- 1 | import '@osrd-project/ui-core/dist/theme.css'; 2 | 3 | export * from './spaceTimeChart'; 4 | 5 | export * from './manchette'; 6 | 7 | export * from './speedSpaceChart'; 8 | 9 | export * from './trackOccupancyDiagram'; 10 | -------------------------------------------------------------------------------- /front/ui/ui-charts/src/manchette/styles/main.css: -------------------------------------------------------------------------------- 1 | @import 'tailwindcss/base'; 2 | @import 'tailwindcss/components'; 3 | @import 'tailwindcss/utilities'; 4 | @import 'manchette.css'; 5 | @import 'waypoint.css'; 6 | @import 'menu.css'; 7 | -------------------------------------------------------------------------------- /front/ui/ui-charts/src/spaceTimeChart/config.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg' { 2 | const content: string; 3 | export default content; 4 | } 5 | -------------------------------------------------------------------------------- /front/ui/ui-charts/src/spaceTimeChart/utils/vectors.ts: -------------------------------------------------------------------------------- 1 | import { type Point } from '../lib/types'; 2 | 3 | export function getDiff(a: Point, b: Point): Point { 4 | return { 5 | x: b.x - a.x, 6 | y: b.y - a.y, 7 | }; 8 | } 9 | -------------------------------------------------------------------------------- /front/ui/ui-charts/tailwind.config.js: -------------------------------------------------------------------------------- 1 | import osrdUiPreset from '../tailwind-preset.js'; 2 | /** @type {import('tailwindcss').Config} */ 3 | export default { 4 | presets: [osrdUiPreset], 5 | content: ['./src/**/*.{js,jsx,ts,tsx}'], 6 | }; 7 | -------------------------------------------------------------------------------- /front/ui/ui-charts/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.base.json", 3 | "include": ["./src/**/*"], 4 | "compilerOptions": { 5 | "rootDir": "./src", 6 | "outDir": "./dist", 7 | "declarationDir": "./dist" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /front/ui/ui-charts/vitest.config.mts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config'; 2 | 3 | export default defineConfig({ 4 | mode: 'benchmark', 5 | test: { 6 | include: ['**/*.spec.ts'], 7 | }, 8 | }); 9 | -------------------------------------------------------------------------------- /front/ui/ui-core/fonts/IBMPlexMono-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/ui/ui-core/fonts/IBMPlexMono-Italic.ttf -------------------------------------------------------------------------------- /front/ui/ui-core/fonts/IBMPlexMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/ui/ui-core/fonts/IBMPlexMono-Regular.ttf -------------------------------------------------------------------------------- /front/ui/ui-core/fonts/IBMPlexMono-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/ui/ui-core/fonts/IBMPlexMono-SemiBold.ttf -------------------------------------------------------------------------------- /front/ui/ui-core/fonts/IBMPlexMono-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/ui/ui-core/fonts/IBMPlexMono-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /front/ui/ui-core/fonts/IBMPlexSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/ui/ui-core/fonts/IBMPlexSans-Bold.ttf -------------------------------------------------------------------------------- /front/ui/ui-core/fonts/IBMPlexSans-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/ui/ui-core/fonts/IBMPlexSans-BoldItalic.ttf -------------------------------------------------------------------------------- /front/ui/ui-core/fonts/IBMPlexSans-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/ui/ui-core/fonts/IBMPlexSans-Italic.ttf -------------------------------------------------------------------------------- /front/ui/ui-core/fonts/IBMPlexSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/ui/ui-core/fonts/IBMPlexSans-Regular.ttf -------------------------------------------------------------------------------- /front/ui/ui-core/fonts/IBMPlexSans-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/ui/ui-core/fonts/IBMPlexSans-SemiBold.ttf -------------------------------------------------------------------------------- /front/ui/ui-core/fonts/IBMPlexSans-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/ui/ui-core/fonts/IBMPlexSans-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /front/ui/ui-core/fonts/IBMPlexSerif-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/ui/ui-core/fonts/IBMPlexSerif-Italic.ttf -------------------------------------------------------------------------------- /front/ui/ui-core/fonts/IBMPlexSerif-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/ui/ui-core/fonts/IBMPlexSerif-Regular.ttf -------------------------------------------------------------------------------- /front/ui/ui-core/fonts/IBMPlexSerif-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/ui/ui-core/fonts/IBMPlexSerif-SemiBold.ttf -------------------------------------------------------------------------------- /front/ui/ui-core/fonts/IBMPlexSerif-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/front/ui/ui-core/fonts/IBMPlexSerif-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /front/ui/ui-core/postcss.config.cjs: -------------------------------------------------------------------------------- 1 | const generateBasePostcssConfig = require('../postcss-base.config.cjs'); 2 | 3 | module.exports = generateBasePostcssConfig(); 4 | -------------------------------------------------------------------------------- /front/ui/ui-core/rollup.config.js: -------------------------------------------------------------------------------- 1 | import generateBaseRollupConfig from '../rollup-base.config.js'; 2 | 3 | export default generateBaseRollupConfig(); 4 | -------------------------------------------------------------------------------- /front/ui/ui-core/src/components/inputs/ComboBox/index.ts: -------------------------------------------------------------------------------- 1 | export { default, type ComboBoxProps } from './ComboBox'; 2 | 3 | export { default as useDefaultComboBox } from './useDefaultComboBox'; 4 | -------------------------------------------------------------------------------- /front/ui/ui-core/src/components/inputs/Hint.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | type HintProps = { 4 | text: string; 5 | }; 6 | 7 | const Hint = ({ text }: HintProps) => {text}; 8 | 9 | export default Hint; 10 | -------------------------------------------------------------------------------- /front/ui/ui-core/src/components/inputs/datePicker/index.tsx: -------------------------------------------------------------------------------- 1 | export { 2 | default as DatePicker, 3 | type DatePickerProps, 4 | type RangeDatePickerProps, 5 | type SingleDatePickerProps, 6 | } from './DatePicker'; 7 | export { type CalendarSlot } from './type'; 8 | -------------------------------------------------------------------------------- /front/ui/ui-core/src/components/inputs/datePicker/type.ts: -------------------------------------------------------------------------------- 1 | export type CalendarSlot = { 2 | start: Date | null; 3 | end: Date | null; 4 | }; 5 | -------------------------------------------------------------------------------- /front/ui/ui-core/src/styles/animations.css: -------------------------------------------------------------------------------- 1 | @keyframes spin { 2 | from { 3 | transform: rotate(0deg); 4 | } 5 | to { 6 | transform: rotate(360deg); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /front/ui/ui-core/src/styles/inputs/hint.css: -------------------------------------------------------------------------------- 1 | .base-hint { 2 | height: 1.25rem; 3 | margin-bottom: 0.25rem; 4 | font-size: 0.875rem; 5 | line-height: 1.25rem; 6 | @apply text-grey-50; 7 | 8 | &.small { 9 | margin-bottom: 0.188rem; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /front/ui/ui-core/src/styles/inputs/passwordInput.css: -------------------------------------------------------------------------------- 1 | .password-input { 2 | .trailing-content-wrapper { 3 | .trailing-content { 4 | @apply text-primary-60; 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /front/ui/ui-core/tailwind.config.js: -------------------------------------------------------------------------------- 1 | import osrdUiPreset from '../tailwind-preset.js'; 2 | /** @type {import('tailwindcss').Config} */ 3 | export default { 4 | presets: [osrdUiPreset], 5 | content: ['./src/**/*.{js,jsx,ts,tsx}'], 6 | }; 7 | -------------------------------------------------------------------------------- /front/ui/ui-core/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.base.json", 3 | "include": ["./src/**/*"], 4 | "compilerOptions": { 5 | "rootDir": "./src", 6 | "outDir": "./dist", 7 | "declarationDir": "./dist" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /front/ui/ui-core/vitest.config.mts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config'; 2 | 3 | export default defineConfig({ 4 | mode: 'benchmark', 5 | test: { 6 | include: ['src/**/*.spec.ts'], 7 | environment: 'jsdom', 8 | silent: false, // Disable console.log output from tests 9 | }, 10 | }); 11 | -------------------------------------------------------------------------------- /front/ui/ui-icons/.gitignore: -------------------------------------------------------------------------------- 1 | # Generated components minus the template 2 | src/components/*.tsx 3 | !src/components/_template.tsx 4 | src/index.ts 5 | src/sizes.ts 6 | -------------------------------------------------------------------------------- /front/ui/ui-icons/.prettierignore: -------------------------------------------------------------------------------- 1 | src/* -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/alert-fill-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/alert-fill-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-both-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-both-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-down-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-down-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-down-left-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-down-left-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-down-right-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-down-right-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-left-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-left-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-right-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-right-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-switch-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-up-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-up-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-up-left-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-up-left-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-up-right-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/arrow-up-right-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/bell-fill-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/bell-fill-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/bold-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/bold-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/book-fill-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/bookmark-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/bookmark-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/bookmark-fill-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/bookmark-fill-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/check-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/check-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/check-circle-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/check-circle-fill-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/check-circle-fill-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/chevron-down-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/chevron-down-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/chevron-left-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/chevron-left-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/chevron-right-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/chevron-right-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/chevron-up-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/chevron-up-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/clock-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/compass-needle-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/compass-needle-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/compass-needle-v2-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/dash-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/dash-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/device-mobile-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/dot-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/dot-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/dot-fill-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/dot-fill-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/ellipsis-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/ellipsis-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/file-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/file-directory-fill-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/file-directory-fill-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/file-directory-open-fill-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/file-directory-open-fill-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/filter-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/filter-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/grabber-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/grabber-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/heading-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/heading-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/home-fill-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/home-fill-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/horizontal-rule-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/horizontal-rule-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/info-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/info-fill-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/info-fill-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/infrastructure-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/infrastructure-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/italic-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/italic-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/iterations-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/kebab-horizontal-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/kebab-horizontal-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/list-unordered-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/list-unordered-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/location-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/lock-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/lock-fill-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/lock-fill-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/manchette-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/meter-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/meter-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/moon-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/move-down-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/move-down-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/move-to-left-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/move-to-left-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/move-to-right-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/move-to-right-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/move-to-top-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/move-to-top-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/no-entry-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/no-entry-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/paper-airplane-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/paper-airplane-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/person-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/person-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/person-fill-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/person-fill-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/play-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/plus-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/plus-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/plus-circle-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/pulse-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/pulse-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/quote-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/reply-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/reply-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/reverse-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/reverse-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/route-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/rss-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/ruby-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/ruby-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/search-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/search-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/signals-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/skip-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/skip-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/skip-fill-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/skip-fill-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/sparkle-fill-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/square-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/square-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/square-fill-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/square-fill-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/star-fill-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/star-fill-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/tag-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/three-bars-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/triangle-down-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/triangle-down-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/triangle-left-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/triangle-left-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/triangle-right-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/triangle-right-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/triangle-up-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/triangle-up-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/unlock-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/x-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/x-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/x-circle-fill-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/zap-fill-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/zap-fill-24.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/icons/zoom-out-16.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front/ui/ui-icons/requirements.txt: -------------------------------------------------------------------------------- 1 | picosvg~=0.20.6 2 | -------------------------------------------------------------------------------- /front/ui/ui-icons/src/types/icon-data.ts: -------------------------------------------------------------------------------- 1 | export interface IconData { 2 | [variant: string]: { 3 | [size: number]: string; 4 | }; 5 | } 6 | -------------------------------------------------------------------------------- /front/ui/ui-icons/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.base.json", 3 | "include": ["./src/**/*"], 4 | "exclude": ["src/components/_template.tsx"], 5 | "compilerOptions": { 6 | "rootDir": "./src", 7 | "outDir": "./dist", 8 | "declarationDir": "./dist" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /front/ui/ui-warped-map/rollup.config.js: -------------------------------------------------------------------------------- 1 | import generateBaseRollupConfig from '../rollup-base.config.js'; 2 | 3 | export default generateBaseRollupConfig(); 4 | -------------------------------------------------------------------------------- /front/ui/ui-warped-map/src/components/Loader.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | const Loader = () => ( 4 |
5 | Loading... 6 |
7 | ); 8 | 9 | export default Loader; 10 | -------------------------------------------------------------------------------- /front/ui/ui-warped-map/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.base.json", 3 | "include": ["./src/**/*"], 4 | "compilerOptions": { 5 | "rootDir": "./src", 6 | "outDir": "./dist", 7 | "declarationDir": "./dist" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /front/vitest.global-setup.ts: -------------------------------------------------------------------------------- 1 | export default function setup() { 2 | process.env.TZ = 'UTC'; 3 | } 4 | -------------------------------------------------------------------------------- /gateway/.dockerignore: -------------------------------------------------------------------------------- 1 | target 2 | Dockerfile 3 | .env 4 | test_server.py 5 | -------------------------------------------------------------------------------- /gateway/.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | -------------------------------------------------------------------------------- /gateway/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | >/tmp/front_config jq -rn '{ 4 | OSRD_GIT_DESCRIBE: env.OSRD_GIT_DESCRIBE, 5 | } | @json | " globalThis.import_meta_env = \(.);"' 6 | 7 | sed -i -e '/import_meta_env_placeholder/ { 8 | r /tmp/front_config 9 | d 10 | }' /srv/front/index.html 11 | 12 | update-ca-certificates 13 | 14 | exec "$@" 15 | -------------------------------------------------------------------------------- /osrdyne/.dockerignore: -------------------------------------------------------------------------------- 1 | target 2 | Dockerfile 3 | .env 4 | -------------------------------------------------------------------------------- /osrdyne/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /python/osrd_schemas/.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | osrd_schemas.egg-info/ 3 | -------------------------------------------------------------------------------- /python/osrd_schemas/osrd_schemas/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/python/osrd_schemas/osrd_schemas/__init__.py -------------------------------------------------------------------------------- /python/railjson_generator/.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | railjson_generator.egg-info/ 3 | -------------------------------------------------------------------------------- /python/railjson_generator/railjson_generator/__init__.py: -------------------------------------------------------------------------------- 1 | from .external_generated_inputs import ExternalGeneratedInputs # noqa 2 | from .infra_builder import InfraBuilder # noqa 3 | from .schema.infra.direction import ApplicableDirection, Direction # noqa 4 | from .schema.location import Location # noqa 5 | from .simulation_builder import SimulationBuilder # noqa 6 | -------------------------------------------------------------------------------- /python/railjson_generator/railjson_generator/schema/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/python/railjson_generator/railjson_generator/schema/__init__.py -------------------------------------------------------------------------------- /python/railjson_generator/railjson_generator/schema/infra/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/python/railjson_generator/railjson_generator/schema/infra/__init__.py -------------------------------------------------------------------------------- /python/railjson_generator/railjson_generator/schema/simulation/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/python/railjson_generator/railjson_generator/schema/simulation/__init__.py -------------------------------------------------------------------------------- /python/railjson_generator/railjson_generator/utils/__init__.py: -------------------------------------------------------------------------------- 1 | from .routes_generator import generate_routes # noqa 2 | -------------------------------------------------------------------------------- /scripts/build-core.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | docker compose \ 4 | -p "osrd" \ 5 | -f "docker-compose.yml" \ 6 | build core 7 | -------------------------------------------------------------------------------- /scripts/drop-core.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | docker rm -f "dyn-osrd-core-$1" 4 | 5 | docker compose \ 6 | -p "osrd" \ 7 | -f "docker-compose.yml" \ 8 | exec rabbitmq rabbitmqctl delete_queue "core-$1" 9 | -------------------------------------------------------------------------------- /scripts/sync-openapi.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | root_path="$(realpath "$(dirname "$0")"/..)" 6 | 7 | echo "Generating editoast's openapi" 8 | ( cd "${root_path}/editoast" && cargo run openapi > "${root_path}"/editoast/openapi.yaml ) 9 | 10 | echo "Generating the typescript client" 11 | ( cd "${root_path}"/front && npm run generate-types ) 12 | -------------------------------------------------------------------------------- /tests/.gitignore: -------------------------------------------------------------------------------- 1 | tests/regression_tests_data/osrd-private-test-data/ 2 | -------------------------------------------------------------------------------- /tests/assets/small_infra.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/tests/assets/small_infra.png -------------------------------------------------------------------------------- /tests/assets/west_to_south_east_parking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/tests/assets/west_to_south_east_parking.png -------------------------------------------------------------------------------- /tests/data/infras/circle_infra/external_generated_inputs.json: -------------------------------------------------------------------------------- 1 | { 2 | "levels": [], 3 | "level_order": { 4 | "25000V": [ 5 | "25000V", 6 | "22500V", 7 | "20000V" 8 | ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tests/data/infras/example_script/external_generated_inputs.json: -------------------------------------------------------------------------------- 1 | { 2 | "levels": [], 3 | "level_order": { 4 | "25000V": [ 5 | "25000V", 6 | "22500V", 7 | "20000V" 8 | ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tests/data/infras/nested_switches/external_generated_inputs.json: -------------------------------------------------------------------------------- 1 | { 2 | "levels": [], 3 | "level_order": { 4 | "25000V": [ 5 | "25000V", 6 | "22500V", 7 | "20000V" 8 | ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tests/data/infras/one_line/external_generated_inputs.json: -------------------------------------------------------------------------------- 1 | { 2 | "levels": [], 3 | "level_order": { 4 | "25000V": [ 5 | "25000V", 6 | "22500V", 7 | "20000V" 8 | ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tests/data/infras/overlapping_routes/external_generated_inputs.json: -------------------------------------------------------------------------------- 1 | { 2 | "levels": [], 3 | "level_order": { 4 | "25000V": [ 5 | "25000V", 6 | "22500V", 7 | "20000V" 8 | ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tests/data/infras/takeover/external_generated_inputs.json: -------------------------------------------------------------------------------- 1 | { 2 | "levels": [], 3 | "level_order": { 4 | "25000V": [ 5 | "25000V", 6 | "22500V", 7 | "20000V" 8 | ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tests/data/infras/three_trains/external_generated_inputs.json: -------------------------------------------------------------------------------- 1 | { 2 | "levels": [], 3 | "level_order": { 4 | "25000V": [ 5 | "25000V", 6 | "22500V", 7 | "20000V" 8 | ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tests/data/infras/tiny_infra/external_generated_inputs.json: -------------------------------------------------------------------------------- 1 | { 2 | "levels": [], 3 | "level_order": { 4 | "25000V": [ 5 | "25000V", 6 | "22500V", 7 | "20000V" 8 | ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tests/fuzzer/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/tests/fuzzer/__init__.py -------------------------------------------------------------------------------- /tests/infra-scripts/README.md: -------------------------------------------------------------------------------- 1 | :warning: When an infrastructure script is changed, test data has to be rebuilt :warning: 2 | 3 | Run the following commands at the root of the project: 4 | 5 | ```sh 6 | uv --directory python/railjson_generator sync --all-extras 7 | uv --directory python/railjson_generator run -m railjson_generator "$PWD"/tests/data/infras "$PWD"/tests/infra-scripts/*.py 8 | ``` 9 | -------------------------------------------------------------------------------- /tests/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/tests/tests/__init__.py -------------------------------------------------------------------------------- /tests/tests/infra.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | 3 | 4 | @dataclass(frozen=True) 5 | class Infra: 6 | id: int 7 | name: str 8 | -------------------------------------------------------------------------------- /tests/tests/scenario.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | 3 | 4 | @dataclass(frozen=True) 5 | class Scenario: 6 | project: int 7 | op_study: int 8 | scenario: int 9 | infra: int 10 | timetable: int 11 | -------------------------------------------------------------------------------- /tests/tests/services.py: -------------------------------------------------------------------------------- 1 | EDITOAST_URL = "http://localhost:8090/" 2 | -------------------------------------------------------------------------------- /tests/tests/test_rolling_stock.py: -------------------------------------------------------------------------------- 1 | from requests import Session 2 | 3 | from .services import EDITOAST_URL 4 | 5 | 6 | def test_get_rolling_stocks(fast_rolling_stock: int, session: Session): 7 | response = session.get(EDITOAST_URL + f"light_rolling_stock/{fast_rolling_stock}") 8 | assert response.status_code == 200 9 | assert response.json()["name"] == "fast_rolling_stock" 10 | -------------------------------------------------------------------------------- /tests/tests/test_simulation.py: -------------------------------------------------------------------------------- 1 | from collections.abc import Sequence 2 | 3 | 4 | def test_west_to_south_east_simulation(west_to_south_east_simulation: Sequence[int]): 5 | assert len(west_to_south_east_simulation) == 1 6 | -------------------------------------------------------------------------------- /tests/tests/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenRailAssociation/osrd/97427f4fb58cb1cca6627c4f65fc845b02f99a35/tests/tests/utils/__init__.py --------------------------------------------------------------------------------