commit ee029bf46ee161aa6a0cb7d83cecc0177f7a918b Author: Quixos Template Publisher Date: Sat Jan 1 00:00:00 2000 +0000 Export template source from 99b2868b7e974441744657b35049f5baae4a499b:quixos-instance/workspaces/todo diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..73cc1df --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Authoring journals, resolver checkouts, and provisional reports are not source. +/.quixos/ diff --git a/.quixos-template-source.json b/.quixos-template-source.json new file mode 100644 index 0000000..836eb7b --- /dev/null +++ b/.quixos-template-source.json @@ -0,0 +1,4 @@ +{ + "monorepoCommit": "99b2868b7e974441744657b35049f5baae4a499b", + "sourcePath": "quixos-instance/workspaces/todo" +} diff --git a/locks/interfaces.lock b/locks/interfaces.lock new file mode 100644 index 0000000..811a58f --- /dev/null +++ b/locks/interfaces.lock @@ -0,0 +1,62 @@ +quixos-lock fragment version 1 { + interface Named source { + repository "https://repos.quixos.org/quixos-todo/interface-named.git"; + commit "0000000000000000000000000000000000000010"; + } + interface TaskData source { + repository "https://repos.quixos.org/quixos-todo/interface-task-data.git"; + commit "0000000000000000000000000000000000000011"; + } + interface ProjectTasks source { + repository "https://repos.quixos.org/quixos-todo/interface-project-tasks.git"; + commit "0000000000000000000000000000000000000012"; + } + interface ProjectActions source { + repository "https://repos.quixos.org/quixos-todo/interface-project-actions.git"; + commit "0000000000000000000000000000000000000013"; + } + interface TaskActions source { + repository "https://repos.quixos.org/quixos-todo/interface-task-actions.git"; + commit "0000000000000000000000000000000000000014"; + } + interface DisplayLabel source { + repository "https://repos.quixos.org/quixos-todo/interface-display-label.git"; + commit "0000000000000000000000000000000000000015"; + } + interface TaskCount source { + repository "https://repos.quixos.org/quixos-todo/interface-task-count.git"; + commit "0000000000000000000000000000000000000016"; + } + interface WebStudioFactory source { + repository "https://repos.quixos.org/org-quixos-web-studio/interface-factory.git"; + commit "0000000000000000000000000000000000000017"; + } + interface WebStudioReactComponent source { + repository "https://repos.quixos.org/org-quixos-web-studio/interface-react-component.git"; + commit "0000000000000000000000000000000000000018"; + } + interface WebStudioReactSource source { + repository "https://repos.quixos.org/org-quixos-web-studio/interface-react-source.git"; + commit "0000000000000000000000000000000000000029"; + } + interface WebStudioHasReactComponent source { + repository "https://repos.quixos.org/org-quixos-web-studio/interface-has-react-component.git"; + commit "0000000000000000000000000000000000000019"; + } + interface WebStudioCanvas source { + repository "https://repos.quixos.org/org-quixos-web-studio/interface-canvas.git"; + commit "0000000000000000000000000000000000000024"; + } + interface WebStudioCanvasPlacement source { + repository "https://repos.quixos.org/org-quixos-web-studio/interface-canvas-placement.git"; + commit "0000000000000000000000000000000000000025"; + } + interface WebStudioPlaceable source { + repository "https://repos.quixos.org/org-quixos-web-studio/interface-placeable.git"; + commit "0000000000000000000000000000000000000026"; + } + interface WebStudioSearchable source { + repository "https://repos.quixos.org/org-quixos-web-studio/interface-searchable.git"; + commit "0000000000000000000000000000000000000027"; + } +} diff --git a/locks/packages.lock b/locks/packages.lock new file mode 100644 index 0000000..ef0b723 --- /dev/null +++ b/locks/packages.lock @@ -0,0 +1,22 @@ +quixos-lock fragment version 1 { + package TodoRuntime source { + repository "https://repos.quixos.org/quixos-todo/package-todo-runtime.git"; + commit "0000000000000000000000000000000000000020"; + } + package ProjectRuntime source { + repository "https://repos.quixos.org/quixos-todo/package-project-runtime.git"; + commit "0000000000000000000000000000000000000021"; + } + package ProjectReactRuntime source { + repository "https://repos.quixos.org/quixos-todo/package-project-react-runtime.git"; + commit "0000000000000000000000000000000000000022"; + } + package TodoReactRuntime source { + repository "https://repos.quixos.org/quixos-todo/package-todo-react-runtime.git"; + commit "0000000000000000000000000000000000000023"; + } + package WebStudioCanvasRuntime source { + repository "https://repos.quixos.org/org-quixos-web-studio/package-canvas-runtime.git"; + commit "0000000000000000000000000000000000000028"; + } +} diff --git a/quixos.lock b/quixos.lock new file mode 100644 index 0000000..4f46e7e --- /dev/null +++ b/quixos.lock @@ -0,0 +1,8 @@ +quixos-lock version 1 { + quixos source { + repository "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos.git"; + commit "99b2868b7e974441744657b35049f5baae4a499b"; + } + import "locks/interfaces.lock"; + import "locks/packages.lock"; +} diff --git a/workspace.qx b/workspace.qx new file mode 100644 index 0000000..78bfc63 --- /dev/null +++ b/workspace.qx @@ -0,0 +1,226 @@ +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."; + + import interface Named; + import interface TaskData; + import interface ProjectTasks; + import interface ProjectActions; + import interface TaskActions; + import interface DisplayLabel; + import interface TaskCount; + import interface WebStudioFactory; + import interface WebStudioReactSource; + import interface WebStudioReactComponent; + import interface WebStudioHasReactComponent; + import interface WebStudioCanvas; + import interface WebStudioCanvasPlacement; + import interface WebStudioPlaceable; + import interface WebStudioSearchable; + + import package TodoRuntime; + import package ProjectRuntime; + import package ProjectReactRuntime; + import package TodoReactRuntime; + import package WebStudioCanvasRuntime; + + + 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"; + + 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; + } + + bind position.get to state WebStudioPlacementPosition.read; + bind position.set to state WebStudioPlacementPosition.write; + bind size.get to state WebStudioPlacementSize.read; + bind size.set to state WebStudioPlacementSize.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 WebStudioFactory id "conformance:todo:Project:WebStudioFactory" { + bind create.call to package ProjectRuntime.newProject with { project to constructor Project; }; + } + conform Project as WebStudioPlaceable id "conformance:todo:Project:WebStudioPlaceable" { + + bind placements.resolve to edge WebStudioPlacementSubjectEdge.placements.resolve; + } + conform Project as WebStudioSearchable id "conformance:todo:Project:WebStudioSearchable" { + + bind document.get to package ProjectRuntime.searchDocumentGet with { + named to interface Named; + tasks to interface ProjectTasks; + }; + bind document.watch-start to package ProjectRuntime.searchDocumentWatch with { + named to interface Named; + tasks to interface ProjectTasks; + }; + 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; + } + + 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"; + + bind name to state ProjectName; + } + 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; + } + + bind tasks.resolve to edge ProjectTaskEdge.tasks.resolve; + bind tasks.connect to edge ProjectTaskEdge.tasks.connect; + bind tasks.disconnect to edge ProjectTaskEdge.tasks.disconnect; + bind tasks.watch-start to edge ProjectTaskEdge.tasks.watch-start; + bind tasks.watch-stop to edge ProjectTaskEdge.tasks.watch-stop; + } + conform Project as ProjectActions id "conformance:todo:Project:ProjectActions" { + + bind addTask.call to package ProjectRuntime.addTask with { + tasks to interface ProjectTasks; + task to constructor Task; + }; + } + conform Project as TaskCount id "conformance:todo:Project:TaskCount" { + + bind count.get to package ProjectRuntime.taskCountGet with { + tasks to interface ProjectTasks; + }; + bind count.watch-start to package ProjectRuntime.taskCountWatch with { + tasks to interface ProjectTasks; + }; + bind count.watch-stop to package ProjectRuntime.taskCountWatchStop; + } + conform ProjectReactComponent as WebStudioReactSource id "conformance:todo:ProjectReactComponent:WebStudioReactSource" { + bind source.get to package ProjectReactRuntime.sourceGet; + } + conform ProjectReactComponent as WebStudioReactComponent; tasks: interface-ref;}> id "conformance:todo:ProjectReactComponent:WebStudioReactComponent" { + bind props.get to package ProjectReactRuntime.propsGet with { + named to interface Named via edge ProjectComponentEdge.subject; + tasks to interface ProjectTasks via edge ProjectComponentEdge.subject; + }; + bind props.watch-start to package ProjectReactRuntime.propsWatch with { + named to interface Named via edge ProjectComponentEdge.subject; + tasks to interface ProjectTasks via edge ProjectComponentEdge.subject; + }; + 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; + } + + 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" { + + bind placements.resolve to edge WebStudioPlacementSubjectEdge.placements.resolve; + } + conform Task as WebStudioSearchable id "conformance:todo:Task:WebStudioSearchable" { + + bind document.get to package TodoRuntime.searchDocumentGet with { + data to interface TaskData; + }; + bind document.watch-start to package TodoRuntime.searchDocumentWatch with { + data to interface TaskData; + }; + 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"; + + bind title to state TaskTitle; + bind status to state TaskStatus; + bind priority to state TaskPriority; + bind notes to state TaskNotes; + bind dueDate to state TaskDueDate; + bind energy to state TaskEnergy; + } + conform Task as TaskActions id "conformance:todo:Task:TaskActions" { + + bind complete.call to package TodoRuntime.complete with { + data to interface TaskData; + }; + bind reopen.call to package TodoRuntime.reopen with { + data to interface TaskData; + }; + bind archive.call to package TodoRuntime.archive with { + data to interface TaskData; + }; + } + conform Task as DisplayLabel id "conformance:todo:Task:DisplayLabel" { + + bind label.get to package TodoRuntime.displayLabelGet with { + data to interface TaskData; + }; + bind label.watch-start to package TodoRuntime.displayLabelWatch with { + data to interface TaskData; + }; + bind label.watch-stop to package TodoRuntime.displayLabelWatchStop; + } + conform TaskReactComponent as WebStudioReactSource id "conformance:todo:TaskReactComponent:WebStudioReactSource" { + bind source.get to package TodoReactRuntime.sourceGet; + } + conform TaskReactComponent as WebStudioReactComponent;}> id "conformance:todo:TaskReactComponent:WebStudioReactComponent" { + bind props.get to package TodoReactRuntime.propsGet with { + data to interface TaskData via edge TaskComponentEdge.subject; + }; + bind props.watch-start to package TodoReactRuntime.propsWatch with { + data to interface TaskData 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; + }; + 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; + }; +}