@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,90 @@ Renders a numeric input for percentage values. Always appends a `%` suffix in th
24
24
  | `showGroupSeparators` | `string` (optional) | — | Whether to show thousands separators (passed as string, truthy check applies) |
25
25
  | `decimalPrecision` | `number` (optional) | — | Number of decimal places |
26
26
 
27
+ ## Component Skeleton
28
+
29
+ Follow this exact structure. Nearly identical to Currency but with `suffix='%'` instead of prefix, and no `fixedDecimalScale`.
30
+
31
+ ```typescript
32
+ import { useEffect, useState } from 'react';
33
+ import { getCurrencyCharacters, getCurrencyOptions } from '../Currency/currency-utils';
34
+ import handleEvent from '../../helpers/event-utils';
35
+ import { format } from '../../helpers/formatters';
36
+ import { getComponentFromRegistry } from '@pega/sdk-react';
37
+ import type { PConnFieldProps } from '@pega/sdk-react';
38
+
39
+ interface PercentageProps extends PConnFieldProps {
40
+ currencyISOCode?: string;
41
+ showGroupSeparators?: string;
42
+ decimalPrecision?: number;
43
+ }
44
+
45
+ export default function Percentage(props: PercentageProps) {
46
+ // 1. Registry lookup
47
+ const FieldValueList = getComponentFromRegistry('FieldValueList');
48
+
49
+ // 2. Destructure props
50
+ const {
51
+ getPConnect, label, required, disabled, value = '',
52
+ validatemessage, status, readOnly, currencyISOCode = 'USD',
53
+ testId, helperText, displayMode, hideLabel, placeholder,
54
+ showGroupSeparators, decimalPrecision,
55
+ } = props;
56
+
57
+ // 3. State
58
+ const [values, setValues] = useState(value.toString());
59
+
60
+ // 4. PConnect setup
61
+ const pConn = getPConnect();
62
+ const actions = pConn.getActionsApi();
63
+ const propName = (pConn.getStateProps() as any).value;
64
+ const helperTextToDisplay = validatemessage || helperText;
65
+
66
+ // 5. Formatted value (computed eagerly, before display mode check)
67
+ const theCurrencyOptions = getCurrencyOptions(currencyISOCode);
68
+ const formattedValue = format(value, pConn.getComponentName()?.toLowerCase(), theCurrencyOptions);
69
+
70
+ // 6. useEffect: sync from store — deps: [value]
71
+ useEffect(() => { setValues(value.toString()); }, [value]);
72
+
73
+ // 7. Read-only prop
74
+ let readOnlyProp = {};
75
+ if (readOnly) readOnlyProp = { readOnly: true };
76
+
77
+ // 8. Display mode returns
78
+ if (displayMode === 'DISPLAY_ONLY') {
79
+ return <FieldValueList name={hideLabel ? '' : label} value={formattedValue} />;
80
+ }
81
+ if (displayMode === 'STACKED_LARGE_VAL') {
82
+ return <FieldValueList name={hideLabel ? '' : label} value={formattedValue} variant="stacked" />;
83
+ }
84
+
85
+ // 9. Test ID + separators (computed AFTER display mode check in actual code)
86
+ const testProps: any = { 'data-test-id': testId };
87
+ const theSymbols = getCurrencyCharacters(currencyISOCode);
88
+ const theCurrDec = theSymbols.theDecimalIndicator;
89
+ const theCurrSep = theSymbols.theDigitGroupSeparator;
90
+
91
+ // 10. Event handlers
92
+ function PercentageOnBlur() { handleEvent(actions, 'changeNblur', propName, values); }
93
+ const handleChange = (val) => { setValues(val.value); };
94
+
95
+ // 11. Main render — numeric format input with % suffix
96
+ // Key props:
97
+ // - valueIsNumericString: true, fullWidth: true
98
+ // - value: values, suffix: '%'
99
+ // - variant: readOnly ? 'standard' : 'outlined'
100
+ // - decimalSeparator: theCurrDec
101
+ // - thousandSeparator: showGroupSeparators ? theCurrSep : ''
102
+ // - decimalScale: decimalPrecision
103
+ // - onValueChange, onBlur: !readOnly ? PercentageOnBlur : undefined
104
+ // - label, helperText: helperTextToDisplay, placeholder: placeholder ?? ''
105
+ // - required, disabled, error: status === 'error', size: 'small'
106
+ // - slotProps: { input: { ...readOnlyProp, inputProps: { ...testProps } } }
107
+ return <NumericFormatInput ... />;
108
+ }
109
+ ```
110
+
27
111
  ## Behavioral Contract
