@pega/sdk 0.0.4 → 0.0.5

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 (317) hide show
  1. package/dist/index.js +287 -1
  2. package/package.json +1 -1
  3. package/templates/angular-sdk-reference/package.json +12 -12
  4. package/templates/angular-sdk-reference/tsconfig.json +1 -1
  5. package/templates/react-native-sdk-reference/expo-env.d.ts +3 -0
  6. package/templates/react-sdk-reference/{.github/agents/implementation-expert.agent.md → .ai-common/agents/implementation-expert.md} +23 -26
  7. package/templates/react-sdk-reference/{.github/copilot-instructions.md → .ai-common/global/ai-agent-instructions.md} +7 -7
  8. package/templates/react-sdk-reference/{.github/instructions/component-map.instructions.md → .ai-common/instructions/component-map.md} +8 -1
  9. package/templates/react-sdk-reference/{.github/instructions/dse-component.instructions.md → .ai-common/instructions/dse-component.md} +1 -1
  10. package/templates/react-sdk-reference/{.github/instructions/field-component.instructions.md → .ai-common/instructions/field-component.md} +2 -1
  11. package/templates/react-sdk-reference/{.github/instructions/template-component.instructions.md → .ai-common/instructions/template-component.md} +1 -1
  12. package/templates/react-sdk-reference/{.github/instructions/widget-component.instructions.md → .ai-common/instructions/widget-component.md} +1 -1
  13. package/templates/react-sdk-reference/{.github/prompts/add-component.prompt.md → .ai-common/prompts/add-component.md} +45 -18
  14. package/templates/react-sdk-reference/{.cursor/rules → .ai-common}/prompts/component-manifest.json +8 -2
  15. package/templates/react-sdk-reference/{.github/prompts/generate-all-components.prompt.md → .ai-common/prompts/generate-all-components.md} +195 -78
  16. package/templates/react-sdk-reference/{.github/prompts/generate-dse-components.prompt.md → .ai-common/prompts/generate-dse-components.md} +28 -17
  17. package/templates/react-sdk-reference/{.github/prompts/generate-field-components.prompt.md → .ai-common/prompts/generate-field-components.md} +32 -16
  18. package/templates/react-sdk-reference/{.github/prompts/generate-template-components.prompt.md → .ai-common/prompts/generate-template-components.md} +76 -22
  19. package/templates/react-sdk-reference/{.github/prompts/generate-widget-components.prompt.md → .ai-common/prompts/generate-widget-components.md} +44 -30
  20. package/templates/react-sdk-reference/{.claude → .ai-common}/prompts/identify-components.md +4 -0
  21. package/templates/react-sdk-reference/{.cursor/rules/prompts/replace-design-system.mdrules → .ai-common/prompts/replace-design-system.md} +2 -3
  22. package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/AlertBanner.md +50 -0
  23. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/Banner.md +44 -0
  24. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/CaseSummaryFields.md +54 -0
  25. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/DetailsFields.md +49 -0
  26. package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/FieldGroup.md +44 -0
  27. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/FieldGroupList.md +43 -0
  28. package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/FieldValueList.md +46 -0
  29. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/Operator.md +67 -0
  30. package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/Pulse.md +20 -0
  31. package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/RichTextEditor.md +58 -0
  32. package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/WssQuickCreate.md +31 -0
  33. package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension.md +1 -1
  34. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-components.md +18 -1
  35. package/templates/react-sdk-reference/.ai-common/skills/field-skills/AutoComplete.md +298 -0
  36. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/CancelAlert.md +132 -3
  37. package/templates/react-sdk-reference/.ai-common/skills/field-skills/Checkbox.md +358 -0
  38. package/templates/react-sdk-reference/.ai-common/skills/field-skills/Currency.md +230 -0
  39. package/templates/react-sdk-reference/.ai-common/skills/field-skills/Date.md +221 -0
  40. package/templates/react-sdk-reference/.ai-common/skills/field-skills/DateTime.md +213 -0
  41. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Decimal.md +112 -13
  42. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Dropdown.md +127 -1
  43. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Email.md +68 -0
  44. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Group.md +51 -0
  45. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Integer.md +81 -0
  46. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Location.md +105 -0
  47. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Multiselect.md +70 -0
  48. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/ObjectReference.md +74 -0
  49. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Percentage.md +84 -0
  50. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Phone.md +81 -0
  51. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/RadioButtons.md +93 -0
  52. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/RichText.md +85 -0
  53. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/ScalarList.md +54 -0
  54. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/SelectableCard.md +55 -0
  55. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/SemanticLink.md +64 -0
  56. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/TextArea.md +66 -0
  57. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/TextContent.md +28 -0
  58. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/TextInput.md +67 -0
  59. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Time.md +67 -0
  60. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/URL.md +59 -0
  61. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/UserReference.md +90 -0
  62. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-components.md +83 -52
  63. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/AdvancedSearch.md +77 -0
  64. package/templates/react-sdk-reference/.ai-common/skills/template-skills/AppShell.md +273 -0
  65. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/BannerPage.md +39 -0
  66. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/CaseSummary.md +79 -0
  67. package/templates/react-sdk-reference/.ai-common/skills/template-skills/CaseView.md +399 -0
  68. package/templates/react-sdk-reference/.ai-common/skills/template-skills/CaseViewActionsMenu.md +282 -0
  69. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/Confirmation.md +89 -0
  70. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DataReference.md +50 -0
  71. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DefaultForm.md +117 -0
  72. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DefaultPage.md +49 -0
  73. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/Details.md +59 -0
  74. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/DetailsSubTabs.md +60 -0
  75. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DetailsThreeColumn.md +12 -0
  76. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/DetailsTwoColumn.md +12 -0
  77. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DynamicTabs.md +67 -0
  78. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/FieldGroupTemplate.md +119 -0
  79. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/HierarchicalForm.md +45 -0
  80. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/InlineDashboard.md +41 -0
  81. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/InlineDashboardPage.md +56 -0
  82. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/ListPage.md +18 -0
  83. package/templates/react-sdk-reference/.ai-common/skills/template-skills/ListView.md +419 -0
  84. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/MultiReferenceReadOnly.md +40 -0
  85. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/NarrowWide.md +66 -0
  86. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/OneColumn.md +34 -0
  87. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/PromotedFilters.md +92 -0
  88. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/SelfServiceCaseView.md +56 -0
  89. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/SimpleTable.md +59 -0
  90. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/SingleReferenceReadOnly.md +52 -0
  91. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/SubTabs.md +47 -0
  92. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/TwoColumn.md +49 -0
  93. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/WssNavBar.md +71 -0
  94. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-components.md +1 -1
  95. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/AppAnnouncement.md +38 -1
  96. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/Attachment.md +58 -0
  97. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/CaseHistory.md +63 -0
  98. package/templates/react-sdk-reference/{.github → .ai-common}/skills/widget-skills/FileUtility.md +81 -14
  99. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/Followers.md +20 -0
  100. package/templates/react-sdk-reference/{.github → .ai-common}/skills/widget-skills/QuickCreate.md +48 -0
  101. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/SummaryItem.md +66 -0
  102. package/templates/react-sdk-reference/.ai-common/skills/widget-skills/ToDo.md +492 -0
  103. package/templates/react-sdk-reference/package.minimal.json +29 -0
  104. package/templates/react-sdk-reference/src/AppProviders.tsx +17 -0
  105. package/templates/react-sdk-reference/src/MashupApp.tsx +8 -19
  106. package/templates/react-sdk-reference/src/PortalApp.tsx +6 -17
  107. package/templates/react-sdk-reference/.claude/instructions/component-map.md +0 -38
  108. package/templates/react-sdk-reference/.claude/instructions/dse-component.md +0 -75
  109. package/templates/react-sdk-reference/.claude/instructions/field-component.md +0 -75
  110. package/templates/react-sdk-reference/.claude/instructions/template-component.md +0 -93
  111. package/templates/react-sdk-reference/.claude/instructions/widget-component.md +0 -88
  112. package/templates/react-sdk-reference/.claude/prompts/add-component.md +0 -152
  113. package/templates/react-sdk-reference/.claude/prompts/component-manifest.json +0 -193
  114. package/templates/react-sdk-reference/.claude/prompts/generate-all-components.md +0 -158
  115. package/templates/react-sdk-reference/.claude/prompts/generate-dse-components.md +0 -140
  116. package/templates/react-sdk-reference/.claude/prompts/generate-field-components.md +0 -153
  117. package/templates/react-sdk-reference/.claude/prompts/generate-template-components.md +0 -165
  118. package/templates/react-sdk-reference/.claude/prompts/generate-widget-components.md +0 -138
  119. package/templates/react-sdk-reference/.claude/prompts/replace-design-system.md +0 -519
  120. package/templates/react-sdk-reference/.claude/skills/component-contracts.md +0 -140
  121. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/AlertBanner.md +0 -137
  122. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/FieldGroup.md +0 -134
  123. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/FieldValueList.md +0 -118
  124. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/Pulse.md +0 -85
  125. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/RichTextEditor.md +0 -232
  126. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/WssQuickCreate.md +0 -137
  127. package/templates/react-sdk-reference/.claude/skills/design-system-extension.md +0 -291
  128. package/templates/react-sdk-reference/.claude/skills/field-skills/AutoComplete.md +0 -113
  129. package/templates/react-sdk-reference/.claude/skills/field-skills/Checkbox.md +0 -175
  130. package/templates/react-sdk-reference/.claude/skills/field-skills/Currency.md +0 -109
  131. package/templates/react-sdk-reference/.claude/skills/field-skills/Date.md +0 -101
  132. package/templates/react-sdk-reference/.claude/skills/field-skills/DateTime.md +0 -106
  133. package/templates/react-sdk-reference/.claude/skills/field-skills/Integer.md +0 -88
  134. package/templates/react-sdk-reference/.claude/skills/field-skills/Multiselect.md +0 -188
  135. package/templates/react-sdk-reference/.claude/skills/field-skills/ObjectReference.md +0 -173
  136. package/templates/react-sdk-reference/.claude/skills/field-skills/Percentage.md +0 -93
  137. package/templates/react-sdk-reference/.claude/skills/field-skills/Phone.md +0 -129
  138. package/templates/react-sdk-reference/.claude/skills/field-skills/RadioButtons.md +0 -167
  139. package/templates/react-sdk-reference/.claude/skills/field-skills/RichText.md +0 -149
  140. package/templates/react-sdk-reference/.claude/skills/field-skills/ScalarList.md +0 -134
  141. package/templates/react-sdk-reference/.claude/skills/field-skills/SelectableCard.md +0 -231
  142. package/templates/react-sdk-reference/.claude/skills/field-skills/SemanticLink.md +0 -155
  143. package/templates/react-sdk-reference/.claude/skills/field-skills/TextInput.md +0 -107
  144. package/templates/react-sdk-reference/.claude/skills/field-skills/Time.md +0 -89
  145. package/templates/react-sdk-reference/.claude/skills/field-skills/URL.md +0 -86
  146. package/templates/react-sdk-reference/.claude/skills/template-components.md +0 -321
  147. package/templates/react-sdk-reference/.claude/skills/template-skills/AdvancedSearch.md +0 -150
  148. package/templates/react-sdk-reference/.claude/skills/template-skills/AppShell.md +0 -124
  149. package/templates/react-sdk-reference/.claude/skills/template-skills/CaseSummary.md +0 -106
  150. package/templates/react-sdk-reference/.claude/skills/template-skills/CaseView.md +0 -137
  151. package/templates/react-sdk-reference/.claude/skills/template-skills/CaseViewActionsMenu.md +0 -131
  152. package/templates/react-sdk-reference/.claude/skills/template-skills/Confirmation.md +0 -109
  153. package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsSubTabs.md +0 -97
  154. package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsTwoColumn.md +0 -80
  155. package/templates/react-sdk-reference/.claude/skills/template-skills/ListPage.md +0 -70
  156. package/templates/react-sdk-reference/.claude/skills/template-skills/ListView.md +0 -142
  157. package/templates/react-sdk-reference/.claude/skills/template-skills/MultiReferenceReadOnly.md +0 -82
  158. package/templates/react-sdk-reference/.claude/skills/template-skills/OneColumn.md +0 -114
  159. package/templates/react-sdk-reference/.claude/skills/template-skills/SimpleTable.md +0 -131
  160. package/templates/react-sdk-reference/.claude/skills/template-skills/SingleReferenceReadOnly.md +0 -108
  161. package/templates/react-sdk-reference/.claude/skills/template-skills/SubTabs.md +0 -82
  162. package/templates/react-sdk-reference/.claude/skills/widget-skills/FileUtility.md +0 -206
  163. package/templates/react-sdk-reference/.claude/skills/widget-skills/QuickCreate.md +0 -118
  164. package/templates/react-sdk-reference/.claude/skills/widget-skills/ToDo.md +0 -198
  165. package/templates/react-sdk-reference/.cursor/rules/component-map.mdrules +0 -41
  166. package/templates/react-sdk-reference/.cursor/rules/dse-component.mdrules +0 -78
  167. package/templates/react-sdk-reference/.cursor/rules/field-component.mdrules +0 -74
  168. package/templates/react-sdk-reference/.cursor/rules/pega-sdk.mdrules +0 -247
  169. package/templates/react-sdk-reference/.cursor/rules/prompts/add-component.mdrules +0 -149
  170. package/templates/react-sdk-reference/.cursor/rules/prompts/generate-all-components.mdrules +0 -154
  171. package/templates/react-sdk-reference/.cursor/rules/prompts/generate-dse-components.mdrules +0 -131
  172. package/templates/react-sdk-reference/.cursor/rules/prompts/generate-field-components.mdrules +0 -144
  173. package/templates/react-sdk-reference/.cursor/rules/prompts/generate-template-components.mdrules +0 -156
  174. package/templates/react-sdk-reference/.cursor/rules/prompts/generate-widget-components.mdrules +0 -129
  175. package/templates/react-sdk-reference/.cursor/rules/prompts/identify-components.mdrules +0 -110
  176. package/templates/react-sdk-reference/.cursor/rules/skills/component-contracts.mdrules +0 -145
  177. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/AlertBanner.mdrules +0 -140
  178. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/Banner.mdrules +0 -154
  179. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/CaseSummaryFields.mdrules +0 -159
  180. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/DetailsFields.mdrules +0 -149
  181. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/FieldGroup.mdrules +0 -136
  182. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/FieldGroupList.mdrules +0 -116
  183. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/FieldValueList.mdrules +0 -120
  184. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/Operator.mdrules +0 -154
  185. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/Pulse.mdrules +0 -88
  186. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/RichTextEditor.mdrules +0 -211
  187. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/WssQuickCreate.mdrules +0 -140
  188. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension.mdrules +0 -294
  189. package/templates/react-sdk-reference/.cursor/rules/skills/field-components.mdrules +0 -299
  190. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/AutoComplete.mdrules +0 -117
  191. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/CancelAlert.mdrules +0 -208
  192. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Checkbox.mdrules +0 -163
  193. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Currency.mdrules +0 -111
  194. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Date.mdrules +0 -104
  195. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/DateTime.mdrules +0 -108
  196. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Decimal.mdrules +0 -103
  197. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Dropdown.mdrules +0 -119
  198. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Email.mdrules +0 -112
  199. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Group.mdrules +0 -95
  200. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Integer.mdrules +0 -92
  201. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Location.mdrules +0 -141
  202. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Multiselect.mdrules +0 -169
  203. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/ObjectReference.mdrules +0 -169
  204. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Percentage.mdrules +0 -97
  205. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Phone.mdrules +0 -115
  206. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/RadioButtons.mdrules +0 -151
  207. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/RichText.mdrules +0 -143
  208. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/ScalarList.mdrules +0 -129
  209. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/SelectableCard.mdrules +0 -221
  210. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/SemanticLink.mdrules +0 -153
  211. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/TextArea.mdrules +0 -101
  212. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/TextContent.mdrules +0 -106
  213. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/TextInput.mdrules +0 -109
  214. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Time.mdrules +0 -93
  215. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/URL.mdrules +0 -90
  216. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/UserReference.mdrules +0 -185
  217. package/templates/react-sdk-reference/.cursor/rules/skills/run-and-verify.mdrules +0 -73
  218. package/templates/react-sdk-reference/.cursor/rules/skills/template-components.mdrules +0 -327
  219. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/AdvancedSearch.mdrules +0 -149
  220. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/AppShell.mdrules +0 -127
  221. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/BannerPage.mdrules +0 -88
  222. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/CaseSummary.mdrules +0 -105
  223. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/CaseView.mdrules +0 -136
  224. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/CaseViewActionsMenu.mdrules +0 -131
  225. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/Confirmation.mdrules +0 -112
  226. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DataReference.mdrules +0 -125
  227. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DefaultForm.mdrules +0 -107
  228. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DefaultPage.mdrules +0 -115
  229. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/Details.mdrules +0 -93
  230. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DetailsSubTabs.mdrules +0 -100
  231. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DetailsThreeColumn.mdrules +0 -83
  232. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DetailsTwoColumn.mdrules +0 -83
  233. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DynamicTabs.mdrules +0 -106
  234. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/FieldGroupTemplate.mdrules +0 -114
  235. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/HierarchicalForm.mdrules +0 -118
  236. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/InlineDashboard.mdrules +0 -109
  237. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/InlineDashboardPage.mdrules +0 -90
  238. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/ListPage.mdrules +0 -73
  239. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/ListView.mdrules +0 -144
  240. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/MultiReferenceReadOnly.mdrules +0 -85
  241. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/NarrowWide.mdrules +0 -146
  242. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/OneColumn.mdrules +0 -114
  243. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/PromotedFilters.mdrules +0 -129
  244. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SelfServiceCaseView.mdrules +0 -140
  245. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SimpleTable.mdrules +0 -132
  246. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SingleReferenceReadOnly.mdrules +0 -108
  247. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SubTabs.mdrules +0 -84
  248. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/TwoColumn.mdrules +0 -136
  249. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/WideNarrow.mdrules +0 -155
  250. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/WssNavBar.mdrules +0 -140
  251. package/templates/react-sdk-reference/.cursor/rules/skills/widget-components.mdrules +0 -276
  252. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/AppAnnouncement.mdrules +0 -87
  253. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/Attachment.mdrules +0 -151
  254. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/CaseHistory.mdrules +0 -112
  255. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/FileUtility.mdrules +0 -205
  256. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/Followers.mdrules +0 -104
  257. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/QuickCreate.mdrules +0 -119
  258. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/SummaryItem.mdrules +0 -172
  259. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/ToDo.mdrules +0 -195
  260. package/templates/react-sdk-reference/.cursor/rules/template-component.mdrules +0 -95
  261. package/templates/react-sdk-reference/.cursor/rules/widget-component.mdrules +0 -90
  262. package/templates/react-sdk-reference/.github/prompts/component-manifest.json +0 -193
  263. package/templates/react-sdk-reference/.github/prompts/identify-components.prompt.md +0 -110
  264. package/templates/react-sdk-reference/.github/prompts/replace-design-system.prompt.md +0 -524
  265. package/templates/react-sdk-reference/.github/skills/component-contracts.md +0 -140
  266. package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/Banner.md +0 -152
  267. package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/CaseSummaryFields.md +0 -159
  268. package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/DetailsFields.md +0 -148
  269. package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/FieldGroupList.md +0 -113
  270. package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/Operator.md +0 -155
  271. package/templates/react-sdk-reference/.github/skills/field-components.md +0 -295
  272. package/templates/react-sdk-reference/.github/skills/field-skills/AutoComplete.md +0 -113
  273. package/templates/react-sdk-reference/.github/skills/field-skills/CancelAlert.md +0 -211
  274. package/templates/react-sdk-reference/.github/skills/field-skills/Checkbox.md +0 -175
  275. package/templates/react-sdk-reference/.github/skills/field-skills/Currency.md +0 -109
  276. package/templates/react-sdk-reference/.github/skills/field-skills/Date.md +0 -101
  277. package/templates/react-sdk-reference/.github/skills/field-skills/DateTime.md +0 -106
  278. package/templates/react-sdk-reference/.github/skills/field-skills/Decimal.md +0 -99
  279. package/templates/react-sdk-reference/.github/skills/field-skills/Dropdown.md +0 -134
  280. package/templates/react-sdk-reference/.github/skills/field-skills/Email.md +0 -109
  281. package/templates/react-sdk-reference/.github/skills/field-skills/Group.md +0 -96
  282. package/templates/react-sdk-reference/.github/skills/field-skills/Location.md +0 -145
  283. package/templates/react-sdk-reference/.github/skills/field-skills/TextArea.md +0 -98
  284. package/templates/react-sdk-reference/.github/skills/field-skills/TextContent.md +0 -117
  285. package/templates/react-sdk-reference/.github/skills/field-skills/UserReference.md +0 -203
  286. package/templates/react-sdk-reference/.github/skills/run-and-verify.md +0 -70
  287. package/templates/react-sdk-reference/.github/skills/template-skills/AppShell.md +0 -124
  288. package/templates/react-sdk-reference/.github/skills/template-skills/BannerPage.md +0 -86
  289. package/templates/react-sdk-reference/.github/skills/template-skills/CaseView.md +0 -137
  290. package/templates/react-sdk-reference/.github/skills/template-skills/CaseViewActionsMenu.md +0 -131
  291. package/templates/react-sdk-reference/.github/skills/template-skills/DataReference.md +0 -124
  292. package/templates/react-sdk-reference/.github/skills/template-skills/DefaultForm.md +0 -104
  293. package/templates/react-sdk-reference/.github/skills/template-skills/DefaultPage.md +0 -112
  294. package/templates/react-sdk-reference/.github/skills/template-skills/Details.md +0 -90
  295. package/templates/react-sdk-reference/.github/skills/template-skills/DetailsThreeColumn.md +0 -80
  296. package/templates/react-sdk-reference/.github/skills/template-skills/DynamicTabs.md +0 -106
  297. package/templates/react-sdk-reference/.github/skills/template-skills/FieldGroupTemplate.md +0 -112
  298. package/templates/react-sdk-reference/.github/skills/template-skills/HierarchicalForm.md +0 -116
  299. package/templates/react-sdk-reference/.github/skills/template-skills/InlineDashboard.md +0 -108
  300. package/templates/react-sdk-reference/.github/skills/template-skills/InlineDashboardPage.md +0 -82
  301. package/templates/react-sdk-reference/.github/skills/template-skills/ListView.md +0 -142
  302. package/templates/react-sdk-reference/.github/skills/template-skills/NarrowWide.md +0 -143
  303. package/templates/react-sdk-reference/.github/skills/template-skills/PromotedFilters.md +0 -130
  304. package/templates/react-sdk-reference/.github/skills/template-skills/SelfServiceCaseView.md +0 -142
  305. package/templates/react-sdk-reference/.github/skills/template-skills/TwoColumn.md +0 -133
  306. package/templates/react-sdk-reference/.github/skills/template-skills/WideNarrow.md +0 -152
  307. package/templates/react-sdk-reference/.github/skills/template-skills/WssNavBar.md +0 -139
  308. package/templates/react-sdk-reference/.github/skills/widget-components.md +0 -260
  309. package/templates/react-sdk-reference/.github/skills/widget-skills/AppAnnouncement.md +0 -84
  310. package/templates/react-sdk-reference/.github/skills/widget-skills/Attachment.md +0 -151
  311. package/templates/react-sdk-reference/.github/skills/widget-skills/CaseHistory.md +0 -110
  312. package/templates/react-sdk-reference/.github/skills/widget-skills/Followers.md +0 -103
  313. package/templates/react-sdk-reference/.github/skills/widget-skills/SummaryItem.md +0 -169
  314. package/templates/react-sdk-reference/.github/skills/widget-skills/ToDo.md +0 -198
  315. package/templates/react-sdk-reference/AGENTS.md +0 -246
  316. /package/templates/react-sdk-reference/{.claude → .ai-common}/skills/run-and-verify.md +0 -0
  317. /package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/WideNarrow.md +0 -0
