@topogram/template-todo 0.1.33 → 0.1.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/implementation/web/renderers.js +5 -5
- package/package.json +5 -5
- package/topogram/docs/journeys/task-creation-and-ownership.md +2 -2
- package/topogram/projections/proj-api.tg +14 -14
- package/topogram/projections/proj-db-postgres.tg +7 -7
- package/topogram/projections/proj-db-sqlite.tg +6 -6
- package/topogram/projections/{proj-ui-shared.tg → proj-ui-contract.tg} +16 -16
- package/topogram/projections/{proj-ui-web-react.tg → proj-web-surface-react.tg} +5 -5
- package/topogram/projections/{proj-ui-web.tg → proj-web-surface.tg} +5 -5
- package/topogram/{components/component-ui-task-board.tg → widgets/widget-ui-task-board.tg} +1 -1
- package/topogram/{components/component-ui-task-calendar.tg → widgets/widget-ui-task-calendar.tg} +1 -1
- package/topogram/{components/component-ui-task-summary.tg → widgets/widget-ui-task-summary.tg} +1 -1
- package/topogram/{components/component-ui-task-table.tg → widgets/widget-ui-task-table.tg} +1 -1
- package/topogram-template.json +3 -3
- package/topogram.project.json +8 -8
package/README.md
CHANGED
|
@@ -26,10 +26,10 @@ This template includes executable implementation provider JavaScript under `impl
|
|
|
26
26
|
may load it later after local trust metadata is recorded. Use it as trusted code
|
|
27
27
|
from the `@topogram` package scope.
|
|
28
28
|
|
|
29
|
-
The Topogram source includes reusable UI
|
|
30
|
-
task tables, task boards, and task calendars. `
|
|
31
|
-
screen and region placement through `
|
|
32
|
-
projections inherit the same
|
|
29
|
+
The Topogram source includes reusable UI widgets for task summary metrics,
|
|
30
|
+
task tables, task boards, and task calendars. `proj_ui_contract` owns their
|
|
31
|
+
screen and region placement through `widget_bindings`, so SvelteKit and React web
|
|
32
|
+
projections inherit the same widget contract metadata.
|
|
33
33
|
|
|
34
34
|
## Runtime Semantics
|
|
35
35
|
|
|
@@ -63,7 +63,7 @@ By default the smoke test installs the `@topogram/cli` version pinned in
|
|
|
63
63
|
`topogram-cli.version`. Override it with:
|
|
64
64
|
|
|
65
65
|
```bash
|
|
66
|
-
TOPOGRAM_CLI_PACKAGE_SPEC=/path/to/topogram-cli
|
|
66
|
+
TOPOGRAM_CLI_PACKAGE_SPEC=/path/to/topogram-cli.tgz npm run pack:check
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
## Release
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { renderSvelteKitRedirectingAction } from "@topogram/cli/src/generator/surfaces/web/sveltekit-actions.js";
|
|
2
2
|
import {
|
|
3
|
-
|
|
3
|
+
renderSvelteKitWidgetRegion
|
|
4
4
|
} from "@topogram/cli/template-helpers/sveltekit.js";
|
|
5
5
|
import { TODO_WEB_SCREEN_REFERENCE } from "./screens-reference.js";
|
|
6
6
|
|
|
@@ -75,13 +75,13 @@ export function renderTodoTaskRoutes({
|
|
|
75
75
|
const editTaskVisibility = taskDetail.visibility?.find((entry) => entry.capability?.id === "cap_update_task") || null;
|
|
76
76
|
const completeTaskVisibility = taskDetail.visibility?.find((entry) => entry.capability?.id === "cap_complete_task") || null;
|
|
77
77
|
const deleteTaskVisibility = taskDetail.visibility?.find((entry) => entry.capability?.id === "cap_delete_task") || null;
|
|
78
|
-
const taskListHeroComponents =
|
|
79
|
-
|
|
78
|
+
const taskListHeroComponents = renderSvelteKitWidgetRegion(taskList, "hero", {
|
|
79
|
+
widgetContracts: contract.widgets,
|
|
80
80
|
itemsExpression: "data.result.items",
|
|
81
81
|
useTypescript
|
|
82
82
|
});
|
|
83
|
-
const taskListResultsComponents =
|
|
84
|
-
|
|
83
|
+
const taskListResultsComponents = renderSvelteKitWidgetRegion(taskList, "results", {
|
|
84
|
+
widgetContracts: contract.widgets,
|
|
85
85
|
itemsExpression: "data.result.items",
|
|
86
86
|
useTypescript
|
|
87
87
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@topogram/template-todo",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.34",
|
|
4
4
|
"description": "Topogram template pack for starting a generated Todo app.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
"release:check": "bash ./scripts/check-release-version.sh"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"@topogram/cli": "^0.3.
|
|
31
|
-
"@topogram/generator-hono-api": "0.2.
|
|
32
|
-
"@topogram/generator-postgres-db": "0.1.
|
|
33
|
-
"@topogram/generator-sveltekit-web": "0.1.
|
|
30
|
+
"@topogram/cli": "^0.3.52",
|
|
31
|
+
"@topogram/generator-hono-api": "0.2.8",
|
|
32
|
+
"@topogram/generator-postgres-db": "0.1.7",
|
|
33
|
+
"@topogram/generator-sveltekit-web": "0.1.17"
|
|
34
34
|
}
|
|
35
35
|
}
|
|
@@ -23,8 +23,8 @@ related_rules:
|
|
|
23
23
|
- rule_only_active_users_may_own_tasks
|
|
24
24
|
related_projections:
|
|
25
25
|
- proj_api
|
|
26
|
-
-
|
|
27
|
-
-
|
|
26
|
+
- proj_ui_contract
|
|
27
|
+
- proj_web_surface
|
|
28
28
|
failure_signals:
|
|
29
29
|
- The user can create a task in an archived project.
|
|
30
30
|
- The user can assign a task to an inactive owner.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
projection proj_api {
|
|
2
2
|
name "API"
|
|
3
3
|
description "HTTP API realization for Todo"
|
|
4
|
-
|
|
4
|
+
type api_contract
|
|
5
5
|
|
|
6
6
|
realizes [cap_create_task, cap_get_task, cap_update_task, cap_complete_task, cap_list_tasks, cap_delete_task, cap_export_tasks, cap_get_task_export_job, cap_download_task_export, cap_list_projects, cap_get_project, cap_create_project, cap_update_project, cap_list_users, cap_get_user, cap_create_user, cap_update_user]
|
|
7
7
|
|
|
@@ -14,7 +14,7 @@ projection proj_api {
|
|
|
14
14
|
endpoints
|
|
15
15
|
]
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
endpoints {
|
|
18
18
|
cap_create_task method POST path /tasks success 201 auth user request body
|
|
19
19
|
cap_get_task method GET path /tasks/:id success 200 auth user request path
|
|
20
20
|
cap_update_task method PATCH path /tasks/:id success 200 auth user request body
|
|
@@ -34,7 +34,7 @@ projection proj_api {
|
|
|
34
34
|
cap_download_task_export method GET path /task-exports/:job_id/download success 200 auth user request path
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
error_responses {
|
|
38
38
|
cap_create_task rule_no_task_creation_in_archived_project 409
|
|
39
39
|
cap_create_task rule_only_active_users_may_own_tasks 400
|
|
40
40
|
cap_create_task cap_create_task_invalid_request 400
|
|
@@ -49,7 +49,7 @@ projection proj_api {
|
|
|
49
49
|
cap_download_task_export cap_download_task_export_not_ready 409
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
wire_fields {
|
|
53
53
|
cap_create_task input title in body
|
|
54
54
|
cap_create_task input description in body
|
|
55
55
|
cap_create_task input priority in body
|
|
@@ -112,44 +112,44 @@ projection proj_api {
|
|
|
112
112
|
cap_export_tasks input callback_url in body
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
responses {
|
|
116
116
|
cap_list_tasks mode cursor item shape_output_task_detail cursor request_after after response_next next_cursor limit field limit default 25 max 100 sort by created_at direction desc total included false
|
|
117
117
|
cap_list_projects mode cursor item shape_output_project_detail cursor request_after after response_next next_cursor limit field limit default 25 max 100 sort by created_at direction desc total included false
|
|
118
118
|
cap_list_users mode cursor item shape_output_user_detail cursor request_after after response_next next_cursor limit field limit default 25 max 100 sort by created_at direction desc total included false
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
preconditions {
|
|
122
122
|
cap_update_task header If-Match required true error 412 source updated_at code cap_update_task_precondition_failed
|
|
123
123
|
cap_complete_task header If-Match required true error 412 source updated_at code cap_complete_task_precondition_failed
|
|
124
124
|
cap_delete_task header If-Match required true error 412 source updated_at code cap_delete_task_precondition_failed
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
idempotency {
|
|
128
128
|
cap_create_task header Idempotency-Key required true error 409 code cap_create_task_idempotency_conflict
|
|
129
129
|
cap_complete_task header Idempotency-Key required true error 409 code cap_complete_task_idempotency_conflict
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
cache {
|
|
133
133
|
cap_get_task response_header ETag request_header If-None-Match required false not_modified 304 source updated_at code cap_get_task_not_modified
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
|
|
136
|
+
delete_semantics {
|
|
137
137
|
cap_delete_task mode soft field status value archived response body
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
-
|
|
140
|
+
async_jobs {
|
|
141
141
|
cap_export_tasks mode job accepted 202 location_header Location retry_after_header Retry-After status_path /task-exports/:job_id status_capability cap_get_task_export_job job shape_output_task_export_job
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
-
|
|
144
|
+
async_status {
|
|
145
145
|
cap_get_task_export_job async_for cap_export_tasks state_field status completed completed failed failed expired expired download_capability cap_download_task_export download_field download_url error_field error_message
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
|
|
148
|
+
downloads {
|
|
149
149
|
cap_download_task_export async_for cap_export_tasks media application/zip filename task-export.zip disposition attachment
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
|
|
152
|
+
authorization {
|
|
153
153
|
cap_create_task permission tasks.create
|
|
154
154
|
cap_get_task ownership owner_or_admin ownership_field owner_id
|
|
155
155
|
cap_update_task ownership owner_or_admin ownership_field owner_id permission tasks.update
|
|
@@ -169,7 +169,7 @@ projection proj_api {
|
|
|
169
169
|
cap_download_task_export permission tasks.export.download ownership owner_or_admin ownership_field owner_id
|
|
170
170
|
}
|
|
171
171
|
|
|
172
|
-
|
|
172
|
+
callbacks {
|
|
173
173
|
cap_export_tasks event export_completed target_field callback_url method POST payload shape_output_task_export_callback success 202
|
|
174
174
|
}
|
|
175
175
|
|
|
@@ -2,17 +2,17 @@ projection proj_db_postgres {
|
|
|
2
2
|
name "Todo Postgres DB"
|
|
3
3
|
description "Postgres persistence realization for the Todo domain"
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
type db_contract
|
|
6
6
|
realizes [entity_task, entity_project, entity_user]
|
|
7
7
|
outputs [db_contract, sql_schema]
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
tables {
|
|
10
10
|
entity_task table tasks
|
|
11
11
|
entity_project table projects
|
|
12
12
|
entity_user table users
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
columns {
|
|
16
16
|
entity_task field owner_id column owner_id
|
|
17
17
|
entity_task field project_id column project_id
|
|
18
18
|
entity_project field owner_id column owner_id
|
|
@@ -20,13 +20,13 @@ projection proj_db_postgres {
|
|
|
20
20
|
entity_user field display_name column display_name
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
keys {
|
|
24
24
|
entity_task primary [id]
|
|
25
25
|
entity_project primary [id]
|
|
26
26
|
entity_user primary [id]
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
indexes {
|
|
30
30
|
entity_task index [project_id, status]
|
|
31
31
|
entity_task index [owner_id, status]
|
|
32
32
|
entity_project unique [name]
|
|
@@ -34,13 +34,13 @@ projection proj_db_postgres {
|
|
|
34
34
|
entity_user unique [email]
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
relations {
|
|
38
38
|
entity_task foreign_key owner_id references entity_user.id on_delete set_null
|
|
39
39
|
entity_task foreign_key project_id references entity_project.id on_delete cascade
|
|
40
40
|
entity_project foreign_key owner_id references entity_user.id on_delete set_null
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
lifecycle {
|
|
44
44
|
entity_task soft_delete field status value archived
|
|
45
45
|
entity_task timestamps created_at created_at updated_at updated_at
|
|
46
46
|
}
|
|
@@ -2,23 +2,23 @@ projection proj_db_sqlite {
|
|
|
2
2
|
name "Todo SQLite DB"
|
|
3
3
|
description "SQLite persistence realization for the Todo domain"
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
type db_contract
|
|
6
6
|
realizes [entity_task, entity_project, entity_user]
|
|
7
7
|
outputs [db_contract, sql_schema]
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
tables {
|
|
10
10
|
entity_task table tasks
|
|
11
11
|
entity_project table projects
|
|
12
12
|
entity_user table users
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
keys {
|
|
16
16
|
entity_task primary [id]
|
|
17
17
|
entity_project primary [id]
|
|
18
18
|
entity_user primary [id]
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
indexes {
|
|
22
22
|
entity_task index [project_id, status]
|
|
23
23
|
entity_task index [owner_id, status]
|
|
24
24
|
entity_project unique [name]
|
|
@@ -26,13 +26,13 @@ projection proj_db_sqlite {
|
|
|
26
26
|
entity_user unique [email]
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
relations {
|
|
30
30
|
entity_task foreign_key owner_id references entity_user.id on_delete set_null
|
|
31
31
|
entity_task foreign_key project_id references entity_project.id on_delete cascade
|
|
32
32
|
entity_project foreign_key owner_id references entity_user.id on_delete set_null
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
lifecycle {
|
|
36
36
|
entity_task soft_delete field status value archived
|
|
37
37
|
entity_task timestamps created_at created_at updated_at updated_at
|
|
38
38
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
projection
|
|
1
|
+
projection proj_ui_contract {
|
|
2
2
|
name "Todo Shared UI"
|
|
3
3
|
description "Platform-neutral UI semantics for the Todo product"
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
type ui_contract
|
|
6
6
|
realizes [
|
|
7
7
|
cap_list_projects,
|
|
8
8
|
cap_get_project,
|
|
@@ -24,7 +24,7 @@ projection proj_ui_shared {
|
|
|
24
24
|
]
|
|
25
25
|
outputs [ui_contract]
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
app_shell {
|
|
28
28
|
brand "Topogram Todo"
|
|
29
29
|
shell bottom_tabs
|
|
30
30
|
global_search true
|
|
@@ -33,7 +33,7 @@ projection proj_ui_shared {
|
|
|
33
33
|
footer legal
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
design_tokens {
|
|
37
37
|
density compact
|
|
38
38
|
tone operational
|
|
39
39
|
radius_scale medium
|
|
@@ -61,7 +61,7 @@ projection proj_ui_shared {
|
|
|
61
61
|
accessibility min_touch_target comfortable
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
screens {
|
|
65
65
|
screen project_list kind list title "Projects" load cap_list_projects item_shape shape_output_project_card detail_capability cap_get_project primary_action cap_create_project empty_title "No projects yet" empty_body "Create a project to organize your tasks" loading_state skeleton error_state inline
|
|
66
66
|
screen project_detail kind detail title "Project Details" load cap_get_project view_shape shape_output_project_detail primary_action cap_update_project loading_state skeleton
|
|
67
67
|
screen project_create kind form title "Create Project" input_shape shape_input_create_project submit cap_create_project success_navigate project_detail success_state banner
|
|
@@ -79,7 +79,7 @@ projection proj_ui_shared {
|
|
|
79
79
|
screen task_exports kind job_status title "Export Status" load cap_get_task_export_job view_shape shape_output_task_export_status terminal_action cap_download_task_export
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
collection_views {
|
|
83
83
|
screen project_list pagination cursor
|
|
84
84
|
screen project_list sort created_at desc
|
|
85
85
|
screen project_list view table
|
|
@@ -95,7 +95,7 @@ projection proj_ui_shared {
|
|
|
95
95
|
screen task_list view table
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
|
|
98
|
+
screen_actions {
|
|
99
99
|
screen project_list action cap_create_project prominence primary placement toolbar
|
|
100
100
|
screen user_list action cap_create_user prominence primary placement toolbar
|
|
101
101
|
screen task_list action cap_export_tasks prominence secondary placement toolbar
|
|
@@ -103,7 +103,7 @@ projection proj_ui_shared {
|
|
|
103
103
|
screen task_detail action cap_delete_task prominence destructive placement footer
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
visibility_rules {
|
|
107
107
|
action cap_create_project visible_if permission projects.create
|
|
108
108
|
action cap_update_project visible_if permission projects.update
|
|
109
109
|
action cap_create_user visible_if permission users.create
|
|
@@ -114,7 +114,7 @@ projection proj_ui_shared {
|
|
|
114
114
|
action cap_export_tasks visible_if permission tasks.export
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
|
|
117
|
+
field_lookups {
|
|
118
118
|
screen project_create field owner_id entity entity_user label_field display_name empty_label "Unassigned"
|
|
119
119
|
screen project_edit field owner_id entity entity_user label_field display_name empty_label "Unassigned"
|
|
120
120
|
screen task_list field project_id entity entity_project label_field name empty_label "All projects"
|
|
@@ -124,7 +124,7 @@ projection proj_ui_shared {
|
|
|
124
124
|
screen task_edit field owner_id entity entity_user label_field display_name empty_label "Unassigned"
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
navigation {
|
|
128
128
|
group workspace label "Workspace" placement primary pattern bottom_tabs
|
|
129
129
|
group admin label "Admin" placement primary pattern bottom_tabs
|
|
130
130
|
screen task_list group workspace label "Tasks" order 10 visible true default true sitemap include pattern bottom_tabs
|
|
@@ -136,7 +136,7 @@ projection proj_ui_shared {
|
|
|
136
136
|
screen task_detail group workspace label "Task Details" visible false breadcrumb task_list sitemap exclude pattern stack_navigation
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
-
|
|
139
|
+
screen_regions {
|
|
140
140
|
screen task_list region hero pattern summary_stats placement primary
|
|
141
141
|
screen task_list region toolbar pattern action_bar placement primary
|
|
142
142
|
screen task_list region results pattern resource_table placement primary
|
|
@@ -150,11 +150,11 @@ projection proj_ui_shared {
|
|
|
150
150
|
screen user_list region results pattern resource_table placement primary
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
-
|
|
154
|
-
screen task_list region hero
|
|
155
|
-
screen task_list region results
|
|
156
|
-
screen task_board region results
|
|
157
|
-
screen task_calendar region results
|
|
153
|
+
widget_bindings {
|
|
154
|
+
screen task_list region hero widget widget_ui_task_summary data metrics from cap_list_tasks
|
|
155
|
+
screen task_list region results widget widget_ui_task_table data rows from cap_list_tasks event row_select navigate task_detail event export_request action cap_export_tasks
|
|
156
|
+
screen task_board region results widget widget_ui_task_board data columns from cap_list_tasks event card_select navigate task_detail event card_move action cap_update_task
|
|
157
|
+
screen task_calendar region results widget widget_ui_task_calendar data events from cap_list_tasks event event_select navigate task_detail
|
|
158
158
|
}
|
|
159
159
|
|
|
160
160
|
status active
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
projection
|
|
1
|
+
projection proj_web_surface_react {
|
|
2
2
|
name "Todo Web UI (React)"
|
|
3
3
|
description "Web realization for the shared Todo UI using a React profile"
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
type web_surface
|
|
6
6
|
realizes [
|
|
7
7
|
cap_list_projects,
|
|
8
8
|
cap_get_project,
|
|
@@ -12,7 +12,7 @@ projection proj_ui_web_react {
|
|
|
12
12
|
cap_get_user,
|
|
13
13
|
cap_create_user,
|
|
14
14
|
cap_update_user,
|
|
15
|
-
|
|
15
|
+
proj_ui_contract,
|
|
16
16
|
cap_list_tasks,
|
|
17
17
|
cap_get_task,
|
|
18
18
|
cap_create_task,
|
|
@@ -25,7 +25,7 @@ projection proj_ui_web_react {
|
|
|
25
25
|
]
|
|
26
26
|
outputs [ui_contract, web_app]
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
screen_routes {
|
|
29
29
|
screen project_list path /projects
|
|
30
30
|
screen project_detail path /projects/:id
|
|
31
31
|
screen project_create path /projects/new
|
|
@@ -43,7 +43,7 @@ projection proj_ui_web_react {
|
|
|
43
43
|
screen task_exports path /task-exports/:job_id
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
web_hints {
|
|
47
47
|
screen task_list shell bottom_tabs
|
|
48
48
|
screen project_list layout responsive_collection
|
|
49
49
|
screen project_list desktop_variant table
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
projection
|
|
1
|
+
projection proj_web_surface {
|
|
2
2
|
name "Todo Web UI"
|
|
3
3
|
description "Web realization for the shared Todo UI using a SvelteKit profile"
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
type web_surface
|
|
6
6
|
realizes [
|
|
7
7
|
cap_list_projects,
|
|
8
8
|
cap_get_project,
|
|
@@ -12,7 +12,7 @@ projection proj_ui_web {
|
|
|
12
12
|
cap_get_user,
|
|
13
13
|
cap_create_user,
|
|
14
14
|
cap_update_user,
|
|
15
|
-
|
|
15
|
+
proj_ui_contract,
|
|
16
16
|
cap_list_tasks,
|
|
17
17
|
cap_get_task,
|
|
18
18
|
cap_create_task,
|
|
@@ -25,7 +25,7 @@ projection proj_ui_web {
|
|
|
25
25
|
]
|
|
26
26
|
outputs [ui_contract, web_app]
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
screen_routes {
|
|
29
29
|
screen project_list path /projects
|
|
30
30
|
screen project_detail path /projects/:id
|
|
31
31
|
screen project_create path /projects/new
|
|
@@ -43,7 +43,7 @@ projection proj_ui_web {
|
|
|
43
43
|
screen task_exports path /task-exports/:job_id
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
web_hints {
|
|
47
47
|
screen task_list shell bottom_tabs
|
|
48
48
|
screen project_list layout responsive_collection
|
|
49
49
|
screen project_list desktop_variant table
|
package/topogram-template.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "@topogram/template-todo",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.34",
|
|
4
4
|
"kind": "starter",
|
|
5
|
-
"description": "Todo/task management starter with generated web, API, and Postgres
|
|
5
|
+
"description": "Todo/task management starter with generated web, API, and Postgres runtimes.",
|
|
6
6
|
"topogramVersion": "0.1",
|
|
7
7
|
"includesExecutableImplementation": true,
|
|
8
8
|
"starterScripts": {
|
|
9
|
-
"
|
|
9
|
+
"widget:behavior:query": "topogram query widget-behavior ./topogram --projection proj_web_surface --json"
|
|
10
10
|
}
|
|
11
11
|
}
|
package/topogram.project.json
CHANGED
|
@@ -12,10 +12,9 @@
|
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"topology": {
|
|
15
|
-
"
|
|
15
|
+
"runtimes": [
|
|
16
16
|
{
|
|
17
17
|
"id": "app_api",
|
|
18
|
-
"type": "api",
|
|
19
18
|
"projection": "proj_api",
|
|
20
19
|
"generator": {
|
|
21
20
|
"id": "@topogram/generator-hono-api",
|
|
@@ -23,30 +22,31 @@
|
|
|
23
22
|
"package": "@topogram/generator-hono-api"
|
|
24
23
|
},
|
|
25
24
|
"port": 3000,
|
|
26
|
-
"
|
|
25
|
+
"kind": "api_service",
|
|
26
|
+
"uses_database": "app_postgres"
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
"id": "app_sveltekit",
|
|
30
|
-
"
|
|
31
|
-
"projection": "proj_ui_web",
|
|
30
|
+
"projection": "proj_web_surface",
|
|
32
31
|
"generator": {
|
|
33
32
|
"id": "@topogram/generator-sveltekit-web",
|
|
34
33
|
"version": "1",
|
|
35
34
|
"package": "@topogram/generator-sveltekit-web"
|
|
36
35
|
},
|
|
37
36
|
"port": 5173,
|
|
38
|
-
"
|
|
37
|
+
"kind": "web_surface",
|
|
38
|
+
"uses_api": "app_api"
|
|
39
39
|
},
|
|
40
40
|
{
|
|
41
41
|
"id": "app_postgres",
|
|
42
|
-
"type": "database",
|
|
43
42
|
"projection": "proj_db_postgres",
|
|
44
43
|
"generator": {
|
|
45
44
|
"id": "@topogram/generator-postgres-db",
|
|
46
45
|
"version": "1",
|
|
47
46
|
"package": "@topogram/generator-postgres-db"
|
|
48
47
|
},
|
|
49
|
-
"port": 5432
|
|
48
|
+
"port": 5432,
|
|
49
|
+
"kind": "database"
|
|
50
50
|
}
|
|
51
51
|
]
|
|
52
52
|
}
|