├── .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 |
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