@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,120 +1,108 @@
1
- import { defineEntity, defineEntityEnum, field, index } from "@contractspec/lib.schema";
2
-
3
- //#region src/entities/deal.entity.ts
4
- /**
5
- * Deal status enum.
6
- */
7
- const DealStatusEnum = defineEntityEnum({
8
- name: "DealStatus",
9
- values: [
10
- "OPEN",
11
- "WON",
12
- "LOST",
13
- "STALE"
14
- ],
15
- schema: "crm",
16
- description: "Status of a deal."
1
+ // @bun
2
+ // src/entities/deal.entity.ts
3
+ import {
4
+ defineEntity,
5
+ defineEntityEnum,
6
+ field,
7
+ index
8
+ } from "@contractspec/lib.schema";
9
+ var DealStatusEnum = defineEntityEnum({
10
+ name: "DealStatus",
11
+ values: ["OPEN", "WON", "LOST", "STALE"],
12
+ schema: "crm",
13
+ description: "Status of a deal."
17
14
  });
18
- /**
19
- * Pipeline entity - sales pipeline definition.
20
- */
21
- const PipelineEntity = defineEntity({
22
- name: "Pipeline",
23
- description: "A sales pipeline with stages.",
24
- schema: "crm",
25
- map: "pipeline",
26
- fields: {
27
- id: field.id(),
28
- name: field.string({ description: "Pipeline name" }),
29
- description: field.string({ isOptional: true }),
30
- organizationId: field.foreignKey(),
31
- isDefault: field.boolean({ default: false }),
32
- createdAt: field.createdAt(),
33
- updatedAt: field.updatedAt(),
34
- stages: field.hasMany("Stage"),
35
- deals: field.hasMany("Deal")
36
- }
15
+ var PipelineEntity = defineEntity({
16
+ name: "Pipeline",
17
+ description: "A sales pipeline with stages.",
18
+ schema: "crm",
19
+ map: "pipeline",
20
+ fields: {
21
+ id: field.id(),
22
+ name: field.string({ description: "Pipeline name" }),
23
+ description: field.string({ isOptional: true }),
24
+ organizationId: field.foreignKey(),
25
+ isDefault: field.boolean({ default: false }),
26
+ createdAt: field.createdAt(),
27
+ updatedAt: field.updatedAt(),
28
+ stages: field.hasMany("Stage"),
29
+ deals: field.hasMany("Deal")
30
+ }
37
31
  });
38
- /**
39
- * Stage entity - pipeline stage.
40
- */
41
- const StageEntity = defineEntity({
42
- name: "Stage",
43
- description: "A stage within a sales pipeline.",
44
- schema: "crm",
45
- map: "stage",
46
- fields: {
47
- id: field.id(),
48
- name: field.string({ description: "Stage name" }),
49
- pipelineId: field.foreignKey(),
50
- position: field.int({ description: "Order in pipeline" }),
51
- probability: field.int({
52
- default: 0,
53
- description: "Win probability (0-100)"
54
- }),
55
- isWonStage: field.boolean({ default: false }),
56
- isLostStage: field.boolean({ default: false }),
57
- color: field.string({
58
- isOptional: true,
59
- description: "Stage color for UI"
60
- }),
61
- createdAt: field.createdAt(),
62
- updatedAt: field.updatedAt(),
63
- pipeline: field.belongsTo("Pipeline", ["pipelineId"], ["id"], { onDelete: "Cascade" }),
64
- deals: field.hasMany("Deal")
65
- },
66
- indexes: [index.on(["pipelineId", "position"])]
32
+ var StageEntity = defineEntity({
33
+ name: "Stage",
34
+ description: "A stage within a sales pipeline.",
35
+ schema: "crm",
36
+ map: "stage",
37
+ fields: {
38
+ id: field.id(),
39
+ name: field.string({ description: "Stage name" }),
40
+ pipelineId: field.foreignKey(),
41
+ position: field.int({ description: "Order in pipeline" }),
42
+ probability: field.int({
43
+ default: 0,
44
+ description: "Win probability (0-100)"
45
+ }),
46
+ isWonStage: field.boolean({ default: false }),
47
+ isLostStage: field.boolean({ default: false }),
48
+ color: field.string({
49
+ isOptional: true,
50
+ description: "Stage color for UI"
51
+ }),
52
+ createdAt: field.createdAt(),
53
+ updatedAt: field.updatedAt(),
54
+ pipeline: field.belongsTo("Pipeline", ["pipelineId"], ["id"], {
55
+ onDelete: "Cascade"
56
+ }),
57
+ deals: field.hasMany("Deal")
58
+ },
59
+ indexes: [index.on(["pipelineId", "position"])]
67
60
  });
68
- /**
69
- * Deal entity - sales opportunity.
70
- */
71
- const DealEntity = defineEntity({
72
- name: "Deal",
73
- description: "A sales opportunity/deal.",
74
- schema: "crm",
75
- map: "deal",
76
- fields: {
77
- id: field.id({ description: "Unique deal ID" }),
78
- name: field.string({ description: "Deal name" }),
79
- value: field.decimal({ description: "Deal value" }),
80
- currency: field.string({ default: "\"USD\"" }),
81
- pipelineId: field.foreignKey(),
82
- stageId: field.foreignKey(),
83
- status: field.enum("DealStatus", { default: "OPEN" }),
84
- contactId: field.string({ isOptional: true }),
85
- companyId: field.string({ isOptional: true }),
86
- organizationId: field.foreignKey(),
87
- ownerId: field.foreignKey({ description: "Deal owner" }),
88
- expectedCloseDate: field.dateTime({ isOptional: true }),
89
- closedAt: field.dateTime({ isOptional: true }),
90
- lostReason: field.string({ isOptional: true }),
91
- wonSource: field.string({ isOptional: true }),
92
- notes: field.string({ isOptional: true }),
93
- tags: field.string({ isArray: true }),
94
- customFields: field.json({ isOptional: true }),
95
- stagePosition: field.int({ default: 0 }),
96
- createdAt: field.createdAt(),
97
- updatedAt: field.updatedAt(),
98
- pipeline: field.belongsTo("Pipeline", ["pipelineId"], ["id"]),
99
- stage: field.belongsTo("Stage", ["stageId"], ["id"]),
100
- contact: field.belongsTo("Contact", ["contactId"], ["id"]),
101
- company: field.belongsTo("Company", ["companyId"], ["id"]),
102
- tasks: field.hasMany("Task"),
103
- activities: field.hasMany("Activity")
104
- },
105
- indexes: [
106
- index.on(["organizationId", "status"]),
107
- index.on([
108
- "pipelineId",
109
- "stageId",
110
- "stagePosition"
111
- ]),
112
- index.on(["ownerId", "status"]),
113
- index.on(["expectedCloseDate"])
114
- ],
115
- enums: [DealStatusEnum]
61
+ var DealEntity = defineEntity({
62
+ name: "Deal",
63
+ description: "A sales opportunity/deal.",
64
+ schema: "crm",
65
+ map: "deal",
66
+ fields: {
67
+ id: field.id({ description: "Unique deal ID" }),
68
+ name: field.string({ description: "Deal name" }),
69
+ value: field.decimal({ description: "Deal value" }),
70
+ currency: field.string({ default: '"USD"' }),
71
+ pipelineId: field.foreignKey(),
72
+ stageId: field.foreignKey(),
73
+ status: field.enum("DealStatus", { default: "OPEN" }),
74
+ contactId: field.string({ isOptional: true }),
75
+ companyId: field.string({ isOptional: true }),
76
+ organizationId: field.foreignKey(),
77
+ ownerId: field.foreignKey({ description: "Deal owner" }),
78
+ expectedCloseDate: field.dateTime({ isOptional: true }),
79
+ closedAt: field.dateTime({ isOptional: true }),
80
+ lostReason: field.string({ isOptional: true }),
81
+ wonSource: field.string({ isOptional: true }),
82
+ notes: field.string({ isOptional: true }),
83
+ tags: field.string({ isArray: true }),
84
+ customFields: field.json({ isOptional: true }),
85
+ stagePosition: field.int({ default: 0 }),
86
+ createdAt: field.createdAt(),
87
+ updatedAt: field.updatedAt(),
88
+ pipeline: field.belongsTo("Pipeline", ["pipelineId"], ["id"]),
89
+ stage: field.belongsTo("Stage", ["stageId"], ["id"]),
90
+ contact: field.belongsTo("Contact", ["contactId"], ["id"]),
91
+ company: field.belongsTo("Company", ["companyId"], ["id"]),
92
+ tasks: field.hasMany("Task"),
93
+ activities: field.hasMany("Activity")
94
+ },
95
+ indexes: [
96
+ index.on(["organizationId", "status"]),
97
+ index.on(["pipelineId", "stageId", "stagePosition"]),
98
+ index.on(["ownerId", "status"]),
99
+ index.on(["expectedCloseDate"])
100
+ ],
101
+ enums: [DealStatusEnum]
116
102
  });
117
-
118
- //#endregion
119
- export { DealEntity, DealStatusEnum, PipelineEntity, StageEntity };
120
- //# sourceMappingURL=deal.entity.js.map
103
+ export {
104
+ StageEntity,
105
+ PipelineEntity,
106
+ DealStatusEnum,
107
+ DealEntity
108
+ };
@@ -1,14 +1,10 @@
1
- import { CompanyEntity, CompanySizeEnum } from "./company.entity.js";
2
- import { ContactEntity, ContactStatusEnum } from "./contact.entity.js";
3
- import { DealEntity, DealStatusEnum, PipelineEntity, StageEntity } from "./deal.entity.js";
4
- import { ActivityEntity, TaskEntity, TaskPriorityEnum, TaskStatusEnum, TaskTypeEnum } from "./task.entity.js";
5
- import { ModuleSchemaContribution } from "@contractspec/lib.schema";
6
-
7
- //#region src/entities/index.d.ts
1
+ export * from './company.entity';
2
+ export * from './contact.entity';
3
+ export * from './deal.entity';
4
+ export * from './task.entity';
5
+ import type { ModuleSchemaContribution } from '@contractspec/lib.schema';
8
6
  /**
9
7
  * CRM Pipeline schema contribution.
10
8
  */
11
- declare const crmPipelineSchemaContribution: ModuleSchemaContribution;
12
- //#endregion
13
- export { ActivityEntity, CompanyEntity, CompanySizeEnum, ContactEntity, ContactStatusEnum, DealEntity, DealStatusEnum, PipelineEntity, StageEntity, TaskEntity, TaskPriorityEnum, TaskStatusEnum, TaskTypeEnum, crmPipelineSchemaContribution };
9
+ export declare const crmPipelineSchemaContribution: ModuleSchemaContribution;
14
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/entities/index.ts"],"mappings":";;;;;;;;;AAyBA;cAAa,6BAAA,EAA+B,wBAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAE9B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAiBzE;;GAEG;AACH,eAAO,MAAM,6BAA6B,EAAE,wBAmB3C,CAAC"}
@@ -1,33 +1,344 @@
1
- import { CompanyEntity, CompanySizeEnum } from "./company.entity.js";
2
- import { ContactEntity, ContactStatusEnum } from "./contact.entity.js";
3
- import { DealEntity, DealStatusEnum, PipelineEntity, StageEntity } from "./deal.entity.js";
4
- import { ActivityEntity, TaskEntity, TaskPriorityEnum, TaskStatusEnum, TaskTypeEnum } from "./task.entity.js";
1
+ // @bun
2
+ // src/entities/company.entity.ts
3
+ import {
4
+ defineEntity,
5
+ defineEntityEnum,
6
+ field,
7
+ index
8
+ } from "@contractspec/lib.schema";
9
+ var CompanySizeEnum = defineEntityEnum({
10
+ name: "CompanySize",
11
+ values: ["STARTUP", "SMALL", "MEDIUM", "LARGE", "ENTERPRISE"],
12
+ schema: "crm",
13
+ description: "Size category of a company."
14
+ });
15
+ var CompanyEntity = defineEntity({
16
+ name: "Company",
17
+ description: "A company/organization in the CRM.",
18
+ schema: "crm",
19
+ map: "company",
20
+ fields: {
21
+ id: field.id({ description: "Unique company ID" }),
22
+ name: field.string({ description: "Company name" }),
23
+ domain: field.string({ isOptional: true, description: "Website domain" }),
24
+ website: field.url({ isOptional: true }),
25
+ industry: field.string({ isOptional: true }),
26
+ size: field.enum("CompanySize", { isOptional: true }),
27
+ employeeCount: field.int({ isOptional: true }),
28
+ annualRevenue: field.decimal({ isOptional: true }),
29
+ organizationId: field.foreignKey(),
30
+ ownerId: field.foreignKey({ description: "Account owner" }),
31
+ phone: field.string({ isOptional: true }),
32
+ email: field.email({ isOptional: true }),
33
+ address: field.string({ isOptional: true }),
34
+ city: field.string({ isOptional: true }),
35
+ state: field.string({ isOptional: true }),
36
+ country: field.string({ isOptional: true }),
37
+ postalCode: field.string({ isOptional: true }),
38
+ linkedInUrl: field.url({ isOptional: true }),
39
+ description: field.string({ isOptional: true }),
40
+ tags: field.string({ isArray: true }),
41
+ customFields: field.json({ isOptional: true }),
42
+ createdAt: field.createdAt(),
43
+ updatedAt: field.updatedAt(),
44
+ contacts: field.hasMany("Contact"),
45
+ deals: field.hasMany("Deal")
46
+ },
47
+ indexes: [index.on(["organizationId", "ownerId"]), index.on(["domain"])],
48
+ enums: [CompanySizeEnum]
49
+ });
5
50
 
6
- //#region src/entities/index.ts
7
- /**
8
- * CRM Pipeline schema contribution.
9
- */
10
- const crmPipelineSchemaContribution = {
11
- moduleId: "@contractspec/example.crm-pipeline",
12
- entities: [
13
- CompanyEntity,
14
- ContactEntity,
15
- DealEntity,
16
- PipelineEntity,
17
- StageEntity,
18
- TaskEntity,
19
- ActivityEntity
20
- ],
21
- enums: [
22
- CompanySizeEnum,
23
- ContactStatusEnum,
24
- DealStatusEnum,
25
- TaskTypeEnum,
26
- TaskPriorityEnum,
27
- TaskStatusEnum
28
- ]
29
- };
51
+ // src/entities/contact.entity.ts
52
+ import {
53
+ defineEntity as defineEntity2,
54
+ defineEntityEnum as defineEntityEnum2,
55
+ field as field2,
56
+ index as index2
57
+ } from "@contractspec/lib.schema";
58
+ var ContactStatusEnum = defineEntityEnum2({
59
+ name: "ContactStatus",
60
+ values: ["LEAD", "PROSPECT", "CUSTOMER", "CHURNED", "ARCHIVED"],
61
+ schema: "crm",
62
+ description: "Status of a contact in the sales funnel."
63
+ });
64
+ var ContactEntity = defineEntity2({
65
+ name: "Contact",
66
+ description: "An individual person in the CRM.",
67
+ schema: "crm",
68
+ map: "contact",
69
+ fields: {
70
+ id: field2.id({ description: "Unique contact ID" }),
71
+ firstName: field2.string({ description: "First name" }),
72
+ lastName: field2.string({ description: "Last name" }),
73
+ email: field2.email({ isOptional: true, isUnique: true }),
74
+ phone: field2.string({ isOptional: true }),
75
+ companyId: field2.string({
76
+ isOptional: true,
77
+ description: "Associated company"
78
+ }),
79
+ jobTitle: field2.string({ isOptional: true }),
80
+ status: field2.enum("ContactStatus", { default: "LEAD" }),
81
+ organizationId: field2.foreignKey(),
82
+ ownerId: field2.foreignKey({
83
+ description: "Sales rep who owns this contact"
84
+ }),
85
+ source: field2.string({ isOptional: true, description: "Lead source" }),
86
+ linkedInUrl: field2.url({ isOptional: true }),
87
+ twitterHandle: field2.string({ isOptional: true }),
88
+ address: field2.string({ isOptional: true }),
89
+ city: field2.string({ isOptional: true }),
90
+ state: field2.string({ isOptional: true }),
91
+ country: field2.string({ isOptional: true }),
92
+ postalCode: field2.string({ isOptional: true }),
93
+ notes: field2.string({ isOptional: true }),
94
+ tags: field2.string({ isArray: true }),
95
+ customFields: field2.json({ isOptional: true }),
96
+ lastContactedAt: field2.dateTime({ isOptional: true }),
97
+ nextFollowUpAt: field2.dateTime({ isOptional: true }),
98
+ createdAt: field2.createdAt(),
99
+ updatedAt: field2.updatedAt(),
100
+ company: field2.belongsTo("Company", ["companyId"], ["id"]),
101
+ deals: field2.hasMany("Deal"),
102
+ tasks: field2.hasMany("Task"),
103
+ activities: field2.hasMany("Activity")
104
+ },
105
+ indexes: [
106
+ index2.on(["organizationId", "status"]),
107
+ index2.on(["organizationId", "ownerId"]),
108
+ index2.on(["organizationId", "companyId"]),
109
+ index2.on(["email"])
110
+ ],
111
+ enums: [ContactStatusEnum]
112
+ });
113
+
114
+ // src/entities/deal.entity.ts
115
+ import {
116
+ defineEntity as defineEntity3,
117
+ defineEntityEnum as defineEntityEnum3,
118
+ field as field3,
119
+ index as index3
120
+ } from "@contractspec/lib.schema";
121
+ var DealStatusEnum = defineEntityEnum3({
122
+ name: "DealStatus",
123
+ values: ["OPEN", "WON", "LOST", "STALE"],
124
+ schema: "crm",
125
+ description: "Status of a deal."
126
+ });
127
+ var PipelineEntity = defineEntity3({
128
+ name: "Pipeline",
129
+ description: "A sales pipeline with stages.",
130
+ schema: "crm",
131
+ map: "pipeline",
132
+ fields: {
133
+ id: field3.id(),
134
+ name: field3.string({ description: "Pipeline name" }),
135
+ description: field3.string({ isOptional: true }),
136
+ organizationId: field3.foreignKey(),
137
+ isDefault: field3.boolean({ default: false }),
138
+ createdAt: field3.createdAt(),
139
+ updatedAt: field3.updatedAt(),
140
+ stages: field3.hasMany("Stage"),
141
+ deals: field3.hasMany("Deal")
142
+ }
143
+ });
144
+ var StageEntity = defineEntity3({
145
+ name: "Stage",
146
+ description: "A stage within a sales pipeline.",
147
+ schema: "crm",
148
+ map: "stage",
149
+ fields: {
150
+ id: field3.id(),
151
+ name: field3.string({ description: "Stage name" }),
152
+ pipelineId: field3.foreignKey(),
153
+ position: field3.int({ description: "Order in pipeline" }),
154
+ probability: field3.int({
155
+ default: 0,
156
+ description: "Win probability (0-100)"
157
+ }),
158
+ isWonStage: field3.boolean({ default: false }),
159
+ isLostStage: field3.boolean({ default: false }),
160
+ color: field3.string({
161
+ isOptional: true,
162
+ description: "Stage color for UI"
163
+ }),
164
+ createdAt: field3.createdAt(),
165
+ updatedAt: field3.updatedAt(),
166
+ pipeline: field3.belongsTo("Pipeline", ["pipelineId"], ["id"], {
167
+ onDelete: "Cascade"
168
+ }),
169
+ deals: field3.hasMany("Deal")
170
+ },
171
+ indexes: [index3.on(["pipelineId", "position"])]
172
+ });
173
+ var DealEntity = defineEntity3({
174
+ name: "Deal",
175
+ description: "A sales opportunity/deal.",
176
+ schema: "crm",
177
+ map: "deal",
178
+ fields: {
179
+ id: field3.id({ description: "Unique deal ID" }),
180
+ name: field3.string({ description: "Deal name" }),
181
+ value: field3.decimal({ description: "Deal value" }),
182
+ currency: field3.string({ default: '"USD"' }),
183
+ pipelineId: field3.foreignKey(),
184
+ stageId: field3.foreignKey(),
185
+ status: field3.enum("DealStatus", { default: "OPEN" }),
186
+ contactId: field3.string({ isOptional: true }),
187
+ companyId: field3.string({ isOptional: true }),
188
+ organizationId: field3.foreignKey(),
189
+ ownerId: field3.foreignKey({ description: "Deal owner" }),
190
+ expectedCloseDate: field3.dateTime({ isOptional: true }),
191
+ closedAt: field3.dateTime({ isOptional: true }),
192
+ lostReason: field3.string({ isOptional: true }),
193
+ wonSource: field3.string({ isOptional: true }),
194
+ notes: field3.string({ isOptional: true }),
195
+ tags: field3.string({ isArray: true }),
196
+ customFields: field3.json({ isOptional: true }),
197
+ stagePosition: field3.int({ default: 0 }),
198
+ createdAt: field3.createdAt(),
199
+ updatedAt: field3.updatedAt(),
200
+ pipeline: field3.belongsTo("Pipeline", ["pipelineId"], ["id"]),
201
+ stage: field3.belongsTo("Stage", ["stageId"], ["id"]),
202
+ contact: field3.belongsTo("Contact", ["contactId"], ["id"]),
203
+ company: field3.belongsTo("Company", ["companyId"], ["id"]),
204
+ tasks: field3.hasMany("Task"),
205
+ activities: field3.hasMany("Activity")
206
+ },
207
+ indexes: [
208
+ index3.on(["organizationId", "status"]),
209
+ index3.on(["pipelineId", "stageId", "stagePosition"]),
210
+ index3.on(["ownerId", "status"]),
211
+ index3.on(["expectedCloseDate"])
212
+ ],
213
+ enums: [DealStatusEnum]
214
+ });
30
215
 
31
- //#endregion
32
- export { ActivityEntity, CompanyEntity, CompanySizeEnum, ContactEntity, ContactStatusEnum, DealEntity, DealStatusEnum, PipelineEntity, StageEntity, TaskEntity, TaskPriorityEnum, TaskStatusEnum, TaskTypeEnum, crmPipelineSchemaContribution };
33
- //# sourceMappingURL=index.js.map
216
+ // src/entities/task.entity.ts
217
+ import {
218
+ defineEntity as defineEntity4,
219
+ defineEntityEnum as defineEntityEnum4,
220
+ field as field4,
221
+ index as index4
222
+ } from "@contractspec/lib.schema";
223
+ var TaskTypeEnum = defineEntityEnum4({
224
+ name: "TaskType",
225
+ values: ["CALL", "EMAIL", "MEETING", "TODO", "FOLLOW_UP", "OTHER"],
226
+ schema: "crm",
227
+ description: "Type of CRM task."
228
+ });
229
+ var TaskPriorityEnum = defineEntityEnum4({
230
+ name: "TaskPriority",
231
+ values: ["LOW", "NORMAL", "HIGH", "URGENT"],
232
+ schema: "crm",
233
+ description: "Priority of a task."
234
+ });
235
+ var TaskStatusEnum = defineEntityEnum4({
236
+ name: "TaskStatus",
237
+ values: ["PENDING", "IN_PROGRESS", "COMPLETED", "CANCELLED"],
238
+ schema: "crm",
239
+ description: "Status of a task."
240
+ });
241
+ var TaskEntity = defineEntity4({
242
+ name: "Task",
243
+ description: "A task or follow-up activity.",
244
+ schema: "crm",
245
+ map: "task",
246
+ fields: {
247
+ id: field4.id(),
248
+ title: field4.string({ description: "Task title" }),
249
+ description: field4.string({ isOptional: true }),
250
+ type: field4.enum("TaskType", { default: "TODO" }),
251
+ priority: field4.enum("TaskPriority", { default: "NORMAL" }),
252
+ status: field4.enum("TaskStatus", { default: "PENDING" }),
253
+ dueDate: field4.dateTime({ isOptional: true }),
254
+ reminderAt: field4.dateTime({ isOptional: true }),
255
+ contactId: field4.string({ isOptional: true }),
256
+ dealId: field4.string({ isOptional: true }),
257
+ companyId: field4.string({ isOptional: true }),
258
+ organizationId: field4.foreignKey(),
259
+ assignedTo: field4.foreignKey({ description: "User assigned to this task" }),
260
+ createdBy: field4.foreignKey(),
261
+ completedAt: field4.dateTime({ isOptional: true }),
262
+ completedBy: field4.string({ isOptional: true }),
263
+ createdAt: field4.createdAt(),
264
+ updatedAt: field4.updatedAt(),
265
+ contact: field4.belongsTo("Contact", ["contactId"], ["id"]),
266
+ deal: field4.belongsTo("Deal", ["dealId"], ["id"]),
267
+ company: field4.belongsTo("Company", ["companyId"], ["id"])
268
+ },
269
+ indexes: [
270
+ index4.on(["organizationId", "assignedTo", "status"]),
271
+ index4.on(["dueDate", "status"]),
272
+ index4.on(["contactId"]),
273
+ index4.on(["dealId"])
274
+ ],
275
+ enums: [TaskTypeEnum, TaskPriorityEnum, TaskStatusEnum]
276
+ });
277
+ var ActivityEntity = defineEntity4({
278
+ name: "Activity",
279
+ description: "An activity/interaction logged in the CRM.",
280
+ schema: "crm",
281
+ map: "activity",
282
+ fields: {
283
+ id: field4.id(),
284
+ type: field4.enum("TaskType"),
285
+ subject: field4.string(),
286
+ description: field4.string({ isOptional: true }),
287
+ contactId: field4.string({ isOptional: true }),
288
+ dealId: field4.string({ isOptional: true }),
289
+ companyId: field4.string({ isOptional: true }),
290
+ organizationId: field4.foreignKey(),
291
+ performedBy: field4.foreignKey(),
292
+ outcome: field4.string({ isOptional: true }),
293
+ occurredAt: field4.dateTime(),
294
+ duration: field4.int({
295
+ isOptional: true,
296
+ description: "Duration in minutes"
297
+ }),
298
+ createdAt: field4.createdAt(),
299
+ contact: field4.belongsTo("Contact", ["contactId"], ["id"]),
300
+ deal: field4.belongsTo("Deal", ["dealId"], ["id"]),
301
+ company: field4.belongsTo("Company", ["companyId"], ["id"])
302
+ },
303
+ indexes: [
304
+ index4.on(["contactId", "occurredAt"]),
305
+ index4.on(["dealId", "occurredAt"])
306
+ ]
307
+ });
308
+ // src/entities/index.ts
309
+ var crmPipelineSchemaContribution = {
310
+ moduleId: "@contractspec/example.crm-pipeline",
311
+ entities: [
312
+ CompanyEntity,
313
+ ContactEntity,
314
+ DealEntity,
315
+ PipelineEntity,
316
+ StageEntity,
317
+ TaskEntity,
318
+ ActivityEntity
319
+ ],
320
+ enums: [
321
+ CompanySizeEnum,
322
+ ContactStatusEnum,
323
+ DealStatusEnum,
324
+ TaskTypeEnum,
325
+ TaskPriorityEnum,
326
+ TaskStatusEnum
327
+ ]
328
+ };
329
+ export {
330
+ crmPipelineSchemaContribution,
331
+ TaskTypeEnum,
332
+ TaskStatusEnum,
333
+ TaskPriorityEnum,
334
+ TaskEntity,
335
+ StageEntity,
336
+ PipelineEntity,
337
+ DealStatusEnum,
338
+ DealEntity,
339
+ ContactStatusEnum,
340
+ ContactEntity,
341
+ CompanySizeEnum,
342
+ CompanyEntity,
343
+ ActivityEntity
344
+ };