Files
todo/workspace.qx
T

546 lines
31 KiB
Plaintext
Raw Normal View History

2026-09-05 10:18:09 -07:00
workspace Todo id "workspace:todo" revision "workspace:todo@capabilities-v1" commit "0000000000000000000000000000000000000001" {
atom Project id "atom:project" doc "A named collection of tasks.";
atom Task id "atom:task" doc "A unit of work.";
atom ProjectReactComponent id "atom:project-react-component" doc "A persisted Web Studio presentation of a Project.";
atom TaskReactComponent id "atom:task-react-component" doc "A persisted Web Studio presentation of a Task.";
atom WebStudioCanvas id "atom:org.quixos.web-studio:canvas" doc "A spatial Web Studio surface.";
atom WebStudioCanvasPlacement id "atom:org.quixos.web-studio:canvas-placement" doc "One presentation of an object on a Web Studio canvas.";
interface Named id "interface:named" revision "interface:named@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/interface-named.git";
2026-09-05 11:08:48 -07:00
commit "e4043a47b71822857b98c9d84ecb4677e628fa12";
2026-09-05 10:18:09 -07:00
} {
value name id "member:named:name" : string {
get id "operation:named:name:get";
set id "operation:named:name:set";
}
}
interface TaskData id "interface:task-data" revision "interface:task-data@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/interface-task-data.git";
2026-09-05 11:08:48 -07:00
commit "8ac6873245210edc8ba422862e6ac5a0696d3155";
2026-09-05 10:18:09 -07:00
} {
value title id "member:task-data:title" : string {
get id "operation:task-data:title:get";
set id "operation:task-data:title:set";
}
value status id "member:task-data:status" : string {
get id "operation:task-data:status:get";
set id "operation:task-data:status:set";
}
value priority id "member:task-data:priority" : string {
get id "operation:task-data:priority:get";
set id "operation:task-data:priority:set";
}
value notes id "member:task-data:notes" : string {
get id "operation:task-data:notes:get";
set id "operation:task-data:notes:set";
}
value dueDate id "member:task-data:due-date" : string {
get id "operation:task-data:due-date:get";
set id "operation:task-data:due-date:set";
}
value energy id "member:task-data:energy" : string {
get id "operation:task-data:energy:get";
set id "operation:task-data:energy:set";
}
}
interface ProjectTasks id "interface:project-tasks" revision "interface:project-tasks@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/interface-project-tasks.git";
2026-09-05 11:08:48 -07:00
commit "b4432dd4f8db880a39ade9acbd9dbef2ebbe8ebc";
2026-09-05 10:18:09 -07:00
} {
relation tasks id "member:project-tasks:tasks" : many-unique atom Task ordered {
resolve id "operation:project-tasks:tasks:resolve";
connect id "operation:project-tasks:tasks:connect";
disconnect id "operation:project-tasks:tasks:disconnect";
}
}
interface ProjectActions id "interface:project-actions" revision "interface:project-actions@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/interface-project-actions.git";
2026-09-05 11:08:48 -07:00
commit "fde4cea43b84987b62678359374f711beaef13ed";
2026-09-05 10:18:09 -07:00
} {
operation addTask id "member:project-actions:add-task" : string -> atom-ref<Task> {
call id "operation:project-actions:add-task";
}
}
interface TaskActions id "interface:task-actions" revision "interface:task-actions@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/interface-task-actions.git";
2026-09-05 11:08:48 -07:00
commit "b7b7dc9c5dc1807c4180fad251d8948918b41c2d";
2026-09-05 10:18:09 -07:00
} {
operation complete id "member:task-actions:complete" : unit -> string {
call id "operation:task-actions:complete";
}
operation reopen id "member:task-actions:reopen" : unit -> string {
call id "operation:task-actions:reopen";
}
operation archive id "member:task-actions:archive" : unit -> string {
call id "operation:task-actions:archive";
}
}
interface DisplayLabel id "interface:display-label" revision "interface:display-label@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/interface-display-label.git";
2026-09-05 11:08:48 -07:00
commit "419d3654eb3b24e816515fbbf9b01a74db9bfad3";
2026-09-05 10:18:09 -07:00
} {
value label id "member:display-label:label" : string {
get id "operation:display-label:label:get";
watch start id "operation:display-label:label:watch-start" stop id "operation:display-label:label:watch-stop";
}
}
interface TaskCount id "interface:task-count" revision "interface:task-count@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/interface-task-count.git";
2026-09-05 11:08:48 -07:00
commit "2d006b58010a86f1fb2e116fcde3c93ede27712f";
2026-09-05 10:18:09 -07:00
} {
value count id "member:task-count:count" : uint32 {
get id "operation:task-count:count:get";
watch start id "operation:task-count:count:watch-start" stop id "operation:task-count:count:watch-stop";
}
}
interface WebStudioCreateable id "interface:org.quixos.web-studio.createable" revision "interface:org.quixos.web-studio.createable@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/interface-createable.git";
2026-09-05 11:08:48 -07:00
commit "3ab15f2bc3f15d3157a92d4658290eeb4551b9d2";
2026-09-05 10:18:09 -07:00
} {}
interface WebStudioReactComponent id "interface:org.quixos.web-studio.react-component" revision "interface:org.quixos.web-studio.react-component@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/interface-react-component.git";
2026-09-05 11:08:48 -07:00
commit "ff4df23e74ba980d7c26a43baaf8cc8014a6abf7";
2026-09-05 10:18:09 -07:00
} {
value source id "member:org.quixos.web-studio.react-component:source" : string {
get id "operation:org.quixos.web-studio.react-component:source:get";
}
value props id "member:org.quixos.web-studio.react-component:props" : message "org.quixos.web-studio.ReactProps" {
get id "operation:org.quixos.web-studio.react-component:props:get";
watch start id "operation:org.quixos.web-studio.react-component:props:watch-start" stop id "operation:org.quixos.web-studio.react-component:props:watch-stop";
}
}
interface WebStudioHasReactComponent id "interface:org.quixos.web-studio.has-react-component" revision "interface:org.quixos.web-studio.has-react-component@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/interface-has-react-component.git";
2026-09-05 11:08:48 -07:00
commit "4b3c6bb54ba7d252434c31543c7608b27cd63753";
2026-09-05 10:18:09 -07:00
} {
relation component id "member:org.quixos.web-studio.has-react-component:component" : optional-one interface WebStudioReactComponent {
resolve id "operation:org.quixos.web-studio.has-react-component:component:resolve";
}
}
interface WebStudioCanvas id "interface:org.quixos.web-studio.canvas" revision "interface:org.quixos.web-studio.canvas@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/interface-canvas.git";
2026-09-05 11:08:48 -07:00
commit "70b55b2eb1d7c1bf0a78cfe46c4d2155ee289781";
2026-09-05 10:18:09 -07:00
} {
value name id "member:org.quixos.web-studio.canvas:name" : string {
get id "operation:org.quixos.web-studio.canvas:name:get";
set id "operation:org.quixos.web-studio.canvas:name:set";
}
relation placements id "member:org.quixos.web-studio.canvas:placements" : many-unique interface WebStudioCanvasPlacement ordered {
resolve id "operation:org.quixos.web-studio.canvas:placements:resolve";
}
}
interface WebStudioCanvasPlacement id "interface:org.quixos.web-studio.canvas-placement" revision "interface:org.quixos.web-studio.canvas-placement@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/interface-canvas-placement.git";
2026-09-05 11:08:48 -07:00
commit "368fb2e90d7be3919d0929da1bae4dc0a1f69da5";
2026-09-05 10:18:09 -07:00
} {
value x id "member:org.quixos.web-studio.canvas-placement:x" : double {
get id "operation:org.quixos.web-studio.canvas-placement:x:get";
set id "operation:org.quixos.web-studio.canvas-placement:x:set";
}
value y id "member:org.quixos.web-studio.canvas-placement:y" : double {
get id "operation:org.quixos.web-studio.canvas-placement:y:get";
set id "operation:org.quixos.web-studio.canvas-placement:y:set";
}
value width id "member:org.quixos.web-studio.canvas-placement:width" : double {
get id "operation:org.quixos.web-studio.canvas-placement:width:get";
set id "operation:org.quixos.web-studio.canvas-placement:width:set";
}
value height id "member:org.quixos.web-studio.canvas-placement:height" : double {
get id "operation:org.quixos.web-studio.canvas-placement:height:get";
set id "operation:org.quixos.web-studio.canvas-placement:height:set";
}
value z id "member:org.quixos.web-studio.canvas-placement:z" : int32 {
get id "operation:org.quixos.web-studio.canvas-placement:z:get";
set id "operation:org.quixos.web-studio.canvas-placement:z:set";
}
relation subject id "member:org.quixos.web-studio.canvas-placement:subject" : exactly-one interface WebStudioPlaceable {
resolve id "operation:org.quixos.web-studio.canvas-placement:subject:resolve";
connect id "operation:org.quixos.web-studio.canvas-placement:subject:connect";
disconnect id "operation:org.quixos.web-studio.canvas-placement:subject:disconnect";
}
relation canvas id "member:org.quixos.web-studio.canvas-placement:canvas" : exactly-one interface WebStudioCanvas {
resolve id "operation:org.quixos.web-studio.canvas-placement:canvas:resolve";
connect id "operation:org.quixos.web-studio.canvas-placement:canvas:connect";
disconnect id "operation:org.quixos.web-studio.canvas-placement:canvas:disconnect";
}
}
interface WebStudioPlaceable id "interface:org.quixos.web-studio.placeable" revision "interface:org.quixos.web-studio.placeable@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/interface-placeable.git";
2026-09-05 11:08:48 -07:00
commit "878934a6b4891158a5acea89dc213d1bf92819ac";
2026-09-05 10:18:09 -07:00
} {
relation placements id "member:org.quixos.web-studio.placeable:placements" : many-unique interface WebStudioCanvasPlacement ordered {
resolve id "operation:org.quixos.web-studio.placeable:placements:resolve";
}
}
interface WebStudioSearchable id "interface:org.quixos.web-studio.searchable" revision "interface:org.quixos.web-studio.searchable@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/interface-searchable.git";
2026-09-05 11:08:48 -07:00
commit "f54fab49d63efc4fc8dd3671d42182f5cac04dc7";
2026-09-05 10:18:09 -07:00
} {
value document id "member:org.quixos.web-studio.searchable:document" : message "org.quixos.web-studio.SearchDocument" {
get id "operation:org.quixos.web-studio.searchable:document:get";
watch start id "operation:org.quixos.web-studio.searchable:document:watch-start" stop id "operation:org.quixos.web-studio.searchable:document:watch-stop";
}
}
package TodoRuntime id "package:todo-runtime" revision "package:todo-runtime@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/package-todo-runtime.git";
2026-09-05 11:08:48 -07:00
commit "d6de9d8daf3f22b6a7595bf00d96c2b19b9a2a53";
2026-09-05 10:18:09 -07:00
} {
operation complete id "export:todo-runtime:complete" : unit -> string mode call receiver atom Task requires {
state status id "port:todo-actions:status" : string [read, write];
};
operation reopen id "export:todo-runtime:reopen" : unit -> string mode call receiver atom Task requires {
state status id "port:todo-actions:status" : string [read, write];
};
operation archive id "export:todo-runtime:archive" : unit -> string mode call receiver atom Task requires {
state status id "port:todo-actions:status" : string [read, write];
};
operation displayLabelGet id "export:todo-runtime:display-label-get" : unit -> string mode call receiver atom Task requires {
state title id "port:todo-label:title" : string [read];
state status id "port:todo-label:status" : string [read];
state priority id "port:todo-label:priority" : string [read];
};
operation displayLabelWatch id "export:todo-runtime:display-label-watch" : unit -> watch-handle mode watch-start emits string receiver atom Task requires {
state title id "port:todo-label:title" : string [read];
state status id "port:todo-label:status" : string [read];
state priority id "port:todo-label:priority" : string [read];
};
operation displayLabelWatchStop id "export:todo-runtime:display-label-watch-stop" : watch-handle -> unit mode watch-stop receiver atom Task;
operation searchDocumentGet id "export:todo-runtime:search-document-get" : unit -> message "org.quixos.web-studio.SearchDocument" mode call receiver atom Task requires {
state title id "port:todo-search:title" : string [read];
state status id "port:todo-search:status" : string [read];
state priority id "port:todo-search:priority" : string [read];
state dueDate id "port:todo-search:due-date" : string [read];
};
operation searchDocumentWatch id "export:todo-runtime:search-document-watch" : unit -> watch-handle mode watch-start emits message "org.quixos.web-studio.SearchDocument" receiver atom Task requires {
state title id "port:todo-search:title" : string [read];
state status id "port:todo-search:status" : string [read];
state priority id "port:todo-search:priority" : string [read];
state dueDate id "port:todo-search:due-date" : string [read];
};
operation searchDocumentWatchStop id "export:todo-runtime:search-document-watch-stop" : watch-handle -> unit mode watch-stop receiver atom Task;
constructor createTask id "export:todo-runtime:create-task" constructs Task : string requires {
state title id "port:todo-constructor:title" : string [write];
};
}
package ProjectRuntime id "package:project-runtime" revision "package:project-runtime@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/package-project-runtime.git";
2026-09-05 11:08:48 -07:00
commit "226a5d68fe1c0d9c52ded7e1fde58b25e36957cb";
2026-09-05 10:18:09 -07:00
} {
constructor createProject id "export:project-runtime:create-project" constructs Project : unit;
operation addTask id "export:project-runtime:add-task" : string -> atom-ref<Task> mode call receiver atom Project requires {
edge tasks id "port:project-actions:tasks" : many-unique atom Task [connect];
constructor task id "port:project-actions:task-constructor" : Task;
};
operation taskCountGet id "export:project-runtime:task-count-get" : unit -> uint32 mode call receiver atom Project requires {
edge tasks id "port:project-count:tasks" : many-unique atom Task [resolve];
};
operation taskCountWatch id "export:project-runtime:task-count-watch" : unit -> watch-handle mode watch-start emits uint32 receiver atom Project requires {
edge tasks id "port:project-count:tasks" : many-unique atom Task [resolve];
};
operation taskCountWatchStop id "export:project-runtime:task-count-watch-stop" : watch-handle -> unit mode watch-stop receiver atom Project;
operation searchDocumentGet id "export:project-runtime:search-document-get" : unit -> message "org.quixos.web-studio.SearchDocument" mode call receiver atom Project requires {
state name id "port:project-search:name" : string [read];
edge tasks id "port:project-search:tasks" : many-unique atom Task [resolve];
};
operation searchDocumentWatch id "export:project-runtime:search-document-watch" : unit -> watch-handle mode watch-start emits message "org.quixos.web-studio.SearchDocument" receiver atom Project requires {
state name id "port:project-search:name" : string [read];
edge tasks id "port:project-search:tasks" : many-unique atom Task [resolve];
};
operation searchDocumentWatchStop id "export:project-runtime:search-document-watch-stop" : watch-handle -> unit mode watch-stop receiver atom Project;
}
package ProjectReactRuntime id "package:project-react-runtime" revision "package:project-react-runtime@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/package-project-react-runtime.git";
2026-09-05 11:08:48 -07:00
commit "5f9785d6d9a138830f1171616edede70dacf8c5e";
2026-09-05 10:18:09 -07:00
} {
constructor createComponent id "export:project-react-runtime:create-component" constructs ProjectReactComponent : atom-ref<Project>;
operation sourceGet id "export:project-react-runtime:source-get" : unit -> string mode call receiver atom ProjectReactComponent;
operation propsGet id "export:project-react-runtime:props-get" : unit -> message "org.quixos.web-studio.ReactProps" mode call receiver atom ProjectReactComponent requires {
edge subject id "port:project-react:subject" : exactly-one atom Project [resolve];
state name id "port:project-react:name" : string [read];
edge tasks id "port:project-react:tasks" : many-unique atom Task [resolve];
};
operation propsWatch id "export:project-react-runtime:props-watch" : unit -> watch-handle mode watch-start emits message "org.quixos.web-studio.ReactProps" receiver atom ProjectReactComponent requires {
edge subject id "port:project-react:subject" : exactly-one atom Project [resolve];
state name id "port:project-react:name" : string [read];
edge tasks id "port:project-react:tasks" : many-unique atom Task [resolve];
};
operation propsWatchStop id "export:project-react-runtime:props-watch-stop" : watch-handle -> unit mode watch-stop receiver atom ProjectReactComponent;
}
package TodoReactRuntime id "package:todo-react-runtime" revision "package:todo-react-runtime@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/package-todo-react-runtime.git";
2026-09-05 11:08:48 -07:00
commit "399451ecb9dd9b880ed58bdd98ccd5a5fd2972fe";
2026-09-05 10:18:09 -07:00
} {
constructor createComponent id "export:todo-react-runtime:create-component" constructs TaskReactComponent : atom-ref<Task>;
operation sourceGet id "export:todo-react-runtime:source-get" : unit -> string mode call receiver atom TaskReactComponent;
operation propsGet id "export:todo-react-runtime:props-get" : unit -> message "org.quixos.web-studio.ReactProps" mode call receiver atom TaskReactComponent requires {
edge subject id "port:todo-react:subject" : exactly-one atom Task [resolve];
state title id "port:todo-react:title" : string [read];
state status id "port:todo-react:status" : string [read];
state priority id "port:todo-react:priority" : string [read];
state notes id "port:todo-react:notes" : string [read];
state dueDate id "port:todo-react:due-date" : string [read];
state energy id "port:todo-react:energy" : string [read];
};
operation propsWatch id "export:todo-react-runtime:props-watch" : unit -> watch-handle mode watch-start emits message "org.quixos.web-studio.ReactProps" receiver atom TaskReactComponent requires {
edge subject id "port:todo-react:subject" : exactly-one atom Task [resolve];
state title id "port:todo-react:title" : string [read];
state status id "port:todo-react:status" : string [read];
state priority id "port:todo-react:priority" : string [read];
state notes id "port:todo-react:notes" : string [read];
state dueDate id "port:todo-react:due-date" : string [read];
state energy id "port:todo-react:energy" : string [read];
};
operation propsWatchStop id "export:todo-react-runtime:props-watch-stop" : watch-handle -> unit mode watch-stop receiver atom TaskReactComponent;
}
package WebStudioCanvasRuntime id "package:org.quixos.web-studio:canvas-runtime" revision "package:org.quixos.web-studio:canvas-runtime@1" source {
repository "https://repos.quixos.org/qxw-02737044acbb57a5-source/package-canvas-runtime.git";
2026-09-05 11:08:48 -07:00
commit "0a722e48eaccd4697623cfba59042cc36fbfe57a";
2026-09-05 10:18:09 -07:00
} {
constructor createCanvas id "export:org.quixos.web-studio.canvas-runtime:create-canvas" constructs WebStudioCanvas : unit;
constructor createPlacement id "export:org.quixos.web-studio.canvas-runtime:create-placement" constructs WebStudioCanvasPlacement : message "org.quixos.web-studio.CreateCanvasPlacement" requires {
state x id "port:web-studio-placement-constructor:x" : double [write];
state y id "port:web-studio-placement-constructor:y" : double [write];
state width id "port:web-studio-placement-constructor:width" : double [write];
state height id "port:web-studio-placement-constructor:height" : double [write];
state z id "port:web-studio-placement-constructor:z" : int32 [write];
edge canvas id "port:web-studio-placement-constructor:canvas" : exactly-one interface WebStudioCanvas [connect];
edge subject id "port:web-studio-placement-constructor:subject" : exactly-one interface WebStudioPlaceable [connect];
};
}
shared state ProjectName id "slot:project:name" on Project : string policy optimistic-register default "Untitled project";
shared state TaskTitle id "slot:task:title" on Task : string policy optimistic-register default "Untitled task";
shared state TaskStatus id "slot:task:status" on Task : string policy optimistic-register default "OPEN";
shared state TaskPriority id "slot:task:priority" on Task : string policy optimistic-register default "NORMAL";
shared state TaskNotes id "slot:task:notes" on Task : string policy crdt(string) default "";
shared state TaskDueDate id "slot:task:due-date" on Task : string policy optimistic-register default "";
shared state TaskEnergy id "slot:task:energy" on Task : string policy optimistic-register default "MEDIUM";
shared state WebStudioCanvasName id "slot:org.quixos.web-studio.canvas:name" on WebStudioCanvas : string policy optimistic-register default "Hearth";
shared state WebStudioPlacementX id "slot:org.quixos.web-studio.canvas-placement:x" on WebStudioCanvasPlacement : double policy optimistic-register default 0;
shared state WebStudioPlacementY id "slot:org.quixos.web-studio.canvas-placement:y" on WebStudioCanvasPlacement : double policy optimistic-register default 0;
shared state WebStudioPlacementWidth id "slot:org.quixos.web-studio.canvas-placement:width" on WebStudioCanvasPlacement : double policy optimistic-register default 420;
shared state WebStudioPlacementHeight id "slot:org.quixos.web-studio.canvas-placement:height" on WebStudioCanvasPlacement : double policy optimistic-register default 320;
shared state WebStudioPlacementZ id "slot:org.quixos.web-studio.canvas-placement:z" on WebStudioCanvasPlacement : int32 policy optimistic-register default 0;
shared edge ProjectTaskEdge id "edge:project:tasks" {
atom Project projection tasks id "projection:project:tasks" many-unique ordered;
atom Task projection project id "projection:task:project" optional-one;
}
shared edge ProjectComponentEdge id "edge:project:web-studio-component" {
atom ProjectReactComponent projection subject id "projection:project-component:subject" exactly-one;
atom Project projection component id "projection:project:component" optional-one;
}
shared edge TaskComponentEdge id "edge:task:web-studio-component" {
atom TaskReactComponent projection subject id "projection:task-component:subject" exactly-one;
atom Task projection component id "projection:task:component" optional-one;
}
shared edge WebStudioCanvasPlacementEdge id "edge:org.quixos.web-studio:canvas-placements" {
atom WebStudioCanvasPlacement projection canvas id "projection:org.quixos.web-studio.canvas-placement:canvas" exactly-one;
interface WebStudioCanvas projection placements id "projection:org.quixos.web-studio.canvas:placements" many-unique ordered;
}
shared edge WebStudioPlacementSubjectEdge id "edge:org.quixos.web-studio:placement-subject" {
atom WebStudioCanvasPlacement projection subject id "projection:org.quixos.web-studio.canvas-placement:subject" exactly-one;
interface WebStudioPlaceable projection placements id "projection:org.quixos.web-studio.placeable:placements" many-unique ordered;
}
conform WebStudioCanvas as WebStudioCanvas {
bind name.get to state WebStudioCanvasName.read;
bind name.set to state WebStudioCanvasName.write;
bind placements.resolve to edge WebStudioCanvasPlacementEdge.placements.resolve;
}
conform WebStudioCanvasPlacement as WebStudioCanvasPlacement {
bind x.get to state WebStudioPlacementX.read;
bind x.set to state WebStudioPlacementX.write;
bind y.get to state WebStudioPlacementY.read;
bind y.set to state WebStudioPlacementY.write;
bind width.get to state WebStudioPlacementWidth.read;
bind width.set to state WebStudioPlacementWidth.write;
bind height.get to state WebStudioPlacementHeight.read;
bind height.set to state WebStudioPlacementHeight.write;
bind z.get to state WebStudioPlacementZ.read;
bind z.set to state WebStudioPlacementZ.write;
bind subject.resolve to edge WebStudioPlacementSubjectEdge.subject.resolve;
bind subject.connect to edge WebStudioPlacementSubjectEdge.subject.connect;
bind subject.disconnect to edge WebStudioPlacementSubjectEdge.subject.disconnect;
bind canvas.resolve to edge WebStudioCanvasPlacementEdge.canvas.resolve;
bind canvas.connect to edge WebStudioCanvasPlacementEdge.canvas.connect;
bind canvas.disconnect to edge WebStudioCanvasPlacementEdge.canvas.disconnect;
}
conform Project as WebStudioCreateable {}
conform Project as WebStudioPlaceable {
bind placements.resolve to edge WebStudioPlacementSubjectEdge.placements.resolve;
}
conform Project as WebStudioSearchable {
bind document.get to package ProjectRuntime.searchDocumentGet with {
name to state ProjectName;
tasks to edge ProjectTaskEdge.tasks;
};
bind document.watch-start to package ProjectRuntime.searchDocumentWatch with {
name to state ProjectName;
tasks to edge ProjectTaskEdge.tasks;
};
bind document.watch-stop to package ProjectRuntime.searchDocumentWatchStop;
}
conform Project as WebStudioHasReactComponent {
bind component.resolve to edge ProjectComponentEdge.component.resolve;
materialize component if absent using constructor ProjectReactComponent via edge ProjectComponentEdge.subject;
}
conform Project as Named {
bind name.get to state ProjectName.read;
bind name.set to state ProjectName.write;
}
conform Project as ProjectTasks {
bind tasks.resolve to edge ProjectTaskEdge.tasks.resolve;
bind tasks.connect to edge ProjectTaskEdge.tasks.connect;
bind tasks.disconnect to edge ProjectTaskEdge.tasks.disconnect;
}
conform Project as ProjectActions {
bind addTask.call to package ProjectRuntime.addTask with {
tasks to edge ProjectTaskEdge.tasks;
task to constructor Task;
};
}
conform Project as TaskCount {
bind count.get to package ProjectRuntime.taskCountGet with {
tasks to edge ProjectTaskEdge.tasks;
};
bind count.watch-start to package ProjectRuntime.taskCountWatch with {
tasks to edge ProjectTaskEdge.tasks;
};
bind count.watch-stop to package ProjectRuntime.taskCountWatchStop;
}
conform ProjectReactComponent as WebStudioReactComponent {
bind source.get to package ProjectReactRuntime.sourceGet;
bind props.get to package ProjectReactRuntime.propsGet with {
subject to edge ProjectComponentEdge.subject;
name to state ProjectName via edge ProjectComponentEdge.subject;
tasks to edge ProjectTaskEdge.tasks via edge ProjectComponentEdge.subject;
};
bind props.watch-start to package ProjectReactRuntime.propsWatch with {
subject to edge ProjectComponentEdge.subject;
name to state ProjectName via edge ProjectComponentEdge.subject;
tasks to edge ProjectTaskEdge.tasks via edge ProjectComponentEdge.subject;
};
bind props.watch-stop to package ProjectReactRuntime.propsWatchStop;
}
conform Task as WebStudioHasReactComponent {
bind component.resolve to edge TaskComponentEdge.component.resolve;
materialize component if absent using constructor TaskReactComponent via edge TaskComponentEdge.subject;
}
conform Task as WebStudioPlaceable {
bind placements.resolve to edge WebStudioPlacementSubjectEdge.placements.resolve;
}
conform Task as WebStudioSearchable {
bind document.get to package TodoRuntime.searchDocumentGet with {
title to state TaskTitle;
status to state TaskStatus;
priority to state TaskPriority;
dueDate to state TaskDueDate;
};
bind document.watch-start to package TodoRuntime.searchDocumentWatch with {
title to state TaskTitle;
status to state TaskStatus;
priority to state TaskPriority;
dueDate to state TaskDueDate;
};
bind document.watch-stop to package TodoRuntime.searchDocumentWatchStop;
}
conform Task as TaskData {
bind title.get to state TaskTitle.read;
bind title.set to state TaskTitle.write;
bind status.get to state TaskStatus.read;
bind status.set to state TaskStatus.write;
bind priority.get to state TaskPriority.read;
bind priority.set to state TaskPriority.write;
bind notes.get to state TaskNotes.read;
bind notes.set to state TaskNotes.write;
bind dueDate.get to state TaskDueDate.read;
bind dueDate.set to state TaskDueDate.write;
bind energy.get to state TaskEnergy.read;
bind energy.set to state TaskEnergy.write;
}
conform Task as TaskActions {
bind complete.call to package TodoRuntime.complete with {
status to state TaskStatus;
};
bind reopen.call to package TodoRuntime.reopen with {
status to state TaskStatus;
};
bind archive.call to package TodoRuntime.archive with {
status to state TaskStatus;
};
}
conform Task as DisplayLabel {
bind label.get to package TodoRuntime.displayLabelGet with {
title to state TaskTitle;
status to state TaskStatus;
priority to state TaskPriority;
};
bind label.watch-start to package TodoRuntime.displayLabelWatch with {
title to state TaskTitle;
status to state TaskStatus;
priority to state TaskPriority;
};
bind label.watch-stop to package TodoRuntime.displayLabelWatchStop;
}
conform TaskReactComponent as WebStudioReactComponent {
bind source.get to package TodoReactRuntime.sourceGet;
bind props.get to package TodoReactRuntime.propsGet with {
subject to edge TaskComponentEdge.subject;
title to state TaskTitle via edge TaskComponentEdge.subject;
status to state TaskStatus via edge TaskComponentEdge.subject;
priority to state TaskPriority via edge TaskComponentEdge.subject;
notes to state TaskNotes via edge TaskComponentEdge.subject;
dueDate to state TaskDueDate via edge TaskComponentEdge.subject;
energy to state TaskEnergy via edge TaskComponentEdge.subject;
};
bind props.watch-start to package TodoReactRuntime.propsWatch with {
subject to edge TaskComponentEdge.subject;
title to state TaskTitle via edge TaskComponentEdge.subject;
status to state TaskStatus via edge TaskComponentEdge.subject;
priority to state TaskPriority via edge TaskComponentEdge.subject;
notes to state TaskNotes via edge TaskComponentEdge.subject;
dueDate to state TaskDueDate via edge TaskComponentEdge.subject;
energy to state TaskEnergy via edge TaskComponentEdge.subject;
};
bind props.watch-stop to package TodoReactRuntime.propsWatchStop;
}
constructor Project to ProjectRuntime.createProject;
constructor Task to TodoRuntime.createTask with {
title to state TaskTitle;
};
constructor ProjectReactComponent to ProjectReactRuntime.createComponent;
constructor TaskReactComponent to TodoReactRuntime.createComponent;
constructor WebStudioCanvas to WebStudioCanvasRuntime.createCanvas;
constructor WebStudioCanvasPlacement to WebStudioCanvasRuntime.createPlacement with {
x to state WebStudioPlacementX;
y to state WebStudioPlacementY;
width to state WebStudioPlacementWidth;
height to state WebStudioPlacementHeight;
z to state WebStudioPlacementZ;
canvas to edge WebStudioCanvasPlacementEdge.canvas;
subject to edge WebStudioPlacementSubjectEdge.subject;
};
}