@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
@@ -24,6 +24,62 @@ A case view variant designed for self-service portal channels. Uses a horizontal
24
24
  | `isObjectType` | `boolean` | No | Whether the case is an object-type (affects child region count) |
25
25
  | `getPConnect` | `function` | Yes | PConnect getter |
26
26
 
27
+ ## Component Skeleton
28
+
29
+ ```typescript
30
+ import { getComponentFromRegistry } from '@pega/sdk-react';
31
+ import { prepareCaseSummaryData, filterUtilities } from '../utils';
32
+ import { Utils } from '../../helpers/utils';
33
+
34
+ export default function SelfServiceCaseView(props) {
35
+ const CaseViewActionsMenu = getComponentFromRegistry('CaseViewActionsMenu');
36
+ const CaseSummary = getComponentFromRegistry('CaseSummary');
37
+ const {
38
+ icon = '', getPConnect, header, subheader,
39
+ showCaseLifecycle = true, showSummaryRegion = true,
40
+ showUtilitiesRegion = true, showCaseActions = true,
41
+ children, caseClass,
42
+ caseInfo: { availableActions = [], availableProcesses = [], caseTypeID = '', caseTypeName = '' },
43
+ } = props;
44
+ const pConnect = getPConnect();
45
+
46
+ // 1. Boolean coercion (props may be strings)
47
+ const [bShowCaseLifecycle, bShowSummaryRegion, bShowUtilitiesRegion, bShowCaseActions] =
48
+ [showCaseLifecycle, showSummaryRegion, showUtilitiesRegion, showCaseActions]
49
+ .map(p => p === true || p === 'true');
50
+
51
+ // 2. Object type check — affects child indexing
52
+ const isObjectType = (PCore.getCaseUtils() as any).isObjectCaseType(caseClass);
53
+
54
+ // 3. Region assignment by child index
55
+ const renderedRegions = isObjectType
56
+ ? { caseSummary: children[0], utilities: filterUtilities(children[2]) }
57
+ : { caseSummary: children[0], stages: children[1], todo: children[2], utilities: filterUtilities(children[4]) };
58
+
59
+ // 4. Filter summary fields for self-service channel
60
+ const { primarySummaryFields, secondarySummaryFields } = prepareCaseSummaryData(
61
+ renderedRegions.caseSummary,
62
+ (config) => config?.availableInChannel?.selfService === true
63
+ );
64
+
65
+ // 5. Utilities visibility check
66
+ const showUtilities = bShowUtilitiesRegion && isUtilitiesRegionNotEmpty();
67
+ const showSummary = bShowSummaryRegion && (primarySummaryFields.length > 0 || secondarySummaryFields.length > 0);
68
+
69
+ // 6. Render: header bar + flex row (summary 25% | main flex:1 | utilities 25%)
70
+ return (
71
+ <div>
72
+ <HeaderBar>{header} {bShowCaseActions && <CaseViewActionsMenu ... />}</HeaderBar>
73
+ <div style={{ display: 'flex', flexDirection: 'row' }}>
74
+ {showSummary && <div style={{ flex: '0 0 25%' }}><CaseSummary ... /></div>}
75
+ <div style={{ flex: 1 }}>{bShowCaseLifecycle && renderedRegions.stages}{renderedRegions.todo}</div>
76
+ {showUtilities && <div style={{ flex: '0 0 25%' }}>{renderedRegions.utilities}</div>}
77
+ </div>
78
+ </div>
79
+ );
80
+ }
81
+ ```
82
+
27
83
  ## Behavioral Contract
28
84
 
29
85
  ### Region Assignment by Child Index
@@ -29,6 +29,65 @@ Entry-point template for embedded table data in a form or detail view. Routes to
29
29
  | `readOnly` | `boolean` | No | Alternative read-only flag |
30
30
  | `getPConnect` | `function` | Yes | PConnect getter |
31
31
 
