@contractspec/example.crm-pipeline 1.57.0 → 1.59.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.
Files changed (259) hide show
  1. package/.turbo/turbo-build.log +148 -164
  2. package/.turbo/turbo-prebuild.log +1 -0
  3. package/CHANGELOG.md +39 -0
  4. package/dist/browser/crm-pipeline.feature.js +75 -0
  5. package/dist/browser/deal/deal.enum.js +18 -0
  6. package/dist/browser/deal/deal.operation.js +396 -0
  7. package/dist/browser/deal/deal.schema.js +141 -0
  8. package/dist/browser/deal/deal.test-spec.js +58 -0
  9. package/dist/browser/deal/index.js +408 -0
  10. package/dist/browser/docs/crm-pipeline.docblock.js +113 -0
  11. package/dist/browser/docs/index.js +113 -0
  12. package/dist/browser/entities/company.entity.js +52 -0
  13. package/dist/browser/entities/contact.entity.js +66 -0
  14. package/dist/browser/entities/deal.entity.js +107 -0
  15. package/dist/browser/entities/index.js +343 -0
  16. package/dist/browser/entities/task.entity.js +99 -0
  17. package/dist/browser/events/contact.event.js +31 -0
  18. package/dist/browser/events/deal.event.js +101 -0
  19. package/dist/browser/events/index.js +158 -0
  20. package/dist/browser/events/task.event.js +28 -0
  21. package/dist/browser/example.js +39 -0
  22. package/dist/browser/handlers/crm.handlers.js +160 -0
  23. package/dist/browser/handlers/deal.handlers.js +293 -0
  24. package/dist/browser/handlers/index.js +456 -0
  25. package/dist/browser/handlers/mock-data.js +165 -0
  26. package/dist/browser/index.js +3279 -0
  27. package/dist/browser/operations/index.js +407 -0
  28. package/dist/browser/presentations/dashboard.presentation.js +52 -0
  29. package/dist/browser/presentations/index.js +284 -0
  30. package/dist/browser/presentations/pipeline.presentation.js +233 -0
  31. package/dist/browser/seeders/index.js +22 -0
  32. package/dist/browser/shared/overlay-types.js +0 -0
  33. package/dist/browser/ui/CrmDashboard.js +1325 -0
  34. package/dist/browser/ui/CrmDealCard.js +50 -0
  35. package/dist/browser/ui/CrmPipelineBoard.js +160 -0
  36. package/dist/browser/ui/hooks/index.js +186 -0
  37. package/dist/browser/ui/hooks/useDealList.js +84 -0
  38. package/dist/browser/ui/hooks/useDealMutations.js +100 -0
  39. package/dist/browser/ui/index.js +1972 -0
  40. package/dist/browser/ui/modals/CreateDealModal.js +211 -0
  41. package/dist/browser/ui/modals/DealActionsModal.js +428 -0
  42. package/dist/browser/ui/modals/index.js +638 -0
  43. package/dist/browser/ui/overlays/demo-overlays.js +55 -0
  44. package/dist/browser/ui/overlays/index.js +55 -0
  45. package/dist/browser/ui/renderers/index.js +827 -0
  46. package/dist/browser/ui/renderers/pipeline.markdown.js +564 -0
  47. package/dist/browser/ui/renderers/pipeline.renderer.js +264 -0
  48. package/dist/crm-pipeline.feature.d.ts +1 -6
  49. package/dist/crm-pipeline.feature.d.ts.map +1 -1
  50. package/dist/crm-pipeline.feature.js +74 -164
  51. package/dist/deal/deal.enum.d.ts +2 -7
  52. package/dist/deal/deal.enum.d.ts.map +1 -1
  53. package/dist/deal/deal.enum.js +16 -22
  54. package/dist/deal/deal.operation.d.ts +444 -450
  55. package/dist/deal/deal.operation.d.ts.map +1 -1
  56. package/dist/deal/deal.operation.js +390 -263
  57. package/dist/deal/deal.schema.d.ts +251 -256
  58. package/dist/deal/deal.schema.d.ts.map +1 -1
  59. package/dist/deal/deal.schema.js +131 -275
  60. package/dist/deal/deal.test-spec.d.ts +2 -7
  61. package/dist/deal/deal.test-spec.d.ts.map +1 -1
  62. package/dist/deal/deal.test-spec.js +56 -62
  63. package/dist/deal/index.d.ts +7 -4
  64. package/dist/deal/index.d.ts.map +1 -0
  65. package/dist/deal/index.js +408 -4
  66. package/dist/docs/crm-pipeline.docblock.d.ts +2 -1
  67. package/dist/docs/crm-pipeline.docblock.d.ts.map +1 -0
  68. package/dist/docs/crm-pipeline.docblock.js +45 -51
  69. package/dist/docs/index.d.ts +2 -1
  70. package/dist/docs/index.d.ts.map +1 -0
  71. package/dist/docs/index.js +114 -1
  72. package/dist/entities/company.entity.d.ts +27 -32
  73. package/dist/entities/company.entity.d.ts.map +1 -1
  74. package/dist/entities/company.entity.js +51 -61
  75. package/dist/entities/contact.entity.d.ts +31 -36
  76. package/dist/entities/contact.entity.d.ts.map +1 -1
  77. package/dist/entities/contact.entity.js +65 -76
  78. package/dist/entities/deal.entity.d.ts +52 -57
  79. package/dist/entities/deal.entity.d.ts.map +1 -1
  80. package/dist/entities/deal.entity.js +104 -116
  81. package/dist/entities/index.d.ts +6 -10
  82. package/dist/entities/index.d.ts.map +1 -1
  83. package/dist/entities/index.js +342 -31
  84. package/dist/entities/task.entity.d.ts +42 -47
  85. package/dist/entities/task.entity.d.ts.map +1 -1
  86. package/dist/entities/task.entity.js +95 -124
  87. package/dist/events/contact.event.d.ts +21 -27
  88. package/dist/events/contact.event.d.ts.map +1 -1
  89. package/dist/events/contact.event.js +29 -42
  90. package/dist/events/deal.event.d.ts +100 -106
  91. package/dist/events/deal.event.d.ts.map +1 -1
  92. package/dist/events/deal.event.js +93 -163
  93. package/dist/events/index.d.ts +4 -4
  94. package/dist/events/index.d.ts.map +1 -0
  95. package/dist/events/index.js +158 -4
  96. package/dist/events/task.event.d.ts +21 -27
  97. package/dist/events/task.event.d.ts.map +1 -1
  98. package/dist/events/task.event.js +26 -42
  99. package/dist/example.d.ts +2 -6
  100. package/dist/example.d.ts.map +1 -1
  101. package/dist/example.js +38 -50
  102. package/dist/handlers/crm.handlers.d.ts +80 -78
  103. package/dist/handlers/crm.handlers.d.ts.map +1 -1
  104. package/dist/handlers/crm.handlers.js +155 -166
  105. package/dist/handlers/deal.handlers.d.ts +58 -63
  106. package/dist/handlers/deal.handlers.d.ts.map +1 -1
  107. package/dist/handlers/deal.handlers.js +279 -105
  108. package/dist/handlers/index.d.ts +10 -4
  109. package/dist/handlers/index.d.ts.map +1 -0
  110. package/dist/handlers/index.js +456 -4
  111. package/dist/handlers/mock-data.d.ts +38 -41
  112. package/dist/handlers/mock-data.d.ts.map +1 -1
  113. package/dist/handlers/mock-data.js +162 -184
  114. package/dist/index.d.ts +13 -42
  115. package/dist/index.d.ts.map +1 -1
  116. package/dist/index.js +3277 -53
  117. package/dist/node/crm-pipeline.feature.js +75 -0
  118. package/dist/node/deal/deal.enum.js +18 -0
  119. package/dist/node/deal/deal.operation.js +396 -0
  120. package/dist/node/deal/deal.schema.js +141 -0
  121. package/dist/node/deal/deal.test-spec.js +58 -0
  122. package/dist/node/deal/index.js +408 -0
  123. package/dist/node/docs/crm-pipeline.docblock.js +113 -0
  124. package/dist/node/docs/index.js +113 -0
  125. package/dist/node/entities/company.entity.js +52 -0
  126. package/dist/node/entities/contact.entity.js +66 -0
  127. package/dist/node/entities/deal.entity.js +107 -0
  128. package/dist/node/entities/index.js +343 -0
  129. package/dist/node/entities/task.entity.js +99 -0
  130. package/dist/node/events/contact.event.js +31 -0
  131. package/dist/node/events/deal.event.js +101 -0
  132. package/dist/node/events/index.js +158 -0
  133. package/dist/node/events/task.event.js +28 -0
  134. package/dist/node/example.js +39 -0
  135. package/dist/node/handlers/crm.handlers.js +160 -0
  136. package/dist/node/handlers/deal.handlers.js +293 -0
  137. package/dist/node/handlers/index.js +456 -0
  138. package/dist/node/handlers/mock-data.js +165 -0
  139. package/dist/node/index.js +3279 -0
  140. package/dist/node/operations/index.js +407 -0
  141. package/dist/node/presentations/dashboard.presentation.js +52 -0
  142. package/dist/node/presentations/index.js +284 -0
  143. package/dist/node/presentations/pipeline.presentation.js +233 -0
  144. package/dist/node/seeders/index.js +22 -0
  145. package/dist/node/shared/overlay-types.js +0 -0
  146. package/dist/node/ui/CrmDashboard.js +1325 -0
  147. package/dist/node/ui/CrmDealCard.js +50 -0
  148. package/dist/node/ui/CrmPipelineBoard.js +160 -0
  149. package/dist/node/ui/hooks/index.js +186 -0
  150. package/dist/node/ui/hooks/useDealList.js +84 -0
  151. package/dist/node/ui/hooks/useDealMutations.js +100 -0
  152. package/dist/node/ui/index.js +1972 -0
  153. package/dist/node/ui/modals/CreateDealModal.js +211 -0
  154. package/dist/node/ui/modals/DealActionsModal.js +428 -0
  155. package/dist/node/ui/modals/index.js +638 -0
  156. package/dist/node/ui/overlays/demo-overlays.js +55 -0
  157. package/dist/node/ui/overlays/index.js +55 -0
  158. package/dist/node/ui/renderers/index.js +827 -0
  159. package/dist/node/ui/renderers/pipeline.markdown.js +564 -0
  160. package/dist/node/ui/renderers/pipeline.renderer.js +264 -0
  161. package/dist/operations/index.d.ts +2 -5
  162. package/dist/operations/index.d.ts.map +1 -0
  163. package/dist/operations/index.js +407 -5
  164. package/dist/presentations/dashboard.presentation.d.ts +2 -7
  165. package/dist/presentations/dashboard.presentation.d.ts.map +1 -1
  166. package/dist/presentations/dashboard.presentation.js +51 -60
  167. package/dist/presentations/index.d.ts +3 -3
  168. package/dist/presentations/index.d.ts.map +1 -0
  169. package/dist/presentations/index.js +284 -3
  170. package/dist/presentations/pipeline.presentation.d.ts +4 -9
  171. package/dist/presentations/pipeline.presentation.d.ts.map +1 -1
  172. package/dist/presentations/pipeline.presentation.js +228 -116
  173. package/dist/seeders/index.d.ts +4 -8
  174. package/dist/seeders/index.d.ts.map +1 -1
  175. package/dist/seeders/index.js +21 -45
  176. package/dist/shared/overlay-types.d.ts +25 -28
  177. package/dist/shared/overlay-types.d.ts.map +1 -1
  178. package/dist/shared/overlay-types.js +1 -0
  179. package/dist/ui/CrmDashboard.d.ts +1 -6
  180. package/dist/ui/CrmDashboard.d.ts.map +1 -1
  181. package/dist/ui/CrmDashboard.js +1318 -296
  182. package/dist/ui/CrmDealCard.d.ts +8 -12
  183. package/dist/ui/CrmDealCard.d.ts.map +1 -1
  184. package/dist/ui/CrmDealCard.js +47 -45
  185. package/dist/ui/CrmPipelineBoard.d.ts +11 -20
  186. package/dist/ui/CrmPipelineBoard.d.ts.map +1 -1
  187. package/dist/ui/CrmPipelineBoard.js +157 -94
  188. package/dist/ui/hooks/index.d.ts +3 -3
  189. package/dist/ui/hooks/index.d.ts.map +1 -0
  190. package/dist/ui/hooks/index.js +185 -4
  191. package/dist/ui/hooks/useDealList.d.ts +28 -32
  192. package/dist/ui/hooks/useDealList.d.ts.map +1 -1
  193. package/dist/ui/hooks/useDealList.js +81 -90
  194. package/dist/ui/hooks/useDealMutations.d.ts +18 -22
  195. package/dist/ui/hooks/useDealMutations.d.ts.map +1 -1
  196. package/dist/ui/hooks/useDealMutations.js +97 -155
  197. package/dist/ui/index.d.ts +8 -14
  198. package/dist/ui/index.d.ts.map +1 -0
  199. package/dist/ui/index.js +1973 -15
  200. package/dist/ui/modals/CreateDealModal.d.ts +19 -29
  201. package/dist/ui/modals/CreateDealModal.d.ts.map +1 -1
  202. package/dist/ui/modals/CreateDealModal.js +209 -180
  203. package/dist/ui/modals/DealActionsModal.d.ts +31 -44
  204. package/dist/ui/modals/DealActionsModal.d.ts.map +1 -1
  205. package/dist/ui/modals/DealActionsModal.js +424 -367
  206. package/dist/ui/modals/index.d.ts +3 -3
  207. package/dist/ui/modals/index.d.ts.map +1 -0
  208. package/dist/ui/modals/index.js +638 -3
  209. package/dist/ui/overlays/demo-overlays.d.ts +10 -8
  210. package/dist/ui/overlays/demo-overlays.d.ts.map +1 -1
  211. package/dist/ui/overlays/demo-overlays.js +54 -66
  212. package/dist/ui/overlays/index.d.ts +2 -2
  213. package/dist/ui/overlays/index.d.ts.map +1 -0
  214. package/dist/ui/overlays/index.js +56 -3
  215. package/dist/ui/renderers/index.d.ts +3 -3
  216. package/dist/ui/renderers/index.d.ts.map +1 -0
  217. package/dist/ui/renderers/index.js +827 -3
  218. package/dist/ui/renderers/pipeline.markdown.d.ts +12 -11
  219. package/dist/ui/renderers/pipeline.markdown.d.ts.map +1 -1
  220. package/dist/ui/renderers/pipeline.markdown.js +560 -114
  221. package/dist/ui/renderers/pipeline.renderer.d.ts +9 -7
  222. package/dist/ui/renderers/pipeline.renderer.d.ts.map +1 -1
  223. package/dist/ui/renderers/pipeline.renderer.js +261 -24
  224. package/package.json +476 -90
  225. package/tsdown.config.js +1 -2
  226. package/.turbo/turbo-build$colon$bundle.log +0 -164
  227. package/dist/crm-pipeline.feature.js.map +0 -1
  228. package/dist/deal/deal.enum.js.map +0 -1
  229. package/dist/deal/deal.operation.js.map +0 -1
  230. package/dist/deal/deal.schema.js.map +0 -1
  231. package/dist/deal/deal.test-spec.js.map +0 -1
  232. package/dist/docs/crm-pipeline.docblock.js.map +0 -1
  233. package/dist/entities/company.entity.js.map +0 -1
  234. package/dist/entities/contact.entity.js.map +0 -1
  235. package/dist/entities/deal.entity.js.map +0 -1
  236. package/dist/entities/index.js.map +0 -1
  237. package/dist/entities/task.entity.js.map +0 -1
  238. package/dist/events/contact.event.js.map +0 -1
  239. package/dist/events/deal.event.js.map +0 -1
  240. package/dist/events/task.event.js.map +0 -1
  241. package/dist/example.js.map +0 -1
  242. package/dist/handlers/crm.handlers.js.map +0 -1
  243. package/dist/handlers/deal.handlers.js.map +0 -1
  244. package/dist/handlers/mock-data.js.map +0 -1
  245. package/dist/index.js.map +0 -1
  246. package/dist/presentations/dashboard.presentation.js.map +0 -1
  247. package/dist/presentations/pipeline.presentation.js.map +0 -1
  248. package/dist/seeders/index.js.map +0 -1
  249. package/dist/ui/CrmDashboard.js.map +0 -1
  250. package/dist/ui/CrmDealCard.js.map +0 -1
  251. package/dist/ui/CrmPipelineBoard.js.map +0 -1
  252. package/dist/ui/hooks/useDealList.js.map +0 -1
  253. package/dist/ui/hooks/useDealMutations.js.map +0 -1
  254. package/dist/ui/modals/CreateDealModal.js.map +0 -1
  255. package/dist/ui/modals/DealActionsModal.js.map +0 -1
  256. package/dist/ui/overlays/demo-overlays.js.map +0 -1
  257. package/dist/ui/renderers/pipeline.markdown.js.map +0 -1
  258. package/dist/ui/renderers/pipeline.renderer.js.map +0 -1
  259. package/tsconfig.tsbuildinfo +0 -1
