@contractspec/example.crm-pipeline 3.7.6 → 3.7.10

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 (130) hide show
  1. package/.turbo/turbo-build.log +45 -42
  2. package/AGENTS.md +51 -33
  3. package/CHANGELOG.md +36 -0
  4. package/README.md +67 -148
  5. package/dist/browser/docs/crm-pipeline.docblock.js +1 -1
  6. package/dist/browser/docs/index.js +1 -1
  7. package/dist/browser/events/contact.event.js +1 -1
  8. package/dist/browser/events/deal.event.js +1 -1
  9. package/dist/browser/events/index.js +3 -3
  10. package/dist/browser/events/task.event.js +1 -1
  11. package/dist/browser/handlers/crm.handlers.js +13 -2
  12. package/dist/browser/handlers/index.js +13 -2
  13. package/dist/browser/index.js +680 -447
  14. package/dist/browser/ui/CrmDashboard.js +574 -352
  15. package/dist/browser/ui/CrmDealCard.js +5 -5
  16. package/dist/browser/ui/CrmPipelineBoard.js +13 -13
  17. package/dist/browser/ui/hooks/index.js +21 -10
  18. package/dist/browser/ui/hooks/useDealList.js +20 -9
  19. package/dist/browser/ui/hooks/useDealMutations.js +1 -1
  20. package/dist/browser/ui/index.js +683 -450
  21. package/dist/browser/ui/modals/CreateDealModal.js +12 -12
  22. package/dist/browser/ui/modals/DealActionsModal.js +21 -21
  23. package/dist/browser/ui/modals/index.js +33 -33
  24. package/dist/browser/ui/renderers/index.js +140 -118
  25. package/dist/browser/ui/renderers/pipeline.markdown.js +13 -2
  26. package/dist/browser/ui/renderers/pipeline.renderer.js +108 -97
  27. package/dist/browser/ui/tables/DealListTab.js +390 -0
  28. package/dist/deal/index.d.ts +2 -2
  29. package/dist/docs/crm-pipeline.docblock.js +1 -1
  30. package/dist/docs/index.js +1 -1
  31. package/dist/events/contact.event.js +1 -1
  32. package/dist/events/deal.event.js +1 -1
  33. package/dist/events/index.js +3 -3
  34. package/dist/events/task.event.js +1 -1
  35. package/dist/handlers/crm.handlers.d.ts +2 -0
  36. package/dist/handlers/crm.handlers.js +13 -2
  37. package/dist/handlers/index.d.ts +2 -2
  38. package/dist/handlers/index.js +13 -2
  39. package/dist/index.d.ts +3 -3
  40. package/dist/index.js +680 -447
  41. package/dist/node/docs/crm-pipeline.docblock.js +1 -1
  42. package/dist/node/docs/index.js +1 -1
  43. package/dist/node/events/contact.event.js +1 -1
  44. package/dist/node/events/deal.event.js +1 -1
  45. package/dist/node/events/index.js +3 -3
  46. package/dist/node/events/task.event.js +1 -1
  47. package/dist/node/handlers/crm.handlers.js +13 -2
  48. package/dist/node/handlers/index.js +13 -2
  49. package/dist/node/index.js +680 -447
  50. package/dist/node/ui/CrmDashboard.js +574 -352
  51. package/dist/node/ui/CrmDealCard.js +5 -5
  52. package/dist/node/ui/CrmPipelineBoard.js +13 -13
  53. package/dist/node/ui/hooks/index.js +21 -10
  54. package/dist/node/ui/hooks/useDealList.js +20 -9
  55. package/dist/node/ui/hooks/useDealMutations.js +1 -1
  56. package/dist/node/ui/index.js +683 -450
  57. package/dist/node/ui/modals/CreateDealModal.js +12 -12
  58. package/dist/node/ui/modals/DealActionsModal.js +21 -21
  59. package/dist/node/ui/modals/index.js +33 -33
  60. package/dist/node/ui/renderers/index.js +140 -118
  61. package/dist/node/ui/renderers/pipeline.markdown.js +13 -2
  62. package/dist/node/ui/renderers/pipeline.renderer.js +108 -97
  63. package/dist/node/ui/tables/DealListTab.js +390 -0
  64. package/dist/operations/index.d.ts +1 -1
  65. package/dist/ui/CrmDashboard.js +574 -352
  66. package/dist/ui/CrmDealCard.js +5 -5
  67. package/dist/ui/CrmPipelineBoard.js +13 -13
  68. package/dist/ui/hooks/index.d.ts +2 -2
  69. package/dist/ui/hooks/index.js +21 -10
  70. package/dist/ui/hooks/useDealList.d.ts +8 -2
  71. package/dist/ui/hooks/useDealList.js +20 -9
  72. package/dist/ui/hooks/useDealMutations.d.ts +9 -0
  73. package/dist/ui/hooks/useDealMutations.js +1 -1
  74. package/dist/ui/index.d.ts +3 -3
  75. package/dist/ui/index.js +683 -450
  76. package/dist/ui/modals/CreateDealModal.js +12 -12
  77. package/dist/ui/modals/DealActionsModal.js +21 -21
  78. package/dist/ui/modals/index.js +33 -33
  79. package/dist/ui/renderers/index.d.ts +1 -1
  80. package/dist/ui/renderers/index.js +140 -118
  81. package/dist/ui/renderers/pipeline.markdown.js +13 -2
  82. package/dist/ui/renderers/pipeline.renderer.d.ts +1 -1
  83. package/dist/ui/renderers/pipeline.renderer.js +108 -97
  84. package/dist/ui/tables/DealListTab.d.ts +20 -0
  85. package/dist/ui/tables/DealListTab.js +391 -0
  86. package/dist/ui/tables/DealListTab.smoke.test.d.ts +1 -0
  87. package/package.json +29 -14
  88. package/src/crm-pipeline.feature.ts +86 -86
  89. package/src/deal/deal.enum.ts +8 -8
  90. package/src/deal/deal.operation.ts +255 -255
  91. package/src/deal/deal.schema.ts +92 -92
  92. package/src/deal/deal.test-spec.ts +48 -48
  93. package/src/deal/index.ts +17 -19
  94. package/src/docs/crm-pipeline.docblock.ts +44 -44
  95. package/src/entities/company.entity.ts +52 -52
  96. package/src/entities/contact.entity.ts +67 -67
  97. package/src/entities/deal.entity.ts +134 -134
  98. package/src/entities/index.ts +27 -27
  99. package/src/entities/task.entity.ts +105 -105
  100. package/src/events/contact.event.ts +22 -22
  101. package/src/events/deal.event.ts +77 -77
  102. package/src/events/task.event.ts +19 -19
  103. package/src/example.ts +32 -32
  104. package/src/handlers/crm.handlers.ts +375 -357
  105. package/src/handlers/deal.handlers.ts +179 -179
  106. package/src/handlers/index.ts +18 -19
  107. package/src/handlers/mock-data.ts +167 -167
  108. package/src/index.ts +11 -11
  109. package/src/operations/index.ts +16 -16
  110. package/src/presentations/dashboard.presentation.ts +45 -45
  111. package/src/presentations/pipeline.presentation.ts +90 -90
  112. package/src/seeders/index.ts +26 -26
  113. package/src/shared/overlay-types.ts +23 -23
  114. package/src/ui/CrmDashboard.tsx +210 -279
  115. package/src/ui/CrmDealCard.tsx +64 -64
  116. package/src/ui/CrmPipelineBoard.tsx +105 -105
  117. package/src/ui/hooks/index.ts +3 -3
  118. package/src/ui/hooks/useDealList.ts +113 -85
  119. package/src/ui/hooks/useDealMutations.ts +151 -150
  120. package/src/ui/index.ts +5 -10
  121. package/src/ui/modals/CreateDealModal.tsx +217 -217
  122. package/src/ui/modals/DealActionsModal.tsx +390 -390
  123. package/src/ui/overlays/demo-overlays.ts +43 -43
  124. package/src/ui/renderers/index.ts +4 -3
  125. package/src/ui/renderers/pipeline.markdown.ts +165 -165
  126. package/src/ui/renderers/pipeline.renderer.tsx +17 -16
  127. package/src/ui/tables/DealListTab.smoke.test.tsx +149 -0
  128. package/src/ui/tables/DealListTab.tsx +276 -0
  129. package/tsconfig.json +7 -8
  130. package/tsdown.config.js +7 -3