32
+ ## Component Skeleton
33
+
34
+ ### SimpleTable (router)
35
+
36
+ ```typescript
37
+ import { getComponentFromRegistry } from '@pega/sdk-react';
38
+ import { buildMetaForListView, getContext } from '../../../helpers/simpleTableHelpers';
39
+
40
+ export default function SimpleTable(props: SimpleTableProps) {
41
+ const ListView = getComponentFromRegistry('ListView');
42
+ const FieldGroupTemplate = getComponentFromRegistry('FieldGroupTemplate');
43
+ const SimpleTableManual = getComponentFromRegistry('SimpleTableManual');
44
+ const { getPConnect, multiRecordDisplayAs, allowTableEdit, fieldMetadata, displayMode, ... } = props;
45
+
46
+ // 1. Route: fieldGroup
47
+ if (multiRecordDisplayAs === 'fieldGroup') {
48
+ return <FieldGroupTemplate {...props} contextClass={contextClass} />;
49
+ }
50
+
51
+ // 2. Route: reference list (read-only ListView)
52
+ if (fieldMetadata?.type === 'Page List' && fieldMetadata?.dataRetrievalType === 'refer') {
53
+ const metaForListView = buildMetaForListView(...);
54
+ return <ListView {...listViewProps} bInForm={true} displayMode={displayMode} />;
55
+ }
56
+
57
+ // 3. Route: editable table
58
+ return <SimpleTableManual {...props} contextClass={contextClass} />;
59
+ }
60
+ ```
61
+
62
+ ### SimpleTableManual (editable table — ~600+ lines)
63
+
64
+ Key structural outline:
65
+
66
+ - `getReferenceList(pConn)` + `setReferenceList`
67
+ - `buildElementsForTable()` — creates PConnect views per cell
68
+ - `generateRowsData()` — for read-only/modal mode
69
+ - `addRecord()` / `deleteRecord()` / `editRecord()` with modal support
70
+ - Sort/filter/column menu (same pattern as ListView)
71
+ - Render: Table with header sort + body rows + add/delete controls
72
+
73
+ ### SimpleTableSelect (selection wrapper)
74
+
75
+ ```typescript
76
+ const ListView = getComponentFromRegistry('ListView');
77
+ const PromotedFilters = getComponentFromRegistry('PromotedFilters');
78
+ // Build additionalTableConfig with selectionMode, compositeKeys
79
+ // If promoted filters exist: <PromotedFilters ... />
80
+ // Else: <ListView {...listViewProps} />
81
+ ```
82
+
83
+ ### SimpleTableSelectReadonly (link + modal)
84
+
85
+ ```typescript
86
+ // Renders SemanticLink per selected item (comma-separated)
87
+ // If list > 5 items: show "(N Total)" link that opens modal
88
+ // Modal: <Dialog><SimpleTableManual readOnly ... /></Dialog>
89
+ ```
90
+
32
91
  ## Behavioral Contract
33
92
 
34
93
  ### SimpleTable — Routing Logic
@@ -31,6 +31,58 @@ Renders a single data reference field in read-only mode. For fields that were di
31
31
  | `resourcePayload` | `object` | No | Payload for resource navigation |
32
32
  | `getPConnect` | `function` | Yes | PConnect getter |
33
33
 
34
+ ## Component Skeleton
35
+
36
+ ```typescript
37
+ import type { PConnProps } from '@pega/sdk-react';
38
+
39
+ interface SingleReferenceReadOnlyProps extends PConnProps {
40
+ config: any;
41
+ displayAs?: string;
42
+ ruleClass?: string;
43
+ label?: string;
44
+ displayMode?: string;
45
+ type: string;
46
+ referenceType?: string;
47
+ hideLabel?: boolean;
48
+ dataRelationshipContext?: string;
49
+ }
50
+
51
+ export default function SingleReferenceReadOnly(props: SingleReferenceReadOnlyProps) {
52
+ const {
53
+ getPConnect, displayAs = '', ruleClass = '', label = '',
54
+ type = '', displayMode = '', referenceType = '',
55
+ hideLabel = false, dataRelationshipContext = null, config,
56
+ } = props;
57
+
58
+ const editableComponents = ['AutoComplete', 'SimpleTableSelect', 'Dropdown'];
59
+
60
+ // 1. For editable field types: build SemanticLink config
61
+ if (editableComponents.includes(type)) {
62
+ config.caseClass = ruleClass;
63
+ config.text = config.primaryField;
64
+ config.caseID = config.value;
65
+ config.contextPage = `@P .${dataRelationshipContext}`;
66
+ config.resourceParams = { workID: displayAs === 'table' ? config.selectionKey : config.value };
67
+ config.resourcePayload = { caseClassName: ruleClass };
68
+ }
69
+
70
+ // 2. Create SemanticLink component
71
+ const component = getPConnect().createComponent(
72
+ { type: 'SemanticLink', config: { ...config, label, displayMode, referenceType, hideLabel, dataRelationshipContext } },
73
+ '', 0, {},
74
+ );
75
+
76
+ // 3. Render: label + semantic link in row layout
77
+ return (
78
+ <FormRow>
79
+ <Label>{label}</Label>
80
+ {component}
81
+ </FormRow>
82
+ );
83
+ }
84
+ ```
85
+
34
86
  ## Behavioral Contract
