@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
@@ -29,6 +29,111 @@ Renders a single-select dropdown (select box). Options are loaded from a Pega da
29
29
  | `fieldMetadata` | `any` (optional) | Field metadata for localization context |
30
30
  | `onRecordChange` | `any` (optional) | Callback fired after a selection change |
31
31
 
32
+ ## Component Skeleton
33
+
34
+ Follow this exact structure. Same helper functions as AutoComplete (`flattenParameters`, `preProcessColumns`, `getDisplayFieldsMetaData`).
35
+
36
+ ```typescript
37
+ import { useEffect, useState } from 'react';
38
+ import isDeepEqual from 'fast-deep-equal/react';
39
+ import Utils from '../../helpers/utils';
40
+ import { getDataPage } from '../../helpers/data_page';
41
+ import handleEvent from '../../helpers/event-utils';
42
+ import { getComponentFromRegistry } from '@pega/sdk-react';
43
+ import type { PConnFieldProps } from '@pega/sdk-react';
44
+
45
+ interface IOption { key: string; value: string; }
46
+
47
+ // ── Helper functions (top-level) ─────────────────────────────
48
+ // flattenParameters, preProcessColumns, getDisplayFieldsMetaData
49
+ // → same implementations as AutoComplete (see that skill file)
50
+
51
+ interface DropdownProps extends PConnFieldProps {
52
+ datasource?: any[];
53
+ onRecordChange?: any;
54
+ fieldMetadata?: any;
55
+ listType: string;
56
+ deferDatasource?: boolean;
57
+ datasourceMetadata?: any;
58
+ parameters?: any;
59
+ columns: any[];
60
+ }
61
+
62
+ export default function Dropdown(props: DropdownProps) {
63
+ // 1. Registry lookup
64
+ const FieldValueList = getComponentFromRegistry('FieldValueList');
65
+
66
+ // 2. Destructure props
67
+ const {
68
+ getPConnect, label, required, disabled, value = '',
69
+ validatemessage, status, readOnly, testId, helperText,
70
+ displayMode, deferDatasource, datasourceMetadata,
71
+ hideLabel, onRecordChange, fieldMetadata,
72
+ } = props;
73
+ let { placeholder = '' } = props;
74
+ const context = getPConnect().getContextName();
75
+ let { listType, parameters, datasource = [], columns = [] } = props;
76
+ placeholder = placeholder || 'Select...';
77
+
78
+ // 3. State
79
+ const [options, setOptions] = useState<IOption[]>([]);
80
+ const [theDatasource, setDatasource] = useState<any[] | null>(null);
81
+
82
+ // 4. PConnect setup
83
+ const helperTextToDisplay = validatemessage || helperText;
84
+ const thePConn = getPConnect();
85
+ const actionsApi = thePConn.getActionsApi();
86
+ const propName = (thePConn.getStateProps() as any).value;
87
+ const className = thePConn.getCaseInfo().getClassName();
88
+ const refName = propName?.slice(propName.lastIndexOf('.') + 1);
89
+
90
+ // 5. Render-time datasource comparison (NOT in useEffect)
91
+ if (!isDeepEqual(datasource, theDatasource)) {
92
+ setDatasource(datasource);
93
+ }
94
+
95
+ // 6. Deferred datasource transformation (same as AutoComplete)
96
+ // → reassigns listType, datasource, parameters, columns
97
+
98
+ // 7. Column preprocessing
99
+ columns = preProcessColumns(columns);
100
+
101
+ // 8. useEffect: associated options — deps: [theDatasource]
102
+ // → prepend placeholder option, call Utils.getOptionList
103
+
104
+ // 9. useEffect: datapage options — deps: []
105
+ // Guard: listType !== 'associated' && typeof datasource === 'string'
106
+
107
+ // 10. Localization metadata derivation
108
+ // → metaData, displayName, localeContext, localeClass, localeName, localePath
109
+
110
+ // 11. Display mode — resolve key→value, localize, return FieldValueList
111
+ if (displayMode) {
112
+ const resolvedValue = options.find(opt => opt.key === value)?.value || value;
113
+ const localizedValue = thePConn.getLocalizedValue(resolvedValue, localePath,
114
+ thePConn.getLocaleRuleNameFromKeys(localeClass, localeContext, localeName));
115
+ // return <FieldValueList ... value={localizedValue} />
116
+ }
117
+
118
+ // 12. Read-only prop
119
+ let readOnlyProp = {};
120
+ if (readOnly) readOnlyProp = { readOnly: true };
121
+
122
+ // 13. Test ID + handleChange
123
+ const testProps: any = { 'data-test-id': testId };
124
+ const handleChange = (evt) => {
125
+ const selectedValue = evt.target.value === placeholder ? '' : evt.target.value;
126
+ handleEvent(actionsApi, 'changeNblur', propName, selectedValue);
127
+ if (onRecordChange) onRecordChange(evt);
128
+ };
129
+
130
+ // 14. Main render — return null if options empty, otherwise select
131
+ // value: value === '' && !readOnly ? placeholder : value
132
+ // Options rendered with localized labels via thePConn.getLocalizedValue()
133
+ return options.length === 0 ? null : <SelectWidget ... />;
134
+ }
135
+ ```
136
+
32
137
  ## Behavioral Contract