@@ -1,93 +1,93 @@
1
1
  import {
2
- defineEntity,
3
- defineEntityEnum,
4
- field,
5
- index,
2
+ defineEntity,
3
+ defineEntityEnum,
4
+ field,
5
+ index,
6
6
  } from '@contractspec/lib.schema';
7
7
 
8
8
  /**
9
9
  * Contact status enum.
10
10
  */
11
11
  export const ContactStatusEnum = defineEntityEnum({
12
- name: 'ContactStatus',
13
- values: ['LEAD', 'PROSPECT', 'CUSTOMER', 'CHURNED', 'ARCHIVED'] as const,
14
- schema: 'crm',
15
- description: 'Status of a contact in the sales funnel.',
12
+ name: 'ContactStatus',
13
+ values: ['LEAD', 'PROSPECT', 'CUSTOMER', 'CHURNED', 'ARCHIVED'] as const,
14
+ schema: 'crm',
15
+ description: 'Status of a contact in the sales funnel.',
16
16
  });
17
17
 
18
18
  /**
19
19
  * Contact entity - individual person.
20
20
  */
21
21
  export const ContactEntity = defineEntity({
22
- name: 'Contact',
23
- description: 'An individual person in the CRM.',
24
- schema: 'crm',
25
- map: 'contact',
26
- fields: {
27
- id: field.id({ description: 'Unique contact ID' }),
22
+ name: 'Contact',
23
+ description: 'An individual person in the CRM.',
24
+ schema: 'crm',
25
+ map: 'contact',
26
+ fields: {
27
+ id: field.id({ description: 'Unique contact ID' }),
28
28
 
29
- // Basic info
30
- firstName: field.string({ description: 'First name' }),
31
- lastName: field.string({ description: 'Last name' }),
32
- email: field.email({ isOptional: true, isUnique: true }),
33
- phone: field.string({ isOptional: true }),
29
+ // Basic info
30
+ firstName: field.string({ description: 'First name' }),
31
+ lastName: field.string({ description: 'Last name' }),
32
+ email: field.email({ isOptional: true, isUnique: true }),
33
+ phone: field.string({ isOptional: true }),
34
34
 
35
- // Company
36
- companyId: field.string({
37
- isOptional: true,
38
- description: 'Associated company',
39
- }),
40
- jobTitle: field.string({ isOptional: true }),
35
+ // Company
36
+ companyId: field.string({
37
+ isOptional: true,
38
+ description: 'Associated company',
39
+ }),
40
+ jobTitle: field.string({ isOptional: true }),
41
41
 
42
- // Status
43
- status: field.enum('ContactStatus', { default: 'LEAD' }),
42
+ // Status
43
+ status: field.enum('ContactStatus', { default: 'LEAD' }),
44
44
 
45
- // Ownership
46
- organizationId: field.foreignKey(),
47
- ownerId: field.foreignKey({
48
- description: 'Sales rep who owns this contact',
49
- }),
45
+ // Ownership
46
+ organizationId: field.foreignKey(),
47
+ ownerId: field.foreignKey({
48
+ description: 'Sales rep who owns this contact',
49
+ }),
50
50
 
51
- // Source
52
- source: field.string({ isOptional: true, description: 'Lead source' }),
51
+ // Source
52
+ source: field.string({ isOptional: true, description: 'Lead source' }),
53
53
 
54
- // Social
55
- linkedInUrl: field.url({ isOptional: true }),
56
- twitterHandle: field.string({ isOptional: true }),
54
+ // Social
55
+ linkedInUrl: field.url({ isOptional: true }),
56
+ twitterHandle: field.string({ isOptional: true }),
57
57
 
58
- // Address
59
- address: field.string({ isOptional: true }),
60
- city: field.string({ isOptional: true }),
61
- state: field.string({ isOptional: true }),
62
- country: field.string({ isOptional: true }),
63
- postalCode: field.string({ isOptional: true }),
58
+ // Address
59
+ address: field.string({ isOptional: true }),
60
+ city: field.string({ isOptional: true }),
61
+ state: field.string({ isOptional: true }),
62
+ country: field.string({ isOptional: true }),
63
+ postalCode: field.string({ isOptional: true }),
64
64
 
65
- // Notes
66
- notes: field.string({ isOptional: true }),
67
- tags: field.string({ isArray: true }),
65
+ // Notes
66
+ notes: field.string({ isOptional: true }),
67
+ tags: field.string({ isArray: true }),
68
68
 
69
- // Custom fields
70
- customFields: field.json({ isOptional: true }),
69
+ // Custom fields
70
+ customFields: field.json({ isOptional: true }),
71
71
 
72
- // Engagement
73
- lastContactedAt: field.dateTime({ isOptional: true }),
74
- nextFollowUpAt: field.dateTime({ isOptional: true }),
72
+ // Engagement
73
+ lastContactedAt: field.dateTime({ isOptional: true }),
74
+ nextFollowUpAt: field.dateTime({ isOptional: true }),
75
75
 
76
- // Timestamps
77
- createdAt: field.createdAt(),
78
- updatedAt: field.updatedAt(),
76
+ // Timestamps
77
+ createdAt: field.createdAt(),
78
+ updatedAt: field.updatedAt(),
79
79
 
80
- // Relations
81
- company: field.belongsTo('Company', ['companyId'], ['id']),
82
- deals: field.hasMany('Deal'),
83
- tasks: field.hasMany('Task'),
84
- activities: field.hasMany('Activity'),
85
- },
86
- indexes: [
87
- index.on(['organizationId', 'status']),
88
- index.on(['organizationId', 'ownerId']),
89
- index.on(['organizationId', 'companyId']),
90
- index.on(['email']),
91
- ],
92
- enums: [ContactStatusEnum],
80
+ // Relations
81
+ company: field.belongsTo('Company', ['companyId'], ['id']),
82
+ deals: field.hasMany('Deal'),
83
+ tasks: field.hasMany('Task'),
84
+ activities: field.hasMany('Activity'),
85
+ },
86
+ indexes: [
87
+ index.on(['organizationId', 'status']),
88
+ index.on(['organizationId', 'ownerId']),
89
+ index.on(['organizationId', 'companyId']),
90
+ index.on(['email']),
91
+ ],
92
+ enums: [ContactStatusEnum],
93
93
  });
