Compare commits

..
6 changed files with 129 additions and 107 deletions
-2
View File
@@ -1,2 +0,0 @@
# Authoring journals, resolver checkouts, and provisional reports are not source.
/.quixos/
-4
View File
@@ -1,4 +0,0 @@
{
"monorepoCommit": "ba8d4f92667f39bb02d542cb492b71a32ec914bf",
"sourcePath": "quixos-instance/workspaces/todo"
}
+28 -14
View File
@@ -1,58 +1,72 @@
quixos-lock fragment version 1 {
interface Named source {
repository "https://repos.quixos.org/quixos-templates/interface-named.git";
commit "046a719004a6dda537a5dc98ef60f55a43eba0e4";
commit "14be607ed250f8c3ce1633558573fc1449f6f2a1";
}
interface TaskData source {
repository "https://repos.quixos.org/quixos-templates/interface-task-data.git";
commit "2bce2096acbcfa4371b3d6968bed1ac8c8406180";
commit "bf49686e03e02a5f047512191a97927a94624ac4";
}
interface ProjectTasks source {
repository "https://repos.quixos.org/quixos-templates/interface-project-tasks.git";
commit "522f030dfd656ef788ae9a0b0b43b06144912042";
commit "2590966c1f95da08126f1cb830be7dcc6dc715d9";
}
interface ProjectActions source {
repository "https://repos.quixos.org/quixos-templates/interface-project-actions.git";
commit "a5f3237e0eae6d5d9af70be7882b70fa1256b9b7";
commit "bcd34a9d2e94b767e531a1138a590cca07d4c3fa";
}
interface TaskActions source {
repository "https://repos.quixos.org/quixos-templates/interface-task-actions.git";
commit "3c1739caa67b7d1799cb39eb0f8923fd13ef22ce";
commit "1f6123fe8aa2efa30b536c0822c3fe01eed37bc5";
}
interface DisplayLabel source {
repository "https://repos.quixos.org/quixos-templates/interface-display-label.git";
commit "03cb4e32a1e8777450ef4de801433c5c6aa112a5";
commit "e7afc5c4ddd2515ae6e005bf0943f5c764362cbb";
}
interface TaskCount source {
repository "https://repos.quixos.org/quixos-templates/interface-task-count.git";
commit "658a3ad87e5ee46087a71e9441bdeaebd419006c";
commit "5c034fdcb805fa2d892b65f689fab9ee2a431f68";
}
interface WebStudioCreateable source {
repository "https://repos.quixos.org/quixos-templates/interface-createable.git";
commit "4795615d13a5cbe361293f6a719d4ba40eaa5abb";
commit "03fdebf600aaa85abba98033d3831291c44421b4";
}
interface WebStudioReactComponent source {
repository "https://repos.quixos.org/quixos-templates/interface-react-component.git";
commit "b238cdcf1225454edf9353343e9fdbcd1cd880cc";
commit "54c26db6c722e91523a300d94038c5c39d6df662";
}
interface WebStudioHasReactComponent source {
repository "https://repos.quixos.org/quixos-templates/interface-has-react-component.git";
commit "3d836adf25e5c13d20b943d129f2a18971db1af5";
commit "fb01eaac27a13efd78c1d6de5414fc5d790c3fcc";
}
interface WebStudioCanvas source {
repository "https://repos.quixos.org/quixos-templates/interface-canvas.git";
commit "f3cb4cb1993f9ef6a35cdcb96558e835704992fa";
commit "e9ce13befad5704aaff70e44c4eefd4f9d877d96";
}
interface WebStudioCanvasPlacement source {
repository "https://repos.quixos.org/quixos-templates/interface-canvas-placement.git";
commit "8dd3e248d9d8add9c9eeed3e6e0df543fa074b93";
commit "b00128cca4cbf4a6883dd998bb1b44af7eb2a245";
}
interface WebStudioPlaceable source {
repository "https://repos.quixos.org/quixos-templates/interface-placeable.git";
commit "74bf405381439023d1abf55d7c7f0bc1796f075e";
commit "8b4c62724e16084e6601f5d0ab4b730294d0fb89";
}
interface WebStudioSearchable source {
repository "https://repos.quixos.org/quixos-templates/interface-searchable.git";
commit "7c50904e68a64184ce6e1a3555124135cc47ff4b";
commit "f0d9fa3d3f5c979b738688d4bcff423e5ca7f4cd";
}
}
+10 -5
View File
@@ -1,22 +1,27 @@
quixos-lock fragment version 1 {
package TodoRuntime source {
repository "https://repos.quixos.org/quixos-templates/package-todo-runtime.git";
commit "de042800aee6bf98ee158d3b69aaf11fcaa43159";
commit "667c87e4b0494f26968f224c0b01c52f9979101b";
}
package ProjectRuntime source {
repository "https://repos.quixos.org/quixos-templates/package-project-runtime.git";
commit "f1b5c7863ebf32eea0a8d830261c1e9bfb0f7bdc";
commit "f902eb5ac5c1a73a0df4449c6d243d10e2a36da9";
}
package ProjectReactRuntime source {
repository "https://repos.quixos.org/quixos-templates/package-project-react-runtime.git";
commit "8bb4475cc5d445de4609d9769e4e6be1efc8f608";
commit "6b1708614a641da1625468c6fb8725cbfbea1fd6";
}
package TodoReactRuntime source {
repository "https://repos.quixos.org/quixos-templates/package-todo-react-runtime.git";
commit "3768c84a464fe41c7c36af991152678cc6775bfc";
commit "0aa51aa502aca102d6f65d3f2d5b82e7ca858e97";
}
package WebStudioCanvasRuntime source {
repository "https://repos.quixos.org/quixos-templates/package-canvas-runtime.git";
commit "5f0e5c616a99eac0299df8d2fc6dcc275becfd5b";
commit "f751c64c07ad96991ce2537a3dea3190bc6dca79";
}
}
+2 -1
View File
@@ -1,8 +1,9 @@
quixos-lock version 1 {
quixos source {
repository "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos.git";
commit "ba8d4f92667f39bb02d542cb492b71a32ec914bf";
commit "9c3ab572ecfbc83785038c3d9f174516df15d63f";
}
import "locks/interfaces.lock";
import "locks/packages.lock";
}
+89 -81
View File
@@ -27,27 +27,44 @@ workspace Todo id "workspace:todo" revision "workspace:todo@capabilities-v1" com
import package TodoReactRuntime;
import package WebStudioCanvasRuntime;
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 WebStudioPlacementPosition id "slot:org.quixos.web-studio.canvas-placement:position" on WebStudioCanvasPlacement : message "org.quixos.web-studio.CanvasPosition" policy optimistic-register default {"x":0,"y":0};
shared state WebStudioPlacementSize id "slot:org.quixos.web-studio.canvas-placement:size" on WebStudioCanvasPlacement : message "org.quixos.web-studio.CanvasSize" policy optimistic-register default {"width":420,"height":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 id "conformance:todo:WebStudioCanvas:WebStudioCanvas" {
private state WebStudioCanvasName id "slot:org.quixos.web-studio.canvas:name" on WebStudioCanvas : string policy optimistic-register default "Hearth";
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 id "conformance:todo:WebStudioCanvasPlacement:WebStudioCanvasPlacement" {
private state WebStudioPlacementPosition id "slot:org.quixos.web-studio.canvas-placement:position" on WebStudioCanvasPlacement : message "org.quixos.web-studio.CanvasPosition" policy optimistic-register default {"x":0,"y":0};
private state WebStudioPlacementSize id "slot:org.quixos.web-studio.canvas-placement:size" on WebStudioCanvasPlacement : message "org.quixos.web-studio.CanvasSize" policy optimistic-register default {"width":420,"height":320};
private state WebStudioPlacementZ id "slot:org.quixos.web-studio.canvas-placement:z" on WebStudioCanvasPlacement : int32 policy optimistic-register default 0;
private 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 public-traversal;
}
private 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 public-traversal;
}
conform WebStudioCanvasPlacement as WebStudioCanvasPlacement {
bind position.get to state WebStudioPlacementPosition.read;
bind position.set to state WebStudioPlacementPosition.write;
bind size.get to state WebStudioPlacementSize.read;
@@ -62,14 +79,11 @@ workspace Todo id "workspace:todo" revision "workspace:todo@capabilities-v1" com
bind canvas.disconnect to edge WebStudioCanvasPlacementEdge.canvas.disconnect;
}
conform Project as WebStudioCreateable id "conformance:todo:Project:WebStudioCreateable" {
}
conform Project as WebStudioPlaceable id "conformance:todo:Project:WebStudioPlaceable" {
conform Project as WebStudioCreateable {}
conform Project as WebStudioPlaceable {
bind placements.resolve to edge WebStudioPlacementSubjectEdge.placements.resolve;
}
conform Project as WebStudioSearchable id "conformance:todo:Project:WebStudioSearchable" {
conform Project as WebStudioSearchable {
bind document.get to package ProjectRuntime.searchDocumentGet with {
named to interface Named;
tasks to interface ProjectTasks;
@@ -80,50 +94,35 @@ workspace Todo id "workspace:todo" revision "workspace:todo@capabilities-v1" com
};
bind document.watch-stop to package ProjectRuntime.searchDocumentWatchStop;
}
conform Project as WebStudioHasReactComponent id "conformance:todo:Project:WebStudioHasReactComponent" {
private edge ProjectComponentEdge id "edge:project:web-studio-component" {
atom ProjectReactComponent projection subject id "projection:project-component:subject" exactly-one public-traversal;
atom Project projection component id "projection:project:component" optional-one;
}
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 id "conformance:todo:Project:Named" {
private state ProjectName id "slot:project:name" on Project : string policy optimistic-register default "Untitled project";
conform Project as Named {
bind name.get to state ProjectName.read;
bind name.set to state ProjectName.write;
}
conform Project as ProjectTasks id "conformance:todo:Project:ProjectTasks" {
private 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;
}
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 id "conformance:todo:Project:ProjectActions" {
conform Project as ProjectActions {
bind addTask.call to package ProjectRuntime.addTask with {
tasks to interface ProjectTasks;
tasks to edge ProjectTaskEdge.tasks;
task to constructor Task;
};
}
conform Project as TaskCount id "conformance:todo:Project:TaskCount" {
conform Project as TaskCount {
bind count.get to package ProjectRuntime.taskCountGet with {
tasks to interface ProjectTasks;
tasks to edge ProjectTaskEdge.tasks;
};
bind count.watch-start to package ProjectRuntime.taskCountWatch with {
tasks to interface ProjectTasks;
tasks to edge ProjectTaskEdge.tasks;
};
bind count.watch-stop to package ProjectRuntime.taskCountWatchStop;
}
conform ProjectReactComponent as WebStudioReactComponent id "conformance:todo:ProjectReactComponent:WebStudioReactComponent" {
conform ProjectReactComponent as WebStudioReactComponent {
bind source.get to package ProjectReactRuntime.sourceGet;
bind props.get to package ProjectReactRuntime.propsGet with {
named to interface Named via edge ProjectComponentEdge.subject;
@@ -136,37 +135,29 @@ workspace Todo id "workspace:todo" revision "workspace:todo@capabilities-v1" com
bind props.watch-stop to package ProjectReactRuntime.propsWatchStop;
}
conform Task as WebStudioHasReactComponent id "conformance:todo:Task:WebStudioHasReactComponent" {
private edge TaskComponentEdge id "edge:task:web-studio-component" {
atom TaskReactComponent projection subject id "projection:task-component:subject" exactly-one public-traversal;
atom Task projection component id "projection:task:component" optional-one;
}
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 id "conformance:todo:Task:WebStudioPlaceable" {
conform Task as WebStudioPlaceable {
bind placements.resolve to edge WebStudioPlacementSubjectEdge.placements.resolve;
}
conform Task as WebStudioSearchable id "conformance:todo:Task:WebStudioSearchable" {
conform Task as WebStudioSearchable {
bind document.get to package TodoRuntime.searchDocumentGet with {
data to interface TaskData;
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 {
data to interface TaskData;
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 id "conformance:todo:Task:TaskData" {
private state TaskTitle id "slot:task:title" on Task : string policy optimistic-register default "Untitled task";
private state TaskStatus id "slot:task:status" on Task : string policy optimistic-register default "OPEN";
private state TaskPriority id "slot:task:priority" on Task : string policy optimistic-register default "NORMAL";
private state TaskNotes id "slot:task:notes" on Task : string policy crdt(string) default "";
private state TaskDueDate id "slot:task:due-date" on Task : string policy optimistic-register default "";
private state TaskEnergy id "slot:task:energy" on Task : string policy optimistic-register default "MEDIUM";
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;
@@ -180,48 +171,65 @@ workspace Todo id "workspace:todo" revision "workspace:todo@capabilities-v1" com
bind energy.get to state TaskEnergy.read;
bind energy.set to state TaskEnergy.write;
}
conform Task as TaskActions id "conformance:todo:Task:TaskActions" {
conform Task as TaskActions {
bind complete.call to package TodoRuntime.complete with {
data to interface TaskData;
status to state TaskStatus;
};
bind reopen.call to package TodoRuntime.reopen with {
data to interface TaskData;
status to state TaskStatus;
};
bind archive.call to package TodoRuntime.archive with {
data to interface TaskData;
status to state TaskStatus;
};
}
conform Task as DisplayLabel id "conformance:todo:Task:DisplayLabel" {
conform Task as DisplayLabel {
bind label.get to package TodoRuntime.displayLabelGet with {
data to interface TaskData;
title to state TaskTitle;
status to state TaskStatus;
priority to state TaskPriority;
};
bind label.watch-start to package TodoRuntime.displayLabelWatch with {
data to interface TaskData;
title to state TaskTitle;
status to state TaskStatus;
priority to state TaskPriority;
};
bind label.watch-stop to package TodoRuntime.displayLabelWatchStop;
}
conform TaskReactComponent as WebStudioReactComponent id "conformance:todo:TaskReactComponent:WebStudioReactComponent" {
conform TaskReactComponent as WebStudioReactComponent {
bind source.get to package TodoReactRuntime.sourceGet;
bind props.get to package TodoReactRuntime.propsGet with {
data to interface TaskData via edge TaskComponentEdge.subject;
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 {
data to interface TaskData via edge TaskComponentEdge.subject;
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 {
data to interface TaskData;
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 {
placement to interface WebStudioCanvasPlacement;
position to state WebStudioPlacementPosition;
size to state WebStudioPlacementSize;
z to state WebStudioPlacementZ;
canvas to edge WebStudioCanvasPlacementEdge.canvas;
subject to edge WebStudioPlacementSubjectEdge.subject;
};
}