@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
@@ -28,6 +28,73 @@ 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
+ The foundational field component — simplest pattern. All text-like fields (Email, URL, Integer, Phone) follow this structure with minor variations.
34
+
35
+ ```typescript
36
+ import { useState, useEffect } 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 TextInputProps extends PConnFieldProps {
42
+ fieldMetadata?: any;
43
+ }
44
+
45
+ export default function TextInput(props: TextInputProps) {
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
+
56
+ // 3. PConnect setup
57
+ const pConn = getPConnect();
58
+ const actions = pConn.getActionsApi();
59
+ const propName = (pConn.getStateProps() as any).value;
60
+ const helperTextToDisplay = validatemessage || helperText;
61
+ const maxLength = fieldMetadata?.maxLength;
62
+
63
+ // 4. State + readOnly prop
64
+ const [inputValue, setInputValue] = useState('');
65
+ let readOnlyProp = {};
66
+
67
+ // 5. useEffect: sync from store — deps: [value]
68
+ useEffect(() => { setInputValue(value); }, [value]);
69
+
70
+ // 6. Display mode returns
71
+ if (displayMode === 'DISPLAY_ONLY') {
72
+ return <FieldValueList name={hideLabel ? '' : label} value={value} />;
73
+ }
74
+ if (displayMode === 'STACKED_LARGE_VAL') {
75
+ return <FieldValueList name={hideLabel ? '' : label} value={value} variant="stacked" />;
76
+ }
77
+
78
+ // 7. Read-only prop
79
+ if (readOnly) readOnlyProp = { readOnly: true };
80
+
81
+ // 8. Test ID + handlers
82
+ const testProps: any = { 'data-test-id': testId };
83
+ function handleChange(event) { setInputValue(event?.target?.value); }
84
+ function handleBlur() { handleEvent(actions, 'changeNblur', propName, inputValue); }
85
+
86
+ // 9. Main render — single-line text input
87
+ // Key props:
88
+ // - fullWidth, variant: readOnly ? 'standard' : 'outlined', size: 'small'
89
+ // - value: inputValue, onChange: handleChange
90
+ // - onBlur: !readOnly ? handleBlur : undefined
91
+ // - label, helperText: helperTextToDisplay, placeholder: placeholder ?? ''
92
+ // - required, disabled, error: status === 'error'
93
+ // - slotProps: { input: { ...readOnlyProp, inputProps: { maxLength, ...testProps } } }
94
+ return <TextFieldWidget ... />;
95
+ }
96
+ ```
97
+
31
98
  ## Behavioral Contract
32
99
 
33
100
  1. **Local state:** Maintain `inputValue` in local state (string). Initialize to `value` prop (`''` default).
@@ -24,6 +24,73 @@ 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
+ No local state for time value — derived directly from `props.value` on each render.
30
+
31
+ ```typescript
32
+ import dayjs from 'dayjs';
33
+ import handleEvent from '../../helpers/event-utils';
34
+ import { getComponentFromRegistry } from '@pega/sdk-react';
35
+ import type { PConnFieldProps } from '@pega/sdk-react';
36
+
37
+ interface TimeProps extends PConnFieldProps {}
38
+
39
+ export default function Time(props: TimeProps) {
40
+ // 1. Registry lookups
41
+ const FieldValueList = getComponentFromRegistry('FieldValueList');
42
+ const TextInput = getComponentFromRegistry('TextInput');
43
+
44
+ // 2. Destructure props
45
+ const {
46
+ getPConnect, label, required, disabled, value = '',
47
+ validatemessage, status, readOnly, helperText, displayMode,
48
+ hideLabel, testId,
49
+ } = props;
50
+ const helperTextToDisplay = validatemessage || helperText;
51
+ const pConn = getPConnect();
52
+ const actions = pConn.getActionsApi();
53
+ const propName = (pConn.getStateProps() as any).value;
54
+
55
+ // 3. Display mode returns
56
+ if (displayMode === 'DISPLAY_ONLY') {
57
+ return <FieldValueList name={hideLabel ? '' : label} value={value} />;
58
+ }
59
+ if (displayMode === 'STACKED_LARGE_VAL') {
60
+ return <FieldValueList name={hideLabel ? '' : label} value={value} variant="stacked" />;
61
+ }
62
+
63
+ // 4. Read-only return
64
+ if (readOnly) return <TextInput {...props} />;
65
+
66
+ // 5. Test ID
67
+ const testProps: any = { 'data-test-id': testId };
68
+
69
+ // 6. handleChange — commit on change (not blur)
70
+ const handleChange = (date) => {
71
+ const theValue = date && date.isValid() ? date.format('HH:mm:ss') : null;
72
+ handleEvent(actions, 'changeNblur', propName, theValue);
73
+ };
74
+
75
+ // 7. Parse time value from HH:mm:ss string
76
+ let timeValue: any = null;
77
+ if (value && Object.keys(value).length) {
78
+ const timeArray = value.split(':').map(itm => Number(itm));
79
+ timeValue = dayjs().hour(timeArray[0]).minute(timeArray[1]);
80
+ }
81
+
82
+ // 8. Main render — time picker
83
+ // Key props:
84
+ // - disabled, label, value: timeValue
85
+ // - minutesStep: 5, format: 'hh:mm a'
86
+ // - onChange: handleChange
87
+ // - textField slot: variant 'outlined', placeholder 'hh:mm am',
88
+ // required, error: status === 'error', helperText: helperTextToDisplay,
89
+ // size: 'small', InputProps: { ...testProps }
90
+ return <TimePickerWidget ... />;
91
+ }
92
+ ```
93
+
27
94
  ## Behavioral Contract
