@salesforce/plugin-omnistudio-migration-tool 2.0.0-rc.6 → 2.0.0-rc.61

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 (252) hide show
  1. package/README.md +165 -73
  2. package/lib/commands/omnistudio/migration/assess.d.ts +23 -15
  3. package/lib/commands/omnistudio/migration/assess.js +250 -89
  4. package/lib/commands/omnistudio/migration/assess.js.map +1 -1
  5. package/lib/commands/omnistudio/migration/clean.d.ts +13 -0
  6. package/lib/commands/omnistudio/migration/clean.js +162 -0
  7. package/lib/commands/omnistudio/migration/clean.js.map +1 -0
  8. package/lib/commands/omnistudio/migration/info.d.ts +10 -16
  9. package/lib/commands/omnistudio/migration/info.js +53 -35
  10. package/lib/commands/omnistudio/migration/info.js.map +1 -1
  11. package/lib/commands/omnistudio/migration/migrate.d.ts +78 -18
  12. package/lib/commands/omnistudio/migration/migrate.js +461 -175
  13. package/lib/commands/omnistudio/migration/migrate.js.map +1 -1
  14. package/lib/error/deploymentErrors.d.ts +15 -0
  15. package/lib/error/deploymentErrors.js +35 -0
  16. package/lib/error/deploymentErrors.js.map +1 -0
  17. package/lib/error/errorInterfaces.d.ts +5 -0
  18. package/lib/error/errorInterfaces.js +9 -1
  19. package/lib/error/errorInterfaces.js.map +1 -1
  20. package/lib/javascripts/reportGeneratorUtility.js +585 -22
  21. package/lib/migration/ApexNamespaceRegistry.d.ts +49 -0
  22. package/lib/migration/ApexNamespaceRegistry.js +130 -0
  23. package/lib/migration/ApexNamespaceRegistry.js.map +1 -0
  24. package/lib/migration/CustomCssRegistry.d.ts +117 -0
  25. package/lib/migration/CustomCssRegistry.js +234 -0
  26. package/lib/migration/CustomCssRegistry.js.map +1 -0
  27. package/lib/migration/NameMappingRegistry.d.ts +134 -0
  28. package/lib/migration/NameMappingRegistry.js +411 -0
  29. package/lib/migration/NameMappingRegistry.js.map +1 -0
  30. package/lib/migration/base.d.ts +8 -6
  31. package/lib/migration/base.js +25 -8
  32. package/lib/migration/base.js.map +1 -1
  33. package/lib/migration/customLabels.d.ts +70 -0
  34. package/lib/migration/customLabels.js +177 -0
  35. package/lib/migration/customLabels.js.map +1 -0
  36. package/lib/migration/dataraptor.d.ts +13 -0
  37. package/lib/migration/dataraptor.js +205 -80
  38. package/lib/migration/dataraptor.js.map +1 -1
  39. package/lib/migration/deployer.d.ts +14 -0
  40. package/lib/migration/deployer.js +105 -0
  41. package/lib/migration/deployer.js.map +1 -0
  42. package/lib/migration/flexcard.d.ts +256 -6
  43. package/lib/migration/flexcard.js +1808 -268
  44. package/lib/migration/flexcard.js.map +1 -1
  45. package/lib/migration/globalautonumber.d.ts +8 -8
  46. package/lib/migration/globalautonumber.js +49 -24
  47. package/lib/migration/globalautonumber.js.map +1 -1
  48. package/lib/migration/interfaces.d.ts +14 -0
  49. package/lib/migration/interfaces.js.map +1 -1
  50. package/lib/migration/metadataobjnamecheck.js.map +1 -1
  51. package/lib/migration/omniscript.d.ts +218 -4
  52. package/lib/migration/omniscript.js +1709 -247
  53. package/lib/migration/omniscript.js.map +1 -1
  54. package/lib/migration/omniscriptInstance.d.ts +90 -0
  55. package/lib/migration/omniscriptInstance.js +755 -0
  56. package/lib/migration/omniscriptInstance.js.map +1 -0
  57. package/lib/migration/postMigrate.d.ts +20 -4
  58. package/lib/migration/postMigrate.js +199 -12
  59. package/lib/migration/postMigrate.js.map +1 -1
  60. package/lib/migration/premigrate.d.ts +51 -0
  61. package/lib/migration/premigrate.js +325 -0
  62. package/lib/migration/premigrate.js.map +1 -0
  63. package/lib/migration/related/ApexMigration.d.ts +3 -0
  64. package/lib/migration/related/ApexMigration.js +222 -56
  65. package/lib/migration/related/ApexMigration.js.map +1 -1
  66. package/lib/migration/related/ExperienceSiteMigration.d.ts +30 -5
  67. package/lib/migration/related/ExperienceSiteMigration.js +263 -73
  68. package/lib/migration/related/ExperienceSiteMigration.js.map +1 -1
  69. package/lib/migration/related/FlexipageMigration.d.ts +5 -5
  70. package/lib/migration/related/FlexipageMigration.js +60 -38
  71. package/lib/migration/related/FlexipageMigration.js.map +1 -1
  72. package/lib/migration/related/LwcMigration.js +45 -26
  73. package/lib/migration/related/LwcMigration.js.map +1 -1
  74. package/lib/migration/related/OmnistudioRelatedObjectMigrationFacade.js +48 -32
  75. package/lib/migration/related/OmnistudioRelatedObjectMigrationFacade.js.map +1 -1
  76. package/lib/styles/reportGenerator.css +241 -16
  77. package/lib/templates/assessmentReport.template +78 -8
  78. package/lib/templates/dashboard.template +86 -57
  79. package/lib/templates/migrationReport.template +151 -0
  80. package/lib/utils/OmnistudioSettingsPrefManager.d.ts +14 -0
  81. package/lib/utils/OmnistudioSettingsPrefManager.js +112 -0
  82. package/lib/utils/OmnistudioSettingsPrefManager.js.map +1 -0
  83. package/lib/utils/XMLUtil.js +2 -1
  84. package/lib/utils/XMLUtil.js.map +1 -1
  85. package/lib/utils/apex/executor/AnonymousApexRunner.d.ts +1 -1
  86. package/lib/utils/apex/parser/apexparser.d.ts +8 -1
  87. package/lib/utils/apex/parser/apexparser.js +79 -13
  88. package/lib/utils/apex/parser/apexparser.js.map +1 -1
  89. package/lib/utils/config/ExistingRecordCleanupService.d.ts +30 -0
  90. package/lib/utils/config/ExistingRecordCleanupService.js +266 -0
  91. package/lib/utils/config/ExistingRecordCleanupService.js.map +1 -0
  92. package/lib/utils/config/OmniStudioMetadataCleanupService.d.ts +36 -0
  93. package/lib/utils/config/OmniStudioMetadataCleanupService.js +123 -0
  94. package/lib/utils/config/OmniStudioMetadataCleanupService.js.map +1 -0
  95. package/lib/utils/config/SpecialCharacterRecordCleanupService.d.ts +17 -0
  96. package/lib/utils/config/SpecialCharacterRecordCleanupService.js +186 -0
  97. package/lib/utils/config/SpecialCharacterRecordCleanupService.js.map +1 -0
  98. package/lib/utils/constants/documentRegistry.d.ts +9 -17
  99. package/lib/utils/constants/documentRegistry.js +9 -17
  100. package/lib/utils/constants/documentRegistry.js.map +1 -1
  101. package/lib/utils/constants/stringContants.d.ts +78 -0
  102. package/lib/utils/constants/stringContants.js +91 -4
  103. package/lib/utils/constants/stringContants.js.map +1 -1
  104. package/lib/utils/customLabels.d.ts +35 -0
  105. package/lib/utils/customLabels.js +100 -0
  106. package/lib/utils/customLabels.js.map +1 -0
  107. package/lib/utils/dataModelService.d.ts +18 -0
  108. package/lib/utils/dataModelService.js +72 -0
  109. package/lib/utils/dataModelService.js.map +1 -0
  110. package/lib/utils/file/fileUtil.d.ts +3 -1
  111. package/lib/utils/file/fileUtil.js +30 -13
  112. package/lib/utils/file/fileUtil.js.map +1 -1
  113. package/lib/utils/flexipage/flexiPageTransformer.js +119 -23
  114. package/lib/utils/flexipage/flexiPageTransformer.js.map +1 -1
  115. package/lib/utils/formula/FormulaUtil.d.ts +1 -1
  116. package/lib/utils/formula/FormulaUtil.js +17 -9
  117. package/lib/utils/formula/FormulaUtil.js.map +1 -1
  118. package/lib/utils/formula/Stack.js.map +1 -1
  119. package/lib/utils/generatePackageXml.d.ts +6 -2
  120. package/lib/utils/generatePackageXml.js +73 -33
  121. package/lib/utils/generatePackageXml.js.map +1 -1
  122. package/lib/utils/index.d.ts +1 -0
  123. package/lib/utils/index.js +1 -0
  124. package/lib/utils/index.js.map +1 -1
  125. package/lib/utils/interfaces.d.ts +69 -8
  126. package/lib/utils/json/jsonutil.js.map +1 -1
  127. package/lib/utils/logger/fileLogger.js +17 -7
  128. package/lib/utils/logger/fileLogger.js.map +1 -1
  129. package/lib/utils/logger.d.ts +3 -3
  130. package/lib/utils/logger.js +10 -6
  131. package/lib/utils/logger.js.map +1 -1
  132. package/lib/utils/logging/debugtimer.js.map +1 -1
  133. package/lib/utils/lwcparser/fileutils/FileDiffUtil.js +30 -22
  134. package/lib/utils/lwcparser/fileutils/FileDiffUtil.js.map +1 -1
  135. package/lib/utils/lwcparser/fileutils/FileProcessorFactory.js.map +1 -1
  136. package/lib/utils/lwcparser/fileutils/HtmlFileProcessor.js.map +1 -1
  137. package/lib/utils/lwcparser/fileutils/JavascriptFileProcessor.js.map +1 -1
  138. package/lib/utils/lwcparser/fileutils/XmlFileProcessor.js.map +1 -1
  139. package/lib/utils/lwcparser/htmlParser/HTMLParser.js +29 -10
  140. package/lib/utils/lwcparser/htmlParser/HTMLParser.js.map +1 -1
  141. package/lib/utils/lwcparser/jsParser/JavaScriptParser.js +29 -11
  142. package/lib/utils/lwcparser/jsParser/JavaScriptParser.js.map +1 -1
  143. package/lib/utils/lwcparser/xmlParser/XmlParser.js +19 -8
  144. package/lib/utils/lwcparser/xmlParser/XmlParser.js.map +1 -1
  145. package/lib/utils/net/index.d.ts +5 -0
  146. package/lib/utils/net/index.js +40 -2
  147. package/lib/utils/net/index.js.map +1 -1
  148. package/lib/utils/omniscriptPackageManager.d.ts +31 -0
  149. package/lib/utils/omniscriptPackageManager.js +215 -0
  150. package/lib/utils/omniscriptPackageManager.js.map +1 -0
  151. package/lib/utils/orgPreferences.d.ts +25 -0
  152. package/lib/utils/orgPreferences.js +124 -8
  153. package/lib/utils/orgPreferences.js.map +1 -1
  154. package/lib/utils/orgUtils/index.d.ts +12 -5
  155. package/lib/utils/orgUtils/index.js +52 -22
  156. package/lib/utils/orgUtils/index.js.map +1 -1
  157. package/lib/utils/projectPathUtil.d.ts +1 -1
  158. package/lib/utils/projectPathUtil.js +27 -10
  159. package/lib/utils/projectPathUtil.js.map +1 -1
  160. package/lib/utils/promptUtil.d.ts +11 -1
  161. package/lib/utils/promptUtil.js +92 -0
  162. package/lib/utils/promptUtil.js.map +1 -1
  163. package/lib/utils/query/index.d.ts +1 -0
  164. package/lib/utils/query/index.js +18 -1
  165. package/lib/utils/query/index.js.map +1 -1
  166. package/lib/utils/recordPrioritization.d.ts +44 -0
  167. package/lib/utils/recordPrioritization.js +69 -0
  168. package/lib/utils/recordPrioritization.js.map +1 -0
  169. package/lib/utils/reportGenerator/reportInterfaces.d.ts +12 -0
  170. package/lib/utils/reportGenerator/reportUtil.d.ts +6 -1
  171. package/lib/utils/reportGenerator/reportUtil.js +22 -7
  172. package/lib/utils/reportGenerator/reportUtil.js.map +1 -1
  173. package/lib/utils/resultsbuilder/ApexAssessmentReporter.d.ts +1 -0
  174. package/lib/utils/resultsbuilder/ApexAssessmentReporter.js +40 -17
  175. package/lib/utils/resultsbuilder/ApexAssessmentReporter.js.map +1 -1
  176. package/lib/utils/resultsbuilder/CustomLabelAssessmentReporter.d.ts +13 -0
  177. package/lib/utils/resultsbuilder/CustomLabelAssessmentReporter.js +179 -0
  178. package/lib/utils/resultsbuilder/CustomLabelAssessmentReporter.js.map +1 -0
  179. package/lib/utils/resultsbuilder/CustomLabelMigrationReporter.d.ts +27 -0
  180. package/lib/utils/resultsbuilder/CustomLabelMigrationReporter.js +262 -0
  181. package/lib/utils/resultsbuilder/CustomLabelMigrationReporter.js.map +1 -0
  182. package/lib/utils/resultsbuilder/DRAssessmentReporter.js +38 -70
  183. package/lib/utils/resultsbuilder/DRAssessmentReporter.js.map +1 -1
  184. package/lib/utils/resultsbuilder/ExperienceSiteAssessmentReporter.d.ts +14 -0
  185. package/lib/utils/resultsbuilder/ExperienceSiteAssessmentReporter.js +143 -0
  186. package/lib/utils/resultsbuilder/ExperienceSiteAssessmentReporter.js.map +1 -0
  187. package/lib/utils/resultsbuilder/FlexcardAssessmentReporter.js +46 -85
  188. package/lib/utils/resultsbuilder/FlexcardAssessmentReporter.js.map +1 -1
  189. package/lib/utils/resultsbuilder/FlexipageAssessmentReporter.d.ts +1 -0
  190. package/lib/utils/resultsbuilder/FlexipageAssessmentReporter.js +37 -19
  191. package/lib/utils/resultsbuilder/FlexipageAssessmentReporter.js.map +1 -1
  192. package/lib/utils/resultsbuilder/GlobalAutoNumberAssessmentReporter.js +22 -14
  193. package/lib/utils/resultsbuilder/GlobalAutoNumberAssessmentReporter.js.map +1 -1
  194. package/lib/utils/resultsbuilder/IPAssessmentReporter.js +38 -71
  195. package/lib/utils/resultsbuilder/IPAssessmentReporter.js.map +1 -1
  196. package/lib/utils/resultsbuilder/LWCAssessmentReporter.d.ts +14 -0
  197. package/lib/utils/resultsbuilder/LWCAssessmentReporter.js +143 -139
  198. package/lib/utils/resultsbuilder/LWCAssessmentReporter.js.map +1 -1
  199. package/lib/utils/resultsbuilder/OSAssessmentReporter.js +41 -88
  200. package/lib/utils/resultsbuilder/OSAssessmentReporter.js.map +1 -1
  201. package/lib/utils/resultsbuilder/SaveForLaterAssessmentReporter.d.ts +12 -0
  202. package/lib/utils/resultsbuilder/SaveForLaterAssessmentReporter.js +109 -0
  203. package/lib/utils/resultsbuilder/SaveForLaterAssessmentReporter.js.map +1 -0
  204. package/lib/utils/resultsbuilder/assessmentReporter.d.ts +16 -6
  205. package/lib/utils/resultsbuilder/assessmentReporter.js +96 -152
  206. package/lib/utils/resultsbuilder/assessmentReporter.js.map +1 -1
  207. package/lib/utils/resultsbuilder/helpers/AssessmentReportHelper.d.ts +104 -0
  208. package/lib/utils/resultsbuilder/helpers/AssessmentReportHelper.js +380 -0
  209. package/lib/utils/resultsbuilder/helpers/AssessmentReportHelper.js.map +1 -0
  210. package/lib/utils/resultsbuilder/index.d.ts +37 -1
  211. package/lib/utils/resultsbuilder/index.js +582 -151
  212. package/lib/utils/resultsbuilder/index.js.map +1 -1
  213. package/lib/utils/resultsbuilder/reportingHelper.d.ts +2 -7
  214. package/lib/utils/resultsbuilder/reportingHelper.js +0 -43
  215. package/lib/utils/resultsbuilder/reportingHelper.js.map +1 -1
  216. package/lib/utils/sfcli/project/sfProject.d.ts +29 -0
  217. package/lib/utils/sfcli/project/sfProject.js +220 -2
  218. package/lib/utils/sfcli/project/sfProject.js.map +1 -1
  219. package/lib/utils/shell/cli.js +20 -14
  220. package/lib/utils/shell/cli.js.map +1 -1
  221. package/lib/utils/storageUtil.d.ts +14 -1
  222. package/lib/utils/storageUtil.js +31 -1
  223. package/lib/utils/storageUtil.js.map +1 -1
  224. package/lib/utils/stringUtils.d.ts +24 -0
  225. package/lib/utils/stringUtils.js +76 -9
  226. package/lib/utils/stringUtils.js.map +1 -1
  227. package/lib/utils/templateParser/__tests__/test.js +1 -2
  228. package/lib/utils/templateParser/__tests__/test.js.map +1 -1
  229. package/lib/utils/templateParser/generate.d.ts +1 -1
  230. package/lib/utils/templateParser/generate.js.map +1 -1
  231. package/lib/utils/templateParser/model/elementNode.d.ts +2 -2
  232. package/lib/utils/templateParser/model/elementNode.js +11 -2
  233. package/lib/utils/templateParser/model/elementNode.js.map +1 -1
  234. package/lib/utils/templateParser/model/nodeTypes.js +1 -1
  235. package/lib/utils/templateParser/model/nodeTypes.js.map +1 -1
  236. package/lib/utils/templateParser/util.d.ts +2 -2
  237. package/lib/utils/templateParser/util.js.map +1 -1
  238. package/lib/utils/validatorService.d.ts +14 -0
  239. package/lib/utils/validatorService.js +136 -0
  240. package/lib/utils/validatorService.js.map +1 -0
  241. package/messages/assess.json +220 -103
  242. package/messages/clean.json +40 -0
  243. package/messages/info.json +2 -1
  244. package/messages/migrate.json +314 -102
  245. package/oclif.manifest.json +1 -1
  246. package/package.json +49 -13
  247. package/lib/commands/basecommand.d.ts +0 -8
  248. package/lib/commands/basecommand.js +0 -13
  249. package/lib/commands/basecommand.js.map +0 -1
  250. package/lib/utils/OmniGlobalAutoNumberPrefManager.d.ts +0 -40
  251. package/lib/utils/OmniGlobalAutoNumberPrefManager.js +0 -65
  252. package/lib/utils/OmniGlobalAutoNumberPrefManager.js.map +0 -1