@@ -0,0 +1,419 @@
1
+ # Skill: ListView
2
+
3
+ Full-featured list view template. Renders a data table with sorting, pagination, global search, single/multi selection, column menu, and filter dialog.
4
+
5
+ > **Prerequisite skill:** [`template-components.md`](../template-components.md) — covers architecture, child rendering patterns, and registration conventions common to ALL template components.
6
+
7
+ ---
8
+
9
+ > ⚠️ **CRITICAL — `referenceList` is a STRING, not an array**
10
+ >
11
+ > The `referenceList` prop is a **data page reference string** (e.g., `".D_pyMyWorkList.pxResults"`) — NOT an array of data rows. You MUST:
12
+ >
13
+ > 1. Check `typeof referenceList === 'string'` before using it
14
+ > 2. Call `PCore.getDataApiUtils().getData(referenceList, payload)` to fetch actual row data
15
+ > 3. Initialize row state as empty array: `useState<any[]>([])`
16
+ > 4. NEVER put `referenceList` directly into state or call `.filter()` on it
17
+ >
18
+ > ```typescript
19
+ > // ❌ WRONG — will crash with "rows.filter is not a function"
20
+ > const [rows, setRows] = useState(referenceList);
21
+ >
22
+ > // ✅ CORRECT — fetch data from the reference string
23
+ > const [rows, setRows] = useState<any[]>([]);
24
+ > useEffect(() => {
25
+ > if (Array.isArray(referenceList)) {
26
+ > setRows(referenceList);
27
+ > return;
28
+ > }
29
+ > const dataRef = typeof referenceList === 'string' ? referenceList : dataPageName;
30
+ > if (dataRef) {
31
+ > PCore.getDataApiUtils()
32
+ > .getData(dataRef, payload ?? {})
33
+ > .then((response) => setRows(response?.data?.data ?? response?.data?.pxResults ?? []))
34
+ > .catch(() => setRows([]));
35
+ > }
36
+ > }, [referenceList]);
37
+ > ```
38
+
39
+ ---
40
+
41
+ > ⚠️ **CRITICAL — Column definitions MUST come from PConnect presets metadata**
42
+ >
43
+ > The table must render ONLY the columns configured in the Pega view metadata — NOT all fields from the raw data response. Raw responses contain 20+ internal fields (`pzInsKey`, `pxRefObjectClass`, `pyAssignmentStatus`, etc.) that should never be shown.
44
+ >
45
+ > **How to extract configured columns:**
46
+ >
47
+ > 1. Get column fields from presets: `getPConnect().getComponentConfig().presets[0].children[0].children`
48
+ > 2. Get field definitions (labels, types) from metadata: `PCore.getAnalyticsUtils().getDataViewMetadata(referenceList, false)`
49
+ > 3. Map each preset column to its field definition to build `{id, label, type, displayAsLink}` headers
50
+ >
51
+ > ```typescript
52
+ > // ❌ WRONG — shows ALL raw data keys as columns (pzInsKey, pxRefObjectClass, etc.)
53
+ > const fields = Object.keys(rows[0]).map((key) => ({ id: key, label: key }));
54
+ >
55
+ > // ✅ CORRECT — extract configured columns from PConnect presets + metadata
56
+ > const componentConfig = getPConnect().getComponentConfig();
57
+ > const columnFields = componentConfig.presets[0].children[0].children;
58
+ > const metaResponse = await PCore.getAnalyticsUtils().getDataViewMetadata(referenceList, false);
59
+ > const fieldDefs = metaResponse?.data?.fields ?? [];
60
+ >
61
+ > const columns = columnFields.map((field, index) => {
62
+ > let fieldId = field.config.value.substring(field.config.value.indexOf(' ') + 1);
63
+ > if (fieldId.startsWith('.')) fieldId = fieldId.substring(1);
64
+ > const { additionalDetails = {} } = field.config;
65
+ > const displayAsLink =
66
+ > additionalDetails.type === 'DISPLAY_LINK' || ('displayAsLink' in field.config && field.config.displayAsLink);
67
+ > return {
68
+ > id: fieldId,
69
+ > label: fieldDefs[index]?.label ?? field.config.label ?? fieldId,
70
+ > type: field.type,
71
+ > displayAsLink,
72
+ > classID: fieldDefs.find((f) => f.name === fieldId)?.classID,
73
+ > };
74
+ > });
75
+ > ```
76
+ >
77
+ > **Key points:**
78
+ >
79
+ > - `field.config.value` has format `"@P .pyID"` — strip annotation prefix to get field name
80
+ > - `fieldDefs[index].label` provides the localized display label
81
+ > - `displayAsLink` determines if the cell renders as a clickable navigation link
82
+ > - If `presets` is unavailable (fallback), use first ~6 fields from `fieldDefs` — NEVER use raw data keys
83
+
84
+ ---
85
+
86
+ > ⚠️ **CRITICAL — Data fetching differs by `bInForm`**
87
+ >
88
+ > The data API to call depends on whether the ListView is inside a form or on a standalone page:
89
+ >
90
+ > ```typescript
91
+ > // Page-level (bInForm = false) — e.g., worklist landing page
92
+ > const result = await PCore.getDataApiUtils().getData(referenceList, payload ?? {});
93
+ > const rows = result?.data?.data ?? [];
94
+ >
95
+ > // Form-level (bInForm = true) — e.g., embedded list in a case form
96
+ > const context = getPConnect().getContextName();
97
+ > const result = await PCore.getDataPageUtils().getDataAsync(referenceList, context, parameters, null, query);
98
+ > const rows = result?.data ?? [];
99
+ > ```
100
+ >
101
+ > Using the wrong API will return empty data or fail silently.
102
+
103
+ ---
104
+
105
+ ## Component Purpose
106
+
107
+ The primary data table component. Renders a sortable, paginated, filterable, and selectable table from a PConnect data source. Supports both standalone page use (`bInForm: false`) and embedded form use (`bInForm: true`). Columns are configurable, and the table supports row-level selection with callback.
108
+
109
+ ## Pega Metadata
110
+
111
+ - **Registration key:** `ListView` (in `component-map.ts`)
112
+ - **Category:** Data display template
113
+ - **Extends:** `PConnProps`
114
+
115
+ ## Props
116
+
117
+ | Prop | Type | Required | Description |
118
+ | ----------------------- | ---------- | -------- | ----------------------------------------------------------------------------- |
119
+ | `bInForm` | `boolean` | No | Whether rendered inside a form (affects toolbar and padding). Default `false` |
120
+ | `selectionMode` | `string` | No | `'single'` (radio) or `'multi'` (checkbox) or absent (no selection) |
121
+ | `dataPageName` | `string` | No | Name of data page to fetch records from |
122
+ | `referenceList` | `array` | No | In-memory data array (used when data is already available) |
123
+ | `compositeKeys` | `object` | No | Key fields for unique row identification |
124
+ | `columns` | `array` | No | Column definition objects `{ fieldName, label, sortable, filterable }` |
125
+ | `additionalTableConfig` | `object` | No | Extra config merged with column/sort/filter settings |
126
+ | `isSearchable` | `boolean` | No | Whether global search input is shown |
127
+ | `payload` | `object` | No | Query payload for data page requests |
128
+ | `getPConnect` | `function` | Yes | PConnect getter |
129
+
130
+ ## Component Skeleton
131
+
132
+ > ⚠️ **CRITICAL — USE THE PROJECT'S DESIGN SYSTEM FOR TABLE RENDERING**
133
+ >
134
+ > This component MUST use the **installed design system's table components** — NOT plain HTML `<table>/<thead>/<tbody>`.
135
+ > Check `package.json` for the installed design system and use its table primitives:
136
+ >
137
+ > | If installed DS is... | Import from... | Table components |
138
+ > | --------------------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------- |
139
+ > | `@carbon/react` | `@carbon/react` | `Table, TableHead, TableRow, TableHeader, TableBody, TableCell, TableContainer, TableToolbar, TableToolbarSearch, Pagination, Link` |
140
+ > | `@mui/material` | `@mui/material` | `Table, TableHead, TableRow, TableCell, TableBody, TableContainer, TablePagination, TableSortLabel, Link` |
141
+ > | `antd` | `antd` | `Table` (with `columns` + `dataSource` props, built-in pagination) |
142
+ > | `@chakra-ui/react` | `@chakra-ui/react` | `Table, Thead, Tbody, Tr, Th, Td, Link` + custom pagination |
143
+ > | None / CSS-only | N/A | Plain `<table>/<thead>/<tbody>` with CSS classes |
144
+ >
145
+ > **The table MUST look like a proper data grid** with:
146
+ >
147
+ > - Column headers with field labels (from PConnect presets metadata)
148
+ > - Paginated rows (not all rows at once)
149
+ > - Clickable link cells for navigation
150
+ > - Search toolbar (when `globalSearch !== false`)
151
+ >
152
+ > ❌ **NEVER** render raw `Object.values(row)` or dump all data keys as columns.
153
+ > ❌ **NEVER** use plain HTML when a design system is installed.
154
+
155
+ This is the largest template component. The implementation MUST include these critical sections:
156
+
157
+ ```typescript
158
+ import { useCallback, useEffect, useState } from 'react';
159
+ import type { PConnProps } from '@pega/sdk-react';
160
+
161
+ const AssignDashObjects = ['Assign-Worklist', 'Assign-WorkBasket'];
162
+
163
+ interface ListViewProps extends PConnProps {
164
+ bInForm?: boolean;
165
+ globalSearch?: boolean;
166
+ referenceList?: any;
167
+ selectionMode?: string;
168
+ referenceType?: string;
169
+ payload?: any;
170
+ parameters?: any;
171
+ compositeKeys?: any;
172
+ localeReference?: string;
173
+ }
174
+
175
+ export default function ListView(props: ListViewProps) {
176
+ const { getPConnect, bInForm = true, globalSearch, referenceList, payload, parameters, localeReference } = props;
177
+
178
+ const [arRows, setRows] = useState<any[]>([]);
179
+ const [arColumns, setColumns] = useState<any[]>([]);
180
+ const [page, setPage] = useState(1);
181
+ const [pageSize, setPageSize] = useState(10);
182
+ const [searchValue, setSearchValue] = useState('');
183
+ const [title, setTitle] = useState('');
184
+
185
+ const thePConn = getPConnect();
186
+ const componentConfig = thePConn.getComponentConfig();
187
+ const resolvedConfigProps: any = thePConn.getConfigProps();
188
+
189
+ // ═══════════════════════════════════════════════════════════════
190
+ // CRITICAL: Extract column definitions from PConnect presets
191
+ // ═══════════════════════════════════════════════════════════════
192
+ const getHeaderCells = useCallback((columnFields: any[], fieldDefs: any[]) => {
193
+ return columnFields.map((field: any, index: number) => {
194
+ let theField = field.config.value.substring(field.config.value.indexOf(' ') + 1);
195
+ if (theField.startsWith('.')) theField = theField.substring(1);
196
+ const colIndex = fieldDefs.findIndex((ele) => ele.name === theField);
197
+ const { additionalDetails = {} } = field.config;
198
+ let displayAsLink = additionalDetails.type === 'DISPLAY_LINK';
199
+ if (!displayAsLink) displayAsLink = 'displayAsLink' in field.config && field.config.displayAsLink;
200
+ return {
201
+ id: theField,
202
+ type: field.type,
203
+ displayAsLink,
204
+ label: fieldDefs[index]?.label ?? field.config.label ?? theField,
205
+ classID: colIndex > -1 ? fieldDefs[colIndex].classID : undefined,
206
+ isAssignmentLink: displayAsLink && AssignDashObjects.includes(fieldDefs[colIndex]?.classID),
207
+ };
208
+ });
209
+ }, []);
210
+
211
+ // ═══════════════════════════════════════════════════════════════
212
+ // CRITICAL: Fetch metadata + data in useEffect
213
+ // ═══════════════════════════════════════════════════════════════
214
+ useEffect(() => {
215
+ let isActive = true;
216
+ async function fetchData() {
217
+ // Step 1: Get field definitions from metadata API
218
+ const metaResponse: any = await PCore.getAnalyticsUtils().getDataViewMetadata(referenceList, false);
219
+ const fieldDefs = metaResponse?.data?.fields ?? [];
220
+
221
+ // Step 2: Get configured columns from presets
222
+ const columnFields = componentConfig?.presets?.[0]?.children?.[0]?.children ?? [];
223
+ if (columnFields.length) {
224
+ const myColumns = getHeaderCells(columnFields, fieldDefs);
225
+ myColumns.forEach((col) => {
226
+ if (localeReference) col.label = PCore.getLocaleUtils().getLocaleValue(col.label, localeReference);
227
+ });
228
+ if (isActive) setColumns(myColumns);
229
+ }
230
+
231
+ // Step 3: Fetch data — API differs by bInForm
232
+ let dataResult: any;
233
+ if (!bInForm) {
234
+ dataResult = await PCore.getDataApiUtils().getData(referenceList, payload ?? {});
235
+ } else {
236
+ const context = thePConn.getContextName();
237
+ dataResult = await (PCore.getDataPageUtils() as any).getDataAsync(
238
+ referenceList,
239
+ context,
240
+ parameters,
241
+ null,
242
+ null,
243
+ );
244
+ }
245
+ const tableData = !bInForm ? (dataResult?.data?.data ?? []) : (dataResult?.data ?? []);
246
+ if (isActive) setRows(Array.isArray(tableData) ? tableData : []);
247
+ }
248
+ fetchData();
249
+ return () => {
250
+ isActive = false;
251
+ };
252
+ }, [referenceList, bInForm, payload, parameters]);
253
+
254
+ // ═══════════════════════════════════════════════════════════════
255
+ // CRITICAL: Link click handlers for navigation
256
+ // ═══════════════════════════════════════════════════════════════
257
+ function handleLinkClick(row: any, column: any) {
258
+ if (column.isAssignmentLink) {
259
+ const { pxRefObjectClass, pzInsKey } = row;
260
+ thePConn.getActionsApi().openAssignment(pzInsKey, pxRefObjectClass, {
261
+ containerName: thePConn.getContainerName(),
262
+ channelName: '',
263
+ });
264
+ } else {
265
+ const pxRefObjectKey = row.pxRefObjectKey ?? row.pzInsKey;
266
+ const pxRefObjectClass = row.pxRefObjectClass ?? row.pxObjClass;
267
+ if (pxRefObjectClass && pxRefObjectKey) {
268
+ thePConn.getActionsApi().openWorkByHandle(pxRefObjectKey, pxRefObjectClass);
269
+ }
270
+ }
271
+ }
272
+
273
+ // Search, pagination, sort, selection, render...
274
+ }
275
+ ```
276
+
277
+ > **Note:** This skeleton shows the MANDATORY patterns. Full implementations will also include sorting, selection, filter dialog, column menus, and PubSub subscriptions for dashboard filters. But the three critical sections above (column extraction, data fetching, link handling) MUST be present for the table to render correctly.
278
+
279
+ ## Behavioral Contract
280
+
281
+ ### Initialization
282
+
283
+ `useInit(getPConnect, columns, dataPageName, payload)` hook:
284
+
285
+ 1. Calls `initializeColumns(getPConnect, columns)` to build `configFields`.
286
+ 2. Calls `buildFieldsForTable(configFields)` to produce display column definitions.
287
+ 3. Calls `getConfigFields(configFields)` for sort/filter metadata.
288
+ 4. Fetches initial data via `PCore.getDataApiUtils().getDataAsync(dataPageName, payload)`.
289
+ 5. Returns `{ tableDataRows, configFields, totalCount }`.
290
+
291
+ ### Sorting
292
+
293
+ - `<TableSortLabel>` in each sortable column header.
294
+ - On click: call `PCore.getDataApiUtils().getDataAsync(dataPageName, { ...payload, sortBy, sortOrder })`.
295
+ - `sortBy` = column field name, `sortOrder` = `'ASC'` or `'DESC'`.
296
+
297
+ ### Pagination
298
+
299
+ - `<TablePagination>` component below the table.
300
+ - `rowsPerPageOptions`: `[5, 10, 25]`.
301
+ - On page/rows change: re-fetch with `startIndex` and `maxResults` params.
302
+
303
+ ### Global Search
304
+
305
+ - Shown when `isSearchable === true`.
306
+ - `<TextField>` input above the table (toolbar area).
307
+ - On submit/debounce: re-fetch with `searchText` param.
308
+
309
+ ### Selection
310
+
311
+ | `selectionMode` | Control per row | Callback |
312
+ | --------------- | --------------- | ---------------------------- |
313
+ | `'single'` | `<Radio>` | `onRowSelect(rowData)` |
314
+ | `'multi'` | `<Checkbox>` | `onRowsSelect(selectedRows)` |
315
+ | absent | None | None |
316
+
317
+ - Select-all checkbox in the header for multi-selection.
318
+ - Selected rows highlighted with `selected` row class.
319
+
320
+ ### Column Menu
321
+
322
+ - `<MoreVertIcon>` button in each column header.
323
+ - Opens `<Menu>` with options: Show/Hide column, Pin column.
324
+ - Column visibility stored in local state `columnVisibility`.
325
+
326
+ ### Filter Dialog
327
+
328
+ - Filter icon in toolbar or column header.
329
+ - Opens `<Dialog>` with filter form fields for each filterable column.
330
+ - On apply: re-fetch with filter params.
331
+ - `filterData(filters, configFields)` formats filter objects for the API.
332
+
333
+ ### Link Rendering (Navigation)
334
+
335
+ Columns configured with `displayAsLink: true` (or `additionalDetails.type === 'DISPLAY_LINK'`) render as clickable links that navigate to assignments or work items.
336
+
337
+ **Detection logic:**
338
+
339
+ ```typescript
340
+ const AssignDashObjects = ['Assign-Worklist', 'Assign-WorkBasket'];
341
+
342
+ // A column is a link if:
343
+ const isLink = column.displayAsLink;
344
+
345
+ // It's an assignment link if its classID is a worklist/workbasket class:
346
+ const isAssignmentLink = AssignDashObjects.includes(column.classID);
347
+ ```
348
+
349
+ **Click handling:**
350
+
351
+ | Link type | API call | Parameters |
352
+ | --------------- | --------------------------------------------------------------------- | ---------------------------------------------- |
353
+ | Assignment link | `getActionsApi().openAssignment(pzInsKey, pxRefObjectClass, options)` | `options = { containerName, channelName: '' }` |
354
+ | Work item link | `getActionsApi().openWorkByHandle(pxRefObjectKey, pxRefObjectClass)` | — |
355
+
356
+ **Legacy column IDs** that also render as links (even without `displayAsLink`):
357
+
358
+ - `pxTaskLabel` → opens assignment (if `pxRefObjectClass` + `pzInsKey` exist on the row)
359
+ - `pxRefObjectInsName` → opens work item (if `pxRefObjectClass` + `pxRefObjectKey` exist)
360
+
361
+ ### Snackbar Toast
362
+
363
+ - Shown on fetch errors or action feedback.
364
+ - Auto-hides after 3000ms.
365
+
366
+ ## Visual Specifications
367
+
368
+ | Element | Description |
369
+ | -------------- | -------------------------------------------------------- |
370
+ | Toolbar | Search input + filter button + (optional) action buttons |
371
+ | Table head | Sticky header with sort labels and column menu |
372
+ | Table body | Striped rows, hover state, selected state |
373
+ | Pagination bar | Below table, page size selector + page nav |
374
+
375
+ **CSS-only implementation notes:**
376
+
377
+ - Table container: `overflow-x: auto`.
378
+ - Header row: `background: var(--table-header-bg); font-weight: 600`.
379
+ - Selected row: `background: var(--selection-highlight-bg)`.
380
+ - Hover row: `background: var(--hover-bg)`.
381
+ - Sticky header: `position: sticky; top: 0; z-index: 1`.
382
+
383
+ ## Edge Cases & Special Logic
384
+
385
+ - `bInForm: true` — remove outer padding, hide some toolbar elements.
386
+ - Empty result set — show empty state message `"No records found"`.
387
+ - `compositeKeys` — used for unique row key generation when no single ID field exists.
388
+ - Column visibility changes are local state only — not persisted by default.
389
+ - Large datasets — pagination is mandatory; do not load all rows at once.
390
+
391
+ ## Dependencies
392
+
393
+ - `useInit`, `filterData`, `buildFieldsForTable`, `getConfigFields`, `initializeColumns` from `./utils`
394
+ - `PCore.getDataApiUtils().getDataAsync()` — data fetching
395
+ - MUI: `<Table>`, `<TableHead>`, `<TableBody>`, `<TableRow>`, `<TableCell>`, `<TableSortLabel>`, `<TablePagination>`, `<Checkbox>`, `<Radio>`, `<Dialog>`, `<TextField>`, `<Menu>`, `<MenuItem>`, `<Snackbar>`
396
+
397
+ ## Design System Mapping
398
+
399
+ **UI control type:** Full-featured data table with sorting, pagination, search, selection, and filtering.
400
+
401
+ Listed design systems are examples only.
402
+
403
+ | Design System | Table | Pagination | Dialog | Search | Link |
404
+ | ------------------ | -------------------------------------------------------------------------------------- | -------------------------- | ------------------ | ---------------- | ------------------- |
405
+ | Default (CSS only) | `<table>/<thead>/<tbody>` | Custom pagination controls | `<dialog>` element | `<input>` | `<a>` |
406
+ | MUI | `<Table>` + sub-components | `<TablePagination>` | `<Dialog>` | `<TextField>` | `<Link>` |
407
+ | Carbon | `<DataTable>` + `<Table>/<TableHead>/<TableBody>/<TableRow>/<TableCell>/<TableHeader>` | `<Pagination>` | `<Modal>` | `<Search>` | `<Link>` |
408
+ | Ant Design | `<Table>` | Built-in pagination prop | `<Modal>` | `<Input.Search>` | `<Typography.Link>` |
409
+ | Chakra UI | `<Table>` | Custom or `react-table` | `<Modal>` | `<Input>` | `<Link>` |
410
+ | Shadcn/ui | `<Table>` + TanStack Table | Custom pagination | `<Dialog>` | `<Input>` | `<a>` |
411
+
412
+ When implementing in a specific design system:
413
+
414
+ - **ALWAYS check `package.json`** to identify the installed design system BEFORE writing any render code
415
+ - Import and use the DS's table/pagination/search/link components — do NOT fall back to plain HTML
416
+ - If the DS provides a `DataTable` wrapper (e.g., Carbon), use it for built-in toolbar/search integration
417
+ - `bInForm` prop affects layout — tighten spacing and remove outer chrome when `true`
418
+ - Sorting, pagination, and search all trigger data re-fetches — do not filter client-side for server-paged data
419
+ - Selection mode (`single`/`multi`) requires different controls and callbacks
@@ -26,6 +26,46 @@ Renders a multi-value reference field in read-only mode. Routing is based on the
26
26
  | `fieldMetadata` | `object` | No | Field-level metadata |