28
95
 
29
96
  1. **Value format stored/committed:** `HH:mm:ss` (24-hour, e.g., `'14:30:00'`).
@@ -26,6 +26,65 @@ import type { PConnFieldProps } from '@pega/sdk-react';
26
26
 
27
27
  > **Important naming note:** Export the component as `URLComponent` (not `URL`) to avoid conflicts with the browser's built-in `URL` global. Register it in `component-map.ts` as `URL: URLComponent`.
28
28
 
29
+ ## Component Skeleton
30
+
31
+ Nearly identical to TextInput — only difference is `type='url'`.
32
+
33
+ ```typescript
34
+ import { useEffect, useState } from 'react';
35
+ import handleEvent from '../../helpers/event-utils';
36
+ import { getComponentFromRegistry } from '@pega/sdk-react';
37
+ import type { PConnFieldProps } from '@pega/sdk-react';
38
+
39
+ interface URLComponentProps extends PConnFieldProps {}
40
+
41
+ export default function URLComponent(props: URLComponentProps) {
42
+ // 1. Registry lookups
43
+ const FieldValueList = getComponentFromRegistry('FieldValueList');
44
+ const TextInput = getComponentFromRegistry('TextInput');
45
+
46
+ // 2. Destructure props
47
+ const {
48
+ getPConnect, label, required, disabled, value = '',
49
+ validatemessage, status, readOnly, testId,
50
+ helperText, displayMode, hideLabel, placeholder,
51
+ } = props;
52
+ const helperTextToDisplay = validatemessage || helperText;
53
+ const [inputValue, setInputValue] = useState('');
54
+ const pConn = getPConnect();
55
+ const actions = pConn.getActionsApi();
56
+ const propName = (pConn.getStateProps() as any).value;
57
+
58
+ // 3. useEffect: sync — deps: [value]
59
+ useEffect(() => { setInputValue(value); }, [value]);
60
+
61
+ // 4. Display mode returns
62
+ if (displayMode === 'DISPLAY_ONLY') {
63
+ return <FieldValueList name={hideLabel ? '' : label} value={value} />;
64
+ }
65
+ if (displayMode === 'STACKED_LARGE_VAL') {
66
+ return <FieldValueList name={hideLabel ? '' : label} value={value} variant="stacked" />;
67
+ }
68
+
69
+ // 5. Read-only return
70
+ if (readOnly) return <TextInput {...props} />;
71
+
72
+ // 6. Handlers
73
+ const testProps: any = { 'data-test-id': testId };
74
+ const handleChange = (event) => { setInputValue(event?.target?.value); };
75
+ function handleBlur() { handleEvent(actions, 'changeNblur', propName, inputValue); }
76
+
77
+ // 7. Main render — URL input (type='url')
78
+ // Key props: same as TextInput but type: 'url'
79
+ // - fullWidth, variant: 'outlined', size: 'small'
80
+ // - value: inputValue, onChange, onBlur: !readOnly ? handleBlur : undefined
81
+ // - label, helperText: helperTextToDisplay, placeholder: placeholder ?? ''
82
+ // - required, disabled, error: status === 'error'
83
+ // - slotProps: { input: { inputProps: { ...testProps } } }
84
+ return <TextFieldWidget type="url" ... />;
85
+ }
86
+ ```
87
+
29
88
  ## Behavioral Contract