33
138
 
34
139
  1. **Options state:** Maintain `options` as `Array<{key: string, value: string}>`. Initially empty — render nothing (`return null`) until options are populated (avoids design system warnings about undefined options).
@@ -47,7 +152,28 @@ Renders a single-select dropdown (select box). Options are loaded from a Pega da
47
152
  - Commit via `handleEvent(actionsApi, 'changeNblur', propName, selectedValue)`.
48
153
  - Fire `onRecordChange(evt)` if provided.
49
154
  9. **Read-only:** Set `readOnly: true` on the select input. Flat/borderless style. Change handler omitted.
50
- 10. **Localization:** Option labels and display values are localized via `pConn.getLocalizedValue(label, localePath, localeRuleName)`.
155
+ 10. **Localization metadata:** Derived from `fieldMetadata`:
156
+ ```
157
+ const metaData = Array.isArray(fieldMetadata)
158
+ ? fieldMetadata.filter(f => f?.classID === className)[0]
159
+ : fieldMetadata;
160
+ let displayName = metaData?.datasource?.propertyForDisplayText;
161
+ displayName = displayName?.slice(displayName.lastIndexOf('.') + 1);
162
+ const localeContext = metaData?.datasource?.tableType === 'DataPage' ? 'datapage' : 'associated';
163
+ const localeClass = localeContext === 'datapage' ? '@baseclass' : className;
164
+ const localeName = localeContext === 'datapage' ? metaData?.datasource?.name : refName;
165
+ const localePath = localeContext === 'datapage' ? displayName : localeName;
166
+ ```
167
+ Where `className = thePConn.getCaseInfo().getClassName()` and `refName = propName?.slice(propName.lastIndexOf('.') + 1)`.
168
+ 11. **Display mode rendering:** Uses a `displayFn` that resolves key→value from options, then localizes:
169
+ ```
170
+ const resolvedValue = options.find(opt => opt.key === value)?.value || value;
171
+ return <FieldValueList value={thePConn.getLocalizedValue(resolvedValue, localePath,
172
+ thePConn.getLocaleRuleNameFromKeys(localeClass, localeContext, localeName))} />;
173
+ ```
174
+ 12. **Select value when empty:** `value={value === '' && !readOnly ? placeholder : value}` — shows placeholder as selected when value is empty.
175
+ 13. **Return null until options load:** `return options.length === 0 ? null : <Select ... />` — prevents rendering empty select.
176
+ 14. **Option labels localized:** Each `<MenuItem>` label is wrapped in `thePConn.getLocalizedValue(option.value, localePath, localeRuleName)`.
51
177
 
52
178
  ## Display Mode Rendering
53
179
 