35
87
 
36
88
  ### Editable Component Check
@@ -23,6 +23,53 @@ Renders a horizontal tab bar for navigating between case view sections. Uses sha
23
23
  | `children` | `ReactNode[]` | Yes | `children[0]` is the deferred-loaded tabs container |
24
24
  | `getPConnect` | `function` | Yes | PConnect getter |
25
25
 
26
+ ## Component Skeleton
27
+
28
+ ```typescript
29
+ import { Children, type PropsWithChildren, useEffect, useState } from 'react';
30
+ import { getTransientTabs, getVisibleTabs, tabClick } from './tabUtils';
31
+ import type { PConnProps } from '@pega/sdk-react';
32
+
33
+ export default function SubTabs(props: PropsWithChildren<PConnProps>) {
34
+ const { children = [] } = props;
35
+
36
+ // 1. Extract deferred tabs
37
+ const deferLoadedTabs = Children.toArray(children)[0];
38
+ const availableTabs = getVisibleTabs(deferLoadedTabs, 'tabsSubs');
39
+
40
+ // 2. State
41
+ const [currentTabId, setCurrentTabId] = useState('0');
42
+ const [tabItems, setTabitem] = useState<any[]>([]);
43
+
44
+ // 3. Update tab items when currentTabId changes
45
+ useEffect(() => {
46
+ setTabitem(getTransientTabs(availableTabs, currentTabId, tabItems));
47
+ }, [currentTabId]);
48
+
49
+ // 4. Tab click
50
+ const handleTabClick = (id, index: string) => {
51
+ setCurrentTabId(index);
52
+ tabClick(index, availableTabs, currentTabId, setCurrentTabId, tabItems);
53
+ };
54
+
55
+ // 5. Render: TabContext + Tabs (scrollable) + TabPanels (no heading)
56
+ return (
57
+ <TabContext value={currentTabId.toString()}>
58
+ <TabBar onChange={handleTabClick} value={currentTabId} variant="scrollable">
59
+ {tabItems.map(tab => <Tab key={tab.id} label={tab.name} value={tab.id} />)}
60
+ </TabBar>
61
+ {tabItems.map(tab => (
62
+ <TabPanel key={tab.id} value={tab.id} tabIndex={+tab.id}>
63
+ {tab.content || 'No content exists'}
64
+ </TabPanel>
65
+ ))}
66
+ </TabContext>
67
+ );
68
+ }
69
+ ```
70
+
71
+ > **Key difference from `DetailsSubTabs`:** No heading, uses `'tabsSubs'` identifier, `getVisibleTabs` called directly (not in useEffect).
72
+
26
73
  ## Behavioral Contract
27
74
 
28
75
  1. **Extract deferred tabs:** `deferLoadedTabs = Children.toArray(children)[0]`.
@@ -24,6 +24,55 @@ Renders two child components side by side in a responsive grid. Column widths ar
24
24
 
25
25
  All three extend `PConnProps`. Children are received as React `children` (not via `getPConnect().getChildren()`).
26
26
 