30
89
 
31
90
  1. **Local state:** Maintain `inputValue` (string). Initialize from `value` prop (`''` default).
@@ -43,6 +43,96 @@ import type { PConnProps } from '@pega/sdk-react';
43
43
  | `variant` | `string` (optional) | `'inline'` | Layout variant |
44
44
  | `onChange` | `any` (optional) | — | Change handler (passed through to child) |
45
45
 
46
+ ## Component Skeleton
47
+
48
+ Orchestrator component — renders either AutoComplete, Dropdown, formatted text, or FieldValueList based on mode. Uses `memo` with custom comparison.
49
+
50
+ ```typescript
51
+ import { memo, useEffect, useState } from 'react';
52
+ import { getComponentFromRegistry } from '@pega/sdk-react';
53
+ import type { PConnProps } from '@pega/sdk-react';
54
+ import { getUserId, isUserNameAvailable } from './UserReferenceUtils';
55
+
56
+ const DROPDOWN_LIST = 'Drop-down list';
57
+ const SEARCH_BOX = 'Search box';
58
+
59
+ interface UserReferenceProps extends PConnProps {
60
+ displayAs?: string;
61
+ displayMode?: string;
62
+ label?: string;
63
+ value?: any;
64
+ testId?: string;
65
+ placeholder?: string;
66
+ helperText?: string;
67
+ disabled?: boolean;
68
+ readOnly?: boolean;
69
+ required?: boolean;
70
+ validatemessage?: string;
71
+ showAsFormattedText?: boolean;
72
+ additionalProps?: object;
73
+ hideLabel?: boolean;
74
+ variant?: string;
75
+ onChange?: any;
76
+ }
77
+
78
+ const UserReference = (props: UserReferenceProps) => {
79
+ // 1. Registry lookups
80
+ const AutoComplete = getComponentFromRegistry('AutoComplete');
81
+ const Dropdown = getComponentFromRegistry('Dropdown');
82
+ const FieldValueList = getComponentFromRegistry('FieldValueList');
83
+
84
+ // 2. Destructure props (all with defaults)
85
+ const {
86
+ label = '',
87
+ displayAs = '',
88
+ displayMode = '',
89
+ getPConnect,
90
+ value = '',
91
+ testId = '',
92
+ helperText = '',
93
+ validatemessage = '',
94
+ placeholder = '',
95
+ showAsFormattedText = false,
96
+ additionalProps = {},
97
+ hideLabel = false,
98
+ readOnly = false,
99
+ required = false,
100
+ disabled = false,
101
+ onChange,
102
+ } = props;
103
+
104
+ // 3. State
105
+ const [dropDownDataSource, setDropDownDataSource] = useState([]);
106
+ const [userName, setUserName] = useState('');
107
+
108
+ // 4. Derived
109
+ const OPERATORS_DP = PCore.getEnvironmentInfo().getDefaultOperatorDP();
110
+ const userId = getUserId(value);
111
+
112
+ // 5. useEffect — deps: [displayAs, readOnly, showAsFormattedText, value]
113
+ // Case 1: userId && readOnly && showAsFormattedText → resolve userName
114
+ // Case 2: displayAs === DROPDOWN_LIST → fetch user list via REST
115
+
116
+ // 6. Rendering decision tree
117
+ // displayMode DISPLAY_ONLY → FieldValueList(userName || '')
118
+ // displayMode STACKED → FieldValueList(userName || '', variant='stacked')
119
+ // readOnly && showAsFormattedText && userId → label + userName text
120
+ // displayAs SEARCH_BOX → <AutoComplete datasource={OPERATORS_DP} listType='datapage' ...>
121
+ // displayAs DROPDOWN_LIST → <Dropdown datasource={dropDownDataSource} listType='associated' ...>
122
+ return userReferenceComponent;
123
+ };
124
+
125
+ // 7. Memo with custom comparison
126
+ const comparisonFn = (prevProps, nextProps) =>
127
+ getUserId(prevProps.value) === getUserId(nextProps.value) &&
128
+ prevProps.validatemessage === nextProps.validatemessage &&
129
+ prevProps.required === nextProps.required &&
130
+ prevProps.disabled === nextProps.disabled &&
131
+ prevProps.readOnly === nextProps.readOnly;
132
+
133
+ export default memo(UserReference, comparisonFn);
134
+ ```
135
+
46
136
  ## Behavioral Contract
