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