27
+ ## Component Skeletons
28
+
29
+ ### TwoColumn (core)
30
+
31
+ ```typescript
32
+ import type { PropsWithChildren, ReactElement } from 'react';
33
+ import type { GridSize } from '@mui/material/Grid';
34
+ import type { PConnProps } from '@pega/sdk-react';
35
+
36
+ interface TwoColumnProps extends PConnProps {
37
+ templateCol?: string;
38
+ }
39
+
40
+ export default function TwoColumn(props: PropsWithChildren<TwoColumnProps>) {
41
+ const { children, templateCol = '1fr 1fr' } = props;
42
+ const childrenToRender = children as ReactElement[];
43
+
44
+ if (childrenToRender.length !== 2) {
45
+ console.error(`TwoColumn sees ${childrenToRender.length} children (expected 2)`);
46
+ }
47
+
48
+ // Parse templateCol to compute column sizes (12-grid)
49
+ const colAArray = templateCol.replaceAll(/[a-z]+/g, '').split(/\s/).map(Number);
50
+ const totalCols = colAArray.reduce((v, itm) => itm + v, 0);
51
+ const ratio = 12 / totalCols;
52
+ const aSize = (ratio * colAArray[0]) as GridSize;
53
+ const bSize = (ratio * colAArray[1]) as GridSize;
54
+
55
+ return (
56
+ <GridContainer spacing={1}>
57
+ <GridItem xs={12} md={aSize} className="col-styles">{childrenToRender[0]}</GridItem>
58
+ <GridItem xs={12} md={bSize} className="col-styles">{childrenToRender[1]}</GridItem>
59
+ </GridContainer>
60
+ );
61
+ }
62
+ // CSS: .col-styles { display: grid; gap: 1rem; align-content: baseline; }
63
+ ```
64
+
65
+ ### TwoColumnPage
66
+
67
+ ```typescript
68
+ const TwoColumn = getComponentFromRegistry('TwoColumn');
69
+ return <TwoColumn {...props} />;
70
+ ```
71
+
72
+ ### TwoColumnTab
73
+
74
+ Identical implementation to `TwoColumn` — same `templateCol` parsing, same grid output.
75
+
27
76
  ## Props
28
77
 
29
78
  | Prop | Type | Required | Description |
@@ -26,6 +26,77 @@ Provides the top navigation bar for WSS (Web Self-Service) portals. Responsive:
26
26
  | `operatorInfo` | `object` | No | `{ displayName: string }` — for avatar initials |
27
27
  | `getPConnect` | `function` | Yes | PConnect getter |
28
28
 
29
+ ## Component Skeleton
30
+
31
+ ```typescript
32
+ import { useState } from 'react';
33
+ import { logout } from '@pega/auth/lib/sdk-auth-manager';
34
+ import type { PConnProps } from '@pega/sdk-react';
35
+ import './WssNavBar.css';
36
+
37
+ interface WssNavBarProps extends PConnProps {
38
+ appInfo: any;
39
+ navLinks: any[];
40
+ operator: { currentUserInitials: string };
41
+ navDisplayOptions: { alignment: string; position: string };
42
+ portalName: string;
43
+ imageSrc: string;
44
+ fullImageSrc: string;
45
+ appName: any;
46
+ }
47
+
48
+ export default function WssNavBar(props: WssNavBarProps) {
49
+ const { appInfo, navLinks, operator, navDisplayOptions } = props;
50
+ const { alignment, position } = navDisplayOptions;
51
+
52
+ // 1. Menu state
53
+ const [anchorElNav, setAnchorElNav] = useState(null); // hamburger menu
54
+ const [anchorElUser, setAnchorElUser] = useState(null); // user menu
55
+ const localizedVal = PCore.getLocaleUtils().getLocaleValue;
56
+
57
+ // 2. Nav links content (hidden on mobile, shown on desktop)
58
+ const navLinksContent = (
59
+ <Box sx={{ display: { xs: 'none', md: 'flex' }, justifyContent: alignment }}>
60
+ {navLinks.map(link => <Button key={link.text} onClick={link.onClick}>{link.text}</Button>)}
61
+ </Box>
62
+ );
63
+
64
+ // 3. Render: AppBar > Toolbar > (logo + hamburger(mobile) + navLinks(desktop) + avatar)
65
+ return (
66
+ <AppBar position="static">
67
+ <Toolbar>
68
+ {/* App logo + name */}
69
+ <Button onClick={appInfo.onClick}>
70
+ <img src={appInfo.imageSrc} />
71
+ <span>{appInfo.appName}</span>
72
+ </Button>
73
+
74
+ {/* Hamburger (mobile only) */}
75
+ <HamburgerButton sx={{ display: { xs: 'flex', md: 'none' } }}
76
+ onClick={e => setAnchorElNav(e.currentTarget)} />
77
+ <MobileMenu anchorEl={anchorElNav} open={Boolean(anchorElNav)}
78
+ onClose={() => setAnchorElNav(null)}>
79
+ {navLinks.map(link => <MenuItem key={link.text} onClick={link.onClick}>{link.text}</MenuItem>)}
80
+ </MobileMenu>
81
+
82
+ {/* Nav links inline (position === 'inline') */}
83
+ {position === 'inline' && navLinksContent}
84
+
85
+ {/* Operator avatar + logout menu */}
86
+ <Avatar onClick={e => setAnchorElUser(e.currentTarget)}>{operator.currentUserInitials}</Avatar>
87
+ <UserMenu anchorEl={anchorElUser} open={Boolean(anchorElUser)}
88
+ onClose={() => setAnchorElUser(null)}>
89
+ <MenuItem onClick={logout}>{localizedVal('Log off', 'AppShell')}</MenuItem>
90
+ </UserMenu>
91
+ </Toolbar>
92
+
93
+ {/* Nav links below (position === 'below') */}
94
+ {position === 'below' && navLinksContent}
95
+ </AppBar>
96
+ );
97
+ }
98
+ ```
99
+
29
100
  ## Behavioral Contract