47
137
 
48
138
  ### User ID extraction
@@ -31,7 +31,7 @@ src/components/template/TwoColumn/
31
31
  Template components extend `PConnProps`:
32
32
 
33
33
  ```typescript
34
- import type { PConnProps } from '../../../types/PConnProps';
34
+ import type { PConnProps } from '@pega/sdk-react';
35
35
 
36
36
  interface PConnProps {
37
37
  getPConnect: () => typeof PConnect;
@@ -65,36 +65,33 @@ export default function TwoColumn(props: PropsWithChildren<TwoColumnProps>) {
65
65
  const { children, templateCol = '1fr 1fr' } = props;
66
66
  const childrenToRender = children as ReactElement[];
67
67
 
68
- // Parse templateCol into column width ratios
69
- // Strip unit suffixes, split on whitespace, convert to numbers
70
- const colArray = templateCol.replaceAll(/[a-z]+/g, '').split(/\s/).map(Number);
71
- const totalCols = colArray.reduce((v, itm) => itm + v, 0);
72
- // colArray[0] / totalCols = left column fraction
73
- // colArray[1] / totalCols = right column fraction
74
-
75
- // [DS GRID] — render two children in a responsive grid using the computed ratios
76
- // On mobile (narrow viewport): both columns should stack to full width
77
- // On desktop: apply the computed left/right ratio
68
+ // templateCol maps directly to CSS grid-template-columns — no conversion needed
69
+ // Use plain CSS grid with width: 100% to guarantee the layout fills its parent
70
+ // On mobile: use a media query or @container query to stack columns
78
71
  return (
79
- <YourDesignSystemGrid>
80
- <YourDesignSystemColumn ratio={colArray[0] / totalCols}>
72
+ <div style={{ display: 'grid', gridTemplateColumns: templateCol, gap: '0.5rem', width: '100%' }}>
73
+ <div style={{ display: 'grid', gap: '1rem', alignContent: 'baseline' }}>
81
74
  {childrenToRender[0]}
82
- </YourDesignSystemColumn>
83
- <YourDesignSystemColumn ratio={colArray[1] / totalCols}>
75
+ </div>
76
+ <div style={{ display: 'grid', gap: '1rem', alignContent: 'baseline' }}>
84
77
  {childrenToRender[1]}
85
- </YourDesignSystemColumn>
86
- </YourDesignSystemGrid>
78
+ </div>
79
+ </div>
87
80
  );
88
81
  }
89
82
  ```
90
83
 
84
+ > ⚠️ **Do NOT use DS-specific grid components** (e.g., Carbon `<Grid>`, Ant Design `<Row>/<Col>`) for layout templates. Many DS grids have built-in `max-width` constraints that prevent the layout from filling its parent container. Use plain CSS grid with `grid-template-columns: templateCol` — this works with every design system and guarantees full-width rendering.
85
+
91
86
  ---
92
87
 
93
88
  ## Design System Adaptation (Layout Templates Only)
94
89
 
95
90
  > Form templates and page templates use the PConnect bridge pattern and do **not** use any design system primitives. This section applies only to layout templates: TwoColumn, OneColumn, NarrowWide, WideNarrow, and their sub-variants.
91
+ >
92
+ > **Use plain CSS grid** (`display: grid; grid-template-columns; width: 100%`) for all layout templates. The `templateCol` prop value (e.g., `'1fr 1fr'`, `'2fr 1fr'`) maps directly to `grid-template-columns`. Do NOT use DS grid components — they may have max-width constraints.
96
93
 
97
- **1. Check the component-specific skill file** — `.github/skills/template-skills/<ComponentName>.md` contains a **Design System Mapping** table where available. Use it as a starting point.
94
+ **1. Check the component-specific skill file** — `{{SKILL_DIR}}/template-skills/<ComponentName>.md` contains a **Design System Mapping** table where available. Use it as a starting point.
98
95
 
99
96
  **2. If the chosen design system is not listed** — use the **component purpose** description to identify the appropriate DS layout primitive (grid, flex, columns).
100
97
 