@@ -24,6 +24,74 @@ 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 the mail icon and TextField with equivalents from your chosen design system.
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 EmailProps extends PConnFieldProps {}
38
+
39
+ export default function Email(props: EmailProps) {
40
+ // 1. Registry lookups
41
+ const TextInput = getComponentFromRegistry('TextInput');
42
+ const FieldValueList = getComponentFromRegistry('FieldValueList');
43
+
44
+ // 2. Destructure props
45
+ const {
46
+ getPConnect, label, required, disabled, value = '',
47
+ validatemessage, status, readOnly, testId,
48
+ helperText, displayMode, hideLabel, placeholder,
49
+ } = props;
50
+
51
+ // 3. PConnect setup
52
+ const pConn = getPConnect();
53
+ const actions = pConn.getActionsApi();
54
+ const propName = (pConn.getStateProps() as any).value;
55
+ const helperTextToDisplay = validatemessage || helperText;
56
+
57
+ // 4. State
58
+ const [inputValue, setInputValue] = useState('');
59
+
60
+ // 5. useEffect: sync from store — deps: [value]
61
+ useEffect(() => { setInputValue(value); }, [value]);
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 (delegates entirely to TextInput — no mail icon)
72
+ if (readOnly) {
73
+ return <TextInput {...props} />;
74
+ }
75
+
76
+ // 8. Test ID + event handlers
77
+ const testProps: any = { 'data-test-id': testId };
78
+ function handleChange(event) { setInputValue(event?.target?.value); }
79
+ function handleBlur() { handleEvent(actions, 'changeNblur', propName, inputValue); }
80
+
81
+ // 9. Main render — email input with leading mail icon
82
+ // Key props:
83
+ // - fullWidth, variant: 'outlined', size: 'small'
84
+ // - type: 'email'
85
+ // - value: inputValue, onChange: handleChange
86
+ // - onBlur: !readOnly ? handleBlur : undefined
87
+ // - label, helperText: helperTextToDisplay, placeholder: placeholder ?? ''
88
+ // - required, disabled, error: status === 'error'
89
+ // - startAdornment: mail/envelope icon
90
+ // - inputProps: { ...testProps }
91
+ return <EmailInput ... />;
92
+ }
93
+ ```
94
+
27
95
  ## Behavioral Contract
28
96
 
29
97
  1. **Local state:** Maintain `inputValue` (string). Initialize from `value` prop (`''` default).
@@ -29,6 +29,57 @@ A layout/structural component (not a form input). Wraps a set of child field com
29
29
 
30
30
  `displayMode` is also consumed from `PConnFieldProps`.
31
31
 
32
+ ## Component Skeleton
33
+
34
+ ```typescript
35
+ import { type ReactElement, useMemo } from 'react';
36
+ import { getComponentFromRegistry } from '@pega/sdk-react';
37
+ import type { PConnFieldProps } from '@pega/sdk-react';
38
+
39
+ interface GroupProps extends PConnFieldProps {
40
+ children: ReactElement[];
41
+ heading: string;
42
+ showHeading: boolean;
43
+ instructions?: string;
44
+ collapsible: boolean;
45
+ type: string;
46
+ }
47
+
48
+ export default function Group(props: GroupProps) {
49
+ // 1. Registry lookup
50
+ const FieldGroup = getComponentFromRegistry('FieldGroup');
51
+
52
+ // 2. Destructure props
53
+ const { children, heading, showHeading, instructions, collapsible, displayMode, type } = props;
54
+
55
+ // 3. Derived flag
56
+ const isReadOnly = displayMode === 'DISPLAY_ONLY';
57
+
58
+ // 4. Memoized content grid — deps: [children, type, isReadOnly]
59
+ const content = useMemo(() => (
60
+ <GridContainer spacing={2}>
61
+ {children?.map(child => (
62
+ <GridItem fullWidth key={child.key}>{child}</GridItem>
63
+ ))}
64
+ </GridContainer>
65
+ ), [children, type, isReadOnly]);
66
+
67
+ // 5. Null guard
68
+ if (!children) return null;
69
+
70
+ // 6. Return FieldGroup wrapper
71
+ return (
72
+ <FieldGroup
73
+ name={showHeading ? heading : undefined}
74
+ collapsible={collapsible}
75
+ instructions={instructions}
76
+ >
77
+ {content}
78
+ </FieldGroup>
79
+ );
80
+ }
81
+ ```
82
+
32
83
  ## Behavioral Contract
33
84
 
34
85
  1. **No state, no event handling** — purely structural/layout.
@@ -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. The key differentiator from TextInput is the character filtering in `onChange`.
30
+
31
+ ```typescript
32
+ import { useEffect, useState } from 'react';
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 IntegerProps extends PConnFieldProps {}
38
+
39
+ export default function Integer(props: IntegerProps) {
40
+ // 1. Registry lookups
41
+ const TextInput = getComponentFromRegistry('TextInput');
42
+ const FieldValueList = getComponentFromRegistry('FieldValueList');
43
+
44
+ // 2. Destructure props
45
+ const {
46
+ getPConnect, label, required, disabled, value = '',
47
+ validatemessage, status, readOnly, testId,
48
+ helperText, displayMode, hideLabel, placeholder,
49
+ } = props;
50
+
51
+ // 3. PConnect setup
52
+ const pConn = getPConnect();
53
+ const actions = pConn.getActionsApi();
54
+ const propName = (pConn.getStateProps() as any).value;
55
+ const helperTextToDisplay = validatemessage || helperText;
56
+
57
+ // 4. State
58
+ const [inputValue, setInputValue] = useState('');
59
+
60
+ // 5. useEffect: sync from store — deps: [value]
61
+ useEffect(() => { setInputValue(value); }, [value]);
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
72
+ if (readOnly) {
73
+ return <TextInput {...props} />;
74
+ }
75
+
76
+ // 8. Test ID
77
+ const testProps: any = { 'data-test-id': testId };
78
+
79
+ // 9. onChange with character filtering
80
+ function intOnChange(event) {
81
+ const disallowedChars = ['.', ','];
82
+ const theAttemptedValue = event.target.value;
83
+ const lastChar = theAttemptedValue.slice(-1);
84
+ if (disallowedChars.includes(lastChar)) {
85
+ event.target.value = theAttemptedValue.slice(0, -1);
86
+ }
87
+ setInputValue(event.target.value);
88
+ }
89
+
90
+ // 10. onBlur — commit to store
91
+ function handleBlur() {
92
+ handleEvent(actions, 'changeNblur', propName, inputValue);
93
+ }
94
+
95
+ // 11. Main render — text input (type='text', NOT 'number')
96
+ // Key props:
97
+ // - fullWidth, variant: 'outlined', size: 'small'
98
+ // - type: 'text' (NOT 'number')
99
+ // - value: inputValue, onChange: intOnChange
100
+ // - onBlur: !readOnly ? handleBlur : undefined
101
+ // - label, helperText: helperTextToDisplay, placeholder: placeholder ?? ''
102
+ // - required, disabled, error: status === 'error'
103
+ // - htmlInput: { inputMode: 'numeric', pattern: '[0-9]*', ...testProps }
104
+ return <TextFieldWidget ... />;
105
+ }
106
+ ```
107
+
27
108
  ## Behavioral Contract
28
109
 
29
110
  1. **Local state:** Maintain `inputValue` (string). Initialize from `value` prop (`''` default).
@@ -25,6 +25,111 @@ Renders a text input that integrates with Google Maps Places API for address/loc
25
25
  | `showMap` | `boolean` (optional) | — | Show the interactive map in editable mode |
26
26
  | `showMapReadOnly` | `boolean` (optional) | — | Show the map in read-only mode |
27
27
 
28
+ ## Component Skeleton
29
+
30
+ Follow this exact structure. This component is complex — integrates Google Maps API for places autocomplete, geolocation, and optional map display.
31
+
32
+ ```typescript
33
+ import { useEffect, useState, useCallback, useRef } from 'react';
34
+ import { getComponentFromRegistry } from '@pega/sdk-react';
35
+ import type { PConnFieldProps } from '@pega/sdk-react';
36
+ import handleEvent from '../../helpers/event-utils';
37
+ import './Location.css';
38
+
39
+ interface LocationProps extends PConnFieldProps {
40
+ coordinates?: string;
41
+ onlyCoordinates?: boolean;
42
+ showMap?: boolean;
43
+ showMapReadOnly?: boolean;
44
+ }
45
+
46
+ const mapContainerStyle = { width: '100%', height: '300px', marginTop: '0px' };
47
+ const defaultCenter = { lat: 18.5204, lng: 73.8567 };
48
+ const disabledMapOptions = {
49
+ gestureHandling: 'none', keyboardShortcuts: false,
50
+ disableDefaultUI: true, clickableIcons: false,
51
+ };
52
+
53
+ export default function Location(props: LocationProps) {
54
+ // 1. Registry lookups
55
+ const TextInput = getComponentFromRegistry('TextInput');
56
+ const FieldValueList = getComponentFromRegistry('FieldValueList');
57
+
58
+ // 2. Destructure props
59
+ const {
60
+ getPConnect, label, required = false, disabled = false, value = '',
61
+ validatemessage, status, readOnly = false, testId, displayMode,
62
+ hideLabel = false, placeholder, helperText,
63
+ coordinates = '', onlyCoordinates = false, showMap, showMapReadOnly,
64
+ } = props;
65
+
66
+ // 3. PConnect setup — note TWO property names
67
+ const pConn = getPConnect();
68
+ const actions = pConn.getActionsApi();
69
+ const propName = (pConn.getStateProps() as any).value;
70
+ const coordPropName = (pConn.getStateProps() as any).coordinates;
71
+
72
+ // 4. State
73
+ const [inputValue, setInputValue] = useState<string>(value ?? '');
74
+ const [mapCenter, setMapCenter] = useState(defaultCenter);
75
+ const [markerPosition, setMarkerPosition] = useState<{lat:number,lng:number} | null>(null);
76
+
77
+ // 5. Refs
78
+ const inputRef = useRef<HTMLInputElement | null>(null);
79
+ const autocompleteRef = useRef<google.maps.places.Autocomplete | null>(null);
80
+
81
+ // 6. Load Google Maps API
82
+ const { isLoaded } = useLoadScript({
83
+ googleMapsApiKey: pConn.getGoogleMapsAPIKey?.() || '',
84
+ libraries: ['places', 'geocoding'],
85
+ });
86
+
87
+ // 7. Error flag
88
+ const hasError = status === 'error' && !!validatemessage && !disabled;
89
+
90
+ // 8. useEffect: sync value + coordinates — deps: [value, coordinates, onlyCoordinates]
91
+ // → see Behavioral Contract #3
92
+
93
+ // 9. handleChange (manual text input) — useCallback
94
+ // Commits immediately, clears coordinates if input emptied
95
+
96
+ // 10. handlePlaceChanged — useCallback
97
+ // Reads place from autocompleteRef, extracts lat/lng,
98
+ // stores address or coordinates based on onlyCoordinates flag
99
+
100
+ // 11. useEffect: init Places Autocomplete — deps: [isLoaded, handlePlaceChanged]
101
+ // Guard: isLoaded && inputRef.current && !autocompleteRef.current
102
+
103
+ // 12. handleGetCurrentLocation — useCallback
104
+ // Uses navigator.geolocation.getCurrentPosition
105
+ // If onlyCoordinates: store coords directly
106
+ // Else: reverse geocode via google.maps.Geocoder
107
+
108
+ // 13. Display mode returns
109
+ if (displayMode === 'DISPLAY_ONLY') {
110
+ return <FieldValueList name={hideLabel ? '' : label} value={value} />;
111
+ }
112
+ if (displayMode === 'STACKED_LARGE_VAL') {
113
+ return <FieldValueList name={hideLabel ? '' : label} value={value} variant="stacked" />;
114
+ }
115
+
116
+ // 14. Map element (shared between readOnly and editable)
117
+ // opacity: disabled ? 0.7 : 1, options: disabled ? disabledMapOptions : undefined
118
+
119
+ // 15. Read-only return
120
+ if (readOnly) {
121
+ return <div><TextInput {...props} />{isLoaded && showMapReadOnly && map}</div>;
122
+ }
123
+
124
+ // 16. Main render
125
+ // - Error alert ABOVE input if hasError
126
+ // - Guard: only render TextField when isLoaded
127
+ // - TextField with inputRef, endAdornment location icon button
128
+ // - Map below if isLoaded && showMap
129
+ return <div>...</div>;
130
+ }
131
+ ```
132
+
28
133
  ## Behavioral Contract
29
134
 
30
135
  1. **APIs required:**
@@ -44,6 +44,76 @@ Renders a multi-value typeahead input where users can search and select multiple
44
44
  | `maxResultsDisplay` | `string` | — | Max results to display (`'100'` default) |
45
45
  | `value` | `any` | — | Current value |
46
46
 
47
+ ## Component Skeleton
48
+
49
+ This is a complex component. Note: it does NOT extend `PConnFieldProps` — uses raw `props`.
50
+
51
+ ```typescript
52
+ import { useEffect, useMemo, useRef, useState } from 'react';
53
+ import {
54
+ doSearch, getDisplayFieldsMetaData, useDeepMemo,
55
+ preProcessColumns, getGroupDataForItemsTree,
56
+ } from './utils';
57
+ import { insertInstruction, deleteInstruction } from '../../helpers/instructions-utils';
58
+ import { debounce } from 'throttle-debounce';
59
+
60
+ export default function Multiselect(props) {
61
+ // 1. Destructure props (use let for datasource/columns — may be reassigned)
62
+ const {
63
+ getPConnect, label, placeholder, referenceList, selectionKey,
64
+ primaryField, initialCaseClass, showSecondaryInSearchOnly = false,
65
+ listType = '', isGroupData = false, referenceType, secondaryFields,
66
+ groupDataSource = [], parameters = {}, matchPosition = 'contains',
67
+ maxResultsDisplay, groupColumnsConfig = [{}], selectionList, value,
68
+ } = props;
69
+ let { datasource = [], columns = [{}] } = props;
70
+
71
+ // 2. Reference list mode override (if referenceList.length > 0)
72
+ // → reassign datasource and columns
73
+ // → see Behavioral Contract "Reference List Mode"
74
+
75
+ // 3. State
76
+ const [inputValue, setInputValue] = useState(value);
77
+ const [selectedItems, setSelectedItems] = useState([]);
78
+
79
+ // 4. dataConfig (memoized with deep comparison via useDeepMemo)
80
+ // → see Behavioral Contract "Data Config"
81
+
82
+ // 5. Display field metadata + items tree
83
+ // → displayFieldMeta, groupsDisplayFieldMeta, itemsTreeBaseData, itemsTree state
84
+
85
+ // 6. Refs
86
+ const getCaseListBasedOnParamsDebounced: any = useRef();
87
+ const dataApiObj: any = useRef();
88
+ const pConn = getPConnect();
89
+ const contextName = pConn.getContextName();
90
+ const listActions = pConn.getListActions();
91
+
92
+ // 7. getCaseListBasedOnParams — main search function
93
+ // → see Behavioral Contract "Search"
94
+
95
+ // 8. useEffect: setReferenceList — deps: [pConn]
96
+ // 9. useEffect: init debounced ref — deps: []
97
+ // 10. useEffect: init data API — deps: [dataConfig, ...]
98
+ // → PCore.getDataApi().init(dataConfig, contextName)
99
+
100
+ // 11. onSearchHandler — updates inputValue, triggers debounced search
101
+ // 12. setSelectedItemsForReferenceList — insert/delete instruction
102
+ // 13. handleChange — selection add/remove logic
103
+ // → see Behavioral Contract "Selection Changes"
104
+
105
+ // 14. Main render — multi-select autocomplete
106
+ // Key props:
107
+ // - multiple, fullWidth, disableCloseOnSelect
108
+ // - options: itemsTree, value: selectedItems
109
+ // - getOptionLabel: (option) => option?.primary
110
+ // - onChange: handleChange
111
+ // - renderInput: TextField with label, placeholder, size='small',
112
+ // variant='outlined', onChange=onSearchHandler
113
+ return <MultiSelectAutocomplete ... />;
114
+ }
115
+ ```
116
+
47
117
  ## Behavioral Contract
48
118
 
49
119
  ### Reference List Mode (when `referenceList.length > 0`)
@@ -33,6 +33,80 @@ Does NOT render a UI control directly. Instead, it reads the raw metadata to det
33
33
  | `showPromotedFilters` | `boolean` | `false` | Show promoted filters in child |
34
34
  | `additionalFields` | `any` | — | Additional fields for read-only display |
35
35
 
36
+ ## Component Skeleton
37
+
38
+ This is a composite/orchestrator component — it does NOT render its own UI control. It creates a child component (Dropdown, AutoComplete, SemanticLink, or SingleReferenceReadonly) via `getPConnect().createComponent()`.
39
+
40
+ ```typescript
41
+ import { useMemo } from 'react';
42
+ import { SELECTION_MODE, generateColumns, getDataRelationshipContextFromKey } from './utils';
43
+ import { getComponentFromRegistry } from '@pega/sdk-react';
44
+ import type { PConnFieldProps } from '@pega/sdk-react';
45
+
46
+ interface ObjectReferenceProps extends Omit<PConnFieldProps, 'value'> {
47
+ getPConnect: any;
48
+ displayMode;
49
+ allowAndPersistChangesInReviewMode: any;
50
+ targetObjectType: any;
51
+ mode: string;
52
+ parameters: object;
53
+ hideLabel: boolean;
54
+ inline: boolean;
55
+ showPromotedFilters: boolean;
56
+ additionalFields: any;
57
+ }
58
+
59
+ export default function ObjectReference(props: ObjectReferenceProps) {
60
+ // 1. Destructure props
61
+ const {
62
+ getPConnect, displayMode,
63
+ allowAndPersistChangesInReviewMode: editableInReview = false,
64
+ targetObjectType, mode = '', parameters,
65
+ hideLabel = false, inline = false,
66
+ showPromotedFilters = false, additionalFields,
67
+ } = props;
68
+
69
+ // 2. Registry lookup
70
+ const SingleReferenceReadonly = getComponentFromRegistry('SingleReferenceReadOnly');
71
+
72
+ // 3. Setup
73
+ const pConn = getPConnect();
74
+ const referenceType = targetObjectType === 'case' ? 'Case' : 'Data';
75
+ const rawViewMetadata = pConn.getRawMetadata();
76
+ const refFieldMetadata = pConn.getFieldMetadata(
77
+ rawViewMetadata?.config?.value?.split('.', 2)[1]
78
+ );
79
+ const propsToUse = { ...pConn.getInheritedProps(), ...props };
80
+ const isDisplayModeEnabled = displayMode === 'DISPLAY_ONLY';
81
+ const canBeChangedInReviewMode = editableInReview &&
82
+ ['Autocomplete', 'Dropdown'].includes(rawViewMetadata.config.componentType);
83
+
84
+ // 4. onRecordChange handler — see Behavioral Contract
85
+ const onRecordChange = (event) => { /* ... */ };
86
+
87
+ // 5. recreatedFirstChild (useMemo) — the main logic
88
+ // Decision tree:
89
+ // a) SemanticLink && !canBeChangedInReviewMode → createComponent('SemanticLink', ...)
90
+ // b) isDisplayModeEnabled && !canBeChangedInReviewMode → <SingleReferenceReadonly ... />
91
+ // c) Editable: generateColumns, set deferDatasource, build fieldMetaData,
92
+ // createComponent(type, { config with datasourceMetadata, onRecordChange, ... })
93
+ const recreatedFirstChild = useMemo(() => { /* ... */ }, [
94
+ rawViewMetadata.config?.datasource?.source,
95
+ parameters,
96
+ propsToUse.required,
97
+ propsToUse.disabled,
98
+ getPConnect().getPageReference(),
99
+ ]);
100
+
101
+ // 6. Return — minimal grid wrapper
102
+ return (
103
+ <GridContainer>
104
+ <GridItem>{recreatedFirstChild}</GridItem>
105
+ </GridContainer>
106
+ );
107
+ }
108
+ ```
109
+
36
110
  ## Behavioral Contract
37
111
 
38
112
  ### Setup