30
101
 
31
102
  ### Responsive Layout
@@ -118,7 +118,7 @@ export default function MyWidget(props: MyWidgetProps) {
118
118
 
119
119
  The PCore data-fetching logic (all `PCore.*` calls) is always identical regardless of design system. Only the `// [DS RENDER]` section changes.
120
120
 
121
- **1. Check the component-specific skill file** — `.claude/skills/widget-skills/<ComponentName>.md` contains a **Design System Mapping** table where available. Use it as a starting point.
121
+ **1. Check the component-specific skill file** — `{{SKILL_DIR}}/widget-skills/<ComponentName>.md` contains a **Design System Mapping** table where available. Use it as a starting point.
122
122
 
123
123
  **2. If the chosen design system is not listed** — use the component purpose description to identify the appropriate DS primitives (card, list, table, button, badge, etc.).
124
124
 
@@ -26,6 +26,43 @@ Renders an announcement card with a heading, description text, optional bullet l
26
26
  | `whatsnewlink` | `string` | No | URL for the "See what's new" button; if absent, button is not rendered |
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 AppAnnouncementProps extends PConnProps {
35
+ header?: string;
36
+ description?: string;
37
+ datasource?: any;
38
+ whatsnewlink?: string;
39
+ }
40
+
41
+ export default function AppAnnouncement(props: AppAnnouncementProps) {
42
+ const { header = '', description = '', datasource = [], whatsnewlink = '' } = props;
43
+
44
+ // 1. Extract item names from datasource
45
+ const details = datasource?.source?.map(item => item.name) || [];
46
+
47
+ // 2. Render: Card with left accent border + vertical margin for sibling spacing
48
+ // ⚠️ margin '0.5rem 0' is REQUIRED — without it the card has no top spacing
49
+ return (
50
+ <Card style={{ borderLeft: '6px solid var(--app-primary-light-color)', margin: '0.5rem 0' }}>
51
+ <CardHeader><h6>{header}</h6></CardHeader>
52
+ <CardContent>
53
+ <p>{description}</p>
54
+ {details.map((itm, idx) => <p key={idx}>- {itm}</p>)}
55
+ </CardContent>
56
+ {whatsnewlink && (
57
+ <CardActions>
58
+ <Button onClick={() => window.open(whatsnewlink, '_blank')}>See what's new</Button>
59
+ </CardActions>
60
+ )}
61
+ </Card>
62
+ );
63
+ }
64
+ ```
65
+
29
66
  ## Behavioral Contract
30
67
 
31
68
  1. **Item list extraction:** If `datasource` is provided and `datasource.source` is a non-empty array, extract item names and render them as a bullet list. Each array item is expected to have a `name` property.
@@ -46,7 +83,7 @@ Renders an announcement card with a heading, description text, optional bullet l
46
83
 
47
84
  **CSS-only implementation notes:**
48
85
 
49
- - Card: `border-left: 6px solid var(--app-primary-light-color); border-radius: 4px; box-shadow: 0 1px 4px rgba(0,0,0,0.12)`.
86
+ - Card: `border-left: 6px solid var(--app-primary-light-color); border-radius: 4px; box-shadow: 0 1px 4px rgba(0,0,0,0.12); margin: 0.5rem 0` — the vertical margin ensures consistent spacing with sibling widgets (e.g., Pulse).
50
87
  - Card header: `padding: 12px 16px; font-weight: 600`.
51
88
  - Card content: `padding: 0 16px 16px`.
52
89
  - Bullet list: `padding-left: 1.5rem; margin: 0.5rem 0`.
@@ -33,6 +33,64 @@ Renders a file attachment control within a Pega form. Users can upload one or mu
33
33
  | `helperText` | `string` | No | Helper text shown below the control |
34
34
  | `getPConnect` | `function` | Yes | PConnect getter |
35
35
 
36
+ ## Component Skeleton
37
+
38
+ This is a complex form-field widget (~400 lines). Key structural outline:
39
+
40
+ ```typescript
41
+ import { useState, useEffect, useCallback, useMemo, useRef } from 'react';
42
+ import { validateMaxSize } from '../../helpers/attachmentShared';
43
+ import { clearFieldErrorMessages, deleteAttachments, getIconFromFileType, insertAttachments,
44
+ useDeepMemo, useFileDownload, validateFileExtension } from './AttachmentUtils';
45
+ import type { PConnFieldProps } from '@pega/sdk-react';
46
+ import './Attachment.css';
47
+
48
+ interface AttachmentProps extends Omit<PConnFieldProps, 'value'> {
49
+ value: any; allowMultiple: boolean | string; extensions: string;
50
+ editMode: string; isTableFormatter: boolean;
51
+ }
52
+
53
+ export default function Attachment(props: AttachmentProps) {
54
+ const { value, getPConnect, label, validatemessage, extensions, displayMode, helperText, editMode, isTableFormatter } = props;
55
+ let { required, disabled, allowMultiple } = props;
56
+ // Coerce string booleans
57
+ [required, disabled, allowMultiple] = [required, disabled, allowMultiple].map(
58
+ p => p === true || (typeof p === 'string' && p === 'true')
59
+ );
60
+ const pConn = getPConnect();
61
+ const actionSequencer = useMemo(() => PCore.getActionsSequencer(), []);
62
+ const contextName = pConn.getContextName();
63
+
64
+ // 1. Normalize attachment data (old vs new format)
65
+ const { attachments, isOldAttachment } = PCore.getAttachmentUtils().prepareAttachmentData(value);
66
+ // 2. Set reference list
67
+ let valueRef = (pConn.getStateProps() as any).value;
68
+ pConn.setReferenceList(`.${valueRef}`);
69
+
70
+ // 3. State: files array, error tracking, upload toggle
71
+ const [files, setFiles] = useState(attachments);
72
+ const [toggleUploadBegin, setToggleUploadBegin] = useState(false);
73
+
74
+ // 4. deleteFile — removes from state, calls deleteAttachments, deregisters sequencer
75
+ // 5. onFileAdded — validates extension + size, adds to files, sets toggleUploadBegin
76
+ // 6. uploadFiles — registerBlockingAction, uploadAttachment per file, insertAttachments on success
77
+ // 7. useEffect: trigger uploadFiles when toggleUploadBegin changes
78
+ // 8. useEffect: subscribe to ASSIGNMENT_SUBMISSION for state override
79
+
80
+ // 9. Render: label + upload button + validation message + file list with progress/delete
81
+ return (
82
+ <div className="file-upload-container">
83
+ <label>{label}</label>
84
+ {/* Upload button (hidden input + styled button) */}
85
+ {/* Validation/helper text */}
86
+ {/* File list: icon + name + meta + progress + delete button */}
87
+ </div>
88
+ );
89
+ }
90
+ ```
91
+
92
+ > **Key patterns:** Action sequencer blocking (`registerBlockingAction`/`deRegisterBlockingAction`), `prepareAttachmentData` normalization, per-file progress tracking, `insertAttachments`/`deleteAttachments` helpers for Redux state.
93
+
36
94
  ## Behavioral Contract
37
95
 
38
96
  ### Attachment Format Detection
@@ -22,6 +22,69 @@ Renders a table of case events sourced from the `D_pyWorkHistory` data page. Sho
22
22
  | ------------- | ---------- | -------- | ----------------------------------------------------- |
23
23
  | `getPConnect` | `function` | Yes | PConnect getter — used to resolve case ID and context |
24
24
 
25
+ ## Component Skeleton
26
+
27
+ ```typescript
28
+ import { useEffect, useRef, useState } from 'react';
29
+ import isDeepEqual from 'fast-deep-equal/react';
30
+ import { Utils } from '../../helpers/utils';
31
+ import type { PConnProps } from '@pega/sdk-react';
32
+
33
+ interface CaseHistoryProps extends PConnProps {}
34
+
35
+ export default function CaseHistory(props: CaseHistoryProps) {
36
+ const { getPConnect } = props;
37
+ const thePConn = getPConnect();
38
+ const rowData = useRef([]);
39
+ const [waitingForData, setWaitingForData] = useState(true);
40
+
41
+ const caseID = thePConn.getValue(PCore.getConstants().CASE_INFO.CASE_INFO_ID, '');
42
+ const context = thePConn.getContextName();
43
+
44
+ const displayedColumns = [
45
+ { label: thePConn.getLocalizedValue('Date', '', ''), type: 'DateTime', fieldName: 'pxTimeCreated' },
46
+ { label: thePConn.getLocalizedValue('Description', '', ''), type: 'TextInput', fieldName: 'pyMessageKey' },
47
+ { label: thePConn.getLocalizedValue('Performed by', '', ''), type: 'TextInput', fieldName: 'pyPerformer' },
48
+ ];
49
+
50
+ // 1. Fetch D_pyWorkHistory on mount
51
+ useEffect(() => {
52
+ let active = true;
53
+ PCore.getDataApiUtils().getData('D_pyWorkHistory',
54
+ { dataViewParameters: [{ CaseInstanceKey: caseID }] }, context
55
+ ).then((historyJSON: any) => {
56
+ if (active) {
57
+ computeRowData(historyJSON.data.data);
58
+ setWaitingForData(false);
59
+ }
60
+ });
61
+ return () => { active = false; };
62
+ }, []);
63
+
64
+ // 2. computeRowData — format dates, use isDeepEqual to prevent unnecessary updates
65
+ function computeRowData(rows) {
66
+ const theRowData = rows.map(row => displayedColumns.map(col =>
67
+ col.type === 'DateTime' ? Utils.generateDateTime(row[col.fieldName], 'DateTime-Short') : row[col.fieldName]
68
+ ));
69
+ if (!isDeepEqual(theRowData, rowData.current)) rowData.current = theRowData;
70
+ }
71
+
72
+ // 3. Render: Table with 3 columns, '---' for missing values
73
+ return (
74
+ <TableContainer>
75
+ <Table>
76
+ <TableHead><TableRow>{displayedColumns.map(col => <TableCell key={col.fieldName}>{col.label}</TableCell>)}</TableRow></TableHead>
77
+ <TableBody>
78
+ {rowData.current.map((row, i) => (
79
+ <TableRow key={i}>{row.map((cell, j) => <TableCell key={j}>{cell || '---'}</TableCell>)}</TableRow>
80
+ ))}
81
+ </TableBody>
82
+ </Table>
83
+ </TableContainer>
84
+ );
85
+ }
86
+ ```
87
+
25
88
  No additional custom props. All data is fetched internally.
26
89
 
27
90
  ## Behavioral Contract