@@ -119,59 +116,82 @@ grep -A 30 "interface.*Props" <path-to-file>
119
116
 
120
117
  Used for: DefaultForm, HierarchicalForm
121
118
 
119
+ > ⚠️ **CRITICAL:** Form templates MUST use the `connectToState` HOC pattern. Without it, form fields will not render because they won't be subscribed to the Redux store for visibility and prop updates.
120
+
122
121
  ```typescript
123
122
  import { createElement } from 'react';
124
- import createPConnectComponent from '../../helpers/react_pconnect';
123
+ import { PConnectComponent } from '@pega/sdk-react';
125
124
  import connectToState from '../../helpers/state-utils';
126
- import type { PConnProps } from '../../../types/PConnProps';
125
+ import { getKeyForMappedField, mapStateToProps } from './utils';
126
+ import type { PConnProps } from '@pega/sdk-react';
127
127
 
128
128
  interface DefaultFormProps extends PConnProps {
129
129
  NumCols: string;
130
130
  instructions: string;
131
131
  }
132
132
 
133
+ // MANDATORY: connectToState HOC wraps each field in Redux store subscription
134
+ const Child = connectToState(mapStateToProps)((props) => {
135
+ const { key, visibility, ...rest } = props;
136
+ return createElement(PConnectComponent, { ...rest, key, visibility });
137
+ });
138
+
133
139
  export default function DefaultForm(props: DefaultFormProps) {
134
140
  const { getPConnect, NumCols = '1' } = props;
135
141
 
136
- // Get children from the first region
142
+ // Unwrap region children (first child is a region → get ITS children)
137
143
  const arChildren = getPConnect().getChildren()[0].getPConnect().getChildren();
138
144
 
139
- // Wrap each child in a PConnect component
140
- const dfChildren = arChildren?.map((kid, i) => (
141
- createElement(createPConnectComponent(), { ...kid, key: `child-${i}` })
145
+ // Each child MUST be wrapped in the connectToState HOC
146
+ const dfChildren = arChildren?.map((kid) => (
147
+ <Child key={getKeyForMappedField(kid)} {...kid} />
142
148
  ));
143
149
 
144
150
  return <div className={`form-${NumCols}-col`}>{dfChildren}</div>;
145
151
  }
146
152
  ```
147
153
 
154
+ > ❌ **INCORRECT pattern** (will cause fields to not render):
155
+ >
156
+ > ```typescript
157
+ > // DO NOT USE — fields won't be subscribed to store
158
+ > arChildren.map((kid, i) => createElement(PConnectComponent, { ...kid, key: i }));
159
+ > ```
160
+
148
161
  ### Page Template (renders regions from PConnect children)
149
162
 
150
- Used for: CaseView, DefaultPage, ObjectPage
163
+ Used for: CaseView, DefaultPage, ObjectPage, AppShell, Confirmation
164
+
165
+ > ⚠️ **CRITICAL:** Page templates are NOT simple wrappers. They contain PCore API calls, useEffect hooks, state management, and complex prop drilling to infrastructure components. NEVER simplify a Page template to a single return statement. Always follow the component-specific skill file skeleton faithfully.
166
+ >
167
+ > After generating a Page template, compare your output against the skill file skeleton. Every `useState`, `useEffect`, `getComponentFromRegistry`, `PCore.*` call, helper function, and utility import from the skeleton MUST appear in your generated output. If your output is significantly shorter than the skeleton, you have over-simplified.
168
+ >
169
+ > ⚠️ **COMMON ERROR — `tabconfig` must be an array, NOT a React element:**
170
+ > The `VerticalTabs` infrastructure component expects `tabconfig` to be `{ name: string; id: number }[]`. You MUST build this array by iterating the tab region's PConnect children (extracting `label` from each child's config props). NEVER pass the raw React region element to `<VerticalTabs tabconfig={...}>` — it causes `TypeError: tabconfig.map is not a function`.
151
171
 