28
112
 
29
113
  1. **Local state:** Maintain `values` (string). Initialize from `value.toString()`.
@@ -24,6 +24,87 @@ No props beyond `PConnFieldProps`. Import type as:
24
24
  import type { PConnFieldProps } from '@pega/sdk-react';
25
25
  ```
26
26
 
27
+ ## Component Skeleton
28
+
29
+ Follow this exact structure. Replace `<PhoneInputWidget>` with equivalents from your chosen design system / phone library.
30
+
31
+ ```typescript
32
+ import { useEffect, useState } from 'react';
33
+ import { getComponentFromRegistry } from '@pega/sdk-react';
34
+ import type { PConnFieldProps } from '@pega/sdk-react';
35
+ import handleEvent from '../../helpers/event-utils';
36
+
37
+ interface PhoneProps extends PConnFieldProps {}
38
+
39
+ export default function Phone(props: PhoneProps) {
40
+ // 1. Registry lookup
41
+ const FieldValueList = getComponentFromRegistry('FieldValueList');
42
+
43
+ // 2. Destructure props — note: onChange is used in readOnly mode
44
+ const {
45
+ getPConnect, label, required, disabled, value = '',
46
+ validatemessage, status, onChange, readOnly, testId,
47
+ helperText, displayMode, hideLabel, placeholder,
48
+ } = props;
49
+
50
+ // 3. PConnect setup
51
+ const pConn = getPConnect();
52
+ const actions = pConn.getActionsApi();
53
+ const propName = (pConn.getStateProps() as any).value;
54
+
55
+ // 4. State + sync
56
+ const [inputValue, setInputValue] = useState(value);
57
+ useEffect(() => setInputValue(value), [value]);
58
+
59
+ // 5. Derived values
60
+ const helperTextToDisplay = validatemessage || helperText;
61
+ let testProp = { 'data-test-id': testId };
62
+
63
+ // 6. Display mode returns
64
+ if (displayMode === 'DISPLAY_ONLY') {
65
+ return <FieldValueList name={hideLabel ? '' : label} value={value} />;
66
+ }
67
+ if (displayMode === 'STACKED_LARGE_VAL') {
68
+ return <FieldValueList name={hideLabel ? '' : label} value={value} variant="stacked" />;
69
+ }
70
+
71
+ // 7. Read-only return — keeps phone widget but disables dropdown + sets input readOnly
72
+ // Uses onChange from PROPS (not local handler), value from PROPS (not state)
73
+ if (readOnly) {
74
+ return (
75
+ <div>
76
+ <PhoneInputWidget
77
+ defaultCountry="US" value={value} onChange={onChange}
78
+ disableDropdown={true}
79
+ slotProps={{ input: { readOnly: true, ...testProp } }}
80
+ /* + label, helperText, required, disabled, error, size, placeholder */
81
+ />
82
+ </div>
83
+ );
84
+ }
85
+
86
+ // 8. Editable handlers
87
+ const handleChange = (inputVal) => { setInputValue(inputVal); };
88
+ const handleBlur = (event) => {
89
+ const phoneValue = event?.target?.value;
90
+ let phoneNumber = phoneValue.split(' ').slice(1).join();
91
+ phoneNumber = phoneNumber ? `+${phoneValue.replace(/\\D+/g, '')}` : '';
92
+ handleEvent(actions, 'changeNblur', propName, phoneNumber);
93
+ };
94
+
95
+ // 9. Main render — phone input with country selector
96
+ // Key props:
97
+ // - fullWidth, variant: 'outlined', size: 'small'
98
+ // - defaultCountry: 'US'
99
+ // - value: inputValue, onChange: handleChange
100
+ // - onBlur: !readOnly ? handleBlur : undefined
101
+ // - label, helperText: helperTextToDisplay, placeholder: placeholder ?? ''
102
+ // - required, disabled, error: status === 'error'
103
+ // - slotProps: { input: { ...testProp } }
104
+ return <PhoneInputWidget ... />;
105
+ }
106
+ ```
107
+
27
108
  ## Behavioral Contract
28
109
 
29
110
  1. **Local state:** Maintain `inputValue` (string). Initialize from `value` prop. `useEffect` watching `value` → `setInputValue(value)`.
@@ -30,6 +30,99 @@ Renders a group of radio buttons for single-selection from a list of options. Su
30
30
  | `showImageDescription` | `boolean` (optional) | Whether to show image description in cards |
31
31
  | `datasource` | `any` (optional) | Datasource for card variant |
32
32
 
33
+ ## Component Skeleton
34
+
35
+ Follow this exact structure. Includes localization metadata derivation (same pattern as Dropdown).
36
+
37
+ ```typescript
38
+ import { useState, useEffect } from 'react';
39
+ import Utils from '../../helpers/utils';
40
+ import handleEvent from '../../helpers/event-utils';
41
+ import { getComponentFromRegistry } from '@pega/sdk-react';
42
+ import type { PConnFieldProps } from '@pega/sdk-react';
43
+
44
+ interface RadioButtonsProps extends PConnFieldProps {
45
+ inline: boolean;
46
+ fieldMetadata?: any;
47
+ variant?: string;
48
+ hideFieldLabels?: boolean;
49
+ additionalProps?: any;
50
+ imagePosition?: string;
51
+ imageSize?: string;
52
+ showImageDescription?: boolean;
53
+ datasource?: any;
54
+ }
55
+
56
+ export default function RadioButtons(props: RadioButtonsProps) {
57
+ // 1. Registry lookups
58
+ const FieldValueList = getComponentFromRegistry('FieldValueList');
59
+ const SelectableCard = getComponentFromRegistry('SelectableCard');
60
+
61
+ // 2. Destructure props
62
+ const {
63
+ getPConnect, label, value = '', readOnly, validatemessage,
64
+ helperText, status, required, inline, displayMode, hideLabel,
65
+ fieldMetadata, variant, hideFieldLabels, additionalProps,
66
+ datasource, imagePosition, imageSize, showImageDescription,
67
+ } = props;
68
+
69
+ // 3. State
70
+ const [theSelectedButton, setSelectedButton] = useState(value);
71
+
72
+ // 4. PConnect setup
73
+ const thePConn = getPConnect();
74
+ const theConfigProps = thePConn.getConfigProps();
75
+ const actionsApi = thePConn.getActionsApi();
76
+ const propName = (thePConn.getStateProps() as any).value;
77
+ const helperTextToDisplay = validatemessage || helperText;
78
+ const className = thePConn.getCaseInfo().getClassName();
79
+
80
+ // 5. Localization keys (same pattern as Dropdown)
81
+ let configProperty = (thePConn.getRawMetadata() as any)?.config?.value || '';
82
+ configProperty = configProperty.startsWith('@P') ? configProperty.substring(3) : configProperty;
83
+ configProperty = configProperty.startsWith('.') ? configProperty.substring(1) : configProperty;
84
+ const metaData = Array.isArray(fieldMetadata)
85
+ ? fieldMetadata.filter(f => f?.classID === className)[0] : fieldMetadata;
86
+ let displayName = metaData?.datasource?.propertyForDisplayText;
87
+ displayName = displayName?.slice(displayName.lastIndexOf('.') + 1);
88
+ const localeContext = metaData?.datasource?.tableType === 'DataPage' ? 'datapage' : 'associated';
89
+ const localeClass = localeContext === 'datapage' ? '@baseclass' : className;
90
+ const localeName = localeContext === 'datapage' ? metaData?.datasource?.name : configProperty;
91
+ const localePath = localeContext === 'datapage' ? displayName : localeName;
92
+
93
+ // 6. Load options (synchronous)
94
+ const theOptions = Utils.getOptionList(theConfigProps, thePConn.getDataObject(''));
95
+
96
+ // 7. useEffect: sync selected from value — deps: [value]
97
+ useEffect(() => { setSelectedButton(value); }, [value]);
98
+
99
+ // 8. Display mode returns (with localization)
100
+ if (displayMode === 'DISPLAY_ONLY') {
101
+ return <FieldValueList name={hideLabel ? '' : label}
102
+ value={thePConn.getLocalizedValue(value, localePath,
103
+ thePConn.getLocaleRuleNameFromKeys(localeClass, localeContext, localeName))} />;
104
+ }
105
+ if (displayMode === 'STACKED_LARGE_VAL') { /* same with variant="stacked" */ }
106
+
107
+ // 9. Event handlers
108
+ const handleChange = (event) => {
109
+ handleEvent(actionsApi, 'changeNblur', propName, event.target.value);
110
+ };
111
+ const handleBlur = (event) => {
112
+ thePConn.getValidationApi().validate(event.target.value, '');
113
+ };
114
+
115
+ // 10. Card variant return (variant === 'card')
116
+ // → heading + grid + SelectableCard with type='radio'
117
+
118
+ // 11. Standard variant return
119
+ // FormControl > FormLabel > RadioGroup(row={inline}) >
120
+ // FormControlLabel per option (localized label) >
121
+ // FormHelperText
122
+ return <RadioGroupWidget ... />;
123
+ }
124
+ ```
125
+
33
126
  ## Behavioral Contract
34
127
 
35
128
  1. **Local state:** Maintain `theSelectedButton` (string). Initialize from `value` prop. `useEffect` watching `value` → `setSelectedButton(value)`.
@@ -22,6 +22,91 @@ Renders a rich text (WYSIWYG) editor for HTML content. Uses a registry-resolved
22
22
  | ----------------- | ------------------- | --------------------------------------------- |
23
23
  | `additionalProps` | `object` (optional) | Extra props forwarded to the `RichTextEditor` |
24
24
 
25
+ ## Component Skeleton
26
+
27
+ Follow this exact structure. The `RichTextEditor` is resolved from the registry — it wraps whatever WYSIWYG library you choose.
28
+
29
+ ```typescript
30
+ import { useRef } from 'react';
31
+ import handleEvent from '../../helpers/event-utils';
32
+ import { getComponentFromRegistry } from '@pega/sdk-react';
33
+ import type { PConnFieldProps } from '@pega/sdk-react';
34
+ import './RichText.css';
35
+
36
+ interface RichTextProps extends PConnFieldProps {
37
+ additionalProps?: object;
38
+ }
39
+
40
+ export default function RichText(props: RichTextProps) {
41
+ // 1. Registry lookups
42
+ const FieldValueList = getComponentFromRegistry('FieldValueList');
43
+ const RichTextEditor = getComponentFromRegistry('RichTextEditor');
44
+
45
+ // 2. Destructure props
46
+ const {
47
+ getPConnect, value, placeholder, validatemessage,
48
+ label, hideLabel, helperText, testId, displayMode, additionalProps,
49
+ } = props;
50
+ const pConn = getPConnect();
51
+ const editorRef: any = useRef(null);
52
+
53
+ // 3. Props coercion — Pega may pass 'true'/'false' strings
54
+ let { readOnly, required, disabled } = props;
55
+ [readOnly, required, disabled] = [readOnly, required, disabled].map(
56
+ (prop) => prop === true || (typeof prop === 'string' && prop === 'true'),
57
+ );
58
+
59
+ // 4. Derived
60
+ const helperTextToDisplay = validatemessage || helperText;
61
+
62
+ // 5. Display mode returns — note isHtml prop
63
+ if (displayMode === 'DISPLAY_ONLY') {
64
+ return <FieldValueList name={hideLabel ? '' : label} value={value} isHtml />;
65
+ }
66
+ if (displayMode === 'STACKED_LARGE_VAL') {
67
+ return <FieldValueList name={hideLabel ? '' : label} value={value} isHtml variant="stacked" />;
68
+ }
69
+
70
+ // 6. Read-only render — no onChange/onBlur
71
+ if (readOnly) {
72
+ return (
73
+ <RichTextEditor {...additionalProps}
74
+ label={label} labelHidden={hideLabel} defaultValue={value}
75
+ testId={testId} info={helperTextToDisplay} ref={editorRef} readOnly />
76
+ );
77
+ }
78
+
79
+ // 7. Editable handlers
80
+ const actionsApi = pConn.getActionsApi();
81
+ let status = '';
82
+ if (validatemessage !== '') status = 'error';
83
+
84
+ const handleChange = () => {
85
+ if (status === 'error') {
86
+ const property = (pConn.getStateProps() as any).value;
87
+ pConn.clearErrorMessages({ property, category: '', context: '' });
88
+ }
89
+ };
90
+ const handleBlur = () => {
91
+ if (editorRef.current) {
92
+ const editorValue = editorRef.current.getContent({ format: 'html' });
93
+ const property = (pConn.getStateProps() as any).value;
94
+ handleEvent(actionsApi, 'changeNblur', property, editorValue);
95
+ }
96
+ };
97
+
98
+ // 8. Editable render
99
+ return (
100
+ <RichTextEditor {...additionalProps}
101
+ label={label} labelHidden={hideLabel} info={helperTextToDisplay}
102
+ defaultValue={value} placeholder={placeholder}
103
+ disabled={disabled} required={required} testId={testId}
104
+ ref={editorRef} error={status === 'error'}
105
+ onBlur={handleBlur} onChange={handleChange} />
106
+ );
107
+ }
108
+ ```
109
+
25
110
  ## Behavioral Contract
26
111
 
27
112
  1. **Editor ref:** Maintain an `editorRef` (via `useRef`) — the editor exposes its content via `editorRef.current.getContent({ format: 'html' })`.
@@ -35,6 +35,60 @@ import type { PConnProps } from '@pega/sdk-react';
35
35
 
36
36
  All remaining props (`...restProps`) are forwarded to each child component.
37
37
 
38
+ ## Component Skeleton
39
+
40
+ Read-only display component — no state, no event handling.
41
+
42
+ ```typescript
43
+ import { getComponentFromRegistry } from '@pega/sdk-react';
44
+ import type { PConnProps } from '@pega/sdk-react';
45
+
46
+ interface ScalarListProps extends PConnProps {
47
+ displayInModal: boolean;
48
+ hideLabel: boolean;
49
+ value: any[];
50
+ componentType: string;
51
+ label: string;
52
+ displayMode: string;
53
+ }
54
+
55
+ // Local sub-component: renders items as spans in an unstyled list
56
+ function CommaSeparatedList({ items }) {
57
+ return (
58
+ <ul style={{ padding: '0', margin: '0' }}>
59
+ {items.map((value, index) => <span key={index}>{value}</span>)}
60
+ </ul>
61
+ );
62
+ }
63
+
64
+ export default function ScalarList(props: ScalarListProps) {
65
+ // 1. Registry lookup
66
+ const FieldValueList = getComponentFromRegistry('FieldValueList');
67
+
68
+ // 2. Destructure — note ...restProps forwarded to each child
69
+ const { label, getPConnect, componentType, value: scalarValues, displayMode, hideLabel, ...restProps } = props;
70
+
71
+ // 3. Create child components for each scalar value
72
+ const items = scalarValues?.map((scalarValue) =>
73
+ getPConnect().createComponent(
74
+ {
75
+ type: componentType,
76
+ config: { value: scalarValue, displayMode: 'DISPLAY_ONLY', label, ...restProps, readOnly: 'true' },
77
+ },
78
+ '', '', {}, // 2nd/3rd/4th args per typedef
79
+ ),
80
+ );
81
+
82
+ // 4. Display mode: STACKED_LARGE_VAL or DISPLAY_ONLY → bare list
83
+ if (['STACKED_LARGE_VAL', 'DISPLAY_ONLY'].includes(displayMode)) {
84
+ return <div><CommaSeparatedList items={items} /></div>;
85
+ }
86
+
87
+ // 5. Default: wrap in FieldValueList
88
+ return <FieldValueList name={hideLabel ? '' : label} value={<CommaSeparatedList items={items} />} variant="stacked" />;
89
+ }
90
+ ```
91
+
38
92
  ## Behavioral Contract
39
93
 
40
94
  1. **No state, no event handling** — purely display/read-only.
@@ -44,6 +44,61 @@ Renders a grid of selectable cards. Each card contains a radio button or checkbo
44
44
  | `setIsRadioCardSelected` | `function` | — | Callback to inform parent whether radio selection matched |
45
45
  | `showNoValue` | `boolean` | `false` | When true (read-only + no selected items), render "No Value" text |
46
46
 
47
+ ## Component Skeleton
48
+
49
+ This component does NOT extend `PConnFieldProps` — it uses raw `props`. No typed interface in the reference implementation.
50
+
51
+ ```typescript
52
+ import { resolveReferenceFields } from './utils';
53
+
54
+ export default function SelectableCard(props) {
55
+ // 1. Destructure all props (image is a nested object)
56
+ const {
57
+ getPConnect, type,
58
+ image: { imagePosition, imageSize, showImageDescription, imageField = '', imageDescription = '' },
59
+ dataSource, recordKey = '', className, cardLabel,
60
+ hideFieldLabels = false, readOnly, disabled,
61
+ readOnlyList = [], displayMode, radioBtnValue,
62
+ onChange, onBlur, onClick, onKeyDown,
63
+ additionalProps, testId, setIsRadioCardSelected, showNoValue = false,
64
+ } = props;
65
+ const pConn = getPConnect();
66
+
67
+ // 2. "No Value" guard
68
+ if (showNoValue) return <Typography>No Value</Typography>;
69
+
70
+ // 3. Data source selection
71
+ const cardDataSource = (readOnly || displayMode === 'DISPLAY_ONLY')
72
+ ? readOnlyList || [] : dataSource?.source;
73
+ const imageDescriptionKey = showImageDescription ? imageDescription : undefined;
74
+
75
+ // 4. Card click handler — makes entire card clickable
76
+ const handleCardClick = (event) => {
77
+ if (disabled || readOnly) return;
78
+ if (event.target.closest?.('label, input')) return;
79
+ const input = event.currentTarget.querySelector('input[type="radio"], input[type="checkbox"]');
80
+ if (input) input.click();
81
+ };
82
+
83
+ // 5. Track radio selection state
84
+ let radioItemSelected = false;
85
+
86
+ // 6. Map cards
87
+ return (
88
+ <>
89
+ {(cardDataSource || []).map((item) => {
90
+ const resolvedFields = resolveReferenceFields(item, hideFieldLabels, recordKey, pConn);
91
+ // Build image object if item[imageField] exists
92
+ // Display mode: render simple read-only card (no input)
93
+ // Editable mode: render card with Radio or Checkbox inside
94
+ // Track: if type==='radio' && radioBtnValue === item[recordKey], radioItemSelected=true
95
+ })}
96
+ {type === 'radio' && setIsRadioCardSelected && setIsRadioCardSelected(radioItemSelected)}
97
+ </>
98
+ );
99
+ }
100
+ ```
101
+
47
102
  ## Behavioral Contract
48
103
 
49
104
  ### Data source selection
@@ -30,6 +30,70 @@ Renders a clickable link (`<a>` or button-style link) that navigates to a Pega c
30
30
  | `dataRelationshipContext` | `string \| null` | `null` | Context for data relationship resolution |
31
31
  | `contextPage` | `any` | — | Context page with `classID` |
32
32
 
33
+ ## Component Skeleton
34
+
35
+ This component computes a URL and renders a clickable link. Most logic is URL resolution — no form state.
36
+
37
+ ```typescript
38
+ import type { PConnFieldProps } from '@pega/sdk-react';
39
+ import semanticUtils from './utils';
40
+
41
+ interface SemanticLinkProps extends PConnFieldProps {
42
+ text: string;
43
+ resourcePayload: any;
44
+ resourceParams: any;
45
+ previewKey: string | null;
46
+ onClick: (event: any) => void;
47
+ testId: string;
48
+ referenceType: string | null;
49
+ dataRelationshipContext: string | null;
50
+ contextPage: any;
51
+ }
52
+
53
+ export default function SemanticLink(props: SemanticLinkProps) {
54
+ // 1. Destructure (note: onClick is received but NOT used directly)
55
+ const {
56
+ text, resourcePayload = {}, resourceParams = {},
57
+ getPConnect, previewKey, onClick, testId = '',
58
+ referenceType, dataRelationshipContext = null, contextPage,
59
+ ...restProps
60
+ } = props;
61
+
62
+ // 2. Constants
63
+ const { ACTION_OPENWORKBYHANDLE, ACTION_SHOWDATA } = PCore.getSemanticUrlUtils().getActions();
64
+ const pConnect = getPConnect();
65
+ const { RESOURCE_TYPES: { DATA }, WORKCLASS, CASE_INFO: { CASE_INFO_CLASSID } } = PCore.getConstants();
66
+
67
+ // 3. URL resolution variables
68
+ let linkURL = '';
69
+ let payload = {};
70
+ let dataViewName;
71
+ let isData = false;
72
+
73
+ // 4. Determine reference type and resolve URL
74
+ // → see Behavioral Contract "URL Resolution"
75
+
76
+ // 5. showDataAction() — calls getPConnect().getActionsApi().showData(...)
77
+ // → see Behavioral Contract
78
+
79
+ // 6. openLinkClick(e) — click handler
80
+ // If !metaKey && !ctrlKey: preventDefault, then showDataAction or openWorkByHandle
81
+ // If metaKey/ctrlKey: let browser open href in new tab
82
+
83
+ // 7. Render link
84
+ return (
85
+ <LinkComponent
86
+ href={linkURL}
87
+ onClick={openLinkClick}
88
+ data-testid={testId}
89
+ {...restProps}
90
+ >
91
+ {text || '--'}
92
+ </LinkComponent>
93
+ );
94
+ }
95
+ ```
96
+
33
97
  ## Behavioral Contract
34
98
 
35
99
  ### URL Resolution
@@ -28,6 +28,72 @@ All other props come from `PConnFieldProps`. Import type as:
28
28
  import type { PConnFieldProps } from '@pega/sdk-react';
29
29
  ```
