@pega/sdk 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/dist/index.js +287 -1
  2. package/package.json +1 -1
  3. package/templates/angular-sdk-reference/package.json +12 -12
  4. package/templates/angular-sdk-reference/tsconfig.json +1 -1
  5. package/templates/react-native-sdk-reference/expo-env.d.ts +3 -0
  6. package/templates/react-sdk-reference/{.github/agents/implementation-expert.agent.md → .ai-common/agents/implementation-expert.md} +23 -26
  7. package/templates/react-sdk-reference/{.github/copilot-instructions.md → .ai-common/global/ai-agent-instructions.md} +7 -7
  8. package/templates/react-sdk-reference/{.github/instructions/component-map.instructions.md → .ai-common/instructions/component-map.md} +8 -1
  9. package/templates/react-sdk-reference/{.github/instructions/dse-component.instructions.md → .ai-common/instructions/dse-component.md} +1 -1
  10. package/templates/react-sdk-reference/{.github/instructions/field-component.instructions.md → .ai-common/instructions/field-component.md} +2 -1
  11. package/templates/react-sdk-reference/{.github/instructions/template-component.instructions.md → .ai-common/instructions/template-component.md} +1 -1
  12. package/templates/react-sdk-reference/{.github/instructions/widget-component.instructions.md → .ai-common/instructions/widget-component.md} +1 -1
  13. package/templates/react-sdk-reference/{.github/prompts/add-component.prompt.md → .ai-common/prompts/add-component.md} +45 -18
  14. package/templates/react-sdk-reference/{.cursor/rules → .ai-common}/prompts/component-manifest.json +8 -2
  15. package/templates/react-sdk-reference/{.github/prompts/generate-all-components.prompt.md → .ai-common/prompts/generate-all-components.md} +195 -78
  16. package/templates/react-sdk-reference/{.github/prompts/generate-dse-components.prompt.md → .ai-common/prompts/generate-dse-components.md} +28 -17
  17. package/templates/react-sdk-reference/{.github/prompts/generate-field-components.prompt.md → .ai-common/prompts/generate-field-components.md} +32 -16
  18. package/templates/react-sdk-reference/{.github/prompts/generate-template-components.prompt.md → .ai-common/prompts/generate-template-components.md} +76 -22
  19. package/templates/react-sdk-reference/{.github/prompts/generate-widget-components.prompt.md → .ai-common/prompts/generate-widget-components.md} +44 -30
  20. package/templates/react-sdk-reference/{.claude → .ai-common}/prompts/identify-components.md +4 -0
  21. package/templates/react-sdk-reference/{.cursor/rules/prompts/replace-design-system.mdrules → .ai-common/prompts/replace-design-system.md} +2 -3
  22. package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/AlertBanner.md +50 -0
  23. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/Banner.md +44 -0
  24. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/CaseSummaryFields.md +54 -0
  25. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/DetailsFields.md +49 -0
  26. package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/FieldGroup.md +44 -0
  27. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/FieldGroupList.md +43 -0
  28. package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/FieldValueList.md +46 -0
  29. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/Operator.md +67 -0
  30. package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/Pulse.md +20 -0
  31. package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/RichTextEditor.md +58 -0
  32. package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/WssQuickCreate.md +31 -0
  33. package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension.md +1 -1
  34. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-components.md +18 -1
  35. package/templates/react-sdk-reference/.ai-common/skills/field-skills/AutoComplete.md +298 -0
  36. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/CancelAlert.md +132 -3
  37. package/templates/react-sdk-reference/.ai-common/skills/field-skills/Checkbox.md +358 -0
  38. package/templates/react-sdk-reference/.ai-common/skills/field-skills/Currency.md +230 -0
  39. package/templates/react-sdk-reference/.ai-common/skills/field-skills/Date.md +221 -0
  40. package/templates/react-sdk-reference/.ai-common/skills/field-skills/DateTime.md +213 -0
  41. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Decimal.md +112 -13
  42. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Dropdown.md +127 -1
  43. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Email.md +68 -0
  44. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Group.md +51 -0
  45. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Integer.md +81 -0
  46. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Location.md +105 -0
  47. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Multiselect.md +70 -0
  48. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/ObjectReference.md +74 -0
  49. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Percentage.md +84 -0
  50. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Phone.md +81 -0
  51. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/RadioButtons.md +93 -0
  52. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/RichText.md +85 -0
  53. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/ScalarList.md +54 -0
  54. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/SelectableCard.md +55 -0
  55. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/SemanticLink.md +64 -0
  56. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/TextArea.md +66 -0
  57. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/TextContent.md +28 -0
  58. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/TextInput.md +67 -0
  59. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Time.md +67 -0
  60. package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/URL.md +59 -0
  61. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/UserReference.md +90 -0
  62. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-components.md +83 -52
  63. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/AdvancedSearch.md +77 -0
  64. package/templates/react-sdk-reference/.ai-common/skills/template-skills/AppShell.md +273 -0
  65. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/BannerPage.md +39 -0
  66. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/CaseSummary.md +79 -0
  67. package/templates/react-sdk-reference/.ai-common/skills/template-skills/CaseView.md +399 -0
  68. package/templates/react-sdk-reference/.ai-common/skills/template-skills/CaseViewActionsMenu.md +282 -0
  69. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/Confirmation.md +89 -0
  70. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DataReference.md +50 -0
  71. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DefaultForm.md +117 -0
  72. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DefaultPage.md +49 -0
  73. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/Details.md +59 -0
  74. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/DetailsSubTabs.md +60 -0
  75. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DetailsThreeColumn.md +12 -0
  76. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/DetailsTwoColumn.md +12 -0
  77. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DynamicTabs.md +67 -0
  78. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/FieldGroupTemplate.md +119 -0
  79. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/HierarchicalForm.md +45 -0
  80. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/InlineDashboard.md +41 -0
  81. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/InlineDashboardPage.md +56 -0
  82. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/ListPage.md +18 -0
  83. package/templates/react-sdk-reference/.ai-common/skills/template-skills/ListView.md +419 -0
  84. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/MultiReferenceReadOnly.md +40 -0
  85. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/NarrowWide.md +66 -0
  86. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/OneColumn.md +34 -0
  87. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/PromotedFilters.md +92 -0
  88. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/SelfServiceCaseView.md +56 -0
  89. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/SimpleTable.md +59 -0
  90. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/SingleReferenceReadOnly.md +52 -0
  91. package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/SubTabs.md +47 -0
  92. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/TwoColumn.md +49 -0
  93. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/WssNavBar.md +71 -0
  94. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-components.md +1 -1
  95. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/AppAnnouncement.md +38 -1
  96. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/Attachment.md +58 -0
  97. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/CaseHistory.md +63 -0
  98. package/templates/react-sdk-reference/{.github → .ai-common}/skills/widget-skills/FileUtility.md +81 -14
  99. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/Followers.md +20 -0
  100. package/templates/react-sdk-reference/{.github → .ai-common}/skills/widget-skills/QuickCreate.md +48 -0
  101. package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/SummaryItem.md +66 -0
  102. package/templates/react-sdk-reference/.ai-common/skills/widget-skills/ToDo.md +492 -0
  103. package/templates/react-sdk-reference/package.minimal.json +29 -0
  104. package/templates/react-sdk-reference/src/AppProviders.tsx +17 -0
  105. package/templates/react-sdk-reference/src/MashupApp.tsx +8 -19
  106. package/templates/react-sdk-reference/src/PortalApp.tsx +6 -17
  107. package/templates/react-sdk-reference/.claude/instructions/component-map.md +0 -38
  108. package/templates/react-sdk-reference/.claude/instructions/dse-component.md +0 -75
  109. package/templates/react-sdk-reference/.claude/instructions/field-component.md +0 -75
  110. package/templates/react-sdk-reference/.claude/instructions/template-component.md +0 -93
  111. package/templates/react-sdk-reference/.claude/instructions/widget-component.md +0 -88
  112. package/templates/react-sdk-reference/.claude/prompts/add-component.md +0 -152
  113. package/templates/react-sdk-reference/.claude/prompts/component-manifest.json +0 -193
  114. package/templates/react-sdk-reference/.claude/prompts/generate-all-components.md +0 -158
  115. package/templates/react-sdk-reference/.claude/prompts/generate-dse-components.md +0 -140
  116. package/templates/react-sdk-reference/.claude/prompts/generate-field-components.md +0 -153
  117. package/templates/react-sdk-reference/.claude/prompts/generate-template-components.md +0 -165
  118. package/templates/react-sdk-reference/.claude/prompts/generate-widget-components.md +0 -138
  119. package/templates/react-sdk-reference/.claude/prompts/replace-design-system.md +0 -519
  120. package/templates/react-sdk-reference/.claude/skills/component-contracts.md +0 -140
  121. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/AlertBanner.md +0 -137
  122. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/FieldGroup.md +0 -134
  123. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/FieldValueList.md +0 -118
  124. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/Pulse.md +0 -85
  125. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/RichTextEditor.md +0 -232
  126. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/WssQuickCreate.md +0 -137
  127. package/templates/react-sdk-reference/.claude/skills/design-system-extension.md +0 -291
  128. package/templates/react-sdk-reference/.claude/skills/field-skills/AutoComplete.md +0 -113
  129. package/templates/react-sdk-reference/.claude/skills/field-skills/Checkbox.md +0 -175
  130. package/templates/react-sdk-reference/.claude/skills/field-skills/Currency.md +0 -109
  131. package/templates/react-sdk-reference/.claude/skills/field-skills/Date.md +0 -101
  132. package/templates/react-sdk-reference/.claude/skills/field-skills/DateTime.md +0 -106
  133. package/templates/react-sdk-reference/.claude/skills/field-skills/Integer.md +0 -88
  134. package/templates/react-sdk-reference/.claude/skills/field-skills/Multiselect.md +0 -188
  135. package/templates/react-sdk-reference/.claude/skills/field-skills/ObjectReference.md +0 -173
  136. package/templates/react-sdk-reference/.claude/skills/field-skills/Percentage.md +0 -93
  137. package/templates/react-sdk-reference/.claude/skills/field-skills/Phone.md +0 -129
  138. package/templates/react-sdk-reference/.claude/skills/field-skills/RadioButtons.md +0 -167
  139. package/templates/react-sdk-reference/.claude/skills/field-skills/RichText.md +0 -149
  140. package/templates/react-sdk-reference/.claude/skills/field-skills/ScalarList.md +0 -134
  141. package/templates/react-sdk-reference/.claude/skills/field-skills/SelectableCard.md +0 -231
  142. package/templates/react-sdk-reference/.claude/skills/field-skills/SemanticLink.md +0 -155
  143. package/templates/react-sdk-reference/.claude/skills/field-skills/TextInput.md +0 -107
  144. package/templates/react-sdk-reference/.claude/skills/field-skills/Time.md +0 -89
  145. package/templates/react-sdk-reference/.claude/skills/field-skills/URL.md +0 -86
  146. package/templates/react-sdk-reference/.claude/skills/template-components.md +0 -321
  147. package/templates/react-sdk-reference/.claude/skills/template-skills/AdvancedSearch.md +0 -150
  148. package/templates/react-sdk-reference/.claude/skills/template-skills/AppShell.md +0 -124
  149. package/templates/react-sdk-reference/.claude/skills/template-skills/CaseSummary.md +0 -106
  150. package/templates/react-sdk-reference/.claude/skills/template-skills/CaseView.md +0 -137
  151. package/templates/react-sdk-reference/.claude/skills/template-skills/CaseViewActionsMenu.md +0 -131
  152. package/templates/react-sdk-reference/.claude/skills/template-skills/Confirmation.md +0 -109
  153. package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsSubTabs.md +0 -97
  154. package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsTwoColumn.md +0 -80
  155. package/templates/react-sdk-reference/.claude/skills/template-skills/ListPage.md +0 -70
  156. package/templates/react-sdk-reference/.claude/skills/template-skills/ListView.md +0 -142
  157. package/templates/react-sdk-reference/.claude/skills/template-skills/MultiReferenceReadOnly.md +0 -82
  158. package/templates/react-sdk-reference/.claude/skills/template-skills/OneColumn.md +0 -114
  159. package/templates/react-sdk-reference/.claude/skills/template-skills/SimpleTable.md +0 -131
  160. package/templates/react-sdk-reference/.claude/skills/template-skills/SingleReferenceReadOnly.md +0 -108
  161. package/templates/react-sdk-reference/.claude/skills/template-skills/SubTabs.md +0 -82
  162. package/templates/react-sdk-reference/.claude/skills/widget-skills/FileUtility.md +0 -206
  163. package/templates/react-sdk-reference/.claude/skills/widget-skills/QuickCreate.md +0 -118
  164. package/templates/react-sdk-reference/.claude/skills/widget-skills/ToDo.md +0 -198
  165. package/templates/react-sdk-reference/.cursor/rules/component-map.mdrules +0 -41
  166. package/templates/react-sdk-reference/.cursor/rules/dse-component.mdrules +0 -78
  167. package/templates/react-sdk-reference/.cursor/rules/field-component.mdrules +0 -74
  168. package/templates/react-sdk-reference/.cursor/rules/pega-sdk.mdrules +0 -247
  169. package/templates/react-sdk-reference/.cursor/rules/prompts/add-component.mdrules +0 -149
  170. package/templates/react-sdk-reference/.cursor/rules/prompts/generate-all-components.mdrules +0 -154
  171. package/templates/react-sdk-reference/.cursor/rules/prompts/generate-dse-components.mdrules +0 -131
  172. package/templates/react-sdk-reference/.cursor/rules/prompts/generate-field-components.mdrules +0 -144
  173. package/templates/react-sdk-reference/.cursor/rules/prompts/generate-template-components.mdrules +0 -156
  174. package/templates/react-sdk-reference/.cursor/rules/prompts/generate-widget-components.mdrules +0 -129
  175. package/templates/react-sdk-reference/.cursor/rules/prompts/identify-components.mdrules +0 -110
  176. package/templates/react-sdk-reference/.cursor/rules/skills/component-contracts.mdrules +0 -145
  177. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/AlertBanner.mdrules +0 -140
  178. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/Banner.mdrules +0 -154
  179. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/CaseSummaryFields.mdrules +0 -159
  180. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/DetailsFields.mdrules +0 -149
  181. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/FieldGroup.mdrules +0 -136
  182. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/FieldGroupList.mdrules +0 -116
  183. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/FieldValueList.mdrules +0 -120
  184. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/Operator.mdrules +0 -154
  185. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/Pulse.mdrules +0 -88
  186. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/RichTextEditor.mdrules +0 -211
  187. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/WssQuickCreate.mdrules +0 -140
  188. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension.mdrules +0 -294
  189. package/templates/react-sdk-reference/.cursor/rules/skills/field-components.mdrules +0 -299
  190. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/AutoComplete.mdrules +0 -117
  191. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/CancelAlert.mdrules +0 -208
  192. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Checkbox.mdrules +0 -163
  193. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Currency.mdrules +0 -111
  194. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Date.mdrules +0 -104
  195. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/DateTime.mdrules +0 -108
  196. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Decimal.mdrules +0 -103
  197. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Dropdown.mdrules +0 -119
  198. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Email.mdrules +0 -112
  199. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Group.mdrules +0 -95
  200. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Integer.mdrules +0 -92
  201. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Location.mdrules +0 -141
  202. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Multiselect.mdrules +0 -169
  203. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/ObjectReference.mdrules +0 -169
  204. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Percentage.mdrules +0 -97
  205. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Phone.mdrules +0 -115
  206. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/RadioButtons.mdrules +0 -151
  207. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/RichText.mdrules +0 -143
  208. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/ScalarList.mdrules +0 -129
  209. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/SelectableCard.mdrules +0 -221
  210. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/SemanticLink.mdrules +0 -153
  211. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/TextArea.mdrules +0 -101
  212. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/TextContent.mdrules +0 -106
  213. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/TextInput.mdrules +0 -109
  214. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Time.mdrules +0 -93
  215. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/URL.mdrules +0 -90
  216. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/UserReference.mdrules +0 -185
  217. package/templates/react-sdk-reference/.cursor/rules/skills/run-and-verify.mdrules +0 -73
  218. package/templates/react-sdk-reference/.cursor/rules/skills/template-components.mdrules +0 -327
  219. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/AdvancedSearch.mdrules +0 -149
  220. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/AppShell.mdrules +0 -127
  221. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/BannerPage.mdrules +0 -88
  222. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/CaseSummary.mdrules +0 -105
  223. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/CaseView.mdrules +0 -136
  224. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/CaseViewActionsMenu.mdrules +0 -131
  225. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/Confirmation.mdrules +0 -112
  226. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DataReference.mdrules +0 -125
  227. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DefaultForm.mdrules +0 -107
  228. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DefaultPage.mdrules +0 -115
  229. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/Details.mdrules +0 -93
  230. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DetailsSubTabs.mdrules +0 -100
  231. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DetailsThreeColumn.mdrules +0 -83
  232. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DetailsTwoColumn.mdrules +0 -83
  233. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DynamicTabs.mdrules +0 -106
  234. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/FieldGroupTemplate.mdrules +0 -114
  235. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/HierarchicalForm.mdrules +0 -118
  236. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/InlineDashboard.mdrules +0 -109
  237. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/InlineDashboardPage.mdrules +0 -90
  238. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/ListPage.mdrules +0 -73
  239. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/ListView.mdrules +0 -144
  240. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/MultiReferenceReadOnly.mdrules +0 -85
  241. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/NarrowWide.mdrules +0 -146
  242. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/OneColumn.mdrules +0 -114
  243. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/PromotedFilters.mdrules +0 -129
  244. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SelfServiceCaseView.mdrules +0 -140
  245. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SimpleTable.mdrules +0 -132
  246. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SingleReferenceReadOnly.mdrules +0 -108
  247. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SubTabs.mdrules +0 -84
  248. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/TwoColumn.mdrules +0 -136
  249. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/WideNarrow.mdrules +0 -155
  250. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/WssNavBar.mdrules +0 -140
  251. package/templates/react-sdk-reference/.cursor/rules/skills/widget-components.mdrules +0 -276
  252. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/AppAnnouncement.mdrules +0 -87
  253. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/Attachment.mdrules +0 -151
  254. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/CaseHistory.mdrules +0 -112
  255. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/FileUtility.mdrules +0 -205
  256. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/Followers.mdrules +0 -104
  257. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/QuickCreate.mdrules +0 -119
  258. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/SummaryItem.mdrules +0 -172
  259. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/ToDo.mdrules +0 -195
  260. package/templates/react-sdk-reference/.cursor/rules/template-component.mdrules +0 -95
  261. package/templates/react-sdk-reference/.cursor/rules/widget-component.mdrules +0 -90
  262. package/templates/react-sdk-reference/.github/prompts/component-manifest.json +0 -193
  263. package/templates/react-sdk-reference/.github/prompts/identify-components.prompt.md +0 -110
  264. package/templates/react-sdk-reference/.github/prompts/replace-design-system.prompt.md +0 -524
  265. package/templates/react-sdk-reference/.github/skills/component-contracts.md +0 -140
  266. package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/Banner.md +0 -152
  267. package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/CaseSummaryFields.md +0 -159
  268. package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/DetailsFields.md +0 -148
  269. package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/FieldGroupList.md +0 -113
  270. package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/Operator.md +0 -155
  271. package/templates/react-sdk-reference/.github/skills/field-components.md +0 -295
  272. package/templates/react-sdk-reference/.github/skills/field-skills/AutoComplete.md +0 -113
  273. package/templates/react-sdk-reference/.github/skills/field-skills/CancelAlert.md +0 -211
  274. package/templates/react-sdk-reference/.github/skills/field-skills/Checkbox.md +0 -175
  275. package/templates/react-sdk-reference/.github/skills/field-skills/Currency.md +0 -109
  276. package/templates/react-sdk-reference/.github/skills/field-skills/Date.md +0 -101
  277. package/templates/react-sdk-reference/.github/skills/field-skills/DateTime.md +0 -106
  278. package/templates/react-sdk-reference/.github/skills/field-skills/Decimal.md +0 -99
  279. package/templates/react-sdk-reference/.github/skills/field-skills/Dropdown.md +0 -134
  280. package/templates/react-sdk-reference/.github/skills/field-skills/Email.md +0 -109
  281. package/templates/react-sdk-reference/.github/skills/field-skills/Group.md +0 -96
  282. package/templates/react-sdk-reference/.github/skills/field-skills/Location.md +0 -145
  283. package/templates/react-sdk-reference/.github/skills/field-skills/TextArea.md +0 -98
  284. package/templates/react-sdk-reference/.github/skills/field-skills/TextContent.md +0 -117
  285. package/templates/react-sdk-reference/.github/skills/field-skills/UserReference.md +0 -203
  286. package/templates/react-sdk-reference/.github/skills/run-and-verify.md +0 -70
  287. package/templates/react-sdk-reference/.github/skills/template-skills/AppShell.md +0 -124
  288. package/templates/react-sdk-reference/.github/skills/template-skills/BannerPage.md +0 -86
  289. package/templates/react-sdk-reference/.github/skills/template-skills/CaseView.md +0 -137
  290. package/templates/react-sdk-reference/.github/skills/template-skills/CaseViewActionsMenu.md +0 -131
  291. package/templates/react-sdk-reference/.github/skills/template-skills/DataReference.md +0 -124
  292. package/templates/react-sdk-reference/.github/skills/template-skills/DefaultForm.md +0 -104
  293. package/templates/react-sdk-reference/.github/skills/template-skills/DefaultPage.md +0 -112
  294. package/templates/react-sdk-reference/.github/skills/template-skills/Details.md +0 -90
  295. package/templates/react-sdk-reference/.github/skills/template-skills/DetailsThreeColumn.md +0 -80
  296. package/templates/react-sdk-reference/.github/skills/template-skills/DynamicTabs.md +0 -106
  297. package/templates/react-sdk-reference/.github/skills/template-skills/FieldGroupTemplate.md +0 -112
  298. package/templates/react-sdk-reference/.github/skills/template-skills/HierarchicalForm.md +0 -116
  299. package/templates/react-sdk-reference/.github/skills/template-skills/InlineDashboard.md +0 -108
  300. package/templates/react-sdk-reference/.github/skills/template-skills/InlineDashboardPage.md +0 -82
  301. package/templates/react-sdk-reference/.github/skills/template-skills/ListView.md +0 -142
  302. package/templates/react-sdk-reference/.github/skills/template-skills/NarrowWide.md +0 -143
  303. package/templates/react-sdk-reference/.github/skills/template-skills/PromotedFilters.md +0 -130
  304. package/templates/react-sdk-reference/.github/skills/template-skills/SelfServiceCaseView.md +0 -142
  305. package/templates/react-sdk-reference/.github/skills/template-skills/TwoColumn.md +0 -133
  306. package/templates/react-sdk-reference/.github/skills/template-skills/WideNarrow.md +0 -152
  307. package/templates/react-sdk-reference/.github/skills/template-skills/WssNavBar.md +0 -139
  308. package/templates/react-sdk-reference/.github/skills/widget-components.md +0 -260
  309. package/templates/react-sdk-reference/.github/skills/widget-skills/AppAnnouncement.md +0 -84
  310. package/templates/react-sdk-reference/.github/skills/widget-skills/Attachment.md +0 -151
  311. package/templates/react-sdk-reference/.github/skills/widget-skills/CaseHistory.md +0 -110
  312. package/templates/react-sdk-reference/.github/skills/widget-skills/Followers.md +0 -103
  313. package/templates/react-sdk-reference/.github/skills/widget-skills/SummaryItem.md +0 -169
  314. package/templates/react-sdk-reference/.github/skills/widget-skills/ToDo.md +0 -198
  315. package/templates/react-sdk-reference/AGENTS.md +0 -246
  316. /package/templates/react-sdk-reference/{.claude → .ai-common}/skills/run-and-verify.md +0 -0
  317. /package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/WideNarrow.md +0 -0
