@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.
- package/dist/index.js +287 -1
- package/package.json +1 -1
- package/templates/angular-sdk-reference/package.json +12 -12
- package/templates/angular-sdk-reference/tsconfig.json +1 -1
- package/templates/react-native-sdk-reference/expo-env.d.ts +3 -0
- package/templates/react-sdk-reference/{.github/agents/implementation-expert.agent.md → .ai-common/agents/implementation-expert.md} +23 -26
- package/templates/react-sdk-reference/{.github/copilot-instructions.md → .ai-common/global/ai-agent-instructions.md} +7 -7
- package/templates/react-sdk-reference/{.github/instructions/component-map.instructions.md → .ai-common/instructions/component-map.md} +8 -1
- package/templates/react-sdk-reference/{.github/instructions/dse-component.instructions.md → .ai-common/instructions/dse-component.md} +1 -1
- package/templates/react-sdk-reference/{.github/instructions/field-component.instructions.md → .ai-common/instructions/field-component.md} +2 -1
- package/templates/react-sdk-reference/{.github/instructions/template-component.instructions.md → .ai-common/instructions/template-component.md} +1 -1
- package/templates/react-sdk-reference/{.github/instructions/widget-component.instructions.md → .ai-common/instructions/widget-component.md} +1 -1
- package/templates/react-sdk-reference/{.github/prompts/add-component.prompt.md → .ai-common/prompts/add-component.md} +45 -18
- package/templates/react-sdk-reference/{.cursor/rules → .ai-common}/prompts/component-manifest.json +8 -2
- package/templates/react-sdk-reference/{.github/prompts/generate-all-components.prompt.md → .ai-common/prompts/generate-all-components.md} +195 -78
- package/templates/react-sdk-reference/{.github/prompts/generate-dse-components.prompt.md → .ai-common/prompts/generate-dse-components.md} +28 -17
- package/templates/react-sdk-reference/{.github/prompts/generate-field-components.prompt.md → .ai-common/prompts/generate-field-components.md} +32 -16
- package/templates/react-sdk-reference/{.github/prompts/generate-template-components.prompt.md → .ai-common/prompts/generate-template-components.md} +76 -22
- package/templates/react-sdk-reference/{.github/prompts/generate-widget-components.prompt.md → .ai-common/prompts/generate-widget-components.md} +44 -30
- package/templates/react-sdk-reference/{.claude → .ai-common}/prompts/identify-components.md +4 -0
- package/templates/react-sdk-reference/{.cursor/rules/prompts/replace-design-system.mdrules → .ai-common/prompts/replace-design-system.md} +2 -3
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/AlertBanner.md +50 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/Banner.md +44 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/CaseSummaryFields.md +54 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/DetailsFields.md +49 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/FieldGroup.md +44 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/FieldGroupList.md +43 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/FieldValueList.md +46 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/Operator.md +67 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/Pulse.md +20 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/RichTextEditor.md +58 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/WssQuickCreate.md +31 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension.md +1 -1
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-components.md +18 -1
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/AutoComplete.md +298 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/CancelAlert.md +132 -3
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Checkbox.md +358 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Currency.md +230 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Date.md +221 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/DateTime.md +213 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Decimal.md +112 -13
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Dropdown.md +127 -1
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Email.md +68 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Group.md +51 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Integer.md +81 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Location.md +105 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Multiselect.md +70 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/ObjectReference.md +74 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Percentage.md +84 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Phone.md +81 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/RadioButtons.md +93 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/RichText.md +85 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/ScalarList.md +54 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/SelectableCard.md +55 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/SemanticLink.md +64 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/TextArea.md +66 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/TextContent.md +28 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/TextInput.md +67 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Time.md +67 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/URL.md +59 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/UserReference.md +90 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-components.md +83 -52
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/AdvancedSearch.md +77 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/AppShell.md +273 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/BannerPage.md +39 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/CaseSummary.md +79 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/CaseView.md +399 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/CaseViewActionsMenu.md +282 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/Confirmation.md +89 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DataReference.md +50 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DefaultForm.md +117 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DefaultPage.md +49 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/Details.md +59 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/DetailsSubTabs.md +60 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DetailsThreeColumn.md +12 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/DetailsTwoColumn.md +12 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DynamicTabs.md +67 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/FieldGroupTemplate.md +119 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/HierarchicalForm.md +45 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/InlineDashboard.md +41 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/InlineDashboardPage.md +56 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/ListPage.md +18 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/ListView.md +419 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/MultiReferenceReadOnly.md +40 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/NarrowWide.md +66 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/OneColumn.md +34 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/PromotedFilters.md +92 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/SelfServiceCaseView.md +56 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/SimpleTable.md +59 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/SingleReferenceReadOnly.md +52 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/SubTabs.md +47 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/TwoColumn.md +49 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/WssNavBar.md +71 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-components.md +1 -1
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/AppAnnouncement.md +38 -1
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/Attachment.md +58 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/CaseHistory.md +63 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/widget-skills/FileUtility.md +81 -14
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/Followers.md +20 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/widget-skills/QuickCreate.md +48 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/SummaryItem.md +66 -0
- package/templates/react-sdk-reference/.ai-common/skills/widget-skills/ToDo.md +492 -0
- package/templates/react-sdk-reference/package.minimal.json +29 -0
- package/templates/react-sdk-reference/src/AppProviders.tsx +17 -0
- package/templates/react-sdk-reference/src/MashupApp.tsx +8 -19
- package/templates/react-sdk-reference/src/PortalApp.tsx +6 -17
- package/templates/react-sdk-reference/.claude/instructions/component-map.md +0 -38
- package/templates/react-sdk-reference/.claude/instructions/dse-component.md +0 -75
- package/templates/react-sdk-reference/.claude/instructions/field-component.md +0 -75
- package/templates/react-sdk-reference/.claude/instructions/template-component.md +0 -93
- package/templates/react-sdk-reference/.claude/instructions/widget-component.md +0 -88
- package/templates/react-sdk-reference/.claude/prompts/add-component.md +0 -152
- package/templates/react-sdk-reference/.claude/prompts/component-manifest.json +0 -193
- package/templates/react-sdk-reference/.claude/prompts/generate-all-components.md +0 -158
- package/templates/react-sdk-reference/.claude/prompts/generate-dse-components.md +0 -140
- package/templates/react-sdk-reference/.claude/prompts/generate-field-components.md +0 -153
- package/templates/react-sdk-reference/.claude/prompts/generate-template-components.md +0 -165
- package/templates/react-sdk-reference/.claude/prompts/generate-widget-components.md +0 -138
- package/templates/react-sdk-reference/.claude/prompts/replace-design-system.md +0 -519
- package/templates/react-sdk-reference/.claude/skills/component-contracts.md +0 -140
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/AlertBanner.md +0 -137
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/FieldGroup.md +0 -134
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/FieldValueList.md +0 -118
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/Pulse.md +0 -85
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/RichTextEditor.md +0 -232
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/WssQuickCreate.md +0 -137
- package/templates/react-sdk-reference/.claude/skills/design-system-extension.md +0 -291
- package/templates/react-sdk-reference/.claude/skills/field-skills/AutoComplete.md +0 -113
- package/templates/react-sdk-reference/.claude/skills/field-skills/Checkbox.md +0 -175
- package/templates/react-sdk-reference/.claude/skills/field-skills/Currency.md +0 -109
- package/templates/react-sdk-reference/.claude/skills/field-skills/Date.md +0 -101
- package/templates/react-sdk-reference/.claude/skills/field-skills/DateTime.md +0 -106
- package/templates/react-sdk-reference/.claude/skills/field-skills/Integer.md +0 -88
- package/templates/react-sdk-reference/.claude/skills/field-skills/Multiselect.md +0 -188
- package/templates/react-sdk-reference/.claude/skills/field-skills/ObjectReference.md +0 -173
- package/templates/react-sdk-reference/.claude/skills/field-skills/Percentage.md +0 -93
- package/templates/react-sdk-reference/.claude/skills/field-skills/Phone.md +0 -129
- package/templates/react-sdk-reference/.claude/skills/field-skills/RadioButtons.md +0 -167
- package/templates/react-sdk-reference/.claude/skills/field-skills/RichText.md +0 -149
- package/templates/react-sdk-reference/.claude/skills/field-skills/ScalarList.md +0 -134
- package/templates/react-sdk-reference/.claude/skills/field-skills/SelectableCard.md +0 -231
- package/templates/react-sdk-reference/.claude/skills/field-skills/SemanticLink.md +0 -155
- package/templates/react-sdk-reference/.claude/skills/field-skills/TextInput.md +0 -107
- package/templates/react-sdk-reference/.claude/skills/field-skills/Time.md +0 -89
- package/templates/react-sdk-reference/.claude/skills/field-skills/URL.md +0 -86
- package/templates/react-sdk-reference/.claude/skills/template-components.md +0 -321
- package/templates/react-sdk-reference/.claude/skills/template-skills/AdvancedSearch.md +0 -150
- package/templates/react-sdk-reference/.claude/skills/template-skills/AppShell.md +0 -124
- package/templates/react-sdk-reference/.claude/skills/template-skills/CaseSummary.md +0 -106
- package/templates/react-sdk-reference/.claude/skills/template-skills/CaseView.md +0 -137
- package/templates/react-sdk-reference/.claude/skills/template-skills/CaseViewActionsMenu.md +0 -131
- package/templates/react-sdk-reference/.claude/skills/template-skills/Confirmation.md +0 -109
- package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsSubTabs.md +0 -97
- package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsTwoColumn.md +0 -80
- package/templates/react-sdk-reference/.claude/skills/template-skills/ListPage.md +0 -70
- package/templates/react-sdk-reference/.claude/skills/template-skills/ListView.md +0 -142
- package/templates/react-sdk-reference/.claude/skills/template-skills/MultiReferenceReadOnly.md +0 -82
- package/templates/react-sdk-reference/.claude/skills/template-skills/OneColumn.md +0 -114
- package/templates/react-sdk-reference/.claude/skills/template-skills/SimpleTable.md +0 -131
- package/templates/react-sdk-reference/.claude/skills/template-skills/SingleReferenceReadOnly.md +0 -108
- package/templates/react-sdk-reference/.claude/skills/template-skills/SubTabs.md +0 -82
- package/templates/react-sdk-reference/.claude/skills/widget-skills/FileUtility.md +0 -206
- package/templates/react-sdk-reference/.claude/skills/widget-skills/QuickCreate.md +0 -118
- package/templates/react-sdk-reference/.claude/skills/widget-skills/ToDo.md +0 -198
- package/templates/react-sdk-reference/.cursor/rules/component-map.mdrules +0 -41
- package/templates/react-sdk-reference/.cursor/rules/dse-component.mdrules +0 -78
- package/templates/react-sdk-reference/.cursor/rules/field-component.mdrules +0 -74
- package/templates/react-sdk-reference/.cursor/rules/pega-sdk.mdrules +0 -247
- package/templates/react-sdk-reference/.cursor/rules/prompts/add-component.mdrules +0 -149
- package/templates/react-sdk-reference/.cursor/rules/prompts/generate-all-components.mdrules +0 -154
- package/templates/react-sdk-reference/.cursor/rules/prompts/generate-dse-components.mdrules +0 -131
- package/templates/react-sdk-reference/.cursor/rules/prompts/generate-field-components.mdrules +0 -144
- package/templates/react-sdk-reference/.cursor/rules/prompts/generate-template-components.mdrules +0 -156
- package/templates/react-sdk-reference/.cursor/rules/prompts/generate-widget-components.mdrules +0 -129
- package/templates/react-sdk-reference/.cursor/rules/prompts/identify-components.mdrules +0 -110
- package/templates/react-sdk-reference/.cursor/rules/skills/component-contracts.mdrules +0 -145
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/AlertBanner.mdrules +0 -140
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/Banner.mdrules +0 -154
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/CaseSummaryFields.mdrules +0 -159
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/DetailsFields.mdrules +0 -149
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/FieldGroup.mdrules +0 -136
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/FieldGroupList.mdrules +0 -116
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/FieldValueList.mdrules +0 -120
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/Operator.mdrules +0 -154
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/Pulse.mdrules +0 -88
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/RichTextEditor.mdrules +0 -211
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/WssQuickCreate.mdrules +0 -140
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension.mdrules +0 -294
- package/templates/react-sdk-reference/.cursor/rules/skills/field-components.mdrules +0 -299
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/AutoComplete.mdrules +0 -117
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/CancelAlert.mdrules +0 -208
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Checkbox.mdrules +0 -163
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Currency.mdrules +0 -111
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Date.mdrules +0 -104
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/DateTime.mdrules +0 -108
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Decimal.mdrules +0 -103
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Dropdown.mdrules +0 -119
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Email.mdrules +0 -112
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Group.mdrules +0 -95
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Integer.mdrules +0 -92
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Location.mdrules +0 -141
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Multiselect.mdrules +0 -169
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/ObjectReference.mdrules +0 -169
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Percentage.mdrules +0 -97
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Phone.mdrules +0 -115
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/RadioButtons.mdrules +0 -151
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/RichText.mdrules +0 -143
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/ScalarList.mdrules +0 -129
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/SelectableCard.mdrules +0 -221
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/SemanticLink.mdrules +0 -153
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/TextArea.mdrules +0 -101
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/TextContent.mdrules +0 -106
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/TextInput.mdrules +0 -109
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Time.mdrules +0 -93
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/URL.mdrules +0 -90
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/UserReference.mdrules +0 -185
- package/templates/react-sdk-reference/.cursor/rules/skills/run-and-verify.mdrules +0 -73
- package/templates/react-sdk-reference/.cursor/rules/skills/template-components.mdrules +0 -327
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/AdvancedSearch.mdrules +0 -149
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/AppShell.mdrules +0 -127
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/BannerPage.mdrules +0 -88
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/CaseSummary.mdrules +0 -105
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/CaseView.mdrules +0 -136
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/CaseViewActionsMenu.mdrules +0 -131
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/Confirmation.mdrules +0 -112
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DataReference.mdrules +0 -125
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DefaultForm.mdrules +0 -107
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DefaultPage.mdrules +0 -115
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/Details.mdrules +0 -93
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DetailsSubTabs.mdrules +0 -100
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DetailsThreeColumn.mdrules +0 -83
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DetailsTwoColumn.mdrules +0 -83
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DynamicTabs.mdrules +0 -106
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/FieldGroupTemplate.mdrules +0 -114
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/HierarchicalForm.mdrules +0 -118
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/InlineDashboard.mdrules +0 -109
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/InlineDashboardPage.mdrules +0 -90
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/ListPage.mdrules +0 -73
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/ListView.mdrules +0 -144
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/MultiReferenceReadOnly.mdrules +0 -85
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/NarrowWide.mdrules +0 -146
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/OneColumn.mdrules +0 -114
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/PromotedFilters.mdrules +0 -129
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SelfServiceCaseView.mdrules +0 -140
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SimpleTable.mdrules +0 -132
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SingleReferenceReadOnly.mdrules +0 -108
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SubTabs.mdrules +0 -84
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/TwoColumn.mdrules +0 -136
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/WideNarrow.mdrules +0 -155
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/WssNavBar.mdrules +0 -140
- package/templates/react-sdk-reference/.cursor/rules/skills/widget-components.mdrules +0 -276
- package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/AppAnnouncement.mdrules +0 -87
- package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/Attachment.mdrules +0 -151
- package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/CaseHistory.mdrules +0 -112
- package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/FileUtility.mdrules +0 -205
- package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/Followers.mdrules +0 -104
- package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/QuickCreate.mdrules +0 -119
- package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/SummaryItem.mdrules +0 -172
- package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/ToDo.mdrules +0 -195
- package/templates/react-sdk-reference/.cursor/rules/template-component.mdrules +0 -95
- package/templates/react-sdk-reference/.cursor/rules/widget-component.mdrules +0 -90
- package/templates/react-sdk-reference/.github/prompts/component-manifest.json +0 -193
- package/templates/react-sdk-reference/.github/prompts/identify-components.prompt.md +0 -110
- package/templates/react-sdk-reference/.github/prompts/replace-design-system.prompt.md +0 -524
- package/templates/react-sdk-reference/.github/skills/component-contracts.md +0 -140
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/Banner.md +0 -152
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/CaseSummaryFields.md +0 -159
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/DetailsFields.md +0 -148
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/FieldGroupList.md +0 -113
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/Operator.md +0 -155
- package/templates/react-sdk-reference/.github/skills/field-components.md +0 -295
- package/templates/react-sdk-reference/.github/skills/field-skills/AutoComplete.md +0 -113
- package/templates/react-sdk-reference/.github/skills/field-skills/CancelAlert.md +0 -211
- package/templates/react-sdk-reference/.github/skills/field-skills/Checkbox.md +0 -175
- package/templates/react-sdk-reference/.github/skills/field-skills/Currency.md +0 -109
- package/templates/react-sdk-reference/.github/skills/field-skills/Date.md +0 -101
- package/templates/react-sdk-reference/.github/skills/field-skills/DateTime.md +0 -106
- package/templates/react-sdk-reference/.github/skills/field-skills/Decimal.md +0 -99
- package/templates/react-sdk-reference/.github/skills/field-skills/Dropdown.md +0 -134
- package/templates/react-sdk-reference/.github/skills/field-skills/Email.md +0 -109
- package/templates/react-sdk-reference/.github/skills/field-skills/Group.md +0 -96
- package/templates/react-sdk-reference/.github/skills/field-skills/Location.md +0 -145
- package/templates/react-sdk-reference/.github/skills/field-skills/TextArea.md +0 -98
- package/templates/react-sdk-reference/.github/skills/field-skills/TextContent.md +0 -117
- package/templates/react-sdk-reference/.github/skills/field-skills/UserReference.md +0 -203
- package/templates/react-sdk-reference/.github/skills/run-and-verify.md +0 -70
- package/templates/react-sdk-reference/.github/skills/template-skills/AppShell.md +0 -124
- package/templates/react-sdk-reference/.github/skills/template-skills/BannerPage.md +0 -86
- package/templates/react-sdk-reference/.github/skills/template-skills/CaseView.md +0 -137
- package/templates/react-sdk-reference/.github/skills/template-skills/CaseViewActionsMenu.md +0 -131
- package/templates/react-sdk-reference/.github/skills/template-skills/DataReference.md +0 -124
- package/templates/react-sdk-reference/.github/skills/template-skills/DefaultForm.md +0 -104
- package/templates/react-sdk-reference/.github/skills/template-skills/DefaultPage.md +0 -112
- package/templates/react-sdk-reference/.github/skills/template-skills/Details.md +0 -90
- package/templates/react-sdk-reference/.github/skills/template-skills/DetailsThreeColumn.md +0 -80
- package/templates/react-sdk-reference/.github/skills/template-skills/DynamicTabs.md +0 -106
- package/templates/react-sdk-reference/.github/skills/template-skills/FieldGroupTemplate.md +0 -112
- package/templates/react-sdk-reference/.github/skills/template-skills/HierarchicalForm.md +0 -116
- package/templates/react-sdk-reference/.github/skills/template-skills/InlineDashboard.md +0 -108
- package/templates/react-sdk-reference/.github/skills/template-skills/InlineDashboardPage.md +0 -82
- package/templates/react-sdk-reference/.github/skills/template-skills/ListView.md +0 -142
- package/templates/react-sdk-reference/.github/skills/template-skills/NarrowWide.md +0 -143
- package/templates/react-sdk-reference/.github/skills/template-skills/PromotedFilters.md +0 -130
- package/templates/react-sdk-reference/.github/skills/template-skills/SelfServiceCaseView.md +0 -142
- package/templates/react-sdk-reference/.github/skills/template-skills/TwoColumn.md +0 -133
- package/templates/react-sdk-reference/.github/skills/template-skills/WideNarrow.md +0 -152
- package/templates/react-sdk-reference/.github/skills/template-skills/WssNavBar.md +0 -139
- package/templates/react-sdk-reference/.github/skills/widget-components.md +0 -260
- package/templates/react-sdk-reference/.github/skills/widget-skills/AppAnnouncement.md +0 -84
- package/templates/react-sdk-reference/.github/skills/widget-skills/Attachment.md +0 -151
- package/templates/react-sdk-reference/.github/skills/widget-skills/CaseHistory.md +0 -110
- package/templates/react-sdk-reference/.github/skills/widget-skills/Followers.md +0 -103
- package/templates/react-sdk-reference/.github/skills/widget-skills/SummaryItem.md +0 -169
- package/templates/react-sdk-reference/.github/skills/widget-skills/ToDo.md +0 -198
- package/templates/react-sdk-reference/AGENTS.md +0 -246
- /package/templates/react-sdk-reference/{.claude → .ai-common}/skills/run-and-verify.md +0 -0
- /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 |
|