@@ -1,160 +1,160 @@
1
1
  import {
2
- defineEntity,
3
- defineEntityEnum,
4
- field,
5
- index,
2
+ defineEntity,
3
+ defineEntityEnum,
4
+ field,
5
+ index,
6
6
  } from '@contractspec/lib.schema';
7
7
 
8
8
  /**
9
9
  * Deal status enum.
10
10
  */
11
11
  export const DealStatusEnum = defineEntityEnum({
12
- name: 'DealStatus',
13
- values: ['OPEN', 'WON', 'LOST', 'STALE'] as const,
14
- schema: 'crm',
15
- description: 'Status of a deal.',
12
+ name: 'DealStatus',
13
+ values: ['OPEN', 'WON', 'LOST', 'STALE'] as const,
14
+ schema: 'crm',
15
+ description: 'Status of a deal.',
16
16
  });
17
17
 
18
18
  /**
19
19
  * Pipeline entity - sales pipeline definition.
20
20
  */
21
21
  export 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
-
31
- // Ownership
32
- organizationId: field.foreignKey(),
33
-
34
- // Settings
35
- isDefault: field.boolean({ default: false }),
36
-
37
- // Timestamps
38
- createdAt: field.createdAt(),
39
- updatedAt: field.updatedAt(),
40
-
41
- // Relations
42
- stages: field.hasMany('Stage'),
43
- deals: field.hasMany('Deal'),
44
- },
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
+
31
+ // Ownership
32
+ organizationId: field.foreignKey(),
33
+
34
+ // Settings
35
+ isDefault: field.boolean({ default: false }),
36
+
37
+ // Timestamps
38
+ createdAt: field.createdAt(),
39
+ updatedAt: field.updatedAt(),
40
+
41
+ // Relations
42
+ stages: field.hasMany('Stage'),
43
+ deals: field.hasMany('Deal'),
44
+ },
45
45
  });
