@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
|
@@ -24,6 +24,62 @@ A case view variant designed for self-service portal channels. Uses a horizontal
|
|
|
24
24
|
| `isObjectType` | `boolean` | No | Whether the case is an object-type (affects child region count) |
|
|
25
25
|
| `getPConnect` | `function` | Yes | PConnect getter |
|
|
26
26
|
|
|
27
|
+
## Component Skeleton
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
import { getComponentFromRegistry } from '@pega/sdk-react';
|
|
31
|
+
import { prepareCaseSummaryData, filterUtilities } from '../utils';
|
|
32
|
+
import { Utils } from '../../helpers/utils';
|
|
33
|
+
|
|
34
|
+
export default function SelfServiceCaseView(props) {
|
|
35
|
+
const CaseViewActionsMenu = getComponentFromRegistry('CaseViewActionsMenu');
|
|
36
|
+
const CaseSummary = getComponentFromRegistry('CaseSummary');
|
|
37
|
+
const {
|
|
38
|
+
icon = '', getPConnect, header, subheader,
|
|
39
|
+
showCaseLifecycle = true, showSummaryRegion = true,
|
|
40
|
+
showUtilitiesRegion = true, showCaseActions = true,
|
|
41
|
+
children, caseClass,
|
|
42
|
+
caseInfo: { availableActions = [], availableProcesses = [], caseTypeID = '', caseTypeName = '' },
|
|
43
|
+
} = props;
|
|
44
|
+
const pConnect = getPConnect();
|
|
45
|
+
|
|
46
|
+
// 1. Boolean coercion (props may be strings)
|
|
47
|
+
const [bShowCaseLifecycle, bShowSummaryRegion, bShowUtilitiesRegion, bShowCaseActions] =
|
|
48
|
+
[showCaseLifecycle, showSummaryRegion, showUtilitiesRegion, showCaseActions]
|
|
49
|
+
.map(p => p === true || p === 'true');
|
|
50
|
+
|
|
51
|
+
// 2. Object type check — affects child indexing
|
|
52
|
+
const isObjectType = (PCore.getCaseUtils() as any).isObjectCaseType(caseClass);
|
|
53
|
+
|
|
54
|
+
// 3. Region assignment by child index
|
|
55
|
+
const renderedRegions = isObjectType
|
|
56
|
+
? { caseSummary: children[0], utilities: filterUtilities(children[2]) }
|
|
57
|
+
: { caseSummary: children[0], stages: children[1], todo: children[2], utilities: filterUtilities(children[4]) };
|
|
58
|
+
|
|
59
|
+
// 4. Filter summary fields for self-service channel
|
|
60
|
+
const { primarySummaryFields, secondarySummaryFields } = prepareCaseSummaryData(
|
|
61
|
+
renderedRegions.caseSummary,
|
|
62
|
+
(config) => config?.availableInChannel?.selfService === true
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
// 5. Utilities visibility check
|
|
66
|
+
const showUtilities = bShowUtilitiesRegion && isUtilitiesRegionNotEmpty();
|
|
67
|
+
const showSummary = bShowSummaryRegion && (primarySummaryFields.length > 0 || secondarySummaryFields.length > 0);
|
|
68
|
+
|
|
69
|
+
// 6. Render: header bar + flex row (summary 25% | main flex:1 | utilities 25%)
|
|
70
|
+
return (
|
|
71
|
+
<div>
|
|
72
|
+
<HeaderBar>{header} {bShowCaseActions && <CaseViewActionsMenu ... />}</HeaderBar>
|
|
73
|
+
<div style={{ display: 'flex', flexDirection: 'row' }}>
|
|
74
|
+
{showSummary && <div style={{ flex: '0 0 25%' }}><CaseSummary ... /></div>}
|
|
75
|
+
<div style={{ flex: 1 }}>{bShowCaseLifecycle && renderedRegions.stages}{renderedRegions.todo}</div>
|
|
76
|
+
{showUtilities && <div style={{ flex: '0 0 25%' }}>{renderedRegions.utilities}</div>}
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
27
83
|
## Behavioral Contract
|
|
28
84
|
|
|
29
85
|
### Region Assignment by Child Index
|
package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/SimpleTable.md
RENAMED
|
@@ -29,6 +29,65 @@ Entry-point template for embedded table data in a form or detail view. Routes to
|
|
|
29
29
|
| `readOnly` | `boolean` | No | Alternative read-only flag |
|
|
30
30
|
| `getPConnect` | `function` | Yes | PConnect getter |
|
|
31
31
|
|
|
32
|
+
## Component Skeleton
|
|
33
|
+
|
|
34
|
+
### SimpleTable (router)
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import { getComponentFromRegistry } from '@pega/sdk-react';
|
|
38
|
+
import { buildMetaForListView, getContext } from '../../../helpers/simpleTableHelpers';
|
|
39
|
+
|
|
40
|
+
export default function SimpleTable(props: SimpleTableProps) {
|
|
41
|
+
const ListView = getComponentFromRegistry('ListView');
|
|
42
|
+
const FieldGroupTemplate = getComponentFromRegistry('FieldGroupTemplate');
|
|
43
|
+
const SimpleTableManual = getComponentFromRegistry('SimpleTableManual');
|
|
44
|
+
const { getPConnect, multiRecordDisplayAs, allowTableEdit, fieldMetadata, displayMode, ... } = props;
|
|
45
|
+
|
|
46
|
+
// 1. Route: fieldGroup
|
|
47
|
+
if (multiRecordDisplayAs === 'fieldGroup') {
|
|
48
|
+
return <FieldGroupTemplate {...props} contextClass={contextClass} />;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// 2. Route: reference list (read-only ListView)
|
|
52
|
+
if (fieldMetadata?.type === 'Page List' && fieldMetadata?.dataRetrievalType === 'refer') {
|
|
53
|
+
const metaForListView = buildMetaForListView(...);
|
|
54
|
+
return <ListView {...listViewProps} bInForm={true} displayMode={displayMode} />;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// 3. Route: editable table
|
|
58
|
+
return <SimpleTableManual {...props} contextClass={contextClass} />;
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### SimpleTableManual (editable table — ~600+ lines)
|
|
63
|
+
|
|
64
|
+
Key structural outline:
|
|
65
|
+
|
|
66
|
+
- `getReferenceList(pConn)` + `setReferenceList`
|
|
67
|
+
- `buildElementsForTable()` — creates PConnect views per cell
|
|
68
|
+
- `generateRowsData()` — for read-only/modal mode
|
|
69
|
+
- `addRecord()` / `deleteRecord()` / `editRecord()` with modal support
|
|
70
|
+
- Sort/filter/column menu (same pattern as ListView)
|
|
71
|
+
- Render: Table with header sort + body rows + add/delete controls
|
|
72
|
+
|
|
73
|
+
### SimpleTableSelect (selection wrapper)
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
const ListView = getComponentFromRegistry('ListView');
|
|
77
|
+
const PromotedFilters = getComponentFromRegistry('PromotedFilters');
|
|
78
|
+
// Build additionalTableConfig with selectionMode, compositeKeys
|
|
79
|
+
// If promoted filters exist: <PromotedFilters ... />
|
|
80
|
+
// Else: <ListView {...listViewProps} />
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### SimpleTableSelectReadonly (link + modal)
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
// Renders SemanticLink per selected item (comma-separated)
|
|
87
|
+
// If list > 5 items: show "(N Total)" link that opens modal
|
|
88
|
+
// Modal: <Dialog><SimpleTableManual readOnly ... /></Dialog>
|
|
89
|
+
```
|
|
90
|
+
|
|
32
91
|
## Behavioral Contract
|
|
33
92
|
|
|
34
93
|
### SimpleTable — Routing Logic
|
|
@@ -31,6 +31,58 @@ Renders a single data reference field in read-only mode. For fields that were di
|
|
|
31
31
|
| `resourcePayload` | `object` | No | Payload for resource navigation |
|
|
32
32
|
| `getPConnect` | `function` | Yes | PConnect getter |
|
|
33
33
|
|
|
34
|
+
## Component Skeleton
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import type { PConnProps } from '@pega/sdk-react';
|
|
38
|
+
|
|
39
|
+
interface SingleReferenceReadOnlyProps extends PConnProps {
|
|
40
|
+
config: any;
|
|
41
|
+
displayAs?: string;
|
|
42
|
+
ruleClass?: string;
|
|
43
|
+
label?: string;
|
|
44
|
+
displayMode?: string;
|
|
45
|
+
type: string;
|
|
46
|
+
referenceType?: string;
|
|
47
|
+
hideLabel?: boolean;
|
|
48
|
+
dataRelationshipContext?: string;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export default function SingleReferenceReadOnly(props: SingleReferenceReadOnlyProps) {
|
|
52
|
+
const {
|
|
53
|
+
getPConnect, displayAs = '', ruleClass = '', label = '',
|
|
54
|
+
type = '', displayMode = '', referenceType = '',
|
|
55
|
+
hideLabel = false, dataRelationshipContext = null, config,
|
|
56
|
+
} = props;
|
|
57
|
+
|
|
58
|
+
const editableComponents = ['AutoComplete', 'SimpleTableSelect', 'Dropdown'];
|
|
59
|
+
|
|
60
|
+
// 1. For editable field types: build SemanticLink config
|
|
61
|
+
if (editableComponents.includes(type)) {
|
|
62
|
+
config.caseClass = ruleClass;
|
|
63
|
+
config.text = config.primaryField;
|
|
64
|
+
config.caseID = config.value;
|
|
65
|
+
config.contextPage = `@P .${dataRelationshipContext}`;
|
|
66
|
+
config.resourceParams = { workID: displayAs === 'table' ? config.selectionKey : config.value };
|
|
67
|
+
config.resourcePayload = { caseClassName: ruleClass };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// 2. Create SemanticLink component
|
|
71
|
+
const component = getPConnect().createComponent(
|
|
72
|
+
{ type: 'SemanticLink', config: { ...config, label, displayMode, referenceType, hideLabel, dataRelationshipContext } },
|
|
73
|
+
'', 0, {},
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
// 3. Render: label + semantic link in row layout
|
|
77
|
+
return (
|
|
78
|
+
<FormRow>
|
|
79
|
+
<Label>{label}</Label>
|
|
80
|
+
{component}
|
|
81
|
+
</FormRow>
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
34
86
|
## Behavioral Contract
|
|
35
87
|
|
|
36
88
|
### Editable Component Check
|
package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/SubTabs.md
RENAMED
|
@@ -23,6 +23,53 @@ Renders a horizontal tab bar for navigating between case view sections. Uses sha
|
|
|
23
23
|
| `children` | `ReactNode[]` | Yes | `children[0]` is the deferred-loaded tabs container |
|
|
24
24
|
| `getPConnect` | `function` | Yes | PConnect getter |
|
|
25
25
|
|
|
26
|
+
## Component Skeleton
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
import { Children, type PropsWithChildren, useEffect, useState } from 'react';
|
|
30
|
+
import { getTransientTabs, getVisibleTabs, tabClick } from './tabUtils';
|
|
31
|
+
import type { PConnProps } from '@pega/sdk-react';
|
|
32
|
+
|
|
33
|
+
export default function SubTabs(props: PropsWithChildren<PConnProps>) {
|
|
34
|
+
const { children = [] } = props;
|
|
35
|
+
|
|
36
|
+
// 1. Extract deferred tabs
|
|
37
|
+
const deferLoadedTabs = Children.toArray(children)[0];
|
|
38
|
+
const availableTabs = getVisibleTabs(deferLoadedTabs, 'tabsSubs');
|
|
39
|
+
|
|
40
|
+
// 2. State
|
|
41
|
+
const [currentTabId, setCurrentTabId] = useState('0');
|
|
42
|
+
const [tabItems, setTabitem] = useState<any[]>([]);
|
|
43
|
+
|
|
44
|
+
// 3. Update tab items when currentTabId changes
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
setTabitem(getTransientTabs(availableTabs, currentTabId, tabItems));
|
|
47
|
+
}, [currentTabId]);
|
|
48
|
+
|
|
49
|
+
// 4. Tab click
|
|
50
|
+
const handleTabClick = (id, index: string) => {
|
|
51
|
+
setCurrentTabId(index);
|
|
52
|
+
tabClick(index, availableTabs, currentTabId, setCurrentTabId, tabItems);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// 5. Render: TabContext + Tabs (scrollable) + TabPanels (no heading)
|
|
56
|
+
return (
|
|
57
|
+
<TabContext value={currentTabId.toString()}>
|
|
58
|
+
<TabBar onChange={handleTabClick} value={currentTabId} variant="scrollable">
|
|
59
|
+
{tabItems.map(tab => <Tab key={tab.id} label={tab.name} value={tab.id} />)}
|
|
60
|
+
</TabBar>
|
|
61
|
+
{tabItems.map(tab => (
|
|
62
|
+
<TabPanel key={tab.id} value={tab.id} tabIndex={+tab.id}>
|
|
63
|
+
{tab.content || 'No content exists'}
|
|
64
|
+
</TabPanel>
|
|
65
|
+
))}
|
|
66
|
+
</TabContext>
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
> **Key difference from `DetailsSubTabs`:** No heading, uses `'tabsSubs'` identifier, `getVisibleTabs` called directly (not in useEffect).
|
|
72
|
+
|
|
26
73
|
## Behavioral Contract
|
|
27
74
|
|
|
28
75
|
1. **Extract deferred tabs:** `deferLoadedTabs = Children.toArray(children)[0]`.
|
package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/TwoColumn.md
RENAMED
|
@@ -24,6 +24,55 @@ Renders two child components side by side in a responsive grid. Column widths ar
|
|
|
24
24
|
|
|
25
25
|
All three extend `PConnProps`. Children are received as React `children` (not via `getPConnect().getChildren()`).
|
|
26
26
|
|
|
27
|
+
## Component Skeletons
|
|
28
|
+
|
|
29
|
+
### TwoColumn (core)
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import type { PropsWithChildren, ReactElement } from 'react';
|
|
33
|
+
import type { GridSize } from '@mui/material/Grid';
|
|
34
|
+
import type { PConnProps } from '@pega/sdk-react';
|
|
35
|
+
|
|
36
|
+
interface TwoColumnProps extends PConnProps {
|
|
37
|
+
templateCol?: string;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export default function TwoColumn(props: PropsWithChildren<TwoColumnProps>) {
|
|
41
|
+
const { children, templateCol = '1fr 1fr' } = props;
|
|
42
|
+
const childrenToRender = children as ReactElement[];
|
|
43
|
+
|
|
44
|
+
if (childrenToRender.length !== 2) {
|
|
45
|
+
console.error(`TwoColumn sees ${childrenToRender.length} children (expected 2)`);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Parse templateCol to compute column sizes (12-grid)
|
|
49
|
+
const colAArray = templateCol.replaceAll(/[a-z]+/g, '').split(/\s/).map(Number);
|
|
50
|
+
const totalCols = colAArray.reduce((v, itm) => itm + v, 0);
|
|
51
|
+
const ratio = 12 / totalCols;
|
|
52
|
+
const aSize = (ratio * colAArray[0]) as GridSize;
|
|
53
|
+
const bSize = (ratio * colAArray[1]) as GridSize;
|
|
54
|
+
|
|
55
|
+
return (
|
|
56
|
+
<GridContainer spacing={1}>
|
|
57
|
+
<GridItem xs={12} md={aSize} className="col-styles">{childrenToRender[0]}</GridItem>
|
|
58
|
+
<GridItem xs={12} md={bSize} className="col-styles">{childrenToRender[1]}</GridItem>
|
|
59
|
+
</GridContainer>
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
// CSS: .col-styles { display: grid; gap: 1rem; align-content: baseline; }
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### TwoColumnPage
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
const TwoColumn = getComponentFromRegistry('TwoColumn');
|
|
69
|
+
return <TwoColumn {...props} />;
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### TwoColumnTab
|
|
73
|
+
|
|
74
|
+
Identical implementation to `TwoColumn` — same `templateCol` parsing, same grid output.
|
|
75
|
+
|
|
27
76
|
## Props
|
|
28
77
|
|
|
29
78
|
| Prop | Type | Required | Description |
|
package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/WssNavBar.md
RENAMED
|
@@ -26,6 +26,77 @@ Provides the top navigation bar for WSS (Web Self-Service) portals. Responsive:
|
|
|
26
26
|
| `operatorInfo` | `object` | No | `{ displayName: string }` — for avatar initials |
|
|
27
27
|
| `getPConnect` | `function` | Yes | PConnect getter |
|
|
28
28
|
|
|
29
|
+
## Component Skeleton
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import { useState } from 'react';
|
|
33
|
+
import { logout } from '@pega/auth/lib/sdk-auth-manager';
|
|
34
|
+
import type { PConnProps } from '@pega/sdk-react';
|
|
35
|
+
import './WssNavBar.css';
|
|
36
|
+
|
|
37
|
+
interface WssNavBarProps extends PConnProps {
|
|
38
|
+
appInfo: any;
|
|
39
|
+
navLinks: any[];
|
|
40
|
+
operator: { currentUserInitials: string };
|
|
41
|
+
navDisplayOptions: { alignment: string; position: string };
|
|
42
|
+
portalName: string;
|
|
43
|
+
imageSrc: string;
|
|
44
|
+
fullImageSrc: string;
|
|
45
|
+
appName: any;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export default function WssNavBar(props: WssNavBarProps) {
|
|
49
|
+
const { appInfo, navLinks, operator, navDisplayOptions } = props;
|
|
50
|
+
const { alignment, position } = navDisplayOptions;
|
|
51
|
+
|
|
52
|
+
// 1. Menu state
|
|
53
|
+
const [anchorElNav, setAnchorElNav] = useState(null); // hamburger menu
|
|
54
|
+
const [anchorElUser, setAnchorElUser] = useState(null); // user menu
|
|
55
|
+
const localizedVal = PCore.getLocaleUtils().getLocaleValue;
|
|
56
|
+
|
|
57
|
+
// 2. Nav links content (hidden on mobile, shown on desktop)
|
|
58
|
+
const navLinksContent = (
|
|
59
|
+
<Box sx={{ display: { xs: 'none', md: 'flex' }, justifyContent: alignment }}>
|
|
60
|
+
{navLinks.map(link => <Button key={link.text} onClick={link.onClick}>{link.text}</Button>)}
|
|
61
|
+
</Box>
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
// 3. Render: AppBar > Toolbar > (logo + hamburger(mobile) + navLinks(desktop) + avatar)
|
|
65
|
+
return (
|
|
66
|
+
<AppBar position="static">
|
|
67
|
+
<Toolbar>
|
|
68
|
+
{/* App logo + name */}
|
|
69
|
+
<Button onClick={appInfo.onClick}>
|
|
70
|
+
<img src={appInfo.imageSrc} />
|
|
71
|
+
<span>{appInfo.appName}</span>
|
|
72
|
+
</Button>
|
|
73
|
+
|
|
74
|
+
{/* Hamburger (mobile only) */}
|
|
75
|
+
<HamburgerButton sx={{ display: { xs: 'flex', md: 'none' } }}
|
|
76
|
+
onClick={e => setAnchorElNav(e.currentTarget)} />
|
|
77
|
+
<MobileMenu anchorEl={anchorElNav} open={Boolean(anchorElNav)}
|
|
78
|
+
onClose={() => setAnchorElNav(null)}>
|
|
79
|
+
{navLinks.map(link => <MenuItem key={link.text} onClick={link.onClick}>{link.text}</MenuItem>)}
|
|
80
|
+
</MobileMenu>
|
|
81
|
+
|
|
82
|
+
{/* Nav links inline (position === 'inline') */}
|
|
83
|
+
{position === 'inline' && navLinksContent}
|
|
84
|
+
|
|
85
|
+
{/* Operator avatar + logout menu */}
|
|
86
|
+
<Avatar onClick={e => setAnchorElUser(e.currentTarget)}>{operator.currentUserInitials}</Avatar>
|
|
87
|
+
<UserMenu anchorEl={anchorElUser} open={Boolean(anchorElUser)}
|
|
88
|
+
onClose={() => setAnchorElUser(null)}>
|
|
89
|
+
<MenuItem onClick={logout}>{localizedVal('Log off', 'AppShell')}</MenuItem>
|
|
90
|
+
</UserMenu>
|
|
91
|
+
</Toolbar>
|
|
92
|
+
|
|
93
|
+
{/* Nav links below (position === 'below') */}
|
|
94
|
+
{position === 'below' && navLinksContent}
|
|
95
|
+
</AppBar>
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
29
100
|
## Behavioral Contract
|
|
30
101
|
|
|
31
102
|
### Responsive Layout
|
|
@@ -118,7 +118,7 @@ export default function MyWidget(props: MyWidgetProps) {
|
|
|
118
118
|
|
|
119
119
|
The PCore data-fetching logic (all `PCore.*` calls) is always identical regardless of design system. Only the `// [DS RENDER]` section changes.
|
|
120
120
|
|
|
121
|
-
**1. Check the component-specific skill file** —
|
|
121
|
+
**1. Check the component-specific skill file** — `{{SKILL_DIR}}/widget-skills/<ComponentName>.md` contains a **Design System Mapping** table where available. Use it as a starting point.
|
|
122
122
|
|
|
123
123
|
**2. If the chosen design system is not listed** — use the component purpose description to identify the appropriate DS primitives (card, list, table, button, badge, etc.).
|
|
124
124
|
|
package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/AppAnnouncement.md
RENAMED
|
@@ -26,6 +26,43 @@ Renders an announcement card with a heading, description text, optional bullet l
|
|
|
26
26
|
| `whatsnewlink` | `string` | No | URL for the "See what's new" button; if absent, button is not rendered |
|
|
27
27
|
| `getPConnect` | `function` | Yes | PConnect getter |
|
|
28
28
|
|
|
29
|
+
## Component Skeleton
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import type { PConnProps } from '@pega/sdk-react';
|
|
33
|
+
|
|
34
|
+
interface AppAnnouncementProps extends PConnProps {
|
|
35
|
+
header?: string;
|
|
36
|
+
description?: string;
|
|
37
|
+
datasource?: any;
|
|
38
|
+
whatsnewlink?: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export default function AppAnnouncement(props: AppAnnouncementProps) {
|
|
42
|
+
const { header = '', description = '', datasource = [], whatsnewlink = '' } = props;
|
|
43
|
+
|
|
44
|
+
// 1. Extract item names from datasource
|
|
45
|
+
const details = datasource?.source?.map(item => item.name) || [];
|
|
46
|
+
|
|
47
|
+
// 2. Render: Card with left accent border + vertical margin for sibling spacing
|
|
48
|
+
// ⚠️ margin '0.5rem 0' is REQUIRED — without it the card has no top spacing
|
|
49
|
+
return (
|
|
50
|
+
<Card style={{ borderLeft: '6px solid var(--app-primary-light-color)', margin: '0.5rem 0' }}>
|
|
51
|
+
<CardHeader><h6>{header}</h6></CardHeader>
|
|
52
|
+
<CardContent>
|
|
53
|
+
<p>{description}</p>
|
|
54
|
+
{details.map((itm, idx) => <p key={idx}>- {itm}</p>)}
|
|
55
|
+
</CardContent>
|
|
56
|
+
{whatsnewlink && (
|
|
57
|
+
<CardActions>
|
|
58
|
+
<Button onClick={() => window.open(whatsnewlink, '_blank')}>See what's new</Button>
|
|
59
|
+
</CardActions>
|
|
60
|
+
)}
|
|
61
|
+
</Card>
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
29
66
|
## Behavioral Contract
|
|
30
67
|
|
|
31
68
|
1. **Item list extraction:** If `datasource` is provided and `datasource.source` is a non-empty array, extract item names and render them as a bullet list. Each array item is expected to have a `name` property.
|
|
@@ -46,7 +83,7 @@ Renders an announcement card with a heading, description text, optional bullet l
|
|
|
46
83
|
|
|
47
84
|
**CSS-only implementation notes:**
|
|
48
85
|
|
|
49
|
-
- Card: `border-left: 6px solid var(--app-primary-light-color); border-radius: 4px; box-shadow: 0 1px 4px rgba(0,0,0,0.12)
|
|
86
|
+
- Card: `border-left: 6px solid var(--app-primary-light-color); border-radius: 4px; box-shadow: 0 1px 4px rgba(0,0,0,0.12); margin: 0.5rem 0` — the vertical margin ensures consistent spacing with sibling widgets (e.g., Pulse).
|
|
50
87
|
- Card header: `padding: 12px 16px; font-weight: 600`.
|
|
51
88
|
- Card content: `padding: 0 16px 16px`.
|
|
52
89
|
- Bullet list: `padding-left: 1.5rem; margin: 0.5rem 0`.
|
package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/Attachment.md
RENAMED
|
@@ -33,6 +33,64 @@ Renders a file attachment control within a Pega form. Users can upload one or mu
|
|
|
33
33
|
| `helperText` | `string` | No | Helper text shown below the control |
|
|
34
34
|
| `getPConnect` | `function` | Yes | PConnect getter |
|
|
35
35
|
|
|
36
|
+
## Component Skeleton
|
|
37
|
+
|
|
38
|
+
This is a complex form-field widget (~400 lines). Key structural outline:
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
import { useState, useEffect, useCallback, useMemo, useRef } from 'react';
|
|
42
|
+
import { validateMaxSize } from '../../helpers/attachmentShared';
|
|
43
|
+
import { clearFieldErrorMessages, deleteAttachments, getIconFromFileType, insertAttachments,
|
|
44
|
+
useDeepMemo, useFileDownload, validateFileExtension } from './AttachmentUtils';
|
|
45
|
+
import type { PConnFieldProps } from '@pega/sdk-react';
|
|
46
|
+
import './Attachment.css';
|
|
47
|
+
|
|
48
|
+
interface AttachmentProps extends Omit<PConnFieldProps, 'value'> {
|
|
49
|
+
value: any; allowMultiple: boolean | string; extensions: string;
|
|
50
|
+
editMode: string; isTableFormatter: boolean;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export default function Attachment(props: AttachmentProps) {
|
|
54
|
+
const { value, getPConnect, label, validatemessage, extensions, displayMode, helperText, editMode, isTableFormatter } = props;
|
|
55
|
+
let { required, disabled, allowMultiple } = props;
|
|
56
|
+
// Coerce string booleans
|
|
57
|
+
[required, disabled, allowMultiple] = [required, disabled, allowMultiple].map(
|
|
58
|
+
p => p === true || (typeof p === 'string' && p === 'true')
|
|
59
|
+
);
|
|
60
|
+
const pConn = getPConnect();
|
|
61
|
+
const actionSequencer = useMemo(() => PCore.getActionsSequencer(), []);
|
|
62
|
+
const contextName = pConn.getContextName();
|
|
63
|
+
|
|
64
|
+
// 1. Normalize attachment data (old vs new format)
|
|
65
|
+
const { attachments, isOldAttachment } = PCore.getAttachmentUtils().prepareAttachmentData(value);
|
|
66
|
+
// 2. Set reference list
|
|
67
|
+
let valueRef = (pConn.getStateProps() as any).value;
|
|
68
|
+
pConn.setReferenceList(`.${valueRef}`);
|
|
69
|
+
|
|
70
|
+
// 3. State: files array, error tracking, upload toggle
|
|
71
|
+
const [files, setFiles] = useState(attachments);
|
|
72
|
+
const [toggleUploadBegin, setToggleUploadBegin] = useState(false);
|
|
73
|
+
|
|
74
|
+
// 4. deleteFile — removes from state, calls deleteAttachments, deregisters sequencer
|
|
75
|
+
// 5. onFileAdded — validates extension + size, adds to files, sets toggleUploadBegin
|
|
76
|
+
// 6. uploadFiles — registerBlockingAction, uploadAttachment per file, insertAttachments on success
|
|
77
|
+
// 7. useEffect: trigger uploadFiles when toggleUploadBegin changes
|
|
78
|
+
// 8. useEffect: subscribe to ASSIGNMENT_SUBMISSION for state override
|
|
79
|
+
|
|
80
|
+
// 9. Render: label + upload button + validation message + file list with progress/delete
|
|
81
|
+
return (
|
|
82
|
+
<div className="file-upload-container">
|
|
83
|
+
<label>{label}</label>
|
|
84
|
+
{/* Upload button (hidden input + styled button) */}
|
|
85
|
+
{/* Validation/helper text */}
|
|
86
|
+
{/* File list: icon + name + meta + progress + delete button */}
|
|
87
|
+
</div>
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
> **Key patterns:** Action sequencer blocking (`registerBlockingAction`/`deRegisterBlockingAction`), `prepareAttachmentData` normalization, per-file progress tracking, `insertAttachments`/`deleteAttachments` helpers for Redux state.
|
|
93
|
+
|
|
36
94
|
## Behavioral Contract
|
|
37
95
|
|
|
38
96
|
### Attachment Format Detection
|
package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/CaseHistory.md
RENAMED
|
@@ -22,6 +22,69 @@ Renders a table of case events sourced from the `D_pyWorkHistory` data page. Sho
|
|
|
22
22
|
| ------------- | ---------- | -------- | ----------------------------------------------------- |
|
|
23
23
|
| `getPConnect` | `function` | Yes | PConnect getter — used to resolve case ID and context |
|
|
24
24
|
|
|
25
|
+
## Component Skeleton
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import { useEffect, useRef, useState } from 'react';
|
|
29
|
+
import isDeepEqual from 'fast-deep-equal/react';
|
|
30
|
+
import { Utils } from '../../helpers/utils';
|
|
31
|
+
import type { PConnProps } from '@pega/sdk-react';
|
|
32
|
+
|
|
33
|
+
interface CaseHistoryProps extends PConnProps {}
|
|
34
|
+
|
|
35
|
+
export default function CaseHistory(props: CaseHistoryProps) {
|
|
36
|
+
const { getPConnect } = props;
|
|
37
|
+
const thePConn = getPConnect();
|
|
38
|
+
const rowData = useRef([]);
|
|
39
|
+
const [waitingForData, setWaitingForData] = useState(true);
|
|
40
|
+
|
|
41
|
+
const caseID = thePConn.getValue(PCore.getConstants().CASE_INFO.CASE_INFO_ID, '');
|
|
42
|
+
const context = thePConn.getContextName();
|
|
43
|
+
|
|
44
|
+
const displayedColumns = [
|
|
45
|
+
{ label: thePConn.getLocalizedValue('Date', '', ''), type: 'DateTime', fieldName: 'pxTimeCreated' },
|
|
46
|
+
{ label: thePConn.getLocalizedValue('Description', '', ''), type: 'TextInput', fieldName: 'pyMessageKey' },
|
|
47
|
+
{ label: thePConn.getLocalizedValue('Performed by', '', ''), type: 'TextInput', fieldName: 'pyPerformer' },
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
// 1. Fetch D_pyWorkHistory on mount
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
let active = true;
|
|
53
|
+
PCore.getDataApiUtils().getData('D_pyWorkHistory',
|
|
54
|
+
{ dataViewParameters: [{ CaseInstanceKey: caseID }] }, context
|
|
55
|
+
).then((historyJSON: any) => {
|
|
56
|
+
if (active) {
|
|
57
|
+
computeRowData(historyJSON.data.data);
|
|
58
|
+
setWaitingForData(false);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
return () => { active = false; };
|
|
62
|
+
}, []);
|
|
63
|
+
|
|
64
|
+
// 2. computeRowData — format dates, use isDeepEqual to prevent unnecessary updates
|
|
65
|
+
function computeRowData(rows) {
|
|
66
|
+
const theRowData = rows.map(row => displayedColumns.map(col =>
|
|
67
|
+
col.type === 'DateTime' ? Utils.generateDateTime(row[col.fieldName], 'DateTime-Short') : row[col.fieldName]
|
|
68
|
+
));
|
|
69
|
+
if (!isDeepEqual(theRowData, rowData.current)) rowData.current = theRowData;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// 3. Render: Table with 3 columns, '---' for missing values
|
|
73
|
+
return (
|
|
74
|
+
<TableContainer>
|
|
75
|
+
<Table>
|
|
76
|
+
<TableHead><TableRow>{displayedColumns.map(col => <TableCell key={col.fieldName}>{col.label}</TableCell>)}</TableRow></TableHead>
|
|
77
|
+
<TableBody>
|
|
78
|
+
{rowData.current.map((row, i) => (
|
|
79
|
+
<TableRow key={i}>{row.map((cell, j) => <TableCell key={j}>{cell || '---'}</TableCell>)}</TableRow>
|
|
80
|
+
))}
|
|
81
|
+
</TableBody>
|
|
82
|
+
</Table>
|
|
83
|
+
</TableContainer>
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
25
88
|
No additional custom props. All data is fetched internally.
|
|
26
89
|
|
|
27
90
|
## Behavioral Contract
|