30
30
 
31
+ ## Component Skeleton
32
+
33
+ Similar to TextInput but multiline with fixed rows. Does NOT delegate to TextInput in read-only mode.
34
+
35
+ ```typescript
36
+ import { useEffect, useState } from 'react';
37
+ import handleEvent from '../../helpers/event-utils';
38
+ import { getComponentFromRegistry } from '@pega/sdk-react';
39
+ import type { PConnFieldProps } from '@pega/sdk-react';
40
+
41
+ interface TextAreaProps extends PConnFieldProps {
42
+ fieldMetadata?: any;
43
+ }
44
+
45
+ export default function TextArea(props: TextAreaProps) {
46
+ // 1. Registry lookup
47
+ const FieldValueList = getComponentFromRegistry('FieldValueList');
48
+
49
+ // 2. Destructure props
50
+ const {
51
+ getPConnect, label, required, disabled, value = '',
52
+ validatemessage, status, readOnly, testId, fieldMetadata,
53
+ helperText, displayMode, hideLabel, placeholder,
54
+ } = props;
55
+ const helperTextToDisplay = validatemessage || helperText;
56
+ const pConn = getPConnect();
57
+ const actions = pConn.getActionsApi();
58
+ const propName = (pConn.getStateProps() as any).value;
59
+ const maxLength = fieldMetadata?.maxLength;
60
+
61
+ // 3. State
62
+ const [inputValue, setInputValue] = useState('');
63
+ let readOnlyProp = {};
64
+
65
+ // 4. useEffect: sync from store — deps: [value]
66
+ useEffect(() => { setInputValue(value); }, [value]);
67
+
68
+ // 5. Display mode returns
69
+ if (displayMode === 'DISPLAY_ONLY') {
70
+ return <FieldValueList name={hideLabel ? '' : label} value={value} />;
71
+ }
72
+ if (displayMode === 'STACKED_LARGE_VAL') {
73
+ return <FieldValueList name={hideLabel ? '' : label} value={value} variant="stacked" />;
74
+ }
75
+
76
+ // 6. Read-only: set readOnlyProp (do NOT delegate to TextInput — preserve multiline)
77
+ if (readOnly) readOnlyProp = { readOnly: true };
78
+
79
+ // 7. Test ID + handlers
80
+ const testProps: any = { 'data-test-id': testId };
81
+ function handleChange(event) { setInputValue(event?.target?.value); }
82
+ function handleBlur() { handleEvent(actions, 'changeNblur', propName, inputValue); }
83
+
84
+ // 8. Main render — multiline text input
85
+ // Key props:
86
+ // - multiline: true, minRows: 5, maxRows: 5
87
+ // - fullWidth, variant: readOnly ? 'standard' : 'outlined', size: 'small'
88
+ // - value: inputValue, onChange: handleChange
89
+ // - onBlur: !readOnly ? handleBlur : undefined
90
+ // - label, helperText: helperTextToDisplay, placeholder: placeholder ?? ''
91
+ // - required, disabled, error: status === 'error'
92
+ // - slotProps: { input: { ...readOnlyProp, inputProps: { maxLength, ...testProps } } }
93
+ return <TextAreaWidget ... />;
94
+ }
95
+ ```
96
+
31
97
  ## Behavioral Contract
