@contractspec/example.team-hub 1.56.1 → 1.58.0
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/dist/announcement/announcement.operations.d.ts +50 -56
- package/dist/announcement/announcement.operations.d.ts.map +1 -1
- package/dist/announcement/announcement.operations.js +70 -51
- package/dist/announcement/announcement.schema.d.ts +50 -55
- package/dist/announcement/announcement.schema.d.ts.map +1 -1
- package/dist/announcement/announcement.schema.js +29 -71
- package/dist/announcement/index.d.ts +6 -3
- package/dist/announcement/index.d.ts.map +1 -0
- package/dist/announcement/index.js +73 -3
- package/dist/browser/announcement/announcement.operations.js +71 -0
- package/dist/browser/announcement/announcement.schema.js +30 -0
- package/dist/browser/announcement/index.js +73 -0
- package/dist/browser/docs/index.js +94 -0
- package/dist/browser/docs/team-hub.docblock.js +94 -0
- package/dist/browser/entities/index.js +231 -0
- package/dist/browser/events.js +134 -0
- package/dist/browser/example.js +42 -0
- package/dist/browser/handlers/index.js +5 -0
- package/dist/browser/index.js +642 -0
- package/dist/browser/presentations/index.js +131 -0
- package/dist/browser/presentations/team-hub.presentation.js +131 -0
- package/dist/browser/presentations.js +148 -0
- package/dist/browser/ritual/index.js +124 -0
- package/dist/browser/ritual/ritual.operations.js +121 -0
- package/dist/browser/ritual/ritual.schema.js +41 -0
- package/dist/browser/space/index.js +66 -0
- package/dist/browser/space/space.operations.js +64 -0
- package/dist/browser/space/space.schema.js +27 -0
- package/dist/browser/task/index.js +171 -0
- package/dist/browser/task/task.operations.js +168 -0
- package/dist/browser/task/task.schema.js +40 -0
- package/dist/browser/team-hub.capability.js +40 -0
- package/dist/browser/team-hub.feature.js +69 -0
- package/dist/docs/index.d.ts +2 -1
- package/dist/docs/index.d.ts.map +1 -0
- package/dist/docs/index.js +95 -1
- package/dist/docs/team-hub.docblock.d.ts +2 -1
- package/dist/docs/team-hub.docblock.d.ts.map +1 -0
- package/dist/docs/team-hub.docblock.js +45 -56
- package/dist/entities/index.d.ts +138 -143
- package/dist/entities/index.d.ts.map +1 -1
- package/dist/entities/index.js +221 -252
- package/dist/events.d.ts +217 -223
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +122 -201
- package/dist/example.d.ts +2 -6
- package/dist/example.d.ts.map +1 -1
- package/dist/example.js +40 -55
- package/dist/handlers/index.d.ts +1 -4
- package/dist/handlers/index.d.ts.map +1 -1
- package/dist/handlers/index.js +5 -8
- package/dist/index.d.ts +12 -15
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +642 -15
- package/dist/node/announcement/announcement.operations.js +71 -0
- package/dist/node/announcement/announcement.schema.js +30 -0
- package/dist/node/announcement/index.js +73 -0
- package/dist/node/docs/index.js +94 -0
- package/dist/node/docs/team-hub.docblock.js +94 -0
- package/dist/node/entities/index.js +231 -0
- package/dist/node/events.js +134 -0
- package/dist/node/example.js +42 -0
- package/dist/node/handlers/index.js +5 -0
- package/dist/node/index.js +642 -0
- package/dist/node/presentations/index.js +131 -0
- package/dist/node/presentations/team-hub.presentation.js +131 -0
- package/dist/node/presentations.js +148 -0
- package/dist/node/ritual/index.js +124 -0
- package/dist/node/ritual/ritual.operations.js +121 -0
- package/dist/node/ritual/ritual.schema.js +41 -0
- package/dist/node/space/index.js +66 -0
- package/dist/node/space/space.operations.js +64 -0
- package/dist/node/space/space.schema.js +27 -0
- package/dist/node/task/index.js +171 -0
- package/dist/node/task/task.operations.js +168 -0
- package/dist/node/task/task.schema.js +40 -0
- package/dist/node/team-hub.capability.js +40 -0
- package/dist/node/team-hub.feature.js +69 -0
- package/dist/presentations/index.d.ts +2 -2
- package/dist/presentations/index.d.ts.map +1 -0
- package/dist/presentations/index.js +132 -3
- package/dist/presentations/team-hub.presentation.d.ts +6 -11
- package/dist/presentations/team-hub.presentation.d.ts.map +1 -1
- package/dist/presentations/team-hub.presentation.js +126 -125
- package/dist/presentations.d.ts +7 -11
- package/dist/presentations.d.ts.map +1 -1
- package/dist/presentations.js +142 -147
- package/dist/ritual/index.d.ts +6 -3
- package/dist/ritual/index.d.ts.map +1 -0
- package/dist/ritual/index.js +124 -3
- package/dist/ritual/ritual.operations.d.ts +92 -98
- package/dist/ritual/ritual.operations.d.ts.map +1 -1
- package/dist/ritual/ritual.operations.js +119 -95
- package/dist/ritual/ritual.schema.d.ts +67 -72
- package/dist/ritual/ritual.schema.d.ts.map +1 -1
- package/dist/ritual/ritual.schema.js +39 -95
- package/dist/space/index.d.ts +6 -3
- package/dist/space/index.d.ts.map +1 -0
- package/dist/space/index.js +66 -3
- package/dist/space/space.operations.d.ts +38 -44
- package/dist/space/space.operations.d.ts.map +1 -1
- package/dist/space/space.operations.js +63 -50
- package/dist/space/space.schema.d.ts +38 -43
- package/dist/space/space.schema.d.ts.map +1 -1
- package/dist/space/space.schema.js +26 -59
- package/dist/task/index.d.ts +6 -3
- package/dist/task/index.d.ts.map +1 -0
- package/dist/task/index.js +171 -3
- package/dist/task/task.operations.d.ts +212 -218
- package/dist/task/task.operations.d.ts.map +1 -1
- package/dist/task/task.operations.js +163 -174
- package/dist/task/task.schema.d.ts +63 -68
- package/dist/task/task.schema.d.ts.map +1 -1
- package/dist/task/task.schema.js +38 -91
- package/dist/team-hub.capability.d.ts +3 -8
- package/dist/team-hub.capability.d.ts.map +1 -1
- package/dist/team-hub.capability.js +41 -38
- package/dist/team-hub.feature.d.ts +1 -6
- package/dist/team-hub.feature.d.ts.map +1 -1
- package/dist/team-hub.feature.js +68 -159
- package/package.json +261 -57
- package/dist/announcement/announcement.operations.js.map +0 -1
- package/dist/announcement/announcement.schema.js.map +0 -1
- package/dist/docs/team-hub.docblock.js.map +0 -1
- package/dist/entities/index.js.map +0 -1
- package/dist/events.js.map +0 -1
- package/dist/example.js.map +0 -1
- package/dist/handlers/index.js.map +0 -1
- package/dist/presentations/team-hub.presentation.js.map +0 -1
- package/dist/presentations.js.map +0 -1
- package/dist/ritual/ritual.operations.js.map +0 -1
- package/dist/ritual/ritual.schema.js.map +0 -1
- package/dist/space/space.operations.js.map +0 -1
- package/dist/space/space.schema.js.map +0 -1
- package/dist/task/task.operations.js.map +0 -1
- package/dist/task/task.schema.js.map +0 -1
- package/dist/team-hub.capability.js.map +0 -1
- package/dist/team-hub.feature.js.map +0 -1
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
// src/presentations/team-hub.presentation.ts
|
|
2
|
+
import { definePresentation, StabilityEnum } from "@contractspec/lib.contracts";
|
|
3
|
+
var OWNERS = ["@team-hub"];
|
|
4
|
+
var TeamDashboardPresentation = definePresentation({
|
|
5
|
+
meta: {
|
|
6
|
+
key: "team-hub.dashboard",
|
|
7
|
+
version: "1.0.0",
|
|
8
|
+
title: "Team Dashboard",
|
|
9
|
+
description: "Main team hub dashboard.",
|
|
10
|
+
domain: "team-hub",
|
|
11
|
+
owners: [...OWNERS],
|
|
12
|
+
stability: StabilityEnum.Experimental,
|
|
13
|
+
goal: "Central hub for team activity.",
|
|
14
|
+
context: "Landing page for team members.",
|
|
15
|
+
tags: ["dashboard", "team"]
|
|
16
|
+
},
|
|
17
|
+
source: {
|
|
18
|
+
type: "component",
|
|
19
|
+
framework: "react",
|
|
20
|
+
componentKey: "TeamDashboard"
|
|
21
|
+
},
|
|
22
|
+
targets: ["react"]
|
|
23
|
+
});
|
|
24
|
+
var SpaceListPresentation = definePresentation({
|
|
25
|
+
meta: {
|
|
26
|
+
key: "team-hub.space.list",
|
|
27
|
+
version: "1.0.0",
|
|
28
|
+
title: "Space List",
|
|
29
|
+
description: "List of team spaces.",
|
|
30
|
+
domain: "team-hub",
|
|
31
|
+
owners: [...OWNERS],
|
|
32
|
+
stability: StabilityEnum.Experimental,
|
|
33
|
+
goal: "Navigate between team spaces.",
|
|
34
|
+
context: "Sidebar or spaces hub.",
|
|
35
|
+
tags: ["space", "list"]
|
|
36
|
+
},
|
|
37
|
+
source: {
|
|
38
|
+
type: "component",
|
|
39
|
+
framework: "react",
|
|
40
|
+
componentKey: "SpaceList"
|
|
41
|
+
},
|
|
42
|
+
targets: ["react"]
|
|
43
|
+
});
|
|
44
|
+
var TaskBoardPresentation = definePresentation({
|
|
45
|
+
meta: {
|
|
46
|
+
key: "team-hub.task.board",
|
|
47
|
+
version: "1.0.0",
|
|
48
|
+
title: "Task Board",
|
|
49
|
+
description: "Kanban board for team tasks.",
|
|
50
|
+
domain: "team-hub",
|
|
51
|
+
owners: [...OWNERS],
|
|
52
|
+
stability: StabilityEnum.Experimental,
|
|
53
|
+
goal: "Visualize task progress.",
|
|
54
|
+
context: "Project management view.",
|
|
55
|
+
tags: ["task", "board"]
|
|
56
|
+
},
|
|
57
|
+
source: {
|
|
58
|
+
type: "component",
|
|
59
|
+
framework: "react",
|
|
60
|
+
componentKey: "TaskBoard"
|
|
61
|
+
},
|
|
62
|
+
targets: ["react"]
|
|
63
|
+
});
|
|
64
|
+
var TaskDetailPresentation = definePresentation({
|
|
65
|
+
meta: {
|
|
66
|
+
key: "team-hub.task.detail",
|
|
67
|
+
version: "1.0.0",
|
|
68
|
+
title: "Task Detail",
|
|
69
|
+
description: "Detailed view of a task.",
|
|
70
|
+
domain: "team-hub",
|
|
71
|
+
owners: [...OWNERS],
|
|
72
|
+
stability: StabilityEnum.Experimental,
|
|
73
|
+
goal: "View and edit task details.",
|
|
74
|
+
context: "Task modal or page.",
|
|
75
|
+
tags: ["task", "detail"]
|
|
76
|
+
},
|
|
77
|
+
source: {
|
|
78
|
+
type: "component",
|
|
79
|
+
framework: "react",
|
|
80
|
+
componentKey: "TaskDetail"
|
|
81
|
+
},
|
|
82
|
+
targets: ["react"]
|
|
83
|
+
});
|
|
84
|
+
var RitualCalendarPresentation = definePresentation({
|
|
85
|
+
meta: {
|
|
86
|
+
key: "team-hub.ritual.calendar",
|
|
87
|
+
version: "1.0.0",
|
|
88
|
+
title: "Ritual Calendar",
|
|
89
|
+
description: "Calendar of team rituals and events.",
|
|
90
|
+
domain: "team-hub",
|
|
91
|
+
owners: [...OWNERS],
|
|
92
|
+
stability: StabilityEnum.Experimental,
|
|
93
|
+
goal: "Schedule and view team events.",
|
|
94
|
+
context: "Calendar view.",
|
|
95
|
+
tags: ["ritual", "calendar"]
|
|
96
|
+
},
|
|
97
|
+
source: {
|
|
98
|
+
type: "component",
|
|
99
|
+
framework: "react",
|
|
100
|
+
componentKey: "RitualCalendar"
|
|
101
|
+
},
|
|
102
|
+
targets: ["react"]
|
|
103
|
+
});
|
|
104
|
+
var AnnouncementFeedPresentation = definePresentation({
|
|
105
|
+
meta: {
|
|
106
|
+
key: "team-hub.announcement.feed",
|
|
107
|
+
version: "1.0.0",
|
|
108
|
+
title: "Announcement Feed",
|
|
109
|
+
description: "Feed of team announcements.",
|
|
110
|
+
domain: "team-hub",
|
|
111
|
+
owners: [...OWNERS],
|
|
112
|
+
stability: StabilityEnum.Experimental,
|
|
113
|
+
goal: "Broadcast important team news.",
|
|
114
|
+
context: "Dashboard widget or dedicated page.",
|
|
115
|
+
tags: ["announcement", "feed"]
|
|
116
|
+
},
|
|
117
|
+
source: {
|
|
118
|
+
type: "component",
|
|
119
|
+
framework: "react",
|
|
120
|
+
componentKey: "AnnouncementFeed"
|
|
121
|
+
},
|
|
122
|
+
targets: ["react"]
|
|
123
|
+
});
|
|
124
|
+
export {
|
|
125
|
+
TeamDashboardPresentation,
|
|
126
|
+
TaskDetailPresentation,
|
|
127
|
+
TaskBoardPresentation,
|
|
128
|
+
SpaceListPresentation,
|
|
129
|
+
RitualCalendarPresentation,
|
|
130
|
+
AnnouncementFeedPresentation
|
|
131
|
+
};
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
// src/presentations/team-hub.presentation.ts
|
|
2
|
+
import { definePresentation, StabilityEnum } from "@contractspec/lib.contracts";
|
|
3
|
+
var OWNERS = ["@team-hub"];
|
|
4
|
+
var TeamDashboardPresentation = definePresentation({
|
|
5
|
+
meta: {
|
|
6
|
+
key: "team-hub.dashboard",
|
|
7
|
+
version: "1.0.0",
|
|
8
|
+
title: "Team Dashboard",
|
|
9
|
+
description: "Main team hub dashboard.",
|
|
10
|
+
domain: "team-hub",
|
|
11
|
+
owners: [...OWNERS],
|
|
12
|
+
stability: StabilityEnum.Experimental,
|
|
13
|
+
goal: "Central hub for team activity.",
|
|
14
|
+
context: "Landing page for team members.",
|
|
15
|
+
tags: ["dashboard", "team"]
|
|
16
|
+
},
|
|
17
|
+
source: {
|
|
18
|
+
type: "component",
|
|
19
|
+
framework: "react",
|
|
20
|
+
componentKey: "TeamDashboard"
|
|
21
|
+
},
|
|
22
|
+
targets: ["react"]
|
|
23
|
+
});
|
|
24
|
+
var SpaceListPresentation = definePresentation({
|
|
25
|
+
meta: {
|
|
26
|
+
key: "team-hub.space.list",
|
|
27
|
+
version: "1.0.0",
|
|
28
|
+
title: "Space List",
|
|
29
|
+
description: "List of team spaces.",
|
|
30
|
+
domain: "team-hub",
|
|
31
|
+
owners: [...OWNERS],
|
|
32
|
+
stability: StabilityEnum.Experimental,
|
|
33
|
+
goal: "Navigate between team spaces.",
|
|
34
|
+
context: "Sidebar or spaces hub.",
|
|
35
|
+
tags: ["space", "list"]
|
|
36
|
+
},
|
|
37
|
+
source: {
|
|
38
|
+
type: "component",
|
|
39
|
+
framework: "react",
|
|
40
|
+
componentKey: "SpaceList"
|
|
41
|
+
},
|
|
42
|
+
targets: ["react"]
|
|
43
|
+
});
|
|
44
|
+
var TaskBoardPresentation = definePresentation({
|
|
45
|
+
meta: {
|
|
46
|
+
key: "team-hub.task.board",
|
|
47
|
+
version: "1.0.0",
|
|
48
|
+
title: "Task Board",
|
|
49
|
+
description: "Kanban board for team tasks.",
|
|
50
|
+
domain: "team-hub",
|
|
51
|
+
owners: [...OWNERS],
|
|
52
|
+
stability: StabilityEnum.Experimental,
|
|
53
|
+
goal: "Visualize task progress.",
|
|
54
|
+
context: "Project management view.",
|
|
55
|
+
tags: ["task", "board"]
|
|
56
|
+
},
|
|
57
|
+
source: {
|
|
58
|
+
type: "component",
|
|
59
|
+
framework: "react",
|
|
60
|
+
componentKey: "TaskBoard"
|
|
61
|
+
},
|
|
62
|
+
targets: ["react"]
|
|
63
|
+
});
|
|
64
|
+
var TaskDetailPresentation = definePresentation({
|
|
65
|
+
meta: {
|
|
66
|
+
key: "team-hub.task.detail",
|
|
67
|
+
version: "1.0.0",
|
|
68
|
+
title: "Task Detail",
|
|
69
|
+
description: "Detailed view of a task.",
|
|
70
|
+
domain: "team-hub",
|
|
71
|
+
owners: [...OWNERS],
|
|
72
|
+
stability: StabilityEnum.Experimental,
|
|
73
|
+
goal: "View and edit task details.",
|
|
74
|
+
context: "Task modal or page.",
|
|
75
|
+
tags: ["task", "detail"]
|
|
76
|
+
},
|
|
77
|
+
source: {
|
|
78
|
+
type: "component",
|
|
79
|
+
framework: "react",
|
|
80
|
+
componentKey: "TaskDetail"
|
|
81
|
+
},
|
|
82
|
+
targets: ["react"]
|
|
83
|
+
});
|
|
84
|
+
var RitualCalendarPresentation = definePresentation({
|
|
85
|
+
meta: {
|
|
86
|
+
key: "team-hub.ritual.calendar",
|
|
87
|
+
version: "1.0.0",
|
|
88
|
+
title: "Ritual Calendar",
|
|
89
|
+
description: "Calendar of team rituals and events.",
|
|
90
|
+
domain: "team-hub",
|
|
91
|
+
owners: [...OWNERS],
|
|
92
|
+
stability: StabilityEnum.Experimental,
|
|
93
|
+
goal: "Schedule and view team events.",
|
|
94
|
+
context: "Calendar view.",
|
|
95
|
+
tags: ["ritual", "calendar"]
|
|
96
|
+
},
|
|
97
|
+
source: {
|
|
98
|
+
type: "component",
|
|
99
|
+
framework: "react",
|
|
100
|
+
componentKey: "RitualCalendar"
|
|
101
|
+
},
|
|
102
|
+
targets: ["react"]
|
|
103
|
+
});
|
|
104
|
+
var AnnouncementFeedPresentation = definePresentation({
|
|
105
|
+
meta: {
|
|
106
|
+
key: "team-hub.announcement.feed",
|
|
107
|
+
version: "1.0.0",
|
|
108
|
+
title: "Announcement Feed",
|
|
109
|
+
description: "Feed of team announcements.",
|
|
110
|
+
domain: "team-hub",
|
|
111
|
+
owners: [...OWNERS],
|
|
112
|
+
stability: StabilityEnum.Experimental,
|
|
113
|
+
goal: "Broadcast important team news.",
|
|
114
|
+
context: "Dashboard widget or dedicated page.",
|
|
115
|
+
tags: ["announcement", "feed"]
|
|
116
|
+
},
|
|
117
|
+
source: {
|
|
118
|
+
type: "component",
|
|
119
|
+
framework: "react",
|
|
120
|
+
componentKey: "AnnouncementFeed"
|
|
121
|
+
},
|
|
122
|
+
targets: ["react"]
|
|
123
|
+
});
|
|
124
|
+
export {
|
|
125
|
+
TeamDashboardPresentation,
|
|
126
|
+
TaskDetailPresentation,
|
|
127
|
+
TaskBoardPresentation,
|
|
128
|
+
SpaceListPresentation,
|
|
129
|
+
RitualCalendarPresentation,
|
|
130
|
+
AnnouncementFeedPresentation
|
|
131
|
+
};
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
// src/presentations.ts
|
|
2
|
+
import { StabilityEnum } from "@contractspec/lib.contracts";
|
|
3
|
+
var TeamDashboardPresentation = {
|
|
4
|
+
meta: {
|
|
5
|
+
key: "team-hub.dashboard",
|
|
6
|
+
version: "1.0.0",
|
|
7
|
+
title: "Team Dashboard",
|
|
8
|
+
description: "Team hub dashboard with activity overview",
|
|
9
|
+
domain: "collaboration",
|
|
10
|
+
owners: ["@team-hub"],
|
|
11
|
+
tags: ["team", "dashboard"],
|
|
12
|
+
stability: StabilityEnum.Experimental,
|
|
13
|
+
goal: "High-level overview of team activity",
|
|
14
|
+
context: "Team home page"
|
|
15
|
+
},
|
|
16
|
+
source: {
|
|
17
|
+
type: "component",
|
|
18
|
+
framework: "react",
|
|
19
|
+
componentKey: "TeamDashboard"
|
|
20
|
+
},
|
|
21
|
+
targets: ["react", "markdown"],
|
|
22
|
+
policy: {
|
|
23
|
+
flags: ["team.dashboard.enabled"]
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
var SpaceListPresentation = {
|
|
27
|
+
meta: {
|
|
28
|
+
key: "team-hub.space.list",
|
|
29
|
+
version: "1.0.0",
|
|
30
|
+
title: "Space List",
|
|
31
|
+
description: "List of team spaces",
|
|
32
|
+
domain: "collaboration",
|
|
33
|
+
owners: ["@team-hub"],
|
|
34
|
+
tags: ["team", "spaces", "list"],
|
|
35
|
+
stability: StabilityEnum.Experimental,
|
|
36
|
+
goal: "Browse and manage team spaces",
|
|
37
|
+
context: "Team navigation"
|
|
38
|
+
},
|
|
39
|
+
source: {
|
|
40
|
+
type: "component",
|
|
41
|
+
framework: "react",
|
|
42
|
+
componentKey: "SpaceList"
|
|
43
|
+
},
|
|
44
|
+
targets: ["react", "markdown"],
|
|
45
|
+
policy: {
|
|
46
|
+
flags: ["team.spaces.enabled"]
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var TaskBoardPresentation = {
|
|
50
|
+
meta: {
|
|
51
|
+
key: "team-hub.task.board",
|
|
52
|
+
version: "1.0.0",
|
|
53
|
+
title: "Task Board",
|
|
54
|
+
description: "Task board with kanban view",
|
|
55
|
+
domain: "collaboration",
|
|
56
|
+
owners: ["@team-hub"],
|
|
57
|
+
tags: ["team", "tasks", "board", "kanban"],
|
|
58
|
+
stability: StabilityEnum.Experimental,
|
|
59
|
+
goal: "Visual task management",
|
|
60
|
+
context: "Team task workflows"
|
|
61
|
+
},
|
|
62
|
+
source: {
|
|
63
|
+
type: "component",
|
|
64
|
+
framework: "react",
|
|
65
|
+
componentKey: "TaskBoard"
|
|
66
|
+
},
|
|
67
|
+
targets: ["react"],
|
|
68
|
+
policy: {
|
|
69
|
+
flags: ["team.tasks.enabled"]
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
var TaskDetailPresentation = {
|
|
73
|
+
meta: {
|
|
74
|
+
key: "team-hub.task.detail",
|
|
75
|
+
version: "1.0.0",
|
|
76
|
+
title: "Task Details",
|
|
77
|
+
description: "Task detail with comments and history",
|
|
78
|
+
domain: "collaboration",
|
|
79
|
+
owners: ["@team-hub"],
|
|
80
|
+
tags: ["team", "task", "detail"],
|
|
81
|
+
stability: StabilityEnum.Experimental,
|
|
82
|
+
goal: "Detailed task view with collaboration",
|
|
83
|
+
context: "Task inspection and updates"
|
|
84
|
+
},
|
|
85
|
+
source: {
|
|
86
|
+
type: "component",
|
|
87
|
+
framework: "react",
|
|
88
|
+
componentKey: "TaskDetail"
|
|
89
|
+
},
|
|
90
|
+
targets: ["react", "markdown"],
|
|
91
|
+
policy: {
|
|
92
|
+
flags: ["team.tasks.enabled"]
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
var RitualCalendarPresentation = {
|
|
96
|
+
meta: {
|
|
97
|
+
key: "team-hub.ritual.calendar",
|
|
98
|
+
version: "1.0.0",
|
|
99
|
+
title: "Ritual Calendar",
|
|
100
|
+
description: "Calendar view of team rituals",
|
|
101
|
+
domain: "collaboration",
|
|
102
|
+
owners: ["@team-hub"],
|
|
103
|
+
tags: ["team", "rituals", "calendar"],
|
|
104
|
+
stability: StabilityEnum.Experimental,
|
|
105
|
+
goal: "Plan and view recurring team rituals",
|
|
106
|
+
context: "Team scheduling"
|
|
107
|
+
},
|
|
108
|
+
source: {
|
|
109
|
+
type: "component",
|
|
110
|
+
framework: "react",
|
|
111
|
+
componentKey: "RitualCalendar"
|
|
112
|
+
},
|
|
113
|
+
targets: ["react"],
|
|
114
|
+
policy: {
|
|
115
|
+
flags: ["team.rituals.enabled"]
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
var AnnouncementFeedPresentation = {
|
|
119
|
+
meta: {
|
|
120
|
+
key: "team-hub.announcement.feed",
|
|
121
|
+
version: "1.0.0",
|
|
122
|
+
title: "Announcement Feed",
|
|
123
|
+
description: "Feed of team announcements",
|
|
124
|
+
domain: "collaboration",
|
|
125
|
+
owners: ["@team-hub"],
|
|
126
|
+
tags: ["team", "announcements", "feed"],
|
|
127
|
+
stability: StabilityEnum.Experimental,
|
|
128
|
+
goal: "Communicate updates to the team",
|
|
129
|
+
context: "Team communication"
|
|
130
|
+
},
|
|
131
|
+
source: {
|
|
132
|
+
type: "component",
|
|
133
|
+
framework: "react",
|
|
134
|
+
componentKey: "AnnouncementFeed"
|
|
135
|
+
},
|
|
136
|
+
targets: ["react", "markdown"],
|
|
137
|
+
policy: {
|
|
138
|
+
flags: ["team.announcements.enabled"]
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
export {
|
|
142
|
+
TeamDashboardPresentation,
|
|
143
|
+
TaskDetailPresentation,
|
|
144
|
+
TaskBoardPresentation,
|
|
145
|
+
SpaceListPresentation,
|
|
146
|
+
RitualCalendarPresentation,
|
|
147
|
+
AnnouncementFeedPresentation
|
|
148
|
+
};
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// src/ritual/ritual.schema.ts
|
|
2
|
+
import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
|
|
3
|
+
var RitualModel = defineSchemaModel({
|
|
4
|
+
name: "Ritual",
|
|
5
|
+
description: "Recurring ritual",
|
|
6
|
+
fields: {
|
|
7
|
+
id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
8
|
+
spaceId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
9
|
+
title: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
10
|
+
cadence: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
11
|
+
dayOfWeek: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
12
|
+
time: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
var ScheduleRitualInputModel = defineSchemaModel({
|
|
16
|
+
name: "ScheduleRitualInput",
|
|
17
|
+
description: "Create a ritual",
|
|
18
|
+
fields: {
|
|
19
|
+
spaceId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
20
|
+
title: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
21
|
+
cadence: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
22
|
+
dayOfWeek: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
23
|
+
time: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
24
|
+
facilitatorId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
var LogRitualOccurrenceInputModel = defineSchemaModel({
|
|
28
|
+
name: "LogRitualOccurrenceInput",
|
|
29
|
+
description: "Record ritual occurrence results",
|
|
30
|
+
fields: {
|
|
31
|
+
ritualId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
32
|
+
scheduledFor: { type: ScalarTypeEnum.DateTime(), isOptional: false },
|
|
33
|
+
status: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
34
|
+
summary: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// src/ritual/ritual.operations.ts
|
|
39
|
+
import { defineCommand } from "@contractspec/lib.contracts";
|
|
40
|
+
var OWNERS = ["@examples.team-hub"];
|
|
41
|
+
var ScheduleRitualContract = defineCommand({
|
|
42
|
+
meta: {
|
|
43
|
+
key: "team.ritual.schedule",
|
|
44
|
+
version: "1.0.0",
|
|
45
|
+
stability: "stable",
|
|
46
|
+
owners: [...OWNERS],
|
|
47
|
+
tags: ["team-hub", "ritual", "schedule"],
|
|
48
|
+
description: "Schedule a recurring ritual.",
|
|
49
|
+
goal: "Team ceremonies.",
|
|
50
|
+
context: "Ritual management."
|
|
51
|
+
},
|
|
52
|
+
io: {
|
|
53
|
+
input: ScheduleRitualInputModel,
|
|
54
|
+
output: RitualModel
|
|
55
|
+
},
|
|
56
|
+
policy: { auth: "user" },
|
|
57
|
+
acceptance: {
|
|
58
|
+
scenarios: [
|
|
59
|
+
{
|
|
60
|
+
key: "schedule-ritual-happy-path",
|
|
61
|
+
given: ["Space exists"],
|
|
62
|
+
when: ["User schedules ritual"],
|
|
63
|
+
then: ["Ritual is scheduled"]
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
examples: [
|
|
67
|
+
{
|
|
68
|
+
key: "schedule-standup",
|
|
69
|
+
input: {
|
|
70
|
+
spaceId: "space-123",
|
|
71
|
+
name: "Daily Standup",
|
|
72
|
+
interval: "daily",
|
|
73
|
+
time: "10:00"
|
|
74
|
+
},
|
|
75
|
+
output: { id: "rit-123", status: "active" }
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
var LogRitualOccurrenceContract = defineCommand({
|
|
81
|
+
meta: {
|
|
82
|
+
key: "team.ritual.logOccurrence",
|
|
83
|
+
version: "1.0.0",
|
|
84
|
+
stability: "stable",
|
|
85
|
+
owners: [...OWNERS],
|
|
86
|
+
tags: ["team-hub", "ritual", "log"],
|
|
87
|
+
description: "Log a ritual occurrence.",
|
|
88
|
+
goal: "Record ritual history.",
|
|
89
|
+
context: "Ritual management."
|
|
90
|
+
},
|
|
91
|
+
io: {
|
|
92
|
+
input: LogRitualOccurrenceInputModel,
|
|
93
|
+
output: RitualModel
|
|
94
|
+
},
|
|
95
|
+
policy: { auth: "user" },
|
|
96
|
+
acceptance: {
|
|
97
|
+
scenarios: [
|
|
98
|
+
{
|
|
99
|
+
key: "log-occurrence-happy-path",
|
|
100
|
+
given: ["Ritual is scheduled"],
|
|
101
|
+
when: ["User logs occurrence"],
|
|
102
|
+
then: ["Occurrence is recorded"]
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
examples: [
|
|
106
|
+
{
|
|
107
|
+
key: "log-standup",
|
|
108
|
+
input: {
|
|
109
|
+
ritualId: "rit-123",
|
|
110
|
+
date: "2025-01-20",
|
|
111
|
+
attendees: ["user-1", "user-2"]
|
|
112
|
+
},
|
|
113
|
+
output: { id: "rit-123", lastOccurrence: "2025-01-20" }
|
|
114
|
+
}
|
|
115
|
+
]
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
export {
|
|
119
|
+
ScheduleRitualInputModel,
|
|
120
|
+
ScheduleRitualContract,
|
|
121
|
+
RitualModel,
|
|
122
|
+
LogRitualOccurrenceInputModel,
|
|
123
|
+
LogRitualOccurrenceContract
|
|
124
|
+
};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// src/ritual/ritual.schema.ts
|
|
2
|
+
import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
|
|
3
|
+
var RitualModel = defineSchemaModel({
|
|
4
|
+
name: "Ritual",
|
|
5
|
+
description: "Recurring ritual",
|
|
6
|
+
fields: {
|
|
7
|
+
id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
8
|
+
spaceId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
9
|
+
title: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
10
|
+
cadence: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
11
|
+
dayOfWeek: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
12
|
+
time: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
var ScheduleRitualInputModel = defineSchemaModel({
|
|
16
|
+
name: "ScheduleRitualInput",
|
|
17
|
+
description: "Create a ritual",
|
|
18
|
+
fields: {
|
|
19
|
+
spaceId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
20
|
+
title: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
21
|
+
cadence: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
22
|
+
dayOfWeek: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
23
|
+
time: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
24
|
+
facilitatorId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
var LogRitualOccurrenceInputModel = defineSchemaModel({
|
|
28
|
+
name: "LogRitualOccurrenceInput",
|
|
29
|
+
description: "Record ritual occurrence results",
|
|
30
|
+
fields: {
|
|
31
|
+
ritualId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
32
|
+
scheduledFor: { type: ScalarTypeEnum.DateTime(), isOptional: false },
|
|
33
|
+
status: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
34
|
+
summary: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// src/ritual/ritual.operations.ts
|
|
39
|
+
import { defineCommand } from "@contractspec/lib.contracts";
|
|
40
|
+
var OWNERS = ["@examples.team-hub"];
|
|
41
|
+
var ScheduleRitualContract = defineCommand({
|
|
42
|
+
meta: {
|
|
43
|
+
key: "team.ritual.schedule",
|
|
44
|
+
version: "1.0.0",
|
|
45
|
+
stability: "stable",
|
|
46
|
+
owners: [...OWNERS],
|
|
47
|
+
tags: ["team-hub", "ritual", "schedule"],
|
|
48
|
+
description: "Schedule a recurring ritual.",
|
|
49
|
+
goal: "Team ceremonies.",
|
|
50
|
+
context: "Ritual management."
|
|
51
|
+
},
|
|
52
|
+
io: {
|
|
53
|
+
input: ScheduleRitualInputModel,
|
|
54
|
+
output: RitualModel
|
|
55
|
+
},
|
|
56
|
+
policy: { auth: "user" },
|
|
57
|
+
acceptance: {
|
|
58
|
+
scenarios: [
|
|
59
|
+
{
|
|
60
|
+
key: "schedule-ritual-happy-path",
|
|
61
|
+
given: ["Space exists"],
|
|
62
|
+
when: ["User schedules ritual"],
|
|
63
|
+
then: ["Ritual is scheduled"]
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
examples: [
|
|
67
|
+
{
|
|
68
|
+
key: "schedule-standup",
|
|
69
|
+
input: {
|
|
70
|
+
spaceId: "space-123",
|
|
71
|
+
name: "Daily Standup",
|
|
72
|
+
interval: "daily",
|
|
73
|
+
time: "10:00"
|
|
74
|
+
},
|
|
75
|
+
output: { id: "rit-123", status: "active" }
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
var LogRitualOccurrenceContract = defineCommand({
|
|
81
|
+
meta: {
|
|
82
|
+
key: "team.ritual.logOccurrence",
|
|
83
|
+
version: "1.0.0",
|
|
84
|
+
stability: "stable",
|
|
85
|
+
owners: [...OWNERS],
|
|
86
|
+
tags: ["team-hub", "ritual", "log"],
|
|
87
|
+
description: "Log a ritual occurrence.",
|
|
88
|
+
goal: "Record ritual history.",
|
|
89
|
+
context: "Ritual management."
|
|
90
|
+
},
|
|
91
|
+
io: {
|
|
92
|
+
input: LogRitualOccurrenceInputModel,
|
|
93
|
+
output: RitualModel
|
|
94
|
+
},
|
|
95
|
+
policy: { auth: "user" },
|
|
96
|
+
acceptance: {
|
|
97
|
+
scenarios: [
|
|
98
|
+
{
|
|
99
|
+
key: "log-occurrence-happy-path",
|
|
100
|
+
given: ["Ritual is scheduled"],
|
|
101
|
+
when: ["User logs occurrence"],
|
|
102
|
+
then: ["Occurrence is recorded"]
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
examples: [
|
|
106
|
+
{
|
|
107
|
+
key: "log-standup",
|
|
108
|
+
input: {
|
|
109
|
+
ritualId: "rit-123",
|
|
110
|
+
date: "2025-01-20",
|
|
111
|
+
attendees: ["user-1", "user-2"]
|
|
112
|
+
},
|
|
113
|
+
output: { id: "rit-123", lastOccurrence: "2025-01-20" }
|
|
114
|
+
}
|
|
115
|
+
]
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
export {
|
|
119
|
+
ScheduleRitualContract,
|
|
120
|
+
LogRitualOccurrenceContract
|
|
121
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// src/ritual/ritual.schema.ts
|
|
2
|
+
import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
|
|
3
|
+
var RitualModel = defineSchemaModel({
|
|
4
|
+
name: "Ritual",
|
|
5
|
+
description: "Recurring ritual",
|
|
6
|
+
fields: {
|
|
7
|
+
id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
8
|
+
spaceId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
9
|
+
title: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
10
|
+
cadence: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
11
|
+
dayOfWeek: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
12
|
+
time: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
var ScheduleRitualInputModel = defineSchemaModel({
|
|
16
|
+
name: "ScheduleRitualInput",
|
|
17
|
+
description: "Create a ritual",
|
|
18
|
+
fields: {
|
|
19
|
+
spaceId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
20
|
+
title: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
21
|
+
cadence: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
22
|
+
dayOfWeek: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
23
|
+
time: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
24
|
+
facilitatorId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
var LogRitualOccurrenceInputModel = defineSchemaModel({
|
|
28
|
+
name: "LogRitualOccurrenceInput",
|
|
29
|
+
description: "Record ritual occurrence results",
|
|
30
|
+
fields: {
|
|
31
|
+
ritualId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
32
|
+
scheduledFor: { type: ScalarTypeEnum.DateTime(), isOptional: false },
|
|
33
|
+
status: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
34
|
+
summary: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
export {
|
|
38
|
+
ScheduleRitualInputModel,
|
|
39
|
+
RitualModel,
|
|
40
|
+
LogRitualOccurrenceInputModel
|
|
41
|
+
};
|