152
172
  ```typescript
153
- import { createElement } from 'react';
154
- import createPConnectComponent from '../../helpers/react_pconnect';
155
- import type { PConnProps } from '../../../types/PConnProps';
173
+ import { type PropsWithChildren, type ReactElement, useEffect, useState } from 'react';
174
+ import { getComponentFromRegistry, PConnectComponent } from '@pega/sdk-react';
175
+ import type { PConnProps } from '@pega/sdk-react';
156
176
 
157
- interface CaseViewProps extends PConnProps {
158
- header?: string;
159
- subheader?: string;
160
- }
177
+ export default function CaseView(props: PropsWithChildren<CaseViewProps>) {
178
+ // 1. Get infrastructure components from registry
179
+ const VerticalTabs = getComponentFromRegistry('VerticalTabs');
180
+ const DeferLoad = getComponentFromRegistry('DeferLoad');
161
181
 
162
- export default function CaseView(props: CaseViewProps) {
163
- const { getPConnect, header } = props;
182
+ // 2. Destructure ALL props from the skill file skeleton
183
+ const { getPConnect, children, header, ... } = props;
164
184
  const pConn = getPConnect();
165
- const children = pConn.getChildren();
166
185
 
167
- return (
168
- <div>
169
- <h2>{header}</h2>
170
- {children.map((child, index) => (
171
- createElement(createPConnectComponent(), { ...child, key: `region-${index}` })
172
- ))}
173
- </div>
174
- );
186
+ // 3. Include ALL state, effects, and handlers from the skill file
187
+ const [activeTab, setActiveTab] = useState(0);
188
+ useEffect(() => { /* event listeners, pub/sub */ }, []);
189
+
190
+ // 4. Extract named regions (NOT by index — use metadata name)
191
+ function getChildRegionByName(name: string) { ... }
192
+
193
+ // 5. Render with full layout structure from skill file
194
+ return ( /* full layout */ );
175
195
  }
176
196
  ```
177
197
 
@@ -193,39 +213,50 @@ const childrenToRender = children as ReactElement[];
193
213
 
194
214
  ```typescript
195
215
  import { createElement } from 'react';
196
- import createPConnectComponent from '../../helpers/react_pconnect';
216
+ import { PConnectComponent } from '@pega/sdk-react';
197
217
 
198
218
  // Get child PConnect objects
199
219
  const children = getPConnect().getChildren();
200
220
 
201
221
  // Render each child through the PConnect bridge
202
- children.map((child, i) => createElement(createPConnectComponent(), { ...child, key: `child-${i}` }));
222
+ children.map((child, i) => createElement(PConnectComponent, { ...child, key: `child-${i}` }));
203
223
  ```
204
224
 
205
- ### 3. State-connected children (DefaultForm pattern)
225
+ ### 3. State-connected children (REQUIRED for Form templates)
226
+
227
+ > ⚠️ This is the ONLY correct pattern for Form templates (DefaultForm, HierarchicalForm). Using pattern #2 above for form fields will result in fields not rendering.
206
228
 
207
229
  ```typescript
230
+ import { createElement } from 'react';
231
+ import { PConnectComponent } from '@pega/sdk-react';
208
232
  import connectToState from '../../helpers/state-utils';
209
- import createPConnectComponent from '../../helpers/react_pconnect';
233
+ import { getKeyForMappedField, mapStateToProps } from './utils';
210
234
 
211
235
  // connectToState HOC subscribes to Redux store for visibility/props
212
236
  const Child = connectToState(mapStateToProps)((props) => {
213
237
  const { key, visibility, ...rest } = props;
214
- return createElement(createPConnectComponent(), { ...rest, key, visibility });
238
+ return createElement(PConnectComponent, { ...rest, key, visibility });
215
239
  });
240
+
241
+ // Usage inside component:
242
+ const arChildren = getPConnect().getChildren()[0].getPConnect().getChildren();
243
+ const dfChildren = arChildren?.map((kid) => (
244
+ <Child key={getKeyForMappedField(kid)} {...kid} />
245
+ ));
216
246
  ```
217
247
 
218
248
  ---
219
249
 
220
250
  ## Helper Utilities
221
251
 
222
- ### `createPConnectComponent` (from `../../helpers/react_pconnect`)
252
+ ### `PConnectComponent` (from `@pega/sdk-react`)
223
253
 
224
- Factory that returns the PConnect bridge component. Used to render child PConnect objects:
254
+ The PConnect bridge component. Used to render child PConnect objects:
225
255
 
226
256
  ```typescript
227
- import createPConnectComponent from '../../helpers/react_pconnect';
228
- createElement(createPConnectComponent(), childPConnectProps);
257
+ import { createElement } from 'react';
258
+ import { PConnectComponent } from '@pega/sdk-react';
259
+ createElement(PConnectComponent, { ...childPConnectProps, key });
229
260
  ```