32
98
 
33
99
  1. **Local state:** Maintain `inputValue` in local state (string). Initialize to `''`.
@@ -34,6 +34,34 @@ interface TextContentProps extends PConnProps {
34
34
  | `content` | `string` | The text string to render |
35
35
  | `displayAs` | `'Paragraph' \| 'Heading 1' \| 'Heading 2' \| 'Heading 3' \| 'Heading 4'` | How to render the text — maps to typography level |
36
36
 
37
+ ## Component Skeleton
38
+
39
+ Simplest possible component — no state, no effects, just a switch on `displayAs`.
40
+
41
+ ```typescript
42
+ import type { PConnProps } from '@pega/sdk-react';
43
+
44
+ interface TextContentProps extends PConnProps {
45
+ content: string;
46
+ displayAs: 'Paragraph' | 'Heading 1' | 'Heading 2' | 'Heading 3' | 'Heading 4';
47
+ }
48
+
49
+ export default function TextContent(props: TextContentProps) {
50
+ const { content, displayAs } = props;
51
+
52
+ switch (displayAs) {
53
+ case 'Paragraph': return <p>{content}</p>;
54
+ case 'Heading 1': return <h1>{content}</h1>;
55
+ case 'Heading 2': return <h2>{content}</h2>;
56
+ case 'Heading 3': return <h3>{content}</h3>;
57
+ case 'Heading 4': return <h4>{content}</h4>;
58
+ default:
59
+ console.error(`TextContent got unexpected displayAs: ${displayAs}`);
60
+ return <p>{content}</p>;
61
+ }
62
+ }
63
+ ```
64
+
37
65
  ## Behavioral Contract
38
66
 
39
67
  1. **No state, no effects** — purely presentational. Render `content` using the appropriate typography element for `displayAs`.