@@ -9,6 +9,10 @@
9
9
  text-align: center;
10
10
  }
11
11
 
12
+ .slds-m-around_medium {
13
+ margin: 1vw;
14
+ }
15
+
12
16
  .filter-header-bar {
13
17
  display: flex;
14
18
  justify-content: flex-end;
@@ -32,6 +36,31 @@
32
36
  margin-left: -32px;
33
37
  }
34
38
 
39
+ /* EXPORT CSV BUTTON */
40
+ .export-csv-button {
41
+ display: flex;
42
+ align-items: center;
43
+ gap: 6px;
44
+ cursor: pointer;
45
+ background-color: #0070d2;
46
+ color: #fff;
47
+ padding: 6px 12px;
48
+ border-radius: 4px;
49
+ font-weight: 500;
50
+ font-size: 13px;
51
+ height: 28px;
52
+ border: none;
53
+ white-space: nowrap;
54
+ }
55
+
56
+ .export-csv-button:hover {
57
+ background-color: #005bb5;
58
+ }
59
+
60
+ .export-csv-button:active {
61
+ background-color: #004494;
62
+ }
63
+
35
64
  /* FILTER BUTTON */
36
65
  .filter-toggle-button {
37
66
  display: flex;
@@ -48,9 +77,11 @@
48
77
  /* === Dropdown Styles === */
49
78
  .filter-dropdown-container {
50
79
  display: flex;
51
- justify-content: flex-end; /* push right */
80
+ justify-content: flex-end;
81
+ /* push right */
52
82
  width: 100%;
53
83
  padding: 8px 0;
84
+ position: relative;
54
85
  }
55
86
 
56
87
  .filter-dropdown {
@@ -58,13 +89,15 @@
58
89
  position: absolute;
59
90
  background-color: white;
60
91
  min-width: 250px;
92
+ max-width: 400px;
61
93
  box-shadow: 0 8px 16px rgba(0, 0, 0, 0.15);
62
94
  padding: 12px;
63
- z-index: 10;
95
+ z-index: 100;
64
96
  border: 1px solid #ccc;
65
97
  border-radius: 8px;
66
- right: 0;
67
- margin: 32px;
98
+ right: 20px;
99
+ top: 40px;
100
+ margin-top: 0;
68
101
  }
69
102
 
70
103
  .filter-dropdown.show {
@@ -102,7 +135,8 @@
102
135
 
103
136
  /* === Table Styles === */
104
137
  .table-container {
105
- overflow: auto;
138
+ overflow-x: auto;
139
+ overflow-y: auto;
106
140
  max-width: 100%;
107
141
  position: relative;
108
142
  margin-top: 20px;
@@ -157,13 +191,14 @@ tbody tr td {
157
191
  /* === Filter, search and count === */
158
192
  .slds-text-heading_large {
159
193
  width: auto;
160
- height: 28px;
194
+ min-height: 28px;
161
195
  top: 50px;
162
196
  left: 43px;
163
197
  font-weight: 200;
164
198
  font-size: 28px;
165
199
  line-height: 28px;
166
200
  letter-spacing: 0px;
201
+ white-space: nowrap;
167
202
  }
168
203
 
169
204
  .search-container {
@@ -182,7 +217,8 @@ tbody tr td {
182
217
  }
183
218
 
184
219
  .search-input {
185
- padding: 6px 10px 6px 28px; /* space for icon on left */
220
+ padding: 6px 10px 6px 28px;
221
+ /* space for icon on left */
186
222
  border: 1px solid #ccc;
187
223
  border-radius: 4px;
188
224
  font-size: 14px;
@@ -238,6 +274,12 @@ html {
238
274
  background: #f8f8f8;
239
275
  }
240
276
 
277
+ body {
278
+ overflow-x: hidden;
279
+ margin: 0;
280
+ padding: 0;
281
+ }
282
+
241
283
  .diffModal {
242
284
  display: none;
243
285
  position: fixed;
@@ -305,12 +347,15 @@ html {
305
347
 
306
348
  .expandModalButton {
307
349
  position: absolute;
308
- top: 5px;
309
- right: 5px;
350
+ top: 8px;
351
+ right: 8px;
310
352
  width: 30px;
311
353
  height: 30px;
312
354
  opacity: 0.7;
355
+ display: none;
356
+ z-index: 10;
313
357
  }
358
+
314
359
  .report-wrapper {
315
360
  display: flex;
316
361
  gap: 20px;
@@ -325,7 +370,7 @@ html {
325
370
  .scrollable-wrapper {
326
371
  display: flex;
327
372
  width: 100%;
328
- overflow-x: auto;
373
+ /* overflow-x moved to .table-container to allow sticky positioning to work */
329
374
  transition: all 0.3s ease;
330
375
  box-sizing: border-box;
331
376
  }
@@ -335,7 +380,8 @@ html {
335
380
  width: 100%;
336
381
  transition: width 0.3s ease;
337
382
  box-sizing: border-box;
338
- min-width: 700px;
383
+ /* Removed min-width to prevent forcing horizontal scroll at page level */
384
+ /* min-width: 700px; */
339
385
  }
340
386
 
341
387
  .table-summary-wrapper.shrunk {
@@ -386,7 +432,7 @@ html {
386
432
  .details-body {
387
433
  display: flex;
388
434
  flex-direction: row;
389
- gap: 10px;
435
+ gap: 0.5vw;
390
436
  margin-top: 2rem;
391
437
  flex-wrap: wrap;
392
438
  }
@@ -402,8 +448,8 @@ html {
402
448
  display: flex;
403
449
  flex-direction: column;
404
450
  gap: 10px;
405
- height: 14rem;
406
- min-width: 25rem;
451
+ min-height: 14rem;
452
+ min-width: max(23.6vw, 20rem);
407
453
  background-color: #fff;
408
454
  }
409
455
 
@@ -428,7 +474,6 @@ hr {
428
474
  }
429
475
 
430
476
  td {
431
- border-left: 1px solid #e5e5e5;
432
477
  word-wrap: break-word;
433
478
  white-space: normal !important;
434
479
  }
@@ -541,7 +586,8 @@ td {
541
586
 
542
587
  .invalid-icon {
543
588
  position: relative;
544
- padding-left: 24px; /* space for icon */
589
+ padding-left: 24px;
590
+ /* space for icon */
545
591
  }
546
592
 
547
593
  .invalid-icon::before {
@@ -566,3 +612,182 @@ td {
566
612
  background-color: red;
567
613
  transform: translateY(-50%) rotate(45deg);
568
614
  }
615
+
616
+ .highlight {
617
+ background-color: #f3f3f3;
618
+ }
619
+
620
+ .normal-td-padding {
621
+ padding-left: 0.5rem !important;
622
+ }
623
+
624
+ .no-display {
625
+ display: none;
626
+ }
627
+
628
+ .diff-cell {
629
+ min-width: 30rem;
630
+ max-width: none !important;
631
+ padding: 0 !important;
632
+ overflow: visible !important;
633
+ }
634
+
635
+ .diff-content-wrapper {
636
+ position: relative;
637
+ display: block;
638
+ width: 100%;
639
+ }
640
+
641
+ .diff-content-wrapper:hover .expandModalButton {
642
+ display: block;
643
+ }
644
+
645
+ /* === Dashboard Layout Changes === */
646
+
647
+ /* Two-Pane Layout */
648
+ .dashboard-layout-container {
649
+ display: flex;
650
+ gap: 1vw;
651
+ margin-top: 16px;
652
+ }
653
+
654
+ .dashboard-layout-container.single-pane {
655
+ gap: 0;
656
+ }
657
+
658
+ .dashboard-left-pane {
659
+ flex: 1;
660
+ min-width: 72vw;
661
+ /* Allows flex item to shrink below content size */
662
+ }
663
+
664
+ .dashboard-layout-container.single-pane .dashboard-left-pane {
665
+ flex: 1;
666
+ width: 100%;
667
+ }
668
+
669
+ .dashboard-right-pane {
670
+ margin-top: 16px;
671
+ }
672
+
673
+ .dashboard-right-pane li {
674
+ margin-bottom: 1rem;
675
+ }
676
+
677
+ .user-actions-container {
678
+ background-color: #fff;
679
+ border-radius: 6px;
680
+ padding: 20px;
681
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
682
+ top: 20px;
683
+ }
684
+
685
+ .action-items-subtitle {
686
+ color: #666;
687
+ font-weight: 500;
688
+ }
689
+
690
+ .dashboard-common-pane {
691
+ display: none;
692
+ }
693
+
694
+ /* Responsive adjustments */
695
+ @media (max-width: 1200px) {
696
+ .dashboard-common-pane {
697
+ display: block;
698
+ margin-top: 1rem;
699
+ }
700
+
701
+ .dashboard-right-pane {
702
+ display: none;
703
+ }
704
+
705
+ .dashboard-layout-container {
706
+ flex-direction: column;
707
+ }
708
+
709
+ .dashboard-layout-container.single-pane {
710
+ flex-direction: column;
711
+ }
712
+
713
+ .dashboard-right-pane {
714
+ flex: none;
715
+ max-width: none;
716
+ margin-top: 16px;
717
+ }
718
+
719
+ .dashboard-right-pane li {
720
+ margin-bottom: 1rem;
721
+ }
722
+
723
+ .user-actions-container {
724
+ position: static;
725
+ }
726
+ }
727
+
728
+ /* Status Legends Styling */
729
+ .status-legends-container {
730
+ background-color: #fff;
731
+ border-radius: 6px;
732
+ padding: 16px;
733
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
734
+ margin-bottom: 16px;
735
+ }
736
+
737
+ .status-legends h3 {
738
+ color: #333;
739
+ font-weight: 600;
740
+ margin-bottom: 12px;
741
+ }
742
+
743
+ .legend-items {
744
+ display: flex;
745
+ flex-direction: column;
746
+ gap: 12px;
747
+ }
748
+
749
+ .legend-item {
750
+ display: flex;
751
+ align-items: flex-start;
752
+ gap: 12px;
753
+ }
754
+
755
+ .legend-color {
756
+ width: 16px;
757
+ height: 16px;
758
+ border-radius: 3px;
759
+ display: inline-block;
760
+ margin-top: 2px;
761
+ flex-shrink: 0;
762
+ }
763
+
764
+ .legend-content {
765
+ display: flex;
766
+ flex-direction: column;
767
+ gap: 2px;
768
+ }
769
+
770
+ .legend-green {
771
+ background-color: #2e844a;
772
+ }
773
+
774
+ .legend-yellow {
775
+ background-color: #fe9339;
776
+ }
777
+
778
+ .legend-red {
779
+ background-color: #ea001e;
780
+ }
781
+
782
+ .legend-text {
783
+ font-size: 14px;
784
+ color: #333;
785
+ font-weight: 600;
786
+ }
787
+
788
+ .legend-description {
789
+ font-size: 13px;
790
+ color: #666;
791
+ font-weight: 400;
792
+ line-height: 1.4;
793
+ }
@@ -9,10 +9,11 @@
9
9
  </head>
10
10
 
11
11
  <body>
12
+ <div id="props" class="no-display">{{props}}</div>
12
13
  <div style="margin: 20px">
13
14
  <div class="report-wrapper">
14
15
  <div id="scrollable-wrapper" class="scrollable-wrapper">
15
- <c:if exp={$callToAction.length> 0}>
16
+ <c:if exp={$callToAction.length>0}>
16
17
  <!-- Call To Action Button -->
17
18
  <button class="cta-button" onclick="toggleCtaPanel()">Call To Action</button>
18
19
 
@@ -48,7 +49,7 @@
48
49
  <path
49
50
  d="M31.082 27.5l-13.999-24.249c-0.237-0.352-0.633-0.58-1.083-0.58s-0.846 0.228-1.080 0.575l-0.003 0.005-14 24.249c-0.105 0.179-0.167 0.395-0.167 0.625 0 0.69 0.56 1.25 1.25 1.25h28c0.69 0 1.249-0.56 1.249-1.25 0-0.23-0.062-0.446-0.171-0.631zM4.165 26.875l11.835-20.499 11.834 20.499zM14.75 12v8.994c0 0.69 0.56 1.25 1.25 1.25s1.25-0.56 1.25-1.25V12c0-0.69-0.56-1.25-1.25-1.25s-1.25 0.56-1.25 1.25zM15.12 23.619c-0.124 0.106-0.22 0.24-0.278 0.394-0.051 0.143-0.08 0.308-0.08 0.48s0.029 0.337 0.083 0.491c0.144 0.3 0.38 0.536 0.671 0.676 0.143 0.051 0.308 0.080 0.48 0.080s0.337-0.029 0.49-0.083c0.156-0.071 0.288-0.166 0.4-0.281 0.224-0.225 0.363-0.536 0.363-0.878 0-0.687-0.557-1.244-1.244-1.244-0.343 0-0.653 0.139-0.878 0.363z" />
50
51
  </svg>
51
- <span>High level description of what actions were taken as part of the migration will come here</span>
52
+ <span>A high-level summary of the actions taken during the Omnistudio migration will appear here.</span>
52
53
  </div>
53
54
 
54
55
  <div class="header-container">
@@ -72,13 +73,13 @@
72
73
  <div class="label-value">{{org.dataModel}}</div>
73
74
  </div>
74
75
 
75
- <div class="org-details-section">
76
- <div class="label-key">Assessment Date and Time</div>
77
- <div class="label-value">{{assessmentDate}}</div>
78
- </div>
76
+ <div class="org-details-section">
77
+ <div class="label-key">Assessment Date and Time</div>
78
+ <div class="label-value">{{assessmentDate}}</div>
79
79
  </div>
80
+ </div>
80
81
 
81
- <div class="filter-dropdown-container">
82
+ <div class="filter-dropdown-container">
82
83
  <div class="filter-header-bar">
83
84
  <!-- Row count display -->
84
85
  <div class="row-count-display" id="row-count">Loading Records...</div>
@@ -93,6 +94,14 @@
93
94
  <input type="text" id="name-search-input" class="search-input" placeholder="Search Name"
94
95
  oninput="filterAndSearchTable('report-table')" />
95
96
  </div>
97
+ <!-- Export to CSV button -->
98
+ <button class="export-csv-button" onclick="exportTableToCSV('report-table')" title="Export to CSV">
99
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="currentColor" viewBox="0 0 16 16">
100
+ <path d="M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5"/>
101
+ <path d="M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708z"/>
102
+ </svg>
103
+ Export CSV
104
+ </button>
96
105
  <c:if exp={$filterGroups.length>0}>
97
106
  <div class="filter-toggle-button" onclick="toggleFilterDropdown('report-table')">
98
107
  Filters
@@ -127,7 +136,7 @@
127
136
  </c:for>
128
137
  </div>
129
138
  </div>
130
- <div class="table-container">
139
+ <div class="table-container standard custom" data-model="(org.dataModel)" data-report-type="(reportType)">
131
140
  <table
132
141
  class="slds-table slds-table_cell-buffer slds-table_bordered slds-table_striped slds-table_col-bordered"
133
142
  aria-label="Data Mapper Assessment">
@@ -219,6 +228,19 @@
219
228
  </tr>
220
229
  </tbody>
221
230
  </table>
231
+ <c:if exp={Array.isArray($actionItems) && $actionItems.length> 0}>
232
+ <div class="slds-box slds-theme_default slds-m-top_medium">
233
+ <div class="slds-text-heading_medium slds-m-bottom_small">User Action Required</div>
234
+ <div class="slds-m-bottom_small">
235
+ <p class="slds-m-bottom_x-small">Action Items</p>
236
+ <ul class="slds-list_dotted">
237
+ <c:for items=(actionItems) var="actionItem">
238
+ <li class="slds-item slds-text-color_destructive">{{actionItem}}</li>
239
+ </c:for>
240
+ </ul>
241
+ </div>
242
+ </div>
243
+ </c:if>
222
244
  </div>
223
245
  </div>
224
246
  <div id="cta-summary-panel" class="cta-summary-panel hidden">
@@ -260,6 +282,54 @@
260
282
  </div>
261
283
  </c:if>
262
284
  </div>
285
+
286
+ <!-- Pagination Navigation -->
287
+ <c:if exp={$pagination}>
288
+ <div class="pagination-container" style="margin-top: 20px; text-align: center;">
289
+ <div class="pagination-info" style="margin-bottom: 10px; color: #666;">
290
+ Page {{pagination.currentPage}} of {{pagination.totalPages}}
291
+ ({{pagination.pageSize}} items per page)
292
+ </div>
293
+
294
+ <div class="pagination-controls">
295
+ <c:if exp={$pagination.hasPreviousPage}>
296
+ <a href="{{pagination.previousPageFile}}" class="pagination-btn" style="
297
+ display: inline-block;
298
+ padding: 8px 16px;
299
+ margin: 0 5px;
300
+ background-color: #0070d2;
301
+ color: white;
302
+ text-decoration: none;
303
+ border-radius: 4px;
304
+ font-weight: bold;
305
+ ">&larr; Previous</a>
306
+ </c:if>
307
+
308
+ <span class="current-page" style="
309
+ display: inline-block;
310
+ padding: 8px 16px;
311
+ margin: 0 5px;
312
+ background-color: #f3f2f2;
313
+ color: #333;
314
+ border-radius: 4px;
315
+ font-weight: bold;
316
+ ">{{pagination.currentPage}}</span>
317
+
318
+ <c:if exp={$pagination.hasNextPage}>
319
+ <a href="{{pagination.nextPageFile}}" class="pagination-btn" style="
320
+ display: inline-block;
321
+ padding: 8px 16px;
322
+ margin: 0 5px;
323
+ background-color: #0070d2;
324
+ color: white;
325
+ text-decoration: none;
326
+ border-radius: 4px;
327
+ font-weight: bold;
328
+ ">Next &rarr;</a>
329
+ </c:if>
330
+ </div>
331
+ </div>
332
+ </c:if>
263
333
  </div>
264
334
  </div>
265
335
  </div>
@@ -11,76 +11,105 @@
11
11
  <body>
12
12
  <div class="slds-m-around_medium">
13
13
  <div class="slds-text-heading_large">{{heading}}</div>
14
- <div class="header-container">
15
- <div class="org-details-section">
16
- <div class="label-key">Org Name</div>
17
- <div class="label-value">{{org.name}}</div>
18
- </div>
19
-
20
- <div class="org-details-section">
21
- <div class="label-key">Org ID</div>
22
- <div class="label-value">{{org.id}}</div>
23
- </div>
14
+
15
+ <!-- Two-Pane Layout Container -->
16
+ <div class="dashboard-layout-container">
17
+ <!-- Left Pane: Org Details, Legends, and Component Cards -->
18
+ <div class="dashboard-left-pane">
19
+ <!-- Org Details Section -->
20
+ <div class="header-container">
21
+ <div class="org-details-section">
22
+ <div class="label-key">Org Name</div>
23
+ <div class="label-value">{{org.name}}</div>
24
+ </div>
24
25
 
25
- <div class="org-details-section">
26
- <div class="label-key">Namespace</div>
27
- <div class="label-value">{{org.namespace}}</div>
28
- </div>
26
+ <div class="org-details-section">
27
+ <div class="label-key">Org ID</div>
28
+ <div class="label-value">{{org.id}}</div>
29
+ </div>
29
30
 
30
- <div class="org-details-section">
31
- <div class="label-key">Data Model</div>
32
- <div class="label-value">{{org.dataModel}}</div>
33
- </div>
31
+ <div class="org-details-section">
32
+ <div class="label-key">Namespace</div>
33
+ <div class="label-value">{{org.namespace}}</div>
34
+ </div>
34
35
 
35
- <div class="org-details-section">
36
- <c:if exp={$mode == 'assess'}>
37
- <div class="label-key">Assessment Date and Time</div>
38
- </c:if>
39
- <c:if exp={$mode == 'migrate'}>
40
- <div class="label-key">Migration Date and Time</div>
41
- </c:if>
42
- <div class="label-value">{{assessmentDate}}</div>
43
- </div>
44
- </div>
36
+ <div class="org-details-section">
37
+ <div class="label-key">Data Model</div>
38
+ <div class="label-value">{{org.dataModel}}</div>
39
+ </div>
45
40
 
46
- <div class="details-body">
47
- <c:for items=(summaryItems) var="summary">
48
- <div class="slds-box slds-box_small slds-box_body-spacing">
49
- <div class="detail-row">
50
- <div class="detail-item slds-text-heading_medium">{{summary.name}}</div>
51
- <div class="detail-item slds-text-heading_medium">{{summary.total}}</div>
41
+ <div class="org-details-section">
42
+ <c:if exp={$mode == 'assess'}>
43
+ <div class="label-key">Assessment Date and Time</div>
44
+ </c:if>
45
+ <c:if exp={$mode == 'migrate'}>
46
+ <div class="label-key">Migration Date and Time</div>
47
+ </c:if>
48
+ <div class="label-value">{{assessmentDate}}</div>
52
49
  </div>
53
- <hr />
54
- <c:for items=(summary.data) var="item">
55
- <div class="detail-row">
56
- <div class="detail-item">{{item.name}}</div>
57
- <div class="(item.cssClass)">{{item.count}}</div>
50
+ </div>
51
+
52
+ <div class="dashboard-common-pane">
53
+ <c:if exp={Array.isArray($actionItems) && $actionItems.length > 0}>
54
+ <div class="user-actions-container">
55
+ <div class="slds-text-heading_medium slds-m-bottom_small">User Actions Required</div>
56
+ <div class="slds-text-body_small slds-m-bottom_small action-items-subtitle">Action Items</div>
57
+ <ul class="slds-list_dotted">
58
+ <c:for items=(actionItems) var="actionItem">
59
+ <li class="slds-item action-item-black">{{actionItem}}</li>
60
+ </c:for>
61
+ </ul>
58
62
  </div>
59
- </c:for>
63
+ </c:if>
64
+ </div>
60
65
 
61
- <div class="detail-row card-footer">
62
- <button class="slds-button_stretch slds-button slds-button_neutral" data-summary="(summary.file)"
63
- onclick="openReport(this)">
64
- View Report
65
- </button>
66
- </div>
66
+ <!-- Component Cards Section -->
67
+ <div class="details-body">
68
+ <c:for items=(summaryItems) var="summary">
69
+ <div class="slds-box slds-box_small slds-box_body-spacing">
70
+ <div class="detail-row">
71
+ <div class="detail-item slds-text-heading_medium">{{summary.name}}</div>
72
+ <c:if exp={$summary.showDetails !== false}>
73
+ <div class="detail-item slds-text-heading_medium">{{summary.total}}</div>
74
+ </c:if>
75
+ </div>
76
+ <hr />
77
+ <c:for items=(summary.data) var="item">
78
+ <div class="detail-row">
79
+ <div class="detail-item">{{item.name}}</div>
80
+ <c:if exp={$summary.showDetails !== false}>
81
+ <div class="(item.cssClass)">{{item.count}}</div>
82
+ </c:if>
83
+ </div>
84
+ </c:for>
85
+
86
+ <c:if exp={$summary.showDetails !== false}>
87
+ <div class="detail-row card-footer">
88
+ <button class="slds-button_stretch slds-button slds-button_neutral" data-summary="(summary.file)"
89
+ onclick="openReport(this)">
90
+ View Report
91
+ </button>
92
+ </div>
93
+ </c:if>
94
+ </div>
95
+ </c:for>
67
96
  </div>
68
- </c:for>
69
- </div>
70
- <div>
71
- <c:if exp={Array.isArray($actionItems) && $actionItems.length > 0}>
72
- <div class="slds-box slds-theme_default slds-m-top_medium">
73
- <div class="slds-text-heading_medium slds-m-bottom_small">User Action Required</div>
74
- <div class="slds-m-bottom_small">
75
- <p class="slds-m-bottom_x-small">Action Items</p>
97
+ </div>
98
+
99
+ <!-- Right Pane: User Actions -->
100
+ <div class="dashboard-right-pane">
101
+ <c:if exp={Array.isArray($actionItems) && $actionItems.length > 0}>
102
+ <div class="user-actions-container">
103
+ <div class="slds-text-heading_medium slds-m-bottom_small">User Actions Required</div>
104
+ <div class="slds-text-body_small slds-m-bottom_small action-items-subtitle">Action Items</div>
76
105
  <ul class="slds-list_dotted">
77
106
  <c:for items=(actionItems) var="actionItem">
78
- <li class="slds-item slds-text-color_destructive">{{actionItem}}</li>
107
+ <li class="slds-item action-item-black">{{actionItem}}</li>
79
108
  </c:for>
80
109
  </ul>
81
110
  </div>
82
- </div>
83
- </c:if>
111
+ </c:if>
112
+ </div>
84
113
  </div>
85
114
  </div>
86
115
  </body>