46
46
 
47
47
  /**
48
48
  * Stage entity - pipeline stage.
49
49
  */
50
50
  export const StageEntity = defineEntity({
51
- name: 'Stage',
52
- description: 'A stage within a sales pipeline.',
53
- schema: 'crm',
54
- map: 'stage',
55
- fields: {
56
- id: field.id(),
57
- name: field.string({ description: 'Stage name' }),
58
- pipelineId: field.foreignKey(),
59
-
60
- // Position
61
- position: field.int({ description: 'Order in pipeline' }),
62
-
63
- // Probability
64
- probability: field.int({
65
- default: 0,
66
- description: 'Win probability (0-100)',
67
- }),
68
-
69
- // Type
70
- isWonStage: field.boolean({ default: false }),
71
- isLostStage: field.boolean({ default: false }),
72
-
73
- // Settings
74
- color: field.string({
75
- isOptional: true,
76
- description: 'Stage color for UI',
77
- }),
78
-
79
- // Timestamps
80
- createdAt: field.createdAt(),
81
- updatedAt: field.updatedAt(),
82
-
83
- // Relations
84
- pipeline: field.belongsTo('Pipeline', ['pipelineId'], ['id'], {
85
- onDelete: 'Cascade',
86
- }),
87
- deals: field.hasMany('Deal'),
88
- },
89
- indexes: [index.on(['pipelineId', 'position'])],
51
+ name: 'Stage',
52
+ description: 'A stage within a sales pipeline.',
53
+ schema: 'crm',
54
+ map: 'stage',
55
+ fields: {
56
+ id: field.id(),
57
+ name: field.string({ description: 'Stage name' }),
58
+ pipelineId: field.foreignKey(),
59
+
60
+ // Position
61
+ position: field.int({ description: 'Order in pipeline' }),
62
+
63
+ // Probability
64
+ probability: field.int({
65
+ default: 0,
66
+ description: 'Win probability (0-100)',
67
+ }),
68
+
69
+ // Type
70
+ isWonStage: field.boolean({ default: false }),
71
+ isLostStage: field.boolean({ default: false }),
72
+
73
+ // Settings
74
+ color: field.string({
75
+ isOptional: true,
76
+ description: 'Stage color for UI',
77
+ }),
78
+
79
+ // Timestamps
80
+ createdAt: field.createdAt(),
81
+ updatedAt: field.updatedAt(),
82
+
83
+ // Relations
84
+ pipeline: field.belongsTo('Pipeline', ['pipelineId'], ['id'], {
85
+ onDelete: 'Cascade',
86
+ }),
87
+ deals: field.hasMany('Deal'),
88
+ },
89
+ indexes: [index.on(['pipelineId', 'position'])],
90
90
  });
