package Ġde . jos hu agle it ze . transformation network . simulator . components . simulator Ċ Ċ import Ġde . jos hu agle it ze . transformation network . met ame tam odel . Model Ċ import Ġde . jos hu agle it ze . transformation network . simulator . components . model . Model Canvas Ċ import Ġde . jos hu agle it ze . transformation network . simulator . components . transformation . Transformation Canvas Ċ import Ġde . jos hu agle it ze . transformation network . simulator . data . Descri bed Ċ import Ġde . jos hu agle it ze . transformation network . simulator . data . scenario . Simulator Scenario Ċ import Ġde . jos hu agle it ze . transformation network . simulator . data . strategy . Descri bed Propagation Strategy Ċ import Ġde . jos hu agle it ze . transformation network . simulator . styles . Dimension . base Spacing Ċ import Ġde . jos hu agle it ze . transformation network . simulator . util . check Available Ċ import ĠencodeURIComponent Ċ import Ġkotlinx . browser . window Ċ import Ġkotlinx . css . Align Ċ import Ġkotlinx . css . Box S izing Ċ import Ġkotlinx . css . Display . flex Ċ import Ġkotlinx . css . Display . grid Ċ import Ġkotlinx . css . Grid Row Start Ċ import Ġkotlinx . css . Grid Template Rows Ċ import Ġkotlinx . css . Position Ċ import Ġkotlinx . css . align Self Ċ import Ġkotlinx . css . box S izing Ċ import Ġkotlinx . css . display Ċ import Ġkotlinx . css . flex Grow Ċ import Ġkotlinx . css . flex Shrink Ċ import Ġkotlinx . css . grid Row Start Ċ import Ġkotlinx . css . grid Template Rows Ċ import Ġkotlinx . css . height Ċ import Ġkotlinx . css . margin Right Ċ import Ġkotlinx . css . margin Top Ċ import Ġkotlinx . css . padding Ċ import Ġkotlinx . css . padding Right Ċ import Ġkotlinx . css . pct Ċ import Ġkotlinx . css . position Ċ import Ġkotlinx . css . px Ċ import Ġkotlinx . css . width Ċ import Ġkotlinx . css . z Index Ċ import Ġorg . w 3 c . dom . History Ċ import Ġorg . w 3 c . dom . Location Ċ import Ġorg . w 3 c . dom . events . Event Ċ import Ġorg . w 3 c . dom . url . URL Ċ import Ġorg . w 3 c . dom . url . URL Search Params Ċ import Ġreact . R Builder Ċ import Ġreact . R Component Ċ import Ġreact . R Props Ċ import Ġreact . R Readable Ref Ċ import Ġreact . R State Ċ import Ġreact . create Ref Ċ import Ġreact . setState Ċ import Ġstyled . StyleSheet Ċ import Ġstyled . css Ċ import Ġstyled . styled Div Ċ Ċ private Ġobject ĠTransformation Simulator Styles Ġ: ĠStyleSheet (" Transformation Simulator ") Ġ{ ĊĠĠĠ Ġval Ġsimulator Ġby Ġcss Ġ{ ĊĠĠĠĠĠĠĠ Ġdisplay Ġ= Ġgrid ĊĠĠĠĠĠĠĠ Ġgrid Template Rows Ġ= ĠGrid Template Rows ("[ selector ] Ġauto Ġ[ controls ] Ġauto Ġ[ canvas ] Ġ 1 fr ") ĊĠĠĠĠĠĠĠ Ġheight Ġ= Ġ 1 0 0 . pct ĊĠĠĠĠĠĠĠ Ġwidth Ġ= Ġ 1 0 0 . pct ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġparameter Selection Area Ġby Ġcss Ġ{ ĊĠĠĠĠĠĠĠ Ġgrid Row Start Ġ= ĠGrid Row Start (" selector ") ĊĠĠĠĠĠĠĠ Ġz Index Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġdisplay Ġ= Ġflex ĊĠĠĠĠĠĠĠ Ġwidth Ġ= Ġ 1 0 0 . pct ĊĠĠĠĠĠĠĠ Ġpadding ( vertical Ġ= Ġbase Spacing , Ġhorizontal Ġ= Ġbase Spacing Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġbox S izing Ġ= ĠBox S izing . border Box ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġparameter Label Ġby Ġcss Ġ{ ĊĠĠĠĠĠĠĠ Ġalign Self Ġ= ĠAlign . center ĊĠĠĠĠĠĠĠ Ġpadding Right Ġ= Ġbase Spacing ĊĠĠĠĠĠĠĠ Ġflex Grow Ġ= Ġ. 0 ĊĠĠĠĠĠĠĠ Ġflex Shrink Ġ= Ġ. 0 ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġparameter Selector Ġby Ġcss Ġ{ ĊĠĠĠĠĠĠĠ Ġflex Grow Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠ ĠmarginRight Ġ= Ġbase Spacing Ġ* Ġ 3 ĊĠĠĠĠĠĠĠ Ġ": last - child " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmarginRight Ġ= Ġ 0 . px ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġscenario Controls Ġby Ġcss Ġ{ ĊĠĠĠĠĠĠĠ ĠmarginTop Ġ= Ġbase Spacing ĊĠĠĠĠĠĠĠ Ġgrid Row Start Ġ= ĠGrid Row Start (" controls ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġcanvas Outer Ġby Ġcss Ġ{ ĊĠĠĠĠĠĠĠ Ġheight Ġ= Ġ 1 0 0 . pct ĊĠĠĠĠĠĠĠ Ġwidth Ġ= Ġ 1 0 0 . pct ĊĠĠĠĠĠĠĠ Ġposition Ġ= ĠPosition . relative ĊĠĠĠĠĠĠĠ Ġgrid Row Start Ġ= ĠGrid Row Start (" canvas ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġinterface ĠTransformation Simulator State Ġ: ĠR State Ġ{ ĊĠĠĠ Ġvar Ġmodel Canvas Ref : ĠR Readable Ref < Model Canvas > ĊĠĠĠ Ġvar Ġscenario Index : ĠInt ĊĠĠĠ Ġvar Ġstrategy Index : ĠInt ĊĠĠĠ Ġvar Ġtime : ĠInt ĊĠĠĠ Ġvar Ġreset Count : ĠInt Ċ } Ċ Ċ private Ġinterface ĠTransformation Simulator Props Ġ: ĠR Props Ġ{ ĊĠĠĠ Ġvar Ġscenarios : ĠList < Simulator Scenario > ĊĠĠĠ Ġvar Ġstrategies : ĠList < Descri bed Propagation Strategy > Ċ } Ċ Ċ private Ġvar Ġreset Counter Ġ= Ġ 0 Ċ Ċ private Ġconst Ġval Ġstrategy QueryParameter Ġ= Ġ" strategy " Ċ private Ġconst Ġval Ġscenario QueryParameter Ġ= Ġ" scenario " Ċ Ċ private Ġclass ĠTransformation Simulator ( props : ĠTransformation Simulator Props ) Ġ: ĊĠĠĠ ĠR Component < Transformation Simulator Props , ĠTransformation Simulator State >( props ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠTransformation Simulator State . init ( props : ĠTransformation Simulator Props ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmodel Canvas Ref Ġ= Ġcreate Ref () ĊĠĠĠĠĠĠĠ Ġscenario Index Ġ= Ġfind Scenario Index From Query ( props ) ĊĠĠĠĠĠĠĠ Ġstrategy Index Ġ= Ġfind Strategy Index From Query ( props ) ĊĠĠĠĠĠĠĠ Ġtime Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġreset Count Ġ= Ġreset Counter ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠR Builder . render () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Scenario Ġ= Ġprops . scenarios [ state . scenario Index ] ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Strategy Ġ= Ġprops . str ategies [ state . strategy Index ] ĊĊĠĠĠĠĠĠĠ Ġtime . Provider ( state . time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyled Div Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ Ġ+ Transformation Simulator Styles . simulator Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyled Div Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ Ġ+ Transformation Simulator Styles . parameter Selection Area Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyled Div Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ Ġ+ Transformation Simulator Styles . parameter Label Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" Scenario : Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyled Div Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ Ġ+ Transformation Simulator Styles . parameter Selector Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScenario Selector ( props . scenarios , Ġstate . scenario Index , Ġ:: set Scenario Query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyled Div Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ Ġ+ Transformation Simulator Styles . parameter Label Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" Strategy : Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyled Div Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ Ġ+ Transformation Simulator Styles . parameter Selector Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStrategy Selector ( props . str ategies , Ġstate . strategy Index , Ġ:: set Strategy Query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyled Div Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ Ġ+ Transformation Simulator Styles . scenario Controls Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimulation Control Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġstate . reset Count . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( attrs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstrategy Ġ= Ġcurrent Strategy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanges Ġ= Ġcurrent Scenario . changes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Ġ= Ġcurrent Scenario . network ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Step Ġ= Ġ{ Ġthis @ Transformation Simulator . setTime ( state . time Ġ+ Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Simulation Ġ= Ġ{ Ġthis @ Transformation Simulator . reset Simulation () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyled Div Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcss Ġ{ Ġ+ Transformation Simulator Styles . canvas Outer Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModel Canvas ( models Ġ= Ġcurrent Scenario . network . models ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġref Ġ= Ġstate . model Canvas Ref ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransformation Canvas ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Arrow Target Provider Ġ= Ġ:: get Arrow Target From Model Canvas , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransformations Ġ= Ġcurrent Scenario . network . transform ations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Time ( time : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( time Ġ!= Ġstate . time ) ĠsetState Ġ{ Ġthis . time Ġ= Ġtime Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Arrow Target From Model Canvas ( model : ĠModel ) Ġ= ĊĠĠĠĠĠĠĠ Ġcheck Available ( state . model Canvas Ref . current ). get Arrow Target ( model ) ĊĊĠĠĠ Ġprivate Ġfun Ġset Scenario Query ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow . history . replace Query Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( scenario QueryParameter , Ġprops . scenarios [ index ]. name . to Url Format ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Active Scenario And Strategy ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Strategy Query ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow . history . replace Query Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( strategy QueryParameter , Ġprops . str ategies [ index ]. name . to Url Format ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Active Scenario And Strategy ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset Simulation ( state Modifier : ĠTransformation Simulator State . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state . time Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprops . scenarios [ state . scenario Index ]. reset () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Count Ġ= Ġreset Counter ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Modifier () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠcomponentDidMount () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Scenario Query ( state . scenario Index ) ĊĠĠĠĠĠĠĠ Ġset Strategy Query ( state . strategy Index ) ĊĠĠĠĠĠĠĠ Ġwindow . addEventListener (" pop state ", Ġupdate Active Scenario And Strategy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠcomponentWill Unmount () Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow . removeEventListener (" pop state ", Ġupdate Active Scenario And Strategy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġupdate Active Scenario And Strategy Ġ= Ġ{ Ġ_: ĠEvent ? Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġnew Scenario Index Ġ= Ġfind Scenario Index From Query () ĊĠĠĠĠĠĠĠ Ġval Ġnew Strategy Index Ġ= Ġfind Strategy Index From Query () ĊĠĠĠĠĠĠĠ Ġif Ġ( new Scenario Index Ġ!= Ġstate . scenario Index Ġ|| Ġnew Strategy Index Ġ!= Ġstate . strategy Index ) Ġreset Simulation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscenario Index Ġ= Ġnew Scenario Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstrategy Index Ġ= Ġnew Strategy Index ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Scenario Index From Query ( props : ĠTransformation Simulator Props Ġ= Ġthis . props ) Ġ= ĊĠĠĠĠĠĠĠ Ġprops . scenarios . findIndex By Url Name ( window . location . search Params [ scenario QueryParameter ]) Ġ?: Ġ 0 ĊĊĠĠĠ Ġprivate Ġfun Ġfind Strategy Index From Query ( props : ĠTransformation Simulator Props Ġ= Ġthis . props ) Ġ= ĊĠĠĠĠĠĠĠ Ġprops . str ategies . findIndex By Url Name ( window . location . search Params [ strategy QueryParameter ]) Ġ?: Ġ 0 ĊĊĠĠĠ Ġprivate Ġfun ĠString . to Url Format () Ġ= ĠencodeURIComponent ( replace ( Regex ("\\ W + "), Ġ"- ")) ĊĊĠĠĠ Ġprivate Ġfun ĠHistory . replace Query ( block : ĠURL Search Params . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠURL ( window . location . toString ()) ĊĠĠĠĠĠĠĠ Ġurl . search Params . block () ĊĠĠĠĠĠĠĠ Ġthis . replace State ( null , Ġ"", Ġurl . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠLocation . search Params Ġget () Ġ= ĠURL Search Params ( this . search ) ĊĊĠĠĠ Ġprivate Ġoperator Ġfun ĠURL Search Params . get ( name : ĠString ) Ġ= Ġthis . get ( name ) ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠDescri bed > ĠList < T >. findIndex By Url Name ( sear ched Url Name : ĠString ?) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( sear ched Url Name Ġ== Ġnull ) Ġnull ĊĠĠĠĠĠĠĠ Ġelse Ġthis . indexOf First Ġ{ Ġit . name . to Url Format () Ġ== Ġsearched Url Name Ġ}. take If Ġ{ Ġit Ġ!= Ġ- 1 Ġ} Ċ } Ċ Ċ fun ĠR Builder . Transformation Simulator ( ĊĠĠĠ Ġscenarios : ĠList < Simulator Scenario >, ĊĠĠĠ Ġstrategies : ĠList < Descri bed Propagation Strategy > Ċ ) Ġ= Ġchild ( Transformation Simulator :: class ) Ġ{ ĊĠĠĠ Ġattrs . scenarios Ġ= Ġscenarios ĊĠĠĠ Ġattrs . str ategies Ġ= Ġstrategies Ċ } Ċ