@@ -1,122 +1,234 @@
1
- import { DealModel } from "../deal/deal.schema.js";
2
- import { StabilityEnum, definePresentation } from "@contractspec/lib.contracts";
1
+ // @bun
2
+ // src/deal/deal.enum.ts
3
+ import { defineEnum } from "@contractspec/lib.schema";
4
+ var DealStatusEnum = defineEnum("DealStatus", [
5
+ "OPEN",
6
+ "WON",
7
+ "LOST",
8
+ "STALE"
9
+ ]);
10
+ var DealStatusFilterEnum = defineEnum("DealStatusFilter", [
11
+ "OPEN",
12
+ "WON",
13
+ "LOST",
14
+ "all"
15
+ ]);
3
16
 
4
- //#region src/presentations/pipeline.presentation.ts
5
- /**
6
- * Pipeline Presentation Descriptors
7
- */
8
- /**
9
- * Kanban board presentation for the sales pipeline.
10
- */
11
- const PipelineKanbanPresentation = definePresentation({
12
- meta: {
13
- key: "crm.pipeline.kanban",
14
- version: "1.0.0",
15
- title: "Pipeline Kanban",
16
- description: "Kanban board view of deals organized by stage",
17
- domain: "crm-pipeline",
18
- owners: ["@crm-team"],
19
- tags: [
20
- "pipeline",
21
- "kanban",
22
- "deals"
23
- ],
24
- stability: StabilityEnum.Experimental,
25
- goal: "Visualize the sales pipeline status and deal distribution across stages.",
26
- context: "Used in the sales dashboard and management reports."
27
- },
28
- source: {
29
- type: "component",
30
- framework: "react",
31
- componentKey: "PipelineKanbanView",
32
- props: DealModel
33
- },
34
- targets: ["react", "markdown"],
35
- policy: { flags: ["crm.pipeline.enabled"] }
17
+ // src/deal/deal.schema.ts
18
+ import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
19
+ var DealModel = defineSchemaModel({
20
+ name: "Deal",
21
+ description: "A deal in the CRM pipeline",
22
+ fields: {
23
+ id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
24
+ name: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
25
+ value: { type: ScalarTypeEnum.Float_unsecure(), isOptional: false },
26
+ currency: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
27
+ pipelineId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
28
+ stageId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
29
+ status: { type: DealStatusEnum, isOptional: false },
30
+ contactId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
31
+ companyId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
32
+ ownerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
33
+ expectedCloseDate: { type: ScalarTypeEnum.DateTime(), isOptional: true },
34
+ createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },
35
+ updatedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
36
+ }
36
37
  });
37
- /**
38
- * List view of deals with filtering.
39
- */
40
- const DealListPresentation = definePresentation({
41
- meta: {
42
- key: "crm.deal.viewList",
43
- version: "1.0.0",
44
- title: "Deal List",
45
- description: "List view of deals with value, status, and owner info",
46
- domain: "crm-pipeline",
47
- owners: ["@crm-team"],
48
- tags: ["deal", "list"],
49
- stability: StabilityEnum.Experimental,
50
- goal: "Search, filter, and review deal lists.",
51
- context: "Standard view for deal management and bulk actions."
52
- },
53
- source: {
54
- type: "component",
55
- framework: "react",
56
- componentKey: "DealListView",
57
- props: DealModel
58
- },
59
- targets: [
60
- "react",
61
- "markdown",
62
- "application/json"
63
- ],
64
- policy: { flags: ["crm.deals.enabled"] }
38
+ var CreateDealInputModel = defineSchemaModel({
39
+ name: "CreateDealInput",
40
+ description: "Input for creating a deal",
41
+ fields: {
42
+ name: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
43
+ value: { type: ScalarTypeEnum.Float_unsecure(), isOptional: false },
44
+ currency: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
45
+ pipelineId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
46
+ stageId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
47
+ contactId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
48
+ companyId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
49
+ expectedCloseDate: { type: ScalarTypeEnum.DateTime(), isOptional: true }
50
+ }
65
51
  });
66
- /**
67
- * Deal detail presentation.
68
- */
69
- const DealDetailPresentation = definePresentation({
70
- meta: {
71
- key: "crm.deal.detail",
72
- version: "1.0.0",
73
- title: "Deal Details",
74
- description: "Detailed view of a deal with activities, contacts, and history",
75
- domain: "crm-pipeline",
76
- owners: ["@crm-team"],
77
- tags: ["deal", "detail"],
78
- stability: StabilityEnum.Experimental,
79
- goal: "Deep dive into deal details and historical activities.",
80
- context: "The main workspace for managing a single deal execution."
81
- },
82
- source: {
83
- type: "component",
84
- framework: "react",
85
- componentKey: "DealDetailView"
86
- },
87
- targets: ["react", "markdown"],
88
- policy: { flags: ["crm.deals.enabled"] }
52
+ var MoveDealInputModel = defineSchemaModel({
53
+ name: "MoveDealInput",
54
+ description: "Input for moving a deal to another stage",
55
+ fields: {
56
+ dealId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
57
+ stageId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
58
+ position: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true }
59
+ }
89
60
  });
90
- /**
91
- * Deal card for kanban board.
92
- */
93
- const DealCardPresentation = definePresentation({
94
- meta: {
95
- key: "crm.deal.card",
96
- version: "1.0.0",
97
- title: "Deal Card",
98
- description: "Compact deal card for kanban board display",
99
- domain: "crm-pipeline",
100
- owners: ["@crm-team"],
101
- tags: [
102
- "deal",
103
- "card",
104
- "kanban"
105
- ],
106
- stability: StabilityEnum.Experimental,
107
- goal: "Provide a quick overview of deal status in the pipeline view.",
108
- context: "Condensed representation used within the Pipeline Kanban board."
109
- },
110
- source: {
111
- type: "component",
112
- framework: "react",
113
- componentKey: "DealCard",
114
- props: DealModel
115
- },
116
- targets: ["react"],
117
- policy: { flags: ["crm.deals.enabled"] }
61
+ var DealMovedPayloadModel = defineSchemaModel({
62
+ name: "DealMovedPayload",
63
+ fields: {
64
+ dealId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
65
+ fromStage: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
66
+ toStage: { type: ScalarTypeEnum.String_unsecure(), isOptional: false }
67
+ }
68
+ });
69
+ var WinDealInputModel = defineSchemaModel({
70
+ name: "WinDealInput",
71
+ description: "Input for marking a deal as won",
72
+ fields: {
73
+ dealId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
74
+ wonSource: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
75
+ notes: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
76
+ }
77
+ });
78
+ var DealWonPayloadModel = defineSchemaModel({
79
+ name: "DealWonPayload",
80
+ fields: {
81
+ dealId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
82
+ value: { type: ScalarTypeEnum.Float_unsecure(), isOptional: false }
83
+ }
84
+ });
85
+ var LoseDealInputModel = defineSchemaModel({
86
+ name: "LoseDealInput",
87
+ description: "Input for marking a deal as lost",
88
+ fields: {
89
+ dealId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
90
+ lostReason: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
91
+ notes: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
92
+ }
93
+ });
94
+ var DealLostPayloadModel = defineSchemaModel({
95
+ name: "DealLostPayload",
96
+ fields: {
97
+ dealId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
98
+ reason: { type: ScalarTypeEnum.String_unsecure(), isOptional: false }
99
+ }
100
+ });
101
+ var ListDealsInputModel = defineSchemaModel({
102
+ name: "ListDealsInput",
103
+ description: "Input for listing deals",
104
+ fields: {
105
+ pipelineId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
106
+ stageId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
107
+ status: { type: DealStatusFilterEnum, isOptional: true },
108
+ ownerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
109
+ search: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
110
+ limit: {
111
+ type: ScalarTypeEnum.Int_unsecure(),
112
+ isOptional: true,
113
+ defaultValue: 20
114
+ },
115
+ offset: {
116
+ type: ScalarTypeEnum.Int_unsecure(),
117
+ isOptional: true,
118
+ defaultValue: 0
119
+ }
120
+ }
121
+ });
122
+ var ListDealsOutputModel = defineSchemaModel({
123
+ name: "ListDealsOutput",
124
+ description: "Output for listing deals",
125
+ fields: {
126
+ deals: { type: DealModel, isArray: true, isOptional: false },
127
+ total: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
128
+ totalValue: { type: ScalarTypeEnum.Float_unsecure(), isOptional: false }
129
+ }
118
130
  });
119
131
 
120
- //#endregion
121
- export { DealCardPresentation, DealDetailPresentation, DealListPresentation, PipelineKanbanPresentation };
122
- //# sourceMappingURL=pipeline.presentation.js.map
132
+ // src/presentations/pipeline.presentation.ts
133
+ import { definePresentation, StabilityEnum } from "@contractspec/lib.contracts";
134
+ var PipelineKanbanPresentation = definePresentation({
135
+ meta: {
136
+ key: "crm.pipeline.kanban",
137
+ version: "1.0.0",
138
+ title: "Pipeline Kanban",
139
+ description: "Kanban board view of deals organized by stage",
140
+ domain: "crm-pipeline",
141
+ owners: ["@crm-team"],
142
+ tags: ["pipeline", "kanban", "deals"],
143
+ stability: StabilityEnum.Experimental,
144
+ goal: "Visualize the sales pipeline status and deal distribution across stages.",
145
+ context: "Used in the sales dashboard and management reports."
146
+ },
147
+ source: {
148
+ type: "component",
149
+ framework: "react",
150
+ componentKey: "PipelineKanbanView",
151
+ props: DealModel
152
+ },
153
+ targets: ["react", "markdown"],
154
+ policy: {
155
+ flags: ["crm.pipeline.enabled"]
156
+ }
157
+ });
158
+ var DealListPresentation = definePresentation({
159
+ meta: {
160
+ key: "crm.deal.viewList",
161
+ version: "1.0.0",
162
+ title: "Deal List",
163
+ description: "List view of deals with value, status, and owner info",
164
+ domain: "crm-pipeline",
165
+ owners: ["@crm-team"],
166
+ tags: ["deal", "list"],
167
+ stability: StabilityEnum.Experimental,
168
+ goal: "Search, filter, and review deal lists.",
169
+ context: "Standard view for deal management and bulk actions."
170
+ },
171
+ source: {
172
+ type: "component",
173
+ framework: "react",
174
+ componentKey: "DealListView",
175
+ props: DealModel
176
+ },
177
+ targets: ["react", "markdown", "application/json"],
178
+ policy: {
179
+ flags: ["crm.deals.enabled"]
180
+ }
181
+ });
182
+ var DealDetailPresentation = definePresentation({
183
+ meta: {
184
+ key: "crm.deal.detail",
185
+ version: "1.0.0",
186
+ title: "Deal Details",
187
+ description: "Detailed view of a deal with activities, contacts, and history",
188
+ domain: "crm-pipeline",
189
+ owners: ["@crm-team"],
190
+ tags: ["deal", "detail"],
191
+ stability: StabilityEnum.Experimental,
192
+ goal: "Deep dive into deal details and historical activities.",
193
+ context: "The main workspace for managing a single deal execution."
194
+ },
195
+ source: {
196
+ type: "component",
197
+ framework: "react",
198
+ componentKey: "DealDetailView"
199
+ },
200
+ targets: ["react", "markdown"],
201
+ policy: {
202
+ flags: ["crm.deals.enabled"]
203
+ }
204
+ });
205
+ var DealCardPresentation = definePresentation({
206
+ meta: {
207
+ key: "crm.deal.card",
208
+ version: "1.0.0",
209
+ title: "Deal Card",
210
+ description: "Compact deal card for kanban board display",
211
+ domain: "crm-pipeline",
212
+ owners: ["@crm-team"],
213
+ tags: ["deal", "card", "kanban"],
214
+ stability: StabilityEnum.Experimental,
215
+ goal: "Provide a quick overview of deal status in the pipeline view.",
216
+ context: "Condensed representation used within the Pipeline Kanban board."
217
+ },
218
+ source: {
219
+ type: "component",
220
+ framework: "react",
221
+ componentKey: "DealCard",
222
+ props: DealModel
223
+ },
224
+ targets: ["react"],
225
+ policy: {
226
+ flags: ["crm.deals.enabled"]
227
+ }
228
+ });
229
+ export {
230
+ PipelineKanbanPresentation,
231
+ DealListPresentation,
232
+ DealDetailPresentation,
233
+ DealCardPresentation
234
+ };
@@ -1,10 +1,6 @@
1
- import { DatabasePort } from "@contractspec/lib.runtime-sandbox";
2
-
3
- //#region src/seeders/index.d.ts
4
- declare function seedCrmPipeline(params: {
5
- projectId: string;
6
- db: DatabasePort;
1
+ import type { DatabasePort } from '@contractspec/lib.runtime-sandbox';
2
+ export declare function seedCrmPipeline(params: {
3
+ projectId: string;
4
+ db: DatabasePort;
7
5
  }): Promise<void>;
8
- //#endregion
9
- export { seedCrmPipeline };
10
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/seeders/index.ts"],"mappings":";;;iBAEsB,eAAA,CAAgB,MAAA;EACpC,SAAA;EACA,EAAA,EAAI,YAAA;AAAA,IACL,OAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/seeders/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEtE,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,YAAY,CAAC;CAClB,iBA6BA"}
@@ -1,47 +1,23 @@
1
- //#region src/seeders/index.ts
1
+ // @bun
2
+ // src/seeders/index.ts
2
3
  async function seedCrmPipeline(params) {
3
- const { projectId, db } = params;
4
- if ((await db.query(`SELECT COUNT(*) as count FROM crm_pipeline WHERE "projectId" = $1`, [projectId])).rows[0]?.count > 0) return;
5
- const pipelineId = "pipeline_sales";
6
- await db.execute(`INSERT INTO crm_pipeline (id, "projectId", name) VALUES ($1, $2, $3)`, [
7
- pipelineId,
8
- projectId,
9
- "Sales Pipeline"
10
- ]);
11
- for (const stage of [
12
- {
13
- id: "stage_lead",
14
- name: "Lead",
15
- position: 1
16
- },
17
- {
18
- id: "stage_contact",
19
- name: "Contact Made",
20
- position: 2
21
- },
22
- {
23
- id: "stage_proposal",
24
- name: "Proposal",
25
- position: 3
26
- },
27
- {
28
- id: "stage_negotiation",
29
- name: "Negotiation",
30
- position: 4
31
- },
32
- {
33
- id: "stage_closed",
34
- name: "Closed",
35
- position: 5
36
- }
37
- ]) await db.execute(`INSERT INTO crm_stage (id, "pipelineId", name, position) VALUES ($1, $2, $3, $4)`, [
38
- stage.id,
39
- pipelineId,
40
- stage.name,
41
- stage.position
42
- ]);
4
+ const { projectId, db } = params;
5
+ const existing = await db.query(`SELECT COUNT(*) as count FROM crm_pipeline WHERE "projectId" = $1`, [projectId]);
6
+ if (existing.rows[0]?.count > 0)
7
+ return;
8
+ const pipelineId = "pipeline_sales";
9
+ await db.execute(`INSERT INTO crm_pipeline (id, "projectId", name) VALUES ($1, $2, $3)`, [pipelineId, projectId, "Sales Pipeline"]);
10
+ const stages = [
11
+ { id: "stage_lead", name: "Lead", position: 1 },
12
+ { id: "stage_contact", name: "Contact Made", position: 2 },
13
+ { id: "stage_proposal", name: "Proposal", position: 3 },
14
+ { id: "stage_negotiation", name: "Negotiation", position: 4 },
15
+ { id: "stage_closed", name: "Closed", position: 5 }
16
+ ];
17
+ for (const stage of stages) {
18
+ await db.execute(`INSERT INTO crm_stage (id, "pipelineId", name, position) VALUES ($1, $2, $3, $4)`, [stage.id, pipelineId, stage.name, stage.position]);
19
+ }
43
20
  }
44
-
45
- //#endregion
46
- export { seedCrmPipeline };
47
- //# sourceMappingURL=index.js.map
21
+ export {
22
+ seedCrmPipeline
23
+ };
@@ -1,34 +1,31 @@
1
- //#region src/shared/overlay-types.d.ts
2
- interface OverlayDefinition {
3
- overlayId: string;
4
- version: string;
5
- description: string;
6
- appliesTo: Record<string, string>;
7
- modifications: OverlayModification[];
1
+ export interface OverlayDefinition {
2
+ overlayId: string;
3
+ version: string;
4
+ description: string;
5
+ appliesTo: Record<string, string>;
6
+ modifications: OverlayModification[];
8
7
  }
9
- type OverlayModification = HideFieldModification | RenameLabelModification | AddBadgeModification | SetLimitModification;
10
- interface HideFieldModification {
11
- type: 'hideField';
12
- field: string;
13
- reason?: string;
8
+ export type OverlayModification = HideFieldModification | RenameLabelModification | AddBadgeModification | SetLimitModification;
9
+ export interface HideFieldModification {
10
+ type: 'hideField';
11
+ field: string;
12
+ reason?: string;
14
13
  }
15
- interface RenameLabelModification {
16
- type: 'renameLabel';
17
- field: string;
18
- newLabel: string;
14
+ export interface RenameLabelModification {
15
+ type: 'renameLabel';
16
+ field: string;
17
+ newLabel: string;
19
18
  }
20
- interface AddBadgeModification {
21
- type: 'addBadge';
22
- position: 'header' | 'footer';
23
- label: string;
24
- variant: 'warning' | 'info' | 'error' | 'success' | 'default';
19
+ export interface AddBadgeModification {
20
+ type: 'addBadge';
21
+ position: 'header' | 'footer';
22
+ label: string;
23
+ variant: 'warning' | 'info' | 'error' | 'success' | 'default';
25
24
  }
26
- interface SetLimitModification {
27
- type: 'setLimit';
28
- field: string;
29
- max: number;
30
- message: string;
25
+ export interface SetLimitModification {
26
+ type: 'setLimit';
27
+ field: string;
28
+ max: number;
29
+ message: string;
31
30
  }
32
- //#endregion
33
- export { AddBadgeModification, HideFieldModification, OverlayDefinition, OverlayModification, RenameLabelModification, SetLimitModification };
34
31
  //# sourceMappingURL=overlay-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"overlay-types.d.ts","names":[],"sources":["../../src/shared/overlay-types.ts"],"mappings":";UAAiB,iBAAA;EACf,SAAA;EACA,OAAA;EACA,WAAA;EACA,SAAA,EAAW,MAAA;EACX,aAAA,EAAe,mBAAA;AAAA;AAAA,KAGL,mBAAA,GACR,qBAAA,GACA,uBAAA,GACA,oBAAA,GACA,oBAAA;AAAA,UAEa,qBAAA;EACf,IAAA;EACA,KAAA;EACA,MAAA;AAAA;AAAA,UAGe,uBAAA;EACf,IAAA;EACA,KAAA;EACA,QAAA;AAAA;AAAA,UAGe,oBAAA;EACf,IAAA;EACA,QAAA;EACA,KAAA;EACA,OAAA;AAAA;AAAA,UAGe,oBAAA;EACf,IAAA;EACA,KAAA;EACA,GAAA;EACA,OAAA;AAAA"}
1
+ {"version":3,"file":"overlay-types.d.ts","sourceRoot":"","sources":["../../src/shared/overlay-types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,aAAa,EAAE,mBAAmB,EAAE,CAAC;CACtC;AAED,MAAM,MAAM,mBAAmB,GAC3B,qBAAqB,GACrB,uBAAuB,GACvB,oBAAoB,GACpB,oBAAoB,CAAC;AAEzB,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;CAC/D;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1 @@
1
+ // @bun
@@ -1,7 +1,2 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
2
-
3
- //#region src/ui/CrmDashboard.d.ts
4
- declare function CrmDashboard(): react_jsx_runtime0.JSX.Element;
5
- //#endregion
6
- export { CrmDashboard };
1
+ export declare function CrmDashboard(): import("react/jsx-runtime").JSX.Element;
7
2
  //# sourceMappingURL=CrmDashboard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CrmDashboard.d.ts","names":[],"sources":["../../src/ui/CrmDashboard.tsx"],"mappings":";;;iBA6CgB,YAAA,CAAA,GAAY,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"CrmDashboard.d.ts","sourceRoot":"","sources":["../../src/ui/CrmDashboard.tsx"],"names":[],"mappings":"AA6CA,wBAAgB,YAAY,4CA0J3B"}