@contractspec/example.crm-pipeline 3.7.17 → 3.7.18

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