27
27
  | `getPConnect` | `function` | Yes | PConnect getter |
28
28
 
29
+ ## Component Skeleton
30
+
31
+ ```typescript
32
+ import type { PConnProps } from '@pega/sdk-react';
33
+
34
+ interface MultiReferenceReadOnlyProps extends PConnProps {
35
+ config: { referenceList: any; readonlyContextList: any };
36
+ label: string;
37
+ hideLabel: boolean;
38
+ displayMode?: any;
39
+ displayAs?: any;
40
+ }
41
+
42
+ export default function MultiReferenceReadOnly(props: MultiReferenceReadOnlyProps) {
43
+ const { getPConnect, label = '', hideLabel = false, config, displayMode, displayAs } = props;
44
+ const { referenceList, readonlyContextList } = config;
45
+
46
+ // 1. Route: SimpleTableSelectReadonly for specific displayAs values
47
+ if (['readonlyMulti', 'combobox', 'checkboxgroup'].includes(displayAs)) {
48
+ return getPConnect().createComponent({
49
+ type: 'SimpleTableSelectReadonly',
50
+ config: { ...config, displayMode, label, hideLabel, displayAs },
51
+ });
52
+ }
53
+
54
+ // 2. Fallback: use readonlyContextList if referenceList is not a property annotation
55
+ let readonlyContextObject;
56
+ if (!PCore.getAnnotationUtils().isProperty(referenceList)) {
57
+ readonlyContextObject = { referenceList: readonlyContextList };
58
+ }
59
+
60
+ // 3. Route: SimpleTable for all other displayAs values
61
+ const component = getPConnect().createComponent(
62
+ { type: 'SimpleTable', config: { ...config, ...readonlyContextObject, label, hideLabel } },
63
+ '', 0, {},
64
+ );
65
+ return <>{component}</>;
66
+ }
67
+ ```
68
+
29
69
  ## Behavioral Contract