91
91
 
92
92
  /**
93
93
  * Deal entity - sales opportunity.
94
94
  */
95
95
  export const DealEntity = defineEntity({
96
- name: 'Deal',
97
- description: 'A sales opportunity/deal.',
98
- schema: 'crm',
99
- map: 'deal',
100
- fields: {
101
- id: field.id({ description: 'Unique deal ID' }),
102
- name: field.string({ description: 'Deal name' }),
103
-
104
- // Value
105
- value: field.decimal({ description: 'Deal value' }),
106
- currency: field.string({ default: '"USD"' }),
107
-
108
- // Pipeline
109
- pipelineId: field.foreignKey(),
110
- stageId: field.foreignKey(),
111
-
112
- // Status
113
- status: field.enum('DealStatus', { default: 'OPEN' }),
114
-
115
- // Associations
116
- contactId: field.string({ isOptional: true }),
117
- companyId: field.string({ isOptional: true }),
118
-
119
- // Ownership
120
- organizationId: field.foreignKey(),
121
- ownerId: field.foreignKey({ description: 'Deal owner' }),
122
-
123
- // Timeline
124
- expectedCloseDate: field.dateTime({ isOptional: true }),
125
- closedAt: field.dateTime({ isOptional: true }),
126
-
127
- // Tracking
128
- lostReason: field.string({ isOptional: true }),
129
- wonSource: field.string({ isOptional: true }),
130
-
131
- // Notes
132
- notes: field.string({ isOptional: true }),
133
- tags: field.string({ isArray: true }),
134
-
135
- // Custom fields
136
- customFields: field.json({ isOptional: true }),
137
-
138
- // Position in stage (for Kanban)
139
- stagePosition: field.int({ default: 0 }),
140
-
141
- // Timestamps
142
- createdAt: field.createdAt(),
143
- updatedAt: field.updatedAt(),
144
-
145
- // Relations
146
- pipeline: field.belongsTo('Pipeline', ['pipelineId'], ['id']),
147
- stage: field.belongsTo('Stage', ['stageId'], ['id']),
148
- contact: field.belongsTo('Contact', ['contactId'], ['id']),
149
- company: field.belongsTo('Company', ['companyId'], ['id']),
150
- tasks: field.hasMany('Task'),
151
- activities: field.hasMany('Activity'),
152
- },
153
- indexes: [
154
- index.on(['organizationId', 'status']),
155
- index.on(['pipelineId', 'stageId', 'stagePosition']),
156
- index.on(['ownerId', 'status']),
157
- index.on(['expectedCloseDate']),
158
- ],
159
- enums: [DealStatusEnum],
96
+ name: 'Deal',
97
+ description: 'A sales opportunity/deal.',
98
+ schema: 'crm',
99
+ map: 'deal',
100
+ fields: {
101
+ id: field.id({ description: 'Unique deal ID' }),
102
+ name: field.string({ description: 'Deal name' }),
103
+
104
+ // Value
105
+ value: field.decimal({ description: 'Deal value' }),
106
+ currency: field.string({ default: '"USD"' }),
107
+
108
+ // Pipeline
109
+ pipelineId: field.foreignKey(),
110
+ stageId: field.foreignKey(),
111
+
112
+ // Status
113
+ status: field.enum('DealStatus', { default: 'OPEN' }),
114
+
115
+ // Associations
116
+ contactId: field.string({ isOptional: true }),
117
+ companyId: field.string({ isOptional: true }),
118
+
119
+ // Ownership
120
+ organizationId: field.foreignKey(),
121
+ ownerId: field.foreignKey({ description: 'Deal owner' }),
122
+
123
+ // Timeline
124
+ expectedCloseDate: field.dateTime({ isOptional: true }),
125
+ closedAt: field.dateTime({ isOptional: true }),
126
+
127
+ // Tracking
128
+ lostReason: field.string({ isOptional: true }),
129
+ wonSource: field.string({ isOptional: true }),
130
+
131
+ // Notes
132
+ notes: field.string({ isOptional: true }),
133
+ tags: field.string({ isArray: true }),
134
+
135
+ // Custom fields
136
+ customFields: field.json({ isOptional: true }),
137
+
138
+ // Position in stage (for Kanban)
139
+ stagePosition: field.int({ default: 0 }),
140
+
141
+ // Timestamps
142
+ createdAt: field.createdAt(),
143
+ updatedAt: field.updatedAt(),
144
+
145
+ // Relations
146
+ pipeline: field.belongsTo('Pipeline', ['pipelineId'], ['id']),
147
+ stage: field.belongsTo('Stage', ['stageId'], ['id']),
148
+ contact: field.belongsTo('Contact', ['contactId'], ['id']),
149
+ company: field.belongsTo('Company', ['companyId'], ['id']),
150
+ tasks: field.hasMany('Task'),
151
+ activities: field.hasMany('Activity'),
152
+ },
153
+ indexes: [
154
+ index.on(['organizationId', 'status']),
155
+ index.on(['pipelineId', 'stageId', 'stagePosition']),
156
+ index.on(['ownerId', 'status']),
157
+ index.on(['expectedCloseDate']),
158
+ ],
159
+ enums: [DealStatusEnum],
160
160
  });
