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