30
70
 
31
71
  ### Routing by `displayAs`
@@ -63,6 +63,72 @@ All extend `PConnProps`.
63
63
  | `showHighlightedData` | `boolean` | No | Whether to render highlighted data fields above children. Default `false` |
64
64
  | `getPConnect` | `function` | Yes | PConnect getter |
65
65
 
66
+ ## Component Skeletons
67
+
68
+ ### NarrowWide (core)
69
+
70
+ ```typescript
71
+ import type { PropsWithChildren, ReactElement } from 'react';
72
+ import type { PConnProps } from '@pega/sdk-react';
73
+ import './NarrowWide.css';
74
+
75
+ interface NarrowWideProps extends PConnProps {
76
+ a: any; b: any; title?: string; cols?: string; icon?: string;
77
+ }
78
+
79
+ export default function NarrowWide(props: PropsWithChildren<NarrowWideProps>) {
80
+ const { a, b, children } = props;
81
+ return (
82
+ <>
83
+ {children && (children as ReactElement[]).length === 2 && (
84
+ <div className="psdk-narrow-wide-column">
85
+ <div className="psdk-narrow-column-column">{children[0]}</div>
86
+ <div className="psdk-wide-column-column">{children[1]}</div>
87
+ </div>
88
+ )}
89
+ {a && b && (
90
+ <div className="psdk-narrow-wide-column">
91
+ <div className="psdk-narrow-column-column">{a}</div>
92
+ <div className="psdk-wide-column-column">{b}</div>
93
+ </div>
94
+ )}
95
+ </>
96
+ );
97
+ }
98
+ ```
99
+
100
+ ### NarrowWidePage
101
+
102
+ ```typescript
103
+ const NarrowWide = getComponentFromRegistry('NarrowWide');
104
+ const { children, title, templateCol = '1fr 1fr', icon = '' } = props;
105
+ return <NarrowWide a={children[0]} b={children[1]} title={title}
106
+ cols={templateCol} icon={icon?.replace('pi pi-', '')} />;
107
+ ```
108
+
109
+ ### NarrowWideForm
110
+
111
+ ```typescript
112
+ const { children } = props;
113
+ return children?.length === 2 ? (
114
+ <div className="psdk-narrow-wide-column">
115
+ <div className="psdk-narrow-column-column">{children[0]}</div>
116
+ <div className="psdk-wide-column-column">{children[1]}</div>
117
+ </div>
118
+ ) : null;
119
+ ```
120
+
121
+ ### NarrowWideDetails
122
+
123
+ Same pattern as `Details` but uses `COLUMN_WIDTHS = [4, 8]`:
124
+
125
+ ```typescript
126
+ const COLUMN_WIDTHS = [4, 8];
127
+ // highlighted data: <GridItem xs={COLUMN_WIDTHS[i]}>
128
+ // regular children: <GridItem xs={COLUMN_WIDTHS[i]}>
129
+ // Wrap in FieldGroup, setInheritedProp DISPLAY_ONLY + readOnly
130
+ ```
131
+
66
132
  ## Behavioral Contract