@@ -0,0 +1,358 @@
1
+ # Skill: Checkbox
2
+
3
+ Checkbox field supporting single boolean toggle, multi-selection mode, and optional card-style variant.
4
+
5
+ > **Prerequisite skill:** [`field-components.md`](../field-components.md) — covers architecture, props interface, display modes, event handling, and registration patterns common to ALL field components.
6
+
7
+ ---
8
+
9
+ ## Component Purpose
10
+
11
+ Renders one or more checkboxes. Supports three usage modes: (1) a single boolean checkbox, (2) a multi-select list of checkboxes bound to a reference list, and (3) a card-style selectable grid. Display mode shows the true/false label rather than the raw boolean.
12
+
13
+ ## Pega Metadata
14
+
15
+ - **Pega Name:** `Checkbox`
16
+ - **Type / Subtype:** `Field` / `Boolean`
17
+ - **Registration key:** `Checkbox` (mapped to `CheckboxComponent` import in `component-map.ts`)
18
+
19
+ ## Props (component-specific)
20
+
21
+ > Note: `Checkbox` uses `Omit<PConnFieldProps, 'value'>` with its own `value?: boolean`. Import type as:
22
+ >
23
+ > ```typescript
24
+ > import type { PConnFieldProps } from '@pega/sdk-react';
25
+ > ```
26
+
27
+ | Prop | Type | Description |
28
+ | ---------------------- | -------------------- | -------------------------------------------------------------------- |
29
+ | `value` | `boolean` (optional) | Checked state for single-mode checkbox |
30
+ | `caption` | `string` (optional) | Label shown next to the single checkbox (not the group label) |
31
+ | `trueLabel` | `string` (optional) | Display text when `value` is `true` (used in display modes) |
32
+ | `falseLabel` | `string` (optional) | Display text when `value` is `false` (used in display modes) |
33
+ | `selectionMode` | `string` (optional) | `'multi'` — enables multi-selection mode from a datasource list |
34
+ | `datasource` | `any` (optional) | Options source for multi/card modes |
35
+ | `selectionKey` | `string` (optional) | The property path used as the key in selection list |
36
+ | `selectionList` | `any` (optional) | Property path for the reference list (multi mode) |
37
+ | `primaryField` | `string` | Primary display field for multi/card mode |
38
+ | `readonlyContextList` | `any` | Array of currently selected items (for multi/card read-only display) |
39
+ | `referenceList` | `string` | Reference list property path |
40
+ | `variant` | `string` (optional) | `'card'` — renders options as selectable card grid |
41
+ | `hideFieldLabels` | `boolean` | Hide field labels inside card variant |
42
+ | `additionalProps` | `any` | Extra props passed to card or checkbox |
43
+ | `imagePosition` | `string` | Card image position |
44
+ | `imageSize` | `string` | Card image size |
45
+ | `showImageDescription` | `string` | Whether to show image description |
46
+ | `renderMode` | `string` | `'ReadOnly'` — sets read-only mode alongside `readOnly` prop |
47
+ | `image` | `string` | Image field path for card variant |
48
+
49
+ ## Component Skeleton
50
+
51
+ Follow this exact structure. The export name is **`CheckboxComponent`** (not `Checkbox`) to avoid collision with the design system's Checkbox widget.
52
+
53
+ ```typescript
54
+ import { useState, useEffect } from 'react';
55
+ import handleEvent from '../../helpers/event-utils';
56
+ import { getComponentFromRegistry } from '@pega/sdk-react';
57
+ import {
58
+ insertInstruction,
59
+ deleteInstruction,
60
+ updateNewInstuctions,
61
+ } from '../../helpers/instructions-utils';
62
+ import type { PConnFieldProps } from '@pega/sdk-react';
63
+
64
+ // ── Props interface ──────────────────────────────────────────
65
+ // Note: Omit 'value' from PConnFieldProps — Checkbox uses boolean, not string
66
+ interface CheckboxProps extends Omit<PConnFieldProps, 'value'> {
67
+ value?: boolean;
68
+ caption?: string;
69
+ trueLabel?: string;
70
+ falseLabel?: string;
71
+ selectionMode?: string;
72
+ datasource?: any;
73
+ selectionKey?: string;
74
+ selectionList?: any;
75
+ primaryField: string;
76
+ readonlyContextList: any;
77
+ referenceList: string;
78
+ variant?: string;
79
+ hideFieldLabels: boolean;
80
+ additionalProps: any;
81
+ imagePosition: string;
82
+ imageSize: string;
83
+ showImageDescription: string;
84
+ renderMode: string;
85
+ image: string;
86
+ }
87
+
88
+ // ── Styles (design-system agnostic) ──────────────────────────
89
+ // .checkbox-column → display: flex, flexDirection: column
90
+ // .selectable-card-grid → display: grid, gridTemplateColumns: repeat(auto-fit, minmax(min(100%, 40ch), 1fr)),
91
+ // gridAutoRows: 1fr, gap: 0.5rem
92
+
93
+ // ── Component ────────────────────────────────────────────────
94
+ export default function CheckboxComponent(props: CheckboxProps) {
95
+ // 1. Registry lookups
96
+ const FieldValueList = getComponentFromRegistry('FieldValueList');
97
+ const SelectableCard = getComponentFromRegistry('SelectableCard');
98
+
99
+ // 2. Destructure props — note alias: readonlyContextList → selectedvalues
100
+ const {
101
+ getPConnect, label, caption, value, readOnly, testId,
102
+ required, disabled, status, helperText, validatemessage,
103
+ displayMode, hideLabel, trueLabel, falseLabel,
104
+ selectionMode, datasource, selectionKey, selectionList,
105
+ primaryField, referenceList,
106
+ readonlyContextList: selectedvalues,
107
+ variant, hideFieldLabels, additionalProps,
108
+ imagePosition, imageSize, showImageDescription, renderMode, image,
109
+ } = props;
110
+
111
+ // 3. Derived flags
112
+ const readOnlyMode = renderMode === 'ReadOnly' || displayMode === 'DISPLAY_ONLY' || readOnly;
113
+ const helperTextToDisplay = validatemessage || helperText;
114
+
115
+ // 4. PConnect setup
116
+ const thePConn = getPConnect();
117
+ const actionsApi = thePConn.getActionsApi();
118
+ const propName = (thePConn.getStateProps() as any).value;
119
+
120
+ // 5. State
121
+ const [checked, setChecked] = useState<any>(false);
122
+
123
+ // 6. useEffect: sync checked state from value prop — deps: [value]
124
+ useEffect(() => { setChecked(value); }, [value]);
125
+
126
+ // 7. useEffect: init reference list on mount — deps: [thePConn]
127
+ // Guard: referenceList?.length > 0 && !readOnlyMode
128
+ // Calls: thePConn.setReferenceList(selectionList)
129
+ // updateNewInstuctions(thePConn, selectionList)
130
+
131
+ // 8. Display mode returns (uses caption, not label!)
132
+ if (displayMode === 'DISPLAY_ONLY') {
133
+ return <FieldValueList name={hideLabel ? '' : caption} value={value ? trueLabel : falseLabel} />;
134
+ }
135
+ if (displayMode === 'STACKED_LARGE_VAL') {
136
+ return <FieldValueList name={hideLabel ? '' : caption} value={value ? trueLabel : falseLabel} variant="stacked" />;
137
+ }
138
+
139
+ // 9. Event handlers — see Behavioral Contract for each variant
140
+
141
+ // 10. Branch: card variant (variant === 'card')
142
+ // → see Behavioral Contract "Card" section
143
+ // Return early with heading + grid + SelectableCard
144
+
145
+ // 11. Branch: multi-select (selectionMode === 'multi')
146
+ // → see Behavioral Contract "Multi-select" section
147
+ // Build list of checkbox controls from datasource.source
148
+
149
+ // 12. Branch: single checkbox (default)
150
+ // → see Behavioral Contract "Single checkbox" section
151
+ // Single FormControlLabel with checked={checked}
152
+
153
+ // 13. Main return: wrapper with group label + checkbox(es) + helper text
154
+ // Error state: status === 'error'
155
+ // Group label: {label}, hidden if hideLabel
156
+ // Helper text: helperTextToDisplay
157
+ return (
158
+ <FormWrapper required={required} error={status === 'error'}>
159
+ {!hideLabel && <GroupLabel>{label}</GroupLabel>}
160
+ <CheckboxGroup>{/* theCheckbox from step 11 or 12 */}</CheckboxGroup>
161
+ <HelperText>{helperTextToDisplay}</HelperText>
162
+ </FormWrapper>
163
+ );
164
+ }
165
+ ```
166
+
167
+ ## Behavioral Contract
168
+
169
+ ### Common
170
+
171
+ 1. **Read-only determination:** `readOnlyMode = renderMode === 'ReadOnly' || displayMode === 'DISPLAY_ONLY' || readOnly`.
172
+ 2. **Helper text:** `helperTextToDisplay = validatemessage || helperText`.
173
+ 3. **Local state:** Maintain `checked` (boolean) initialized to `false`. `useEffect` watching `[value]` → `setChecked(value)`.
174
+ 4. **Reference list init:** `useEffect` watching `[thePConn]` — if `referenceList?.length > 0 && !readOnlyMode`, call `thePConn.setReferenceList(selectionList)` and `updateNewInstuctions(thePConn, selectionList)`.
175
+ 5. **`handleCheckboxChange(event, item)`** — shared by card and internally:
176
+ ```
177
+ if (event.target.checked) {
178
+ insertInstruction(thePConn, selectionList, selectionKey, primaryField, item);
179
+ } else {
180
+ deleteInstruction(thePConn, selectionList, selectionKey, item);
181
+ }
182
+ thePConn.clearErrorMessages({ property: selectionList });
183
+ ```
184
+
185
+ ### Variant: Single checkbox (default)
186
+
187
+ Render a single checkbox with:
188
+
189
+ - `checked={checked}`
190
+ - `onChange={!readOnly ? handleChange : undefined}`
191
+ - `onBlur={!readOnly ? handleBlur : undefined}`
192
+ - Label = `caption` (next to checkbox)
193
+ - Group label = `label` (above, hidden if `hideLabel`)
194
+ - **On change:** `handleEvent(actionsApi, 'changeNblur', propName, event.target.checked)` — passes boolean.
195
+ - **On blur:** `pConn.getValidationApi().validate(event.target.checked)`.
196
+
197
+ ### Variant: Multi-select (`selectionMode === 'multi'`)
198
+
199
+ Render a list of checkboxes from `datasource.source`:
200
+
201
+ - Extract `dataField`: `selectionKey?.split?.('.')[1]`.
202
+ - For each `element` in `datasource.source`:
203
+ - `checked`: `selectedvalues?.some?.(data => data[dataField] === element.key)`
204
+ - Label: `element.text ?? element.value`
205
+ - **On change:** `handleChangeMultiMode(event, element)`:
206
+ ```
207
+ if (event.target.checked) {
208
+ insertInstruction(thePConn, selectionList, selectionKey, primaryField, {
209
+ id: element.key,
210
+ primary: element.text ?? element.value,
211
+ });
212
+ } else {
213
+ deleteInstruction(thePConn, selectionList, selectionKey, {
214
+ id: element.key,
215
+ primary: element.text ?? element.value,
216
+ });
217
+ }
218
+ thePConn.clearErrorMessages({ property: selectionList, category: '', context: '' });
219
+ ```
220
+ - **On blur:** `thePConn.getValidationApi().validate(selectedvalues, selectionList)`
221
+ - `data-testid`: `${testId}:${element.value}`
222
+ - Layout: vertical column (`display: flex, flexDirection: column`).
223
+
224
+ ### Variant: Card (`variant === 'card'`)
225
+
226
+ Return early (before multi/single logic) with heading + CSS Grid + `SelectableCard`:
227
+
228
+ - Build `commonProps`:
229
+ ```
230
+ const actions = thePConn.getActionsApi();
231
+ const commonProps = {
232
+ ...additionalProps,
233
+ className: 'standard',
234
+ disabled,
235
+ readOnly,
236
+ onClick: (actions as any).onClick,
237
+ };
238
+ ```
239
+ - Grid: `repeat(auto-fit, minmax(min(100%, 40ch), 1fr))`, `gridAutoRows: '1fr'`, `gap: '0.5rem'`.
240
+ - `SelectableCard` props:
241
+ - `{...commonProps}`, `testId`, `displayMode`, `getPConnect`
242
+ - `type='checkbox'`
243
+ - `dataSource={datasource}`
244
+ - `readOnly={renderMode === 'ReadOnly' || displayMode === 'DISPLAY_ONLY' || readOnly}`
245
+ - `recordKey={selectionKey?.split('.').pop()}`
246
+ - `cardLabel={primaryField.split('.').pop()}`
247
+ - `readOnlyList={selectedvalues}`
248
+ - `hideFieldLabels={hideFieldLabels}`
249
+ - `showNoValue={(readOnlyMode) && selectedvalues.length === 0}`
250
+ - `image` config object:
251
+ ```
252
+ image={{
253
+ imagePosition,
254
+ imageSize,
255
+ showImageDescription,
256
+ imageField: image?.split('.').pop(),
257
+ imageDescription: (thePConn?.getRawMetadata()?.config as any)
258
+ .imageDescription?.split('.').pop(),
259
+ }}
260
+ ```
261
+ - `onChange`: stop propagation, find item from `datasource.source` by matching `item[recordKey] === e.target.id`, call `handleCheckboxChange`:
262
+ ```
263
+ onChange={(e) => {
264
+ e.stopPropagation();
265
+ const recordKey = selectionKey?.split('.').pop();
266
+ const selectedItem = datasource?.source?.find(
267
+ item => item[recordKey] === e.target.id
268
+ ) ?? {};
269
+ handleCheckboxChange(e, {
270
+ id: selectedItem[recordKey],
271
+ primary: selectedItem[recordKey],
272
+ });
273
+ }}
274
+ ```
275
+ - `onBlur`: `() => thePConn.getValidationApi().validate(selectedvalues, selectionList)`
276
+
277
+ ## Display Mode Rendering
278
+
279
+ Display mode uses `caption` (not `label`) and shows true/false label:
280
+
281
+ - **`DISPLAY_ONLY`:** `<FieldValueList name={hideLabel ? '' : caption} value={value ? trueLabel : falseLabel} />`
282
+ - **`STACKED_LARGE_VAL`:** `<FieldValueList name={hideLabel ? '' : caption} value={value ? trueLabel : falseLabel} variant='stacked' />`
283
+
284
+ ## Read-Only Rendering
285
+
286
+ Single mode: Set `readOnly` on checkbox element; disable `onChange`/`onBlur`.
287
+ Multi/Card mode: `readOnlyMode` flag prevents `insertInstruction`/`deleteInstruction`; cards show `readOnlyList`.
288
+
289
+ ## Visual Specifications
290
+
291
+ ### Standard / Multi-select
292
+
293
+ | Property | Value |
294
+ | ----------------- | --------------------------------------------- |
295
+ | Checkbox size | Default (24px) |
296
+ | Label placement | End (right of checkbox) |
297
+ | Group label | `<legend>` above group, hidden if `hideLabel` |
298
+ | Layout | Single: single row. Multi: vertical column |
299
+ | Helper text | Below group |
300
+ | Error state | Red text/border on helper |
301
+ | Disabled/readOnly | Greyed out, pointer-events none |
302
+
303
+ **CSS-only:**
304
+
305
+ ```css
306
+ .checkbox-group {
307
+ display: flex;
308
+ flex-direction: column;
309
+ gap: 4px;
310
+ }
311
+ .checkbox-label {
312
+ display: flex;
313
+ align-items: center;
314
+ gap: 8px;
315
+ cursor: pointer;
316
+ }
317
+ input[type='checkbox']:disabled {
318
+ opacity: 0.38;
319
+ }
320
+ ```
321
+
322
+ ### Card Variant
323
+
324
+ | Property | Value |
325
+ | -------- | ------------------------------------------------------------------------------------------------- |
326
+ | Layout | CSS Grid `repeat(auto-fit, minmax(min(100%, 40ch), 1fr))`, row height equal (`1fr`), gap `0.5rem` |
327
+ | Heading | `<h4>` with `marginTop: 0, marginBottom: 0` |
328
+
329
+ ## Edge Cases & Special Logic
330
+
331
+ - **Export name is `CheckboxComponent`** (not `Checkbox`) to avoid collision with the design system's checkbox widget import.
332
+ - **Display mode uses `caption`** (not `label`) for the field name. This is unique to Checkbox.
333
+ - **`readonlyContextList`** is destructured with alias `selectedvalues` — use `selectedvalues` everywhere in the component body.
334
+ - **`handleCheckboxChange`** (card mode): Calls `e.stopPropagation()` before processing. Finds the selected item from `datasource.source` by matching `item[recordKey] === e.target.id`.
335
+ - `updateNewInstuctions` is called on mount to sync reference list state.
336
+ - `clearErrorMessages` is called after every multi-select change.
337
+ - Card variant returns early (before multi/single branch logic).
338
+ - Multi-select `onBlur` validates with both `selectedvalues` and `selectionList` as arguments.
339
+
340
+ ## Dependencies
341
+
342
+ - `insertInstruction`, `deleteInstruction`, `updateNewInstuctions` from `../../helpers/instructions-utils` — for multi-selection reference list management.
343
+ - `handleEvent` from `../../helpers/event-utils`.
344
+ - `getComponentFromRegistry('FieldValueList')` for display modes.
345
+ - `getComponentFromRegistry('SelectableCard')` for card variant.
346
+
347
+ ## Design System Mapping
348
+
349
+ **UI control type:** Single or multi-select checkbox (boolean or list).
350
+
351
+ Listed design systems are examples only.
352
+
353
+ | Design System | Recommended Component |
354
+ | ------------------ | --------------------------------------------------- |
355
+ | Default (CSS only) | `<input type="checkbox">` with `<label>` |
356
+ | MUI | `<Checkbox>` in `<FormControlLabel>`, `<FormGroup>` |
357
+ | Ant Design | `<Checkbox>` / `<Checkbox.Group>` |
358
+ | Chakra UI | `<Checkbox>` / `<CheckboxGroup>` |
@@ -0,0 +1,230 @@
1
+ # Skill: Currency
2
+
3
+ Currency input field with locale-aware symbol, decimal separator, and thousands separator. Supports ISO currency codes.
4
+
5
+ > **Prerequisite skill:** [`field-components.md`](../field-components.md) — covers architecture, props interface, display modes, event handling, and registration patterns common to ALL field components.
6
+
7
+ ---
8
+
9
+ ## Component Purpose
10
+
11
+ Renders a numeric input formatted as a currency value. Displays the correct currency symbol, decimal separator, and thousands separator for the given ISO currency code. Uses a numeric formatting library to handle locale-aware input. Shows formatted read-only values in display modes.
12
+
13
+ ## Pega Metadata
14
+
15
+ - **Pega Name:** `Currency`
16
+ - **Type / Subtype:** `Field` / `Decimal-Currency`
17
+ - **Registration key:** `Currency` (in `component-map.ts`)
18
+
19
+ ## Props (component-specific)
20
+
21
+ | Prop | Type | Default | Description |
22
+ | ----------------- | ------------------- | ------- | ------------------------------------------------------------------------------------------------------ |
23
+ | `currencyISOCode` | `string` (optional) | `'USD'` | ISO 4217 currency code (e.g., `'USD'`, `'EUR'`, `'GBP'`) |
24
+ | `allowDecimals` | `boolean` | — | Whether to allow decimal input. If `false`, `decimalScale=0`. If `true`, fixed 2 decimal places shown. |
25
+
26
+ All other props from `PConnFieldProps`. Import type as:
27
+
28
+ ```typescript
29
+ import type { PConnFieldProps } from '@pega/sdk-react';
30
+ ```
31
+
32
+ ## Component Skeleton
33
+
34
+ Follow this exact structure. Replace `<NumericFormatInput>` and `<TextFieldWidget>` with equivalents from your chosen design system / numeric format library.
35
+
36
+ ```typescript
37
+ import { useEffect, useState } from 'react';
38
+ import { getComponentFromRegistry } from '@pega/sdk-react';
39
+ import type { PConnFieldProps } from '@pega/sdk-react';
40
+ import handleEvent from '../../helpers/event-utils';
41
+ import { format } from '../../helpers/formatters';
42
+ import { getCurrencyCharacters, getCurrencyOptions } from './currency-utils';
43
+
44
+ // ── Props interface ──────────────────────────────────────────
45
+ interface CurrencyProps extends PConnFieldProps {
46
+ currencyISOCode?: string;
47
+ allowDecimals: boolean;
48
+ }
49
+
50
+ // ── Component ────────────────────────────────────────────────
51
+ export default function Currency(props: CurrencyProps) {
52
+ // 1. Registry lookups
53
+ const FieldValueList = getComponentFromRegistry('FieldValueList');
54
+
55
+ // 2. Destructure props
56
+ const {
57
+ getPConnect, label, required, disabled, value = '',
58
+ validatemessage, status, readOnly, testId,
59
+ helperText, displayMode, hideLabel,
60
+ currencyISOCode = 'USD', placeholder, allowDecimals,
61
+ } = props;
62
+
63
+ // 3. PConnect setup
64
+ const pConn = getPConnect();
65
+ const actions = pConn.getActionsApi();
66
+ const propName = (pConn.getStateProps() as any).value;
67
+
68
+ // 4. Derived values
69
+ const helperTextToDisplay = validatemessage || helperText;
70
+ const testProps: any = { 'data-test-id': testId };
71
+
72
+ // 5. State
73
+ const [values, setValues] = useState(value.toString());
74
+
75
+ // 6. useEffect: sync from store — deps: [value]
76
+ useEffect(() => { setValues(value.toString()); }, [value]);
77
+
78
+ // 7. Currency symbol lookup
79
+ const theSymbols = getCurrencyCharacters(currencyISOCode);
80
+ const theCurrSym = theSymbols.theCurrencySymbol;
81
+ const theCurrDec = theSymbols.theDecimalIndicator;
82
+ const theCurrSep = theSymbols.theDigitGroupSeparator;
83
+
84
+ // 8. Formatted value for display modes (computed eagerly, before display mode check)
85
+ const theCurrencyOptions = getCurrencyOptions(currencyISOCode);
86
+ const formattedValue = format(value, pConn.getComponentName()?.toLowerCase(), theCurrencyOptions);
87
+
88
+ // 9. Read-only prop object
89
+ let readOnlyProp = {};
90
+ if (readOnly) {
91
+ readOnlyProp = { readOnly: true };
92
+ }
93
+
94
+ // 10. Currency format config object
95
+ const currencyProp = {
96
+ prefix: theCurrSym,
97
+ decimalSeparator: theCurrDec,
98
+ thousandSeparator: theCurrSep,
99
+ };
100
+
101
+ // 11. Display mode returns
102
+ if (displayMode === 'DISPLAY_ONLY') {
103
+ return <FieldValueList name={hideLabel ? '' : label} value={formattedValue} />;
104
+ }
105
+ if (displayMode === 'STACKED_LARGE_VAL') {
106
+ return <FieldValueList name={hideLabel ? '' : label} value={formattedValue} variant="stacked" />;
107
+ }
108
+
109
+ // 12. Event handlers
110
+ function currOnBlur() {
111
+ handleEvent(actions, 'changeNblur', propName, values);
112
+ }
113
+ const handleChange = (val) => { setValues(val.value); };
114
+
115
+ // 13. Main render — numeric format input
116
+ // Key props to pass to your numeric format component:
117
+ // - valueIsNumericString: true
118
+ // - value: values
119
+ // - ...currencyProp (prefix, decimalSeparator, thousandSeparator)
120
+ // - decimalScale: allowDecimals !== false ? 2 : 0
121
+ // - fixedDecimalScale: allowDecimals
122
+ // - onValueChange: (val) => handleChange(val)
123
+ // - onBlur: !readOnly ? currOnBlur : undefined
124
+ // - variant: readOnly ? 'standard' : 'outlined'
125
+ // - label, helperText: helperTextToDisplay, placeholder: placeholder ?? ''
126
+ // - required, disabled, error: status === 'error'
127
+ // - inputProps: { ...readOnlyProp, inputProps: { ...testProps } }
128
+ return <NumericFormatInput ... />;
129
+ }
130
+ ```
131
+
132
+ ## Behavioral Contract
133
+
134
+ 1. **Local state:** Maintain `values` (string). Initialize from `value.toString()`.
135
+ 2. **Sync from store:** `useEffect` with deps **`[value]`** → `setValues(value.toString())`.
136
+ 3. **Helper text:** `helperTextToDisplay = validatemessage || helperText`.
137
+ 4. **Test ID prop:** Build `testProps = { 'data-test-id': testId }` — passed via `inputProps` on the inner input element.
138
+ 5. **Currency symbols:** Derive from `getCurrencyCharacters(currencyISOCode)`:
139
+ - Returns `{ theCurrencySymbol, theDecimalIndicator, theDigitGroupSeparator }`.
140
+ - Default (USD): `$`, `.`, `,`.
141
+ 6. **Formatted value:** Computed eagerly (before display mode check):
142
+ ```
143
+ const theCurrencyOptions = getCurrencyOptions(currencyISOCode);
144
+ const formattedValue = format(value, pConn.getComponentName()?.toLowerCase(), theCurrencyOptions);
145
+ ```
146
+ 7. **Read-only prop:** `let readOnlyProp = {}; if (readOnly) readOnlyProp = { readOnly: true };`
147
+ 8. **Currency format config:**
148
+ ```
149
+ const currencyProp = {
150
+ prefix: theCurrSym,
151
+ decimalSeparator: theCurrDec,
152
+ thousandSeparator: theCurrSep,
153
+ };
154
+ ```
155
+ 9. **Numeric format props (merged at render):**
156
+ - `valueIsNumericString: true`
157
+ - `value: values` (local state string)
158
+ - `...currencyProp` (spread prefix + separators)
159
+ - `decimalScale: allowDecimals !== false ? 2 : 0`
160
+ - `fixedDecimalScale: allowDecimals`
161
+ - `onValueChange: (val) => setValues(val.value)`
162
+ - `onBlur: !readOnly ? currOnBlur : undefined`
163
+ - `variant: readOnly ? 'standard' : 'outlined'`
164
+ - Input slot/props: `{ ...readOnlyProp, inputProps: { ...testProps } }`
165
+ 10. **On value change:** `setValues(val.value)` — raw numeric string from the format library's callback object.
166
+ 11. **On blur:** `handleEvent(actions, 'changeNblur', propName, values)` — commits local state to store.
167
+
168
+ ## Display Mode Rendering
169
+
170
+ Format the value before display using a currency formatter with `currencyISOCode`:
171
+
172
+ - **`DISPLAY_ONLY`:** `<FieldValueList name={hideLabel ? '' : label} value={formattedValue} />` where `formattedValue = format(value, 'currency', currencyOptions)`.
173
+ - **`STACKED_LARGE_VAL`:** `<FieldValueList name={hideLabel ? '' : label} value={formattedValue} variant='stacked' />`.
174
+
175
+ The `formattedValue` uses the locale and currency from `currencyISOCode` to produce a localized string (e.g., `$1,234.56`).
176
+
177
+ ## Read-Only Rendering
178
+
179
+ Keep the numeric format input but set `readOnly: true` on the input element. Switch the visual variant to flat/borderless. The `onBlur` handler is omitted (`onBlur={!readOnly ? currOnBlur : undefined}`).
180
+
181
+ ## Visual Specifications
182
+
183
+ | Property | Standard (editable) | Read-only |
184
+ | -------------- | ---------------------------- | --------------- |
185
+ | Width | 100% | 100% |
186
+ | Size | Small | Small |
187
+ | Variant | Outlined | Standard (flat) |
188
+ | Prefix | Currency symbol (e.g., `$`) | Currency symbol |
189
+ | Alignment | Left-aligned text | Left-aligned |
190
+ | Decimal places | 2 (when `allowDecimals`) | 2 |
191
+ | Error state | Red border + red helper text | — |
192
+ | Placeholder | From `placeholder` prop | — |
193
+
194
+ ## Edge Cases & Special Logic
195
+
196
+ - **EUR uses `nl-NL` locale:** When `currencyISOCode === 'EUR'`, use NL locale for symbol/separator lookup.
197
+ - **Fallback:** If `currencyISOCode` lookup fails, fall back to USD (`$`, `.`, `,`).
198
+ - **`allowDecimals` vs `fixedDecimalScale`:** `fixedDecimalScale` is set directly to `allowDecimals` (boolean). `decimalScale` uses `allowDecimals !== false ? 2 : 0` (note: `!== false` means undefined/missing also gives 2 decimals).
199
+ - The input stores the raw numeric string (e.g., `'1234.56'`) in state and in the Pega store — not the formatted display string.
200
+ - `formattedValue` is computed eagerly (before display mode check) using `pConn.getComponentName()?.toLowerCase()` as the format type — this resolves to `'currency'`.
201
+ - `data-test-id` is passed via nested `slotProps.input.inputProps` (or `InputProps.inputProps` depending on design system) — not on the outer wrapper.
202
+ - `placeholder` defaults to `''` if undefined: `placeholder ?? ''`.
203
+ - Variant switches between `'outlined'` (editable) and `'standard'` (read-only) — this is design-system specific but the visual intent is: bordered input vs flat/borderless.
204
+
205
+ ## Dependencies
206
+
207
+ - A numeric formatting library (e.g., `react-number-format`'s `NumericFormat`) — handles locale-aware separators, prefix, and decimal scale.
208
+ - `format()` from `../../helpers/formatters` — for display mode value formatting.
209
+ - `getCurrencyCharacters(currencyISOCode)` — returns `{ theCurrencySymbol, theDecimalIndicator, theDigitGroupSeparator }`.
210
+ - `getCurrencyOptions(currencyISOCode)` — returns `{ locale, style: 'currency', currency }` for the `format()` call.
211
+ - `handleEvent` from `../../helpers/event-utils`.
212
+ - `getComponentFromRegistry('FieldValueList')` for display modes.
213
+
214
+ **For CSS-only / design-system-agnostic implementations:**
215
+
216
+ - The numeric format library handles the input masking. Use any numeric format library that supports prefix, decimal separator, and thousands separator configuration.
217
+ - Alternatively, implement manually: on change, strip non-numeric chars, insert separators, prepend symbol.
218
+
219
+ ## Design System Mapping
220
+
221
+ **UI control type:** Currency / numeric formatted input with prefix symbol.
222
+
223
+ Listed design systems are examples only.
224
+
225
+ | Design System | Recommended Component |
226
+ | ------------------ | --------------------------------------------------------------------------- |
227
+ | Default (CSS only) | `<input type="text">` + custom numeric formatting logic |
228
+ | MUI | `NumericFormat` (from `react-number-format`) with `customInput={TextField}` |
229
+ | Ant Design | `<InputNumber prefix="$" precision={2} />` |
230
+ | Chakra UI | `<NumberInput>` + custom formatting |