230
261
 
231
262
  ### `connectToState` (from `../../helpers/state-utils`)
@@ -24,6 +24,83 @@ Renders a multi-section advanced search form where search fields are organized i
24
24
  | `parameters` | `object` | No | Parameters passed to the data page |
25
25
  | `getPConnect` | `function` | Yes | PConnect getter |
26
26
 
27
+ ## Component Skeleton
28
+
29
+ ```typescript
30
+ import { useContext, useState } from 'react';
31
+ import { getComponentFromRegistry } from '@pega/sdk-react';
32
+ import DataReferenceAdvancedSearchContext from '../DataReference/DataReferenceAdvancedSearchContext';
33
+ import { getFirstChildConfig } from '../DataReference/utils';
34
+
35
+ export default function AdvancedSearch(props) {
36
+ const { getPConnect, targetObjectClass, localeReference } = props;
37
+ const SearchGroups = getComponentFromRegistry('SearchGroups');
38
+
39
+ // 1. Context — shared config from DataReference parent
40
+ const {
41
+ dataReferenceConfigToChild, isCreateNewReferenceEnabled,
42
+ disableStartingFieldsForReference, pyID, searchSelectCacheKey,
43
+ } = useContext(DataReferenceAdvancedSearchContext) as any;
44
+
45
+ // 2. Selection state check
46
+ const { selectionMode, value: singleSelectFieldValue, readonlyContextList: multiSelectField } =
47
+ dataReferenceConfigToChild;
48
+ const { MULTI } = PCore.getConstants().LIST_SELECTION_MODE;
49
+ const isSelectionExist = selectionMode === MULTI
50
+ ? getPConnect().getValue(multiSelectField)?.length || false
51
+ : getPConnect().getValue(singleSelectFieldValue) || false;
52
+ const [showRecords, setShowRecords] = useState(isSelectionExist);
53
+
54
+ // 3. Metadata + field deduplication
55
+ const pConn = getPConnect();
56
+ const rawViewMetadata = pConn.getRawMetadata();
57
+ const searchFieldsSet = new Set();
58
+ const searchFields: any = [];
59
+ rawViewMetadata.config.searchGroups.forEach((group) => {
60
+ group.children.forEach((child) => {
61
+ if (!searchFieldsSet.has(child.config.value) && !child.config.validator) {
62
+ searchFields.push(child);
63
+ searchFieldsSet.add(child.config.value);
64
+ }
65
+ });
66
+ });
67
+
68
+ // 4. Create editable field component from first child
69
+ const firstChildPConnect = getPConnect().getChildren()[0].getPConnect;
70
+ const [firstChildMeta] = rawViewMetadata.children;
71
+ const localizedVal = PCore.getLocaleUtils().getLocaleValue;
72
+ const cache = PCore.getNavigationUtils().getComponentCache(searchSelectCacheKey) ?? {};
73
+
74
+ const editableFieldComp = firstChildPConnect().createComponent({
75
+ type: firstChildMeta.type,
76
+ config: {
77
+ ...getFirstChildConfig({ firstChildMeta, getPConnect, rawViewMetadata,
78
+ contextClass: targetObjectClass, dataReferenceConfigToChild,
79
+ isCreateNewReferenceEnabled, disableStartingFieldsForReference, pyID }),
80
+ searchFields, showRecords,
81
+ label: localizedVal('Search results', 'DataReference'),
82
+ searchSelectCacheKey, cache,
83
+ },
84
+ });
85
+
86
+ // 5. Derive editable field path
87
+ const { selectionList, dataRelationshipContext } =
88
+ editableFieldComp.props.getPConnect().getConfigProps();
89
+ const editableField = selectionMode === MULTI
90
+ ? selectionList.substring(1) : dataRelationshipContext;
91
+
92
+ // 6. Render: SearchGroups + editableFieldComp
93
+ return (
94
+ <>
95
+ <SearchGroups getPConnect={getPConnect} editableField={editableField}
96
+ localeReference={localeReference} setShowRecords={setShowRecords}
97
+ searchSelectCacheKey={searchSelectCacheKey} cache={cache} />
98
+ {editableFieldComp}
99
+ </>
100
+ );
101
+ }
102
+ ```
103
+
27
104
  ## Behavioral Contract
28
105
 
29
106
  ### Search Groups from Metadata