67
133
 
68
134
  ### NarrowWide
@@ -24,6 +24,40 @@ Renders all children stacked vertically in a single full-width column. Three clo
24
24
 
25
25
  All extend `PConnProps`. Children are received as React `children`.
26
26
 
27
+ ## Component Skeletons
28
+
29
+ ### OneColumn (core)
30
+
31
+ ```typescript
32
+ import type { PropsWithChildren, ReactElement } from 'react';
33
+ import type { PConnProps } from '@pega/sdk-react';
34
+
35
+ export default function OneColumn(props: PropsWithChildren<PConnProps>) {
36
+ const { children } = props;
37
+ return (
38
+ <GridContainer spacing={2}>
39
+ <GridItem xs={12} className="col-styles">
40
+ {(children as ReactElement[]).map(child => child)}
41
+ </GridItem>
42
+ </GridContainer>
43
+ );
44
+ }
45
+ // CSS: .col-styles { display: grid; gap: 1rem; align-content: baseline; }
46
+ ```
47
+
48
+ ### OneColumnPage
49
+
50
+ ```typescript
51
+ const OneColumn = getComponentFromRegistry('OneColumn');
52
+ return <OneColumn {...props} />;
53
+ ```
54
+
55
+ ### OneColumnTab
56
+
57
+ ```typescript
58
+ return <div id="OneColumnTab">{children}</div>;
59
+ ```
60
+
27
61
  ## Props