@@ -7,39 +7,39 @@ import type { ModuleSchemaContribution } from '@contractspec/lib.schema';
7
7
  import { CompanyEntity, CompanySizeEnum } from './company.entity';
8
8
  import { ContactEntity, ContactStatusEnum } from './contact.entity';
9
9
  import {
10
- DealEntity,
11
- PipelineEntity,
12
- StageEntity,
13
- DealStatusEnum,
10
+ DealEntity,
11
+ DealStatusEnum,
12
+ PipelineEntity,
13
+ StageEntity,
14
14
  } from './deal.entity';
15
15
  import {
16
- TaskEntity,
17
- ActivityEntity,
18
- TaskTypeEnum,
19
- TaskPriorityEnum,
20
- TaskStatusEnum,
16
+ ActivityEntity,
17
+ TaskEntity,
18
+ TaskPriorityEnum,
19
+ TaskStatusEnum,
20
+ TaskTypeEnum,
21
21
  } from './task.entity';
22
22
 
23
23
  /**
24
24
  * CRM Pipeline schema contribution.
25
25
  */
26
26
  export const crmPipelineSchemaContribution: ModuleSchemaContribution = {
27
- moduleId: '@contractspec/example.crm-pipeline',
28
- entities: [
29
- CompanyEntity,
30
- ContactEntity,
31
- DealEntity,
32
- PipelineEntity,
33
- StageEntity,
34
- TaskEntity,
35
- ActivityEntity,
36
- ],
37
- enums: [
38
- CompanySizeEnum,
39
- ContactStatusEnum,
40
- DealStatusEnum,
41
- TaskTypeEnum,
42
- TaskPriorityEnum,
43
- TaskStatusEnum,
44
- ],
27
+ moduleId: '@contractspec/example.crm-pipeline',
28
+ entities: [
29
+ CompanyEntity,
30
+ ContactEntity,
31
+ DealEntity,
32
+ PipelineEntity,
33
+ StageEntity,
34
+ TaskEntity,
35
+ ActivityEntity,
36
+ ],
37
+ enums: [
38
+ CompanySizeEnum,
39
+ ContactStatusEnum,
40
+ DealStatusEnum,
41
+ TaskTypeEnum,
42
+ TaskPriorityEnum,
43
+ TaskStatusEnum,
44
+ ],
45
45
  };