workspace WebStudioFixture id "workspace:web-studio-fixture" revision "workspace:web-studio-fixture@1" commit "1111111111111111111111111111111111111111" { atom Project id "atom:project"; atom ProjectComponent id "atom:project-component"; import interface Named; import interface ReactComponent; import interface HasReactComponent; import package ComponentRuntime; shared state ProjectName id "slot:project:name" on Project : string policy optimistic-register default "Untitled project"; shared edge ProjectComponentEdge id "edge:project:component" { atom ProjectComponent projection subject id "projection:component:subject" exactly-one; atom Project projection component id "projection:project:component" optional-one; } conform Project as Named { bind name.get to state ProjectName.read; bind name.set to state ProjectName.write; bind name.watch-start to state ProjectName.watch-start; bind name.watch-stop to state ProjectName.watch-stop; } conform Project as HasReactComponent { bind component.resolve to edge ProjectComponentEdge.component.resolve; materialize component if absent using constructor ProjectComponent via edge ProjectComponentEdge.subject; } conform ProjectComponent as ReactComponent { bind props.get to package ComponentRuntime.propsGet with { project to interface Named via edge ProjectComponentEdge.subject; }; } constructor ProjectComponent to ComponentRuntime.createComponent; }