28
62
 
29
63
  | Prop | Type | Required | Description |
@@ -27,6 +27,98 @@ Renders promoted filter controls above a list view. Filter fields are created dy
27
27
  | `isSearchable` | `boolean` | No | Whether the ListView below shows a global search input |
28
28
  | `getPConnect` | `function` | Yes | PConnect getter |
29
29
 
30
+ ## Component Skeleton
31
+
32
+ ```typescript
33
+ import React, { useCallback, useMemo, useState, createElement } from 'react';
34
+ import { isEmptyObject } from '../../helpers/common-utils';
35
+ import { getComponentFromRegistry, PConnectComponent } from '@pega/sdk-react';
36
+ import type { PConnProps } from '@pega/sdk-react';
37
+ import './PromotedFilters.css';
38
+
39
+ const SUPPORTED_TYPES_IN_PROMOTED_FILTERS = [
40
+ 'TextInput','Percentage','Email','Integer','Decimal','Checkbox',
41
+ 'DateTime','Date','Time','Text','TextArea','Currency','URL','RichText',
42
+ ];
43
+
44
+ // Sub-component: renders each filter field via PCore.createPConnect
45
+ function Filters({ filters, transientItemID, localeReference }) {
46
+ return filters.map((filter, index) => {
47
+ const filterClone = { ...filter };
48
+ if (!SUPPORTED_TYPES_IN_PROMOTED_FILTERS.includes(filterClone.type)) {
49
+ filterClone.type = 'TextInput';
50
+ delete filterClone.config.placeholder;
51
+ }
52
+ filterClone.config.contextName = transientItemID;
53
+ filterClone.config.readOnly = false;
54
+ filterClone.config.context = transientItemID;
55
+ filterClone.config.localeReference = localeReference;
56
+ const c11nEnv = PCore.createPConnect({
57
+ meta: filterClone,
58
+ options: { hasForm: true, contextName: transientItemID },
59
+ });
60
+ return <React.Fragment key={index}>{createElement(PConnectComponent, c11nEnv)}</React.Fragment>;
61
+ });
62
+ }
63
+
64
+ export default function PromotedFilters(props: PromotedFilterProps) {
65
+ const ListView = getComponentFromRegistry('ListView');
66
+ const localizedVal = PCore.getLocaleUtils().getLocaleValue;
67
+ const { getPConnect, viewName, filters, listViewProps, pageClass, parameters } = props;
68
+ const [initTable, setInitTable] = useState(false);
69
+ const [payload, setPayload] = useState({});
70
+
71
+ // 1. Build transient item on mount (useMemo)
72
+ const filtersProperties = {};
73
+ filters.forEach(f => { filtersProperties[PCore.getAnnotationUtils().getPropertyName(f.config.value)] = ''; });
74
+ const transientItemID = useMemo(() => {
75
+ return getPConnect().getContainerManager().addTransientItem({
76
+ id: viewName, data: { ...filtersProperties, classID: pageClass },
77
+ });
78
+ }, []);
79
+
80
+ // 2. Search handler: read form changes, format filters, set payload
81
+ const getFilterData = useCallback((e) => {
82
+ e.preventDefault();
83
+ const changes = PCore.getFormUtils().getChanges(transientItemID);
84
+ const formValues = {};
85
+ Object.keys(changes).forEach(key => {
86
+ if (!['context_data','pageInstructions'].includes(key)) formValues[key] = changes[key];
87
+ });
88
+ const promotedFilters = formatPromotedFilters(formValues);
89
+ if (PCore.getFormUtils().isFormValid(transientItemID) && isValidInput(formValues)) {
90
+ setInitTable(true);
91
+ const Query: any = { dataViewParameters: parameters };
92
+ if (!isEmptyObject(promotedFilters)) Query.query = { filter: { filterConditions: promotedFilters } };
93
+ setPayload(Query);
94
+ }
95
+ }, [transientItemID]);
96
+
97
+ // 3. Clear handler
98
+ const clearFilterData = useCallback(() => {
99
+ PCore.getContainerUtils().clearTransientData(transientItemID);
100
+ setInitTable(false);
101
+ getPConnect()?.getListActions?.()?.setSelectedRows([]);
102
+ }, [transientItemID]);
103
+
104
+ // 4. Render: title + filter fields + Clear/Search buttons + conditional ListView
105
+ return (
106
+ <>
107
+ <div>{listViewProps.title}</div>
108
+ <div className="psdk-grid-filter">
109
+ <Filters filters={filters} transientItemID={transientItemID}
110
+ localeReference={listViewProps.localeReference} />
111
+ </div>
112
+ <div>
113
+ <ClearButton onClick={clearFilterData}>Clear</ClearButton>
114
+ <SearchButton onClick={getFilterData}>Search</SearchButton>
115
+ </div>
116
+ {initTable && <ListView {...listViewProps} title="" payload={payload} isSearchable />}
117
+ </>
118
+ );
119
+ }
120
+ ```
121
+
30
122
  ## Behavioral Contract
31
123
 
32
124
  ### Transient Data Setup