@pega/sdk 0.0.4 → 0.0.6
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/README.md +10 -3
- package/dist/index.js +977 -92
- 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/.claude/settings.json +5 -0
- package/templates/react-native-sdk-reference/.prettierignore +17 -0
- package/templates/react-native-sdk-reference/.vscode/extensions.json +1 -0
- package/templates/react-native-sdk-reference/.vscode/settings.json +7 -0
- package/templates/react-native-sdk-reference/AGENTS.md +3 -0
- package/templates/react-native-sdk-reference/CLAUDE.md +1 -0
- package/templates/react-native-sdk-reference/README.md +56 -0
- package/templates/react-native-sdk-reference/app.json +40 -5
- package/templates/react-native-sdk-reference/assets/expo.icon/Assets/expo-symbol 2.svg +3 -0
- package/templates/react-native-sdk-reference/assets/expo.icon/Assets/grid.png +0 -0
- package/templates/react-native-sdk-reference/assets/expo.icon/icon.json +35 -0
- package/templates/react-native-sdk-reference/assets/icons/bell.png +0 -0
- package/templates/react-native-sdk-reference/assets/icons/clock.png +0 -0
- package/templates/react-native-sdk-reference/assets/icons/cross.png +0 -0
- package/templates/react-native-sdk-reference/assets/icons/donut.png +0 -0
- package/templates/react-native-sdk-reference/assets/icons/gear.png +0 -0
- package/templates/react-native-sdk-reference/assets/icons/globe.png +0 -0
- package/templates/react-native-sdk-reference/assets/icons/internet.png +0 -0
- package/templates/react-native-sdk-reference/assets/icons/music.png +0 -0
- package/templates/react-native-sdk-reference/assets/icons/right-arrow.png +0 -0
- package/templates/react-native-sdk-reference/assets/icons/speed.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/MediaCo.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/adaptive-icon.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/android-icon-background.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/android-icon-foreground.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/android-icon-monochrome.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/expo-badge-white.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/expo-badge.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/expo-logo.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/favicon.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/icon.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/logo-glow.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/partial-react-logo.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/react-logo.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/react-logo@2x.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/react-logo@3x.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/splash-icon.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/tutorial-web.png +0 -0
- package/templates/react-native-sdk-reference/eslint.config.mjs +68 -0
- package/templates/react-native-sdk-reference/package.json +59 -14
- package/templates/react-native-sdk-reference/pega-constellationjs-0.26.3.tgz +0 -0
- package/templates/react-native-sdk-reference/pega-sdk-react-0.1.0.tgz +0 -0
- package/templates/react-native-sdk-reference/pega-sdk-types-0.1.0.tgz +0 -0
- package/templates/react-native-sdk-reference/sdk-config.json +31 -9
- package/templates/react-native-sdk-reference/src/app/_layout.tsx +38 -0
- package/templates/react-native-sdk-reference/src/app/home/_layout.tsx +39 -0
- package/templates/react-native-sdk-reference/src/app/home/contact.tsx +11 -0
- package/templates/react-native-sdk-reference/src/app/home/index.tsx +36 -0
- package/templates/react-native-sdk-reference/src/app/home/shop.tsx +11 -0
- package/templates/react-native-sdk-reference/src/app/home/your-services.tsx +11 -0
- package/templates/react-native-sdk-reference/src/app/index.tsx +72 -0
- package/templates/react-native-sdk-reference/src/app/workarea.tsx +135 -0
- package/templates/react-native-sdk-reference/src/bridge/Context/StoreContext.ts +4 -0
- package/templates/react-native-sdk-reference/src/bridge/RootComponent.tsx +12 -0
- package/templates/react-native-sdk-reference/src/bridge/react_pconnect.jsx +334 -0
- package/templates/react-native-sdk-reference/src/components/common/DisplayField.tsx +29 -0
- package/templates/react-native-sdk-reference/src/components/common/FormFieldWrapper.tsx +5 -0
- package/templates/react-native-sdk-reference/src/components/common/HelperText.tsx +11 -0
- package/templates/react-native-sdk-reference/src/components/common/LabelText.tsx +22 -0
- package/templates/react-native-sdk-reference/src/components/common/inputTheme.ts +17 -0
- package/templates/react-native-sdk-reference/src/components/design-system/AutoComplete.tsx +126 -0
- package/templates/react-native-sdk-reference/src/components/design-system/FieldGroup.tsx +72 -0
- package/templates/react-native-sdk-reference/src/components/design-system/Radio.tsx +61 -0
- package/templates/react-native-sdk-reference/src/components/field/AutoComplete/AutoComplete.tsx +196 -0
- package/templates/react-native-sdk-reference/src/components/field/AutoComplete/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/Checkbox/Checkbox.tsx +89 -0
- package/templates/react-native-sdk-reference/src/components/field/Checkbox/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/Currency/Currency.tsx +84 -0
- package/templates/react-native-sdk-reference/src/components/field/Currency/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/Date/Date.tsx +94 -0
- package/templates/react-native-sdk-reference/src/components/field/Date/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/Dropdown/Dropdown.tsx +211 -0
- package/templates/react-native-sdk-reference/src/components/field/Dropdown/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/Email/Email.tsx +81 -0
- package/templates/react-native-sdk-reference/src/components/field/Email/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/Group/Group.tsx +47 -0
- package/templates/react-native-sdk-reference/src/components/field/Group/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/Integer/Integer.tsx +84 -0
- package/templates/react-native-sdk-reference/src/components/field/Integer/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/Phone/Phone.tsx +85 -0
- package/templates/react-native-sdk-reference/src/components/field/Phone/index.ts +1 -0
- package/templates/react-native-sdk-reference/src/components/field/RadioButtons/RadioButtons.tsx +118 -0
- package/templates/react-native-sdk-reference/src/components/field/RadioButtons/index.ts +1 -0
- package/templates/react-native-sdk-reference/src/components/field/TextArea/TextArea.tsx +86 -0
- package/templates/react-native-sdk-reference/src/components/field/TextArea/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/TextInput/TextInput.tsx +84 -0
- package/templates/react-native-sdk-reference/src/components/field/TextInput/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/URL/URL.tsx +86 -0
- package/templates/react-native-sdk-reference/src/components/field/URL/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/helpers/data_page.ts +20 -0
- package/templates/react-native-sdk-reference/src/components/helpers/event-utils.ts +20 -0
- package/templates/react-native-sdk-reference/src/components/helpers/instructions-utils.ts +57 -0
- package/templates/react-native-sdk-reference/src/components/helpers/state-utils.tsx +46 -0
- package/templates/react-native-sdk-reference/src/components/helpers/template-utils.ts +75 -0
- package/templates/react-native-sdk-reference/src/components/helpers/utils.ts +339 -0
- package/templates/react-native-sdk-reference/src/components/infra/ActionButtons/ActionButtons.tsx +63 -0
- package/templates/react-native-sdk-reference/src/components/infra/ActionButtons/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/Assignment/Assignment.tsx +348 -0
- package/templates/react-native-sdk-reference/src/components/infra/Assignment/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/AssignmentCard/AssignmentCard.tsx +56 -0
- package/templates/react-native-sdk-reference/src/components/infra/AssignmentCard/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/FlowContainer/FlowContainer.tsx +57 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/FlowContainer/helpers.ts +137 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/FlowContainer/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/RootContainer/RootContainer.tsx +52 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/RootContainer/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/SimpleView/helper.ts +128 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/SimpleView/index.tsx +59 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/ViewContainer/ViewContainer.tsx +31 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/ViewContainer/helper.ts +39 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/ViewContainer/index.ts +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/helper.ts +9 -0
- package/templates/react-native-sdk-reference/src/components/infra/ErrorBoundary/ErrorBoundary.tsx +53 -0
- package/templates/react-native-sdk-reference/src/components/infra/ErrorBoundary/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/MultiStep/MultiStep.tsx +24 -0
- package/templates/react-native-sdk-reference/src/components/infra/MultiStep/index.ts +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/Reference/Reference.tsx +68 -0
- package/templates/react-native-sdk-reference/src/components/infra/Reference/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/Reference/utils.ts +16 -0
- package/templates/react-native-sdk-reference/src/components/infra/Region/Region.tsx +10 -0
- package/templates/react-native-sdk-reference/src/components/infra/Region/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/View/View.tsx +49 -0
- package/templates/react-native-sdk-reference/src/components/template/DefaultForm/DefaultForm.tsx +38 -0
- package/templates/react-native-sdk-reference/src/components/template/DefaultForm/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/template/DefaultForm/utils/index.ts +28 -0
- package/templates/react-native-sdk-reference/src/components/template/Details/Details.tsx +82 -0
- package/templates/react-native-sdk-reference/src/components/template/Details/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/template/OneColumn/OneColumn.tsx +29 -0
- package/templates/react-native-sdk-reference/src/components/template/OneColumn/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/context/LoaderContext.tsx +42 -0
- package/templates/react-native-sdk-reference/src/mediaco/AdvBanner.tsx +62 -0
- package/templates/react-native-sdk-reference/src/mediaco/Header.tsx +60 -0
- package/templates/react-native-sdk-reference/src/mediaco/HomeScreen.tsx +78 -0
- package/templates/react-native-sdk-reference/src/mediaco/QuickActions.tsx +68 -0
- package/templates/react-native-sdk-reference/src/mediaco/ResolutionScreen.tsx +48 -0
- package/templates/react-native-sdk-reference/src/mediaco/SafeArea.tsx +11 -0
- package/templates/react-native-sdk-reference/src/mediaco/TabBar.tsx +102 -0
- package/templates/react-native-sdk-reference/src/mediaco/YourServices.tsx +90 -0
- package/templates/react-native-sdk-reference/src/sdk-pega-component-map.ts +64 -0
- package/templates/react-native-sdk-reference/src/types/PConnProps.d.ts +41 -0
- package/templates/react-native-sdk-reference/src/utils/auth.ts +62 -0
- package/templates/react-native-sdk-reference/src/utils/init-pcore.ts +37 -0
- package/templates/react-native-sdk-reference/src/utils/pcore-polyfills.ts +66 -0
- package/templates/react-native-sdk-reference/tsconfig.json +9 -8
- package/templates/react-sdk-reference/.ai-common/agents/embedded-flow-expert.md +171 -0
- package/templates/react-sdk-reference/{.github/agents/implementation-expert.agent.md → .ai-common/agents/implementation-expert.md} +44 -48
- package/templates/react-sdk-reference/.ai-common/global/ai-agent-instructions-embedded.md +119 -0
- package/templates/react-sdk-reference/.ai-common/global/ai-agent-instructions.md +192 -0
- package/templates/react-sdk-reference/.ai-common/instructions/component-map.md +35 -0
- package/templates/react-sdk-reference/.ai-common/instructions/dse-component.md +47 -0
- package/templates/react-sdk-reference/.ai-common/instructions/embedded-component.md +134 -0
- package/templates/react-sdk-reference/.ai-common/instructions/field-component.md +50 -0
- package/templates/react-sdk-reference/.ai-common/instructions/template-component.md +43 -0
- package/templates/react-sdk-reference/.ai-common/instructions/widget-component.md +45 -0
- package/templates/react-sdk-reference/.ai-common/prompts/add-component.md +193 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/prompts/component-manifest.json +106 -2
- package/templates/react-sdk-reference/.ai-common/prompts/embedded-component-manifest.md +155 -0
- package/templates/react-sdk-reference/.ai-common/prompts/generate-all-components.md +358 -0
- package/templates/react-sdk-reference/.ai-common/prompts/generate-dse-components.md +165 -0
- package/templates/react-sdk-reference/.ai-common/prompts/generate-embedded-components.md +315 -0
- package/templates/react-sdk-reference/.ai-common/prompts/generate-field-components.md +190 -0
- package/templates/react-sdk-reference/.ai-common/prompts/generate-template-components.md +227 -0
- package/templates/react-sdk-reference/.ai-common/prompts/generate-widget-components.md +172 -0
- 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 +61 -25
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/Banner.md +176 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/CaseSummaryFields.md +180 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/DetailsFields.md +180 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/FieldGroup.md +153 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/FieldGroupList.md +136 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/FieldValueList.md +140 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/Operator.md +85 -41
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/Pulse.md +97 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/RichTextEditor.md +226 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/WssQuickCreate.md +35 -20
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension.md +169 -0
- package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/analyze-customer-repo.md +130 -0
- package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/authenticate.md +311 -0
- package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/run-and-verify-integration.md +156 -0
- package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/wire-integration.md +476 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-components.md +190 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/AutoComplete.md +157 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/CancelAlert.md +178 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Checkbox.md +189 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Currency.md +136 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Date.md +126 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/DateTime.md +115 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Decimal.md +119 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Dropdown.md +136 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Email.md +99 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Group.md +88 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Integer.md +102 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Location.md +142 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Multiselect.md +42 -53
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/ObjectReference.md +36 -60
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Percentage.md +113 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Phone.md +100 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/RadioButtons.md +153 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/RichText.md +117 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/ScalarList.md +95 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/SelectableCard.md +155 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/SemanticLink.md +35 -57
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/TextArea.md +109 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/TextContent.md +27 -52
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/TextInput.md +112 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Time.md +102 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/URL.md +96 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/UserReference.md +41 -78
- package/templates/react-sdk-reference/.ai-common/skills/infra-components.md +165 -0
- package/templates/react-sdk-reference/.ai-common/skills/infra-skills/ActionButtons.md +122 -0
- package/templates/react-sdk-reference/.ai-common/skills/infra-skills/MultiStep.md +178 -0
- package/templates/react-sdk-reference/.ai-common/skills/infra-skills/Stages.md +140 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-components.md +198 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/AdvancedSearch.md +126 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/AppShell.md +160 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/BannerPage.md +90 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/CaseSummary.md +129 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/CaseView.md +196 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/CaseViewActionsMenu.md +157 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/Confirmation.md +149 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DataReference.md +46 -31
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/DefaultForm.md +141 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/DefaultPage.md +40 -34
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/Details.md +96 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/DetailsSubTabs.md +103 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/DetailsThreeColumn.md +85 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/DetailsTwoColumn.md +77 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/DynamicTabs.md +103 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/FieldGroupTemplate.md +130 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/HierarchicalForm.md +200 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/InlineDashboard.md +110 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/InlineDashboardPage.md +105 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/ListPage.md +21 -16
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/ListView.md +234 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/MultiReferenceReadOnly.md +18 -23
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/NarrowWide.md +161 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/OneColumn.md +114 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/PromotedFilters.md +132 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/SelfServiceCaseView.md +173 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/SimpleTable.md +44 -24
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/SingleReferenceReadOnly.md +103 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/SubTabs.md +89 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/TwoColumn.md +133 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/WideNarrow.md +36 -43
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/WssNavBar.md +26 -45
- package/templates/react-sdk-reference/.ai-common/skills/widget-components.md +124 -0
- package/templates/react-sdk-reference/.ai-common/skills/widget-skills/AppAnnouncement.md +94 -0
- package/templates/react-sdk-reference/.ai-common/skills/widget-skills/Attachment.md +163 -0
- package/templates/react-sdk-reference/.ai-common/skills/widget-skills/CaseHistory.md +90 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/widget-skills/FileUtility.md +68 -62
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/Followers.md +24 -19
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/QuickCreate.md +27 -44
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/SummaryItem.md +35 -61
- package/templates/react-sdk-reference/.ai-common/skills/widget-skills/ToDo.md +261 -0
- package/templates/react-sdk-reference/package.json +1 -1
- package/templates/react-sdk-reference/package.minimal.json +29 -0
- package/templates/react-sdk-reference/pega-auth-0.2.44.tgz +0 -0
- package/templates/react-sdk-reference/pega-sdk-react-0.1.0.tgz +0 -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/src/components/helpers/formatters/index.ts +13 -3
- package/templates/react-native-sdk-reference/.github/AGENTS.md +0 -23
- package/templates/react-native-sdk-reference/.github/copilot-instructions.md +0 -40
- package/templates/react-native-sdk-reference/.github/skills/pega-sdk-component.md +0 -48
- package/templates/react-native-sdk-reference/App.tsx +0 -49
- 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/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/Banner.md +0 -152
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/CaseSummaryFields.md +0 -159
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/DetailsFields.md +0 -148
- 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/FieldGroupList.md +0 -113
- 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.md +0 -291
- package/templates/react-sdk-reference/.claude/skills/field-components.md +0 -295
- package/templates/react-sdk-reference/.claude/skills/field-skills/AutoComplete.md +0 -113
- package/templates/react-sdk-reference/.claude/skills/field-skills/CancelAlert.md +0 -211
- 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/Decimal.md +0 -99
- package/templates/react-sdk-reference/.claude/skills/field-skills/Dropdown.md +0 -134
- package/templates/react-sdk-reference/.claude/skills/field-skills/Email.md +0 -109
- package/templates/react-sdk-reference/.claude/skills/field-skills/Group.md +0 -96
- package/templates/react-sdk-reference/.claude/skills/field-skills/Integer.md +0 -88
- package/templates/react-sdk-reference/.claude/skills/field-skills/Location.md +0 -145
- 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/TextArea.md +0 -98
- package/templates/react-sdk-reference/.claude/skills/field-skills/TextContent.md +0 -117
- 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/BannerPage.md +0 -86
- 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/DefaultForm.md +0 -104
- package/templates/react-sdk-reference/.claude/skills/template-skills/DefaultPage.md +0 -112
- package/templates/react-sdk-reference/.claude/skills/template-skills/Details.md +0 -90
- package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsSubTabs.md +0 -97
- package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsThreeColumn.md +0 -80
- package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsTwoColumn.md +0 -80
- package/templates/react-sdk-reference/.claude/skills/template-skills/DynamicTabs.md +0 -106
- package/templates/react-sdk-reference/.claude/skills/template-skills/FieldGroupTemplate.md +0 -112
- package/templates/react-sdk-reference/.claude/skills/template-skills/HierarchicalForm.md +0 -116
- package/templates/react-sdk-reference/.claude/skills/template-skills/InlineDashboard.md +0 -108
- package/templates/react-sdk-reference/.claude/skills/template-skills/InlineDashboardPage.md +0 -82
- 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/NarrowWide.md +0 -143
- package/templates/react-sdk-reference/.claude/skills/template-skills/OneColumn.md +0 -114
- package/templates/react-sdk-reference/.claude/skills/template-skills/PromotedFilters.md +0 -130
- package/templates/react-sdk-reference/.claude/skills/template-skills/SelfServiceCaseView.md +0 -142
- 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/template-skills/TwoColumn.md +0 -133
- package/templates/react-sdk-reference/.claude/skills/template-skills/WssNavBar.md +0 -139
- package/templates/react-sdk-reference/.claude/skills/widget-components.md +0 -260
- package/templates/react-sdk-reference/.claude/skills/widget-skills/AppAnnouncement.md +0 -84
- package/templates/react-sdk-reference/.claude/skills/widget-skills/Attachment.md +0 -151
- package/templates/react-sdk-reference/.claude/skills/widget-skills/CaseHistory.md +0 -110
- package/templates/react-sdk-reference/.claude/skills/widget-skills/FileUtility.md +0 -206
- 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/component-manifest.json +0 -193
- 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/copilot-instructions.md +0 -243
- package/templates/react-sdk-reference/.github/instructions/component-map.instructions.md +0 -40
- package/templates/react-sdk-reference/.github/instructions/dse-component.instructions.md +0 -77
- package/templates/react-sdk-reference/.github/instructions/field-component.instructions.md +0 -77
- package/templates/react-sdk-reference/.github/instructions/template-component.instructions.md +0 -95
- package/templates/react-sdk-reference/.github/instructions/widget-component.instructions.md +0 -90
- package/templates/react-sdk-reference/.github/prompts/add-component.prompt.md +0 -192
- package/templates/react-sdk-reference/.github/prompts/component-manifest.json +0 -193
- package/templates/react-sdk-reference/.github/prompts/generate-all-components.prompt.md +0 -411
- package/templates/react-sdk-reference/.github/prompts/generate-dse-components.prompt.md +0 -205
- package/templates/react-sdk-reference/.github/prompts/generate-field-components.prompt.md +0 -223
- package/templates/react-sdk-reference/.github/prompts/generate-template-components.prompt.md +0 -229
- package/templates/react-sdk-reference/.github/prompts/generate-widget-components.prompt.md +0 -208
- 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/FieldGroup.md +0 -134
- 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/FieldValueList.md +0 -118
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/Operator.md +0 -155
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/Pulse.md +0 -85
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/RichTextEditor.md +0 -232
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/WssQuickCreate.md +0 -137
- package/templates/react-sdk-reference/.github/skills/design-system-extension.md +0 -291
- 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/Integer.md +0 -88
- package/templates/react-sdk-reference/.github/skills/field-skills/Location.md +0 -145
- package/templates/react-sdk-reference/.github/skills/field-skills/Multiselect.md +0 -188
- package/templates/react-sdk-reference/.github/skills/field-skills/ObjectReference.md +0 -173
- package/templates/react-sdk-reference/.github/skills/field-skills/Percentage.md +0 -93
- package/templates/react-sdk-reference/.github/skills/field-skills/Phone.md +0 -129
- package/templates/react-sdk-reference/.github/skills/field-skills/RadioButtons.md +0 -167
- package/templates/react-sdk-reference/.github/skills/field-skills/RichText.md +0 -149
- package/templates/react-sdk-reference/.github/skills/field-skills/ScalarList.md +0 -134
- package/templates/react-sdk-reference/.github/skills/field-skills/SelectableCard.md +0 -231
- package/templates/react-sdk-reference/.github/skills/field-skills/SemanticLink.md +0 -155
- package/templates/react-sdk-reference/.github/skills/field-skills/TextArea.md +0 -98
- package/templates/react-sdk-reference/.github/skills/field-skills/TextInput.md +0 -107
- package/templates/react-sdk-reference/.github/skills/field-skills/Time.md +0 -89
- package/templates/react-sdk-reference/.github/skills/field-skills/URL.md +0 -86
- 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-components.md +0 -321
- package/templates/react-sdk-reference/.github/skills/template-skills/AdvancedSearch.md +0 -150
- 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/CaseSummary.md +0 -106
- 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/Confirmation.md +0 -109
- 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/Details.md +0 -90
- package/templates/react-sdk-reference/.github/skills/template-skills/DetailsSubTabs.md +0 -97
- package/templates/react-sdk-reference/.github/skills/template-skills/DetailsThreeColumn.md +0 -80
- package/templates/react-sdk-reference/.github/skills/template-skills/DetailsTwoColumn.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/ListPage.md +0 -70
- 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/OneColumn.md +0 -114
- 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/SimpleTable.md +0 -131
- package/templates/react-sdk-reference/.github/skills/template-skills/SingleReferenceReadOnly.md +0 -108
- package/templates/react-sdk-reference/.github/skills/template-skills/SubTabs.md +0 -82
- 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/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/QuickCreate.md +0 -118
- 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/pega-auth-0.2.42.tgz +0 -0
- /package/templates/react-sdk-reference/{.claude → .ai-common}/skills/run-and-verify.md +0 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# Skill: Location
|
|
2
|
+
|
|
3
|
+
Location input with Google Maps Places autocomplete, interactive map display, and optional geolocation (current location).
|
|
4
|
+
|
|
5
|
+
> **Prerequisite skill:** [`field-components.md`](../field-components.md) — covers architecture, input contract, display modes, event handling, and registration patterns common to ALL field components.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Component Purpose
|
|
10
|
+
|
|
11
|
+
Renders a text input that integrates with Google Maps Places API for address/location autocomplete. Optionally shows an interactive map with a marker. Supports an `onlyCoordinates` mode that stores `"lat, lng"` instead of address text. Includes a "get current location" button using the browser geolocation API.
|
|
12
|
+
|
|
13
|
+
## Pega Metadata
|
|
14
|
+
|
|
15
|
+
- **Pega Name:** `Location`
|
|
16
|
+
- **Type / Subtype:** `Field` / `Text-Location`
|
|
17
|
+
- **Registration key:** `Location` (in the project's component map)
|
|
18
|
+
|
|
19
|
+
## Inputs (component-specific)
|
|
20
|
+
|
|
21
|
+
| Input | Type | Default | Description |
|
|
22
|
+
| ----------------- | -------------------- | ------- | ------------------------------------------------------------------------ |
|
|
23
|
+
| `coordinates` | `string` (optional) | `''` | Comma-separated lat/lng string (e.g., `'18.5204, 73.8567'`) |
|
|
24
|
+
| `onlyCoordinates` | `boolean` (optional) | `false` | If `true`, store and display lat/lng coordinates instead of address text |
|
|
25
|
+
| `showMap` | `boolean` (optional) | — | Show the interactive map in editable mode |
|
|
26
|
+
| `showMapReadOnly` | `boolean` (optional) | — | Show the map in read-only mode |
|
|
27
|
+
|
|
28
|
+
## Implementation Structure
|
|
29
|
+
|
|
30
|
+
Follow this exact structure. This component is complex — integrates Google Maps API for places autocomplete, geolocation, and optional map display.
|
|
31
|
+
|
|
32
|
+
**Module Setup:** The component depends on the project's component registry (to resolve `TextInput` and `FieldValueList`), the project's event-commit utility (for committing value changes to the store), and a Google Maps script loader capable of loading the `places` and `geocoding` libraries dynamically. A companion stylesheet is needed to fix the autocomplete dropdown z-index (see CSS section). Define the input contract as the project's field input contract extended with `coordinates?`, `onlyCoordinates?`, `showMap?`, and `showMapReadOnly?`. Define module-level constants: `mapContainerStyle` (`width: '100%'`, `height: '300px'`, `marginTop: '0px'`), `defaultCenter` (`{ lat: 18.5204, lng: 73.8567 }` — Pune, India), and `disabledMapOptions` (`gestureHandling: 'none'`, `keyboardShortcuts: false`, `disableDefaultUI: true`, `clickableIcons: false`).
|
|
33
|
+
|
|
34
|
+
**Main Component Logic** — steps in order:
|
|
35
|
+
|
|
36
|
+
1. **Registry lookups** — resolve `TextInput` and `FieldValueList` via the project's component registry.
|
|
37
|
+
2. **Receive inputs** — `getPConnect`, `label`, `required` (default `false`), `disabled` (default `false`), `value` (default `''`), `validatemessage`, `status`, `readOnly` (default `false`), `testId`, `displayMode`, `hideLabel` (default `false`), `placeholder`, `helperText`, `coordinates` (default `''`), `onlyCoordinates` (default `false`), `showMap`, `showMapReadOnly`.
|
|
38
|
+
3. **PConnect setup** (note TWO property names) — `pConn`, `actions`, `propName` for the address/value, and a separate `coordPropName` for the coordinates property.
|
|
39
|
+
4. **Local state** — `inputValue` (initialized from `value`), `mapCenter` (initialized to `defaultCenter`), and `markerPosition` (initialized to `null`).
|
|
40
|
+
5. **Instance references** — `inputRef` for the text input element, `autocompleteRef` for the Google Places Autocomplete instance.
|
|
41
|
+
6. **Load Google Maps API** — use a script-loading mechanism with the API key from `pConn.getGoogleMapsAPIKey?.() || ''` and the `places` and `geocoding` libraries. Track the loaded status via an `isLoaded` flag.
|
|
42
|
+
7. **Error flag** — `hasError = status === 'error' && !!validatemessage && !disabled`.
|
|
43
|
+
8. **Sync lifecycle effect** — watching `value`, `coordinates`, `onlyCoordinates`; see Behavioral Contract item 3.
|
|
44
|
+
9. **`handleChange`** (manual text input, cached callback) — commits immediately, clears coordinates if the input is emptied.
|
|
45
|
+
10. **`handlePlaceChanged`** (cached callback) — reads the selected place from the autocomplete instance reference, extracts `lat`/`lng`, and stores either the address or the coordinates depending on the `onlyCoordinates` flag.
|
|
46
|
+
11. **Init Places Autocomplete** — a lifecycle effect watching `isLoaded` and the place-changed handler, guarded to run only once `isLoaded && inputRef is set && autocompleteRef is not yet set`.
|
|
47
|
+
12. **`handleGetCurrentLocation`** (cached callback) — uses `navigator.geolocation.getCurrentPosition`; when `onlyCoordinates` is set, stores the coordinates directly, otherwise reverse-geocodes via `google.maps.Geocoder`.
|
|
48
|
+
13. **Display mode returns** — `DISPLAY_ONLY` and `STACKED_LARGE_VAL` (the latter with a stacked variant) both return `FieldValueList` with the raw `value`.
|
|
49
|
+
14. **Map element** (shared between read-only and editable rendering) — opacity reduced to `0.7` when `disabled`, and `disabledMapOptions` applied when `disabled`.
|
|
50
|
+
15. **Read-only return** — render a wrapper containing `TextInput` with all inputs spread, plus the map (once loaded) when `showMapReadOnly` is set.
|
|
51
|
+
16. **Main render** — render an error alert above the input when `hasError`; only render the text field once `isLoaded`; the text field carries the input reference and a trailing location-icon button that triggers `handleGetCurrentLocation`; render the map below when `isLoaded && showMap`.
|
|
52
|
+
|
|
53
|
+
## Behavioral Contract
|
|
54
|
+
|
|
55
|
+
1. **APIs required:**
|
|
56
|
+
- Google Maps JavaScript API with `places` and `geocoding` libraries
|
|
57
|
+
- API key obtained from `pConn.getGoogleMapsAPIKey?.() || ''`
|
|
58
|
+
2. **Local state:**
|
|
59
|
+
- `inputValue` (string): shown in the text input
|
|
60
|
+
- `mapCenter` (`{lat, lng}`): default `{ lat: 18.5204, lng: 73.8567 }` (Pune, India)
|
|
61
|
+
- `markerPosition` (`{lat, lng} | null`)
|
|
62
|
+
3. **Value sync:** A lifecycle effect watching `value`, `coordinates`, `onlyCoordinates`:
|
|
63
|
+
- If `onlyCoordinates && coordinates`: set `inputValue` to `coordinates`
|
|
64
|
+
- Else: set `inputValue` to `value ?? ''`
|
|
65
|
+
- If `coordinates` exists: parse `lat, lng`, update `mapCenter` and `markerPosition`
|
|
66
|
+
4. **Places Autocomplete (init):** A lifecycle effect watching `isLoaded` — once Maps API loads and the input element reference is set, attach `new google.maps.places.Autocomplete(inputElement)` and add `place_changed` listener.
|
|
67
|
+
5. **On place changed:**
|
|
68
|
+
- Get `place.geometry.location` → extract `lat`, `lng`
|
|
69
|
+
- If `onlyCoordinates`: set `inputValue` to `"lat, lng"` format, commit this as the value AND update the coordinates property
|
|
70
|
+
- Else: set `inputValue` to `place.formatted_address`, commit address as value, update coordinates property separately via `actions.updateFieldValue(coordPropName, coordinateString)`
|
|
71
|
+
- Update `mapCenter` and `markerPosition`
|
|
72
|
+
6. **On text change (manual):**
|
|
73
|
+
- Update `inputValue` and commit immediately via the project's event-commit utility with event type `'changeNblur'`, the property name, and the new value
|
|
74
|
+
- If input cleared and `coordPropName` exists: `actions.updateFieldValue(coordPropName, '')` and clear the marker position
|
|
75
|
+
7. **Get current location button:**
|
|
76
|
+
- Use `navigator.geolocation.getCurrentPosition()`
|
|
77
|
+
- If `onlyCoordinates`: store `"lat, lng"` as value and coordinates
|
|
78
|
+
- Else: reverse-geocode using `google.maps.Geocoder`, store address as value, `"lat, lng"` as coordinates
|
|
79
|
+
8. **Coordinate property name:** `coordPropName = (pConn.getStateProps() as any).coordinates` — separate from the main `propName`
|
|
80
|
+
9. **Error display:** If `status === 'error' && !!validatemessage && !disabled`, show an error alert ABOVE the input.
|
|
81
|
+
10. **Read-only:** Delegate text to `TextInput`, optionally show map if `showMapReadOnly`.
|
|
82
|
+
|
|
83
|
+
### Map configuration (disabled state)
|
|
84
|
+
|
|
85
|
+
When `disabled`, map options disable all interactions:
|
|
86
|
+
|
|
87
|
+
- `gestureHandling: 'none'`, `keyboardShortcuts: false`, `disableDefaultUI: true`, `clickableIcons: false`
|
|
88
|
+
- Map opacity: `0.7` when disabled
|
|
89
|
+
|
|
90
|
+
### CSS for Google Maps autocomplete dropdown z-index:
|
|
91
|
+
|
|
92
|
+
A companion stylesheet sets the `.pac-container` (the autocomplete dropdown) to the maximum z-index value, ensuring it appears above modal/dialog overlays.
|
|
93
|
+
|
|
94
|
+
## Display Mode Rendering
|
|
95
|
+
|
|
96
|
+
- **`DISPLAY_ONLY`:** Render `FieldValueList` with `name` set to the label (empty string if `hideLabel`) and `value` set to the raw address/coordinates string.
|
|
97
|
+
- **`STACKED_LARGE_VAL`:** Render `FieldValueList` with the same name/value and a stacked variant.
|
|
98
|
+
|
|
99
|
+
## Read-Only Rendering
|
|
100
|
+
|
|
101
|
+
A wrapper containing `TextInput` with all inputs spread, followed by the interactive map (once loaded) when `showMapReadOnly` is set.
|
|
102
|
+
|
|
103
|
+
## Visual Specifications
|
|
104
|
+
|
|
105
|
+
| Property | Value |
|
|
106
|
+
| -------------------- | ------------------------------------------------------------ |
|
|
107
|
+
| Width | 100% |
|
|
108
|
+
| Input variant | Default outlined text field |
|
|
109
|
+
| Trailing icon | Location pin icon button (for current location) |
|
|
110
|
+
| Error alert | Alert banner ABOVE the input field when `hasError` |
|
|
111
|
+
| Map container | `width: 100%`, `height: 300px`, `marginTop: 0px` |
|
|
112
|
+
| Map render | Only shown when `isLoaded && (showMap \|\| showMapReadOnly)` |
|
|
113
|
+
| Disabled map opacity | `0.7` |
|
|
114
|
+
|
|
115
|
+
**CSS companion file required:** A stylesheet that sets `.pac-container` to the maximum z-index value, ensuring the Google Maps autocomplete dropdown appears above modal/dialog overlays.
|
|
116
|
+
|
|
117
|
+
**Visual-only styling notes:** The location pin button is positioned at the trailing edge of the input, vertically centered.
|
|
118
|
+
|
|
119
|
+
## Edge Cases & Special Logic
|
|
120
|
+
|
|
121
|
+
- **`isLoaded` guard:** Only render the text field and map after Google Maps API is fully loaded.
|
|
122
|
+
- **`onlyCoordinates` mode:** The stored `value` is `"lat, lng"` format; coordinates and address are the same.
|
|
123
|
+
- **Dual property:** The component writes to TWO properties — `propName` (address or coordinates) and `coordPropName` (coordinates). `coordPropName` may be undefined if the Pega config doesn't include a coordinates property.
|
|
124
|
+
- **Autocomplete instance reference lifecycle:** The autocomplete instance is only initialized once (when the reference is not yet set). The `handlePlaceChanged` callback must be stable (cached with appropriate dependencies).
|
|
125
|
+
- **Map default center:** Pune, India — `{ lat: 18.5204, lng: 73.8567 }`.
|
|
126
|
+
- Google Maps Geocoder is only called in non-`onlyCoordinates` geolocation mode for reverse geocoding.
|
|
127
|
+
|
|
128
|
+
## Dependencies
|
|
129
|
+
|
|
130
|
+
- Google Maps JavaScript API (loaded dynamically via a script loader).
|
|
131
|
+
- A Google Maps rendering library providing map display, marker, and script-loading capabilities.
|
|
132
|
+
- The project's event-commit utility for committing field value changes.
|
|
133
|
+
- The project's component registry to resolve `TextInput` (for read-only) and `FieldValueList` (for display modes).
|
|
134
|
+
- A location pin icon from the project's icon set.
|
|
135
|
+
|
|
136
|
+
**CSS companion:** A stylesheet that fixes the autocomplete dropdown z-index (`.pac-container`).
|
|
137
|
+
|
|
138
|
+
## Design System Mapping
|
|
139
|
+
|
|
140
|
+
**UI control type:** Text input with location autocomplete dropdown + optional map.
|
|
141
|
+
|
|
142
|
+
When implementing in a specific design system, map the following: a full-width outlined text field with trailing icon adornment (for the current-location button), an alert/banner component for error display above the input, and a Google Maps embed component for the interactive map. The trailing icon should be a location/pin icon wrapped in a clickable button. The autocomplete functionality comes from the Google Maps Places API directly attached to the input element, not from the design system.
|
package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Multiselect.md
RENAMED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Multi-select autocomplete field supporting flat lists, grouped/hierarchical data, reference list binding, and debounced search.
|
|
4
4
|
|
|
5
|
-
> **Prerequisite skill:** [`field-components.md`](../field-components.md) — covers architecture,
|
|
5
|
+
> **Prerequisite skill:** [`field-components.md`](../field-components.md) — covers architecture, input contract, display modes, event handling, and registration patterns common to ALL field components.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -14,11 +14,11 @@ Renders a multi-value typeahead input where users can search and select multiple
|
|
|
14
14
|
|
|
15
15
|
- **Pega Name:** `Multiselect`
|
|
16
16
|
- **Type / Subtype:** `Field` / `Picklist-Multi`
|
|
17
|
-
- **Registration key:** `Multiselect` (in
|
|
17
|
+
- **Registration key:** `Multiselect` (in the project's component map)
|
|
18
18
|
|
|
19
|
-
> **Note:** `Multiselect` does NOT extend
|
|
19
|
+
> **Note:** `Multiselect` does NOT extend the project's field input contract — it defines its own inputs directly.
|
|
20
20
|
|
|
21
|
-
##
|
|
21
|
+
## Inputs (component-specific)
|
|
22
22
|
|
|
23
23
|
| Prop | Type | Default | Description |
|
|
24
24
|
| --------------------------- | ---------- | ------------ | ----------------------------------------------------------- |
|
|
@@ -44,6 +44,29 @@ Renders a multi-value typeahead input where users can search and select multiple
|
|
|
44
44
|
| `maxResultsDisplay` | `string` | — | Max results to display (`'100'` default) |
|
|
45
45
|
| `value` | `any` | — | Current value |
|
|
46
46
|
|
|
47
|
+
## Implementation Structure
|
|
48
|
+
|
|
49
|
+
This is a complex component. Note: it does NOT extend the project's field input contract — it defines its own inputs directly.
|
|
50
|
+
|
|
51
|
+
**Module Setup:** The component depends on local utility helpers (`doSearch`, `getDisplayFieldsMetaData`, a deep-memoization hook, `preProcessColumns`, `getGroupDataForItemsTree`), the project's instruction helpers (`insertInstruction` and `deleteInstruction`), and a debounce utility. It does not use the standard field input contract or the project's event-commit utility — selection commits happen via the instruction helpers.
|
|
52
|
+
|
|
53
|
+
**Main Component Logic** — steps in order:
|
|
54
|
+
|
|
55
|
+
1. **Receive inputs** (declare `datasource`/`columns` as reassignable since they may be overridden) — `getPConnect`, `label`, `placeholder`, `referenceList`, `selectionKey`, `primaryField`, `initialCaseClass`, `showSecondaryInSearchOnly` (default `false`), `listType` (default `''`), `isGroupData` (default `false`), `referenceType`, `secondaryFields`, `groupDataSource` (default `[]`), `parameters` (default `{}`), `matchPosition` (default `'contains'`), `maxResultsDisplay`, `groupColumnsConfig` (default `[{}]`), `selectionList`, `value`; separately destructure `datasource` (default `[]`) and `columns` (default `[{}]`) with `let`.
|
|
56
|
+
2. **Reference list mode override** — when `referenceList.length > 0`, reassign `datasource` and `columns`; see the Behavioral Contract "Reference List Mode" section.
|
|
57
|
+
3. **Local state** — `inputValue` initialized from `value`, and `selectedItems` initialized to `[]`.
|
|
58
|
+
4. **`dataConfig`** (memoized with deep comparison via a deep-memoization utility) — see the Behavioral Contract "Data Config" section.
|
|
59
|
+
5. **Display field metadata and items tree** — `displayFieldMeta`, `groupsDisplayFieldMeta`, `itemsTreeBaseData`, and an `itemsTree` state value; see the Behavioral Contract "Items Tree" section.
|
|
60
|
+
6. **Instance references** — `getCaseListBasedOnParamsDebounced` and `dataApiObj` as instance references; also `pConn` via `getPConnect()`, `contextName` via `pConn.getContextName()`, and `listActions` via `pConn.getListActions()`.
|
|
61
|
+
7. **`getCaseListBasedOnParams`** — the main search function; see the Behavioral Contract "Search" section.
|
|
62
|
+
8. **Lifecycle effect: set reference list** — watching the PConnect instance.
|
|
63
|
+
9. **Lifecycle effect: init debounced reference** — on mount.
|
|
64
|
+
10. **Lifecycle effect: init data API** — watching `dataConfig` and related dependencies; calls `PCore.getDataApi().init(dataConfig, contextName)`.
|
|
65
|
+
11. **`onSearchHandler`** — updates `inputValue` and triggers the debounced search.
|
|
66
|
+
12. **`setSelectedItemsForReferenceList`** — inserts or deletes an instruction depending on selection state.
|
|
67
|
+
13. **`handleChange`** — selection add/remove logic; see the Behavioral Contract "Selection Changes" section.
|
|
68
|
+
14. **Main render** — a multi-select autocomplete widget with: `multiple`, `fullWidth`, `disableCloseOnSelect` set; `options={itemsTree}`, `value={selectedItems}`; `getOptionLabel` returning `option?.primary`; `onChange={handleChange}`; and a `renderInput` producing a text field with `label`, `placeholder`, `size='small'`, `variant='outlined'`, and `onChange={onSearchHandler}`.
|
|
69
|
+
|
|
47
70
|
## Behavioral Contract
|
|
48
71
|
|
|
49
72
|
### Reference List Mode (when `referenceList.length > 0`)
|
|
@@ -70,16 +93,7 @@ Build a `dataConfig` object (memoized with deep comparison) containing:
|
|
|
70
93
|
|
|
71
94
|
### Data API Initialization
|
|
72
95
|
|
|
73
|
-
In
|
|
74
|
-
|
|
75
|
-
```
|
|
76
|
-
PCore.getDataApi().init(dataConfig, contextName).then(dataObj => {
|
|
77
|
-
dataApiObj.current = dataObj
|
|
78
|
-
if (!isGroupData) {
|
|
79
|
-
getCaseListBasedOnParamsDebounced.current(inputValue ?? '', '', [...selectedItems], [...itemsTree])
|
|
80
|
-
}
|
|
81
|
-
})
|
|
82
|
-
```
|
|
96
|
+
In a lifecycle effect watching `dataConfig` (non-associated lists), call `PCore.getDataApi().init(dataConfig, contextName)`. When the promise resolves with a data object: store it in the `dataApiObj` instance reference, and when `isGroupData` is false, invoke the debounced search function with the current `inputValue` (or `''`), an empty group, a copy of `selectedItems`, and a copy of `itemsTree`.
|
|
83
97
|
|
|
84
98
|
### Search
|
|
85
99
|
|
|
@@ -94,8 +108,8 @@ PCore.getDataApi().init(dataConfig, contextName).then(dataObj => {
|
|
|
94
108
|
|
|
95
109
|
### Mount Effects
|
|
96
110
|
|
|
97
|
-
-
|
|
98
|
-
-
|
|
111
|
+
- A lifecycle effect watching the PConnect instance: if `referenceList.length > 0`, call `pConn.setReferenceList(selectionList)`.
|
|
112
|
+
- A mount lifecycle effect: set up the debounced search reference.
|
|
99
113
|
|
|
100
114
|
### Selection Changes (`handleChange`)
|
|
101
115
|
|
|
@@ -132,35 +146,11 @@ No explicit `displayMode` handling in the reference implementation — Multisele
|
|
|
132
146
|
| Placeholder | From `placeholder` prop |
|
|
133
147
|
| Error state | Red border + red helper text |
|
|
134
148
|
|
|
135
|
-
**
|
|
136
|
-
|
|
137
|
-
```css
|
|
138
|
-
.multiselect-tags {
|
|
139
|
-
display: flex;
|
|
140
|
-
flex-wrap: wrap;
|
|
141
|
-
gap: 4px;
|
|
142
|
-
padding: 4px;
|
|
143
|
-
border: 1px solid rgba(0, 0, 0, 0.23);
|
|
144
|
-
border-radius: 4px;
|
|
145
|
-
}
|
|
146
|
-
.multiselect-tag {
|
|
147
|
-
background: rgba(0, 0, 0, 0.08);
|
|
148
|
-
border-radius: 16px;
|
|
149
|
-
padding: 2px 8px;
|
|
150
|
-
font-size: 0.8125rem;
|
|
151
|
-
display: flex;
|
|
152
|
-
align-items: center;
|
|
153
|
-
gap: 4px;
|
|
154
|
-
}
|
|
155
|
-
.multiselect-tag-delete {
|
|
156
|
-
cursor: pointer;
|
|
157
|
-
font-size: 0.75rem;
|
|
158
|
-
}
|
|
159
|
-
```
|
|
149
|
+
**Visual-only styling notes:** Selected values render as wrapping flex tags inside a bordered, rounded input container with a small gap and padding. Each tag has a light grey pill background, rounded corners, small padding, and a small font size, laid out as a flex row with a delete affordance at a slightly smaller font size and a pointer cursor.
|
|
160
150
|
|
|
161
151
|
## Edge Cases & Special Logic
|
|
162
152
|
|
|
163
|
-
- **`dataConfig` deep memoization:** Use
|
|
153
|
+
- **`dataConfig` deep memoization:** Use a deep-equality memoization utility to avoid re-initializing data API on every render.
|
|
164
154
|
- `itemsTreeBaseData` is fixed at render time — used as the base for each fresh search.
|
|
165
155
|
- When `isGroupData=false`: debounced search fires after data API init.
|
|
166
156
|
- When `isGroupData=true`: groups are pre-populated from `groupDataSource`.
|
|
@@ -168,21 +158,20 @@ No explicit `displayMode` handling in the reference implementation — Multisele
|
|
|
168
158
|
|
|
169
159
|
## Dependencies
|
|
170
160
|
|
|
171
|
-
- `doSearch`, `getDisplayFieldsMetaData`,
|
|
172
|
-
- `insertInstruction`, `deleteInstruction`
|
|
173
|
-
-
|
|
161
|
+
- Local utility helpers: `doSearch`, `getDisplayFieldsMetaData`, a deep-memoization utility, `preProcessColumns`, `getGroupDataForItemsTree`.
|
|
162
|
+
- The project's instruction helpers (`insertInstruction`, `deleteInstruction`).
|
|
163
|
+
- A debounce utility.
|
|
174
164
|
- `PCore.getDataApi()` — for data initialization.
|
|
175
|
-
-
|
|
165
|
+
- A multi-select autocomplete UI widget from the design system.
|
|
176
166
|
|
|
177
167
|
## Design System Mapping
|
|
178
168
|
|
|
179
169
|
**UI control type:** Multi-select combobox with tags/chips and searchable dropdown.
|
|
180
170
|
|
|
181
|
-
|
|
171
|
+
When implementing in a specific design system, map the following:
|
|
182
172
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
| Chakra UI | Third-party multi-select (e.g., Chakra React Select) |
|
|
173
|
+
- **Multi-select autocomplete** → use the DS's multi-select combobox with tag/chip display and searchable dropdown
|
|
174
|
+
- **Disable close on select** → the dropdown should stay open after each selection
|
|
175
|
+
- **Option label** → display `option.primary`
|
|
176
|
+
- **Selected items** → render as tags/chips inside the input area
|
|
177
|
+
- **Search input** → wired to the debounced search function
|
package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/ObjectReference.md
RENAMED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Composite field that dynamically renders a child component (Dropdown, AutoComplete, or SemanticLink) for referencing another Pega case or data object. Supports editable-in-review mode with direct case update.
|
|
4
4
|
|
|
5
|
-
> **Prerequisite skill:** [`field-components.md`](../field-components.md) — covers architecture,
|
|
5
|
+
> **Prerequisite skill:** [`field-components.md`](../field-components.md) — covers architecture, input contract, display modes, event handling, and registration patterns common to ALL field components.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -14,11 +14,11 @@ Does NOT render a UI control directly. Instead, it reads the raw metadata to det
|
|
|
14
14
|
|
|
15
15
|
- **Pega Name:** `ObjectReference`
|
|
16
16
|
- **Type / Subtype:** `Field` / `Reference`
|
|
17
|
-
- **Registration key:** `ObjectReference` (in
|
|
17
|
+
- **Registration key:** `ObjectReference` (in the project's component map)
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## Inputs (component-specific)
|
|
20
20
|
|
|
21
|
-
>
|
|
21
|
+
> Overrides the field input contract by omitting `value` — no direct `value` input.
|
|
22
22
|
|
|
23
23
|
| Prop | Type | Default | Description |
|
|
24
24
|
| ------------------------------------ | --------- | ------- | ---------------------------------------------------------------- |
|
|
@@ -33,6 +33,21 @@ Does NOT render a UI control directly. Instead, it reads the raw metadata to det
|
|
|
33
33
|
| `showPromotedFilters` | `boolean` | `false` | Show promoted filters in child |
|
|
34
34
|
| `additionalFields` | `any` | — | Additional fields for read-only display |
|
|
35
35
|
|
|
36
|
+
## Implementation Structure
|
|
37
|
+
|
|
38
|
+
This is a composite/orchestrator component — it does NOT render its own UI control. It creates a child component (Dropdown, AutoComplete, SemanticLink, or SingleReferenceReadonly) via `getPConnect().createComponent()`.
|
|
39
|
+
|
|
40
|
+
**Module Setup:** The component depends on the project's component registry (to resolve `SingleReferenceReadOnly`) and local utility helpers (`SELECTION_MODE`, `generateColumns`, `getDataRelationshipContextFromKey`). Define the input contract by overriding the project's field input contract to omit `value`, and adding `getPConnect`, `displayMode`, `allowAndPersistChangesInReviewMode`, `targetObjectType`, `mode`, `parameters`, `hideLabel`, `inline`, `showPromotedFilters`, and `additionalFields`.
|
|
41
|
+
|
|
42
|
+
**Main Component Logic** — steps in order:
|
|
43
|
+
|
|
44
|
+
1. **Receive inputs** — `getPConnect`, `displayMode`, alias `allowAndPersistChangesInReviewMode` to `editableInReview` (default `false`), `targetObjectType`, `mode` (default `''`), `parameters`, `hideLabel` (default `false`), `inline` (default `false`), `showPromotedFilters` (default `false`), `additionalFields`.
|
|
45
|
+
2. **Registry lookup** — resolve `SingleReferenceReadonly` (registry key `'SingleReferenceReadOnly'`) via the project's component registry.
|
|
46
|
+
3. **Setup** — `pConn`; `referenceType` set to `'Case'` when `targetObjectType === 'case'`, else `'Data'`; `rawViewMetadata` via `pConn.getRawMetadata()`; `refFieldMetadata` via `pConn.getFieldMetadata()` on the second segment of the raw metadata's config value path; `propsToUse` merging `pConn.getInheritedProps()` with the component inputs; `isDisplayModeEnabled = displayMode === 'DISPLAY_ONLY'`; `canBeChangedInReviewMode` true when `editableInReview` is set and the raw metadata's `config.componentType` is `'Autocomplete'` or `'Dropdown'`.
|
|
47
|
+
4. **`onRecordChange` handler** — see the Behavioral Contract section below for its full logic.
|
|
48
|
+
5. **`recreatedFirstChild`** (memoized computation) — the main decision-tree logic: (a) when the component type is `SemanticLink` and not editable-in-review, create a `SemanticLink` child via `createComponent`; (b) when in display mode and not editable-in-review, render `SingleReferenceReadonly`; (c) otherwise (editable), call `generateColumns`, set `deferDatasource`, build `fieldMetaData`, and create the appropriate child (`Dropdown` or `AutoComplete`) via `createComponent` with a config object carrying the datasource metadata, `onRecordChange`, and related inputs. Dependencies: `rawViewMetadata.config?.datasource?.source`, `parameters`, `propsToUse.required`, `propsToUse.disabled`, `getPConnect().getPageReference()`.
|
|
49
|
+
6. **Return** — a minimal grid wrapper containing `recreatedFirstChild`.
|
|
50
|
+
|
|
36
51
|
## Behavioral Contract
|
|
37
52
|
|
|
38
53
|
### Setup
|
|
@@ -40,7 +55,7 @@ Does NOT render a UI control directly. Instead, it reads the raw metadata to det
|
|
|
40
55
|
1. `referenceType = targetObjectType === 'case' ? 'Case' : 'Data'`
|
|
41
56
|
2. `rawViewMetadata = pConn.getRawMetadata()` — the raw component metadata from Pega config
|
|
42
57
|
3. `refFieldMetadata = pConn.getFieldMetadata(rawViewMetadata?.config?.value?.split('.', 2)[1])`
|
|
43
|
-
4. `propsToUse = { ...pConn.getInheritedProps(), ...
|
|
58
|
+
4. `propsToUse = { ...pConn.getInheritedProps(), ...componentInputs }` — merged inherited + local inputs
|
|
44
59
|
5. `isDisplayModeEnabled = displayMode === 'DISPLAY_ONLY'`
|
|
45
60
|
6. `canBeChangedInReviewMode = editableInReview && ['Autocomplete', 'Dropdown'].includes(rawViewMetadata.config.componentType)`
|
|
46
61
|
|
|
@@ -72,33 +87,9 @@ Render `<SingleReferenceReadonly>` with config from `rawViewMetadata.config`, pa
|
|
|
72
87
|
- `rawViewMetadata.config.showPromotedFilters = showPromotedFilters`
|
|
73
88
|
- If `!canBeChangedInReviewMode`: set `rawViewMetadata.config.displayMode = displayMode`
|
|
74
89
|
|
|
75
|
-
3. **Build fieldMetaData:**
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
fieldMetaData = { datasourceMetadata: { datasource: { parameters: {} } } }
|
|
79
|
-
```
|
|
80
|
-
- Set `propertyForDisplayText` from `datasource.fields.text` (strip `@P ` prefix)
|
|
81
|
-
- Set `propertyForValue` from `datasource.fields.value` (strip `@P ` prefix)
|
|
82
|
-
- Set `name` from `referenceList`
|
|
83
|
-
- If `rawViewMetadata.config.parameters`: assign `parameters` prop
|
|
84
|
-
|
|
85
|
-
4. **Create child component:**
|
|
86
|
-
```
|
|
87
|
-
getPConnect().createComponent({
|
|
88
|
-
type, // 'Dropdown' or 'AutoComplete'
|
|
89
|
-
config: {
|
|
90
|
-
...rawViewMetadata.config,
|
|
91
|
-
descriptors: mode === SELECTION_MODE.SINGLE ? refFieldMetadata?.descriptors : null,
|
|
92
|
-
datasourceMetadata: fieldMetaData.datasourceMetadata,
|
|
93
|
-
required, visibility, disabled, label, parameters, readOnly: false,
|
|
94
|
-
localeReference, referenceType (for single mode only),
|
|
95
|
-
contextClass: targetObjectClass,
|
|
96
|
-
primaryField: displayField,
|
|
97
|
-
dataRelationshipContext,
|
|
98
|
-
hideLabel, onRecordChange, inline
|
|
99
|
-
}
|
|
100
|
-
})
|
|
101
|
-
```
|
|
90
|
+
3. **Build fieldMetaData:** Start from an object shaped as `{ datasourceMetadata: { datasource: { parameters: {} } } }`. Set `propertyForDisplayText` from `datasource.fields.text` (with any leading `@P ` prefix stripped). Set `propertyForValue` from `datasource.fields.value` (with any leading `@P ` prefix stripped). Set `name` from `referenceList`. If `rawViewMetadata.config.parameters` is present, assign it to the `parameters` property.
|
|
91
|
+
|
|
92
|
+
4. **Create child component:** Call `getPConnect().createComponent()` with `type` set to `'Dropdown'` or `'AutoComplete'`, and a `config` object spreading `rawViewMetadata.config` plus: `descriptors` (from `refFieldMetadata?.descriptors` when `mode === SELECTION_MODE.SINGLE`, otherwise `null`), `datasourceMetadata` (from `fieldMetaData.datasourceMetadata`), `required`, `visibility`, `disabled`, `label`, `parameters`, `readOnly: false`, `localeReference`, `referenceType` (for single mode only), `contextClass` (the target object class), `primaryField` (the display field), `dataRelationshipContext`, `hideLabel`, `onRecordChange`, and `inline`.
|
|
102
93
|
|
|
103
94
|
### `onRecordChange` handler
|
|
104
95
|
|
|
@@ -116,7 +107,7 @@ Called when user selects a new value in editable/editable-in-review mode:
|
|
|
116
107
|
|
|
117
108
|
### Memoization
|
|
118
109
|
|
|
119
|
-
`recreatedFirstChild` is memoized
|
|
110
|
+
`recreatedFirstChild` is a memoized computation — dependencies: `rawViewMetadata.config?.datasource?.source`, `parameters`, `propsToUse.required`, `propsToUse.disabled`, `getPConnect().getPageReference()`.
|
|
120
111
|
|
|
121
112
|
## Display Mode Rendering
|
|
122
113
|
|
|
@@ -124,50 +115,35 @@ Display mode is passed through to the child component — the child (Dropdown, A
|
|
|
124
115
|
|
|
125
116
|
## Visual Specifications
|
|
126
117
|
|
|
127
|
-
ObjectReference itself renders a minimal grid container:
|
|
128
|
-
|
|
129
|
-
```
|
|
130
|
-
<Grid container>
|
|
131
|
-
<Grid>{recreatedFirstChild}</Grid>
|
|
132
|
-
</Grid>
|
|
133
|
-
```
|
|
118
|
+
ObjectReference itself renders a minimal grid container: a grid wrapping a single grid item that holds `recreatedFirstChild`.
|
|
134
119
|
|
|
135
120
|
The visual appearance is entirely determined by the child component being rendered. No additional styling is applied by `ObjectReference` itself.
|
|
136
121
|
|
|
137
|
-
**
|
|
138
|
-
|
|
139
|
-
```css
|
|
140
|
-
.object-reference-container {
|
|
141
|
-
display: grid;
|
|
142
|
-
width: 100%;
|
|
143
|
-
}
|
|
144
|
-
```
|
|
122
|
+
**Visual-only styling notes:** The outer container uses a full-width grid layout with a single column.
|
|
145
123
|
|
|
146
124
|
## Edge Cases & Special Logic
|
|
147
125
|
|
|
148
126
|
- **`generateColumns`**: a utility from `./utils` that populates `rawViewMetadata.config` with proper column definitions for the child Dropdown/AutoComplete.
|
|
149
127
|
- **`getDataRelationshipContextFromKey`**: extracts the relationship context from a field key (also from `./utils`).
|
|
150
128
|
- `rawViewMetadata.config` is mutated in place before being passed to `createComponent` — this is intentional but means the component re-creates the child on relevant prop changes.
|
|
151
|
-
- For `SemanticLink` type, the child is created via `createComponent`, not rendered as a direct
|
|
129
|
+
- For `SemanticLink` type, the child is created via `createComponent`, not rendered as a direct element.
|
|
152
130
|
- `SELECTION_MODE.SINGLE` and `SELECTION_MODE.MULTI` constants from `./utils`.
|
|
153
131
|
|
|
154
132
|
## Dependencies
|
|
155
133
|
|
|
156
|
-
- `SELECTION_MODE`, `generateColumns`, `getDataRelationshipContextFromKey
|
|
157
|
-
- `
|
|
134
|
+
- Local utility helpers: `SELECTION_MODE`, `generateColumns`, `getDataRelationshipContextFromKey`.
|
|
135
|
+
- The project's component registry, resolving `SingleReferenceReadOnly` — for display-only non-SemanticLink.
|
|
158
136
|
- `PCore.getCaseUtils()`, `PCore.getAnnotationUtils()`, `PCore.getContainerUtils()` — for editable-in-review updates.
|
|
159
|
-
-
|
|
160
|
-
- No `handleEvent` — selection handling is done by the child component via `onRecordChange`.
|
|
137
|
+
- No event-commit utility — selection handling is done by the child component via `onRecordChange`.
|
|
161
138
|
|
|
162
139
|
## Design System Mapping
|
|
163
140
|
|
|
164
141
|
**UI control type:** Composite wrapper — renders Dropdown, AutoComplete, SemanticLink, or SingleReferenceReadonly. No dedicated UI control.
|
|
165
142
|
|
|
166
|
-
|
|
143
|
+
When implementing in a specific design system, map the following:
|
|
167
144
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
| `displayMode='DISPLAY_ONLY'` (non-editable-in-review) | `SingleReferenceReadonly` component |
|
|
145
|
+
- **Editable Dropdown/AutoComplete** → child created via `getPConnect().createComponent()` with datasource metadata
|
|
146
|
+
- **SemanticLink** → child created via `createComponent` with case reference config
|
|
147
|
+
- **Display-only** → render `SingleReferenceReadonly` from the project's component registry
|
|
148
|
+
- **Editable-in-review** → allow editing with direct case update via `PCore.getCaseUtils()`
|
|
149
|
+
- **Grid wrapper** → use a simple container to hold the `recreatedFirstChild`
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Skill: Percentage
|
|
2
|
+
|
|
3
|
+
Percentage numeric input with a `%` suffix and locale-aware decimal/thousands separators.
|
|
4
|
+
|
|
5
|
+
> **Prerequisite skill:** [`field-components.md`](../field-components.md) — covers architecture, input contract, display modes, event handling, and registration patterns common to ALL field components.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Component Purpose
|
|
10
|
+
|
|
11
|
+
Renders a numeric input for percentage values. Always appends a `%` suffix in the input. Supports configurable decimal precision and optional thousands separator. Shows a formatted percentage string in display modes.
|
|
12
|
+
|
|
13
|
+
## Pega Metadata
|
|
14
|
+
|
|
15
|
+
- **Pega Name:** `Percentage`
|
|
16
|
+
- **Type / Subtype:** `Field` / `Decimal-Percentage`
|
|
17
|
+
- **Registration key:** `Percentage` (in the project's component map)
|
|
18
|
+
|
|
19
|
+
## Inputs (component-specific)
|
|
20
|
+
|
|
21
|
+
| Name | Type | Default | Description |
|
|
22
|
+
| --------------------- | ------------------- | ------- | ------------------------------------------------------------------------------------------------ |
|
|
23
|
+
| `currencyISOCode` | `string` (optional) | `'USD'` | ISO code used for locale-aware decimal/thousands separator lookup only (not for currency symbol) |
|
|
24
|
+
| `showGroupSeparators` | `string` (optional) | — | Whether to show thousands separators (passed as string, truthy check applies) |
|
|
25
|
+
| `decimalPrecision` | `number` (optional) | — | Number of decimal places |
|
|
26
|
+
|
|
27
|
+
All other inputs come from the project's field input contract (see prerequisite skill).
|
|
28
|
+
|
|
29
|
+
## Implementation Structure
|
|
30
|
+
|
|
31
|
+
Nearly identical to Currency but with a `%` suffix instead of a prefix, and no fixed decimal scale.
|
|
32
|
+
|
|
33
|
+
**Module Setup:** The component depends on the project's component registry (to resolve `FieldValueList`), the project's event-commit utility, the project's currency utility helpers (for decimal/separator lookup), and the project's formatting helpers (for display-mode value formatting). It also uses a numeric-format masking library for locale-aware input display. Define the input contract as an extension of the project's field input contract, adding optional `currencyISOCode`, `showGroupSeparators`, and `decimalPrecision` fields.
|
|
34
|
+
|
|
35
|
+
**Main Component Logic** — steps in order:
|
|
36
|
+
|
|
37
|
+
1. **Registry lookup** — resolve `FieldValueList` via the project's component registry.
|
|
38
|
+
2. **Receive inputs** — `getPConnect`, `label`, `required`, `disabled`, `value` (default `''`), `validatemessage`, `status`, `readOnly`, `currencyISOCode` (default `'USD'`), `testId`, `helperText`, `displayMode`, `hideLabel`, `placeholder`, `showGroupSeparators`, `decimalPrecision`.
|
|
39
|
+
3. **Local state** — `values` initialized from `value.toString()`.
|
|
40
|
+
4. **PConnect setup** — obtain the PConnect instance, its actions API, and the bound property name; compute `helperTextToDisplay = validatemessage || helperText`.
|
|
41
|
+
5. **Formatted value** — computed eagerly, before the display-mode check: obtain the currency formatting options via the project's currency options helper, then compute the formatted value using the project's formatting helper with the component's type name (from `pConn.getComponentName()?.toLowerCase()`) as the format key and the currency options.
|
|
42
|
+
6. **Sync from store** — a lifecycle effect watching `value` updates `values` (as a string) whenever it changes.
|
|
43
|
+
7. **Read-only flag** — build a read-only configuration, set to mark the input read-only only when `readOnly` is true.
|
|
44
|
+
8. **Display mode returns** — `DISPLAY_ONLY` and `STACKED_LARGE_VAL` both return `FieldValueList` using the formatted value, the latter with a stacked variant.
|
|
45
|
+
9. **Test ID and separators** — computed after the display-mode check: build a test-id attribute from `testId`; derive the decimal indicator and digit group separator via the project's currency utility helpers using `currencyISOCode`.
|
|
46
|
+
10. **Event handlers** — the blur handler commits via the project's event-commit utility with event type `'changeNblur'`, the property name, and `values`; the value-change handler updates `values` with the raw numeric string from the masking library's callback.
|
|
47
|
+
11. **Render** — a numeric-format input configured with: value-is-numeric-string flag, full width, current `values`, suffix `'%'`, an outlined style when editable or flat/borderless style when read-only, decimal separator set to the locale-derived decimal indicator, thousands separator set to the locale-derived group separator only when `showGroupSeparators` is truthy (otherwise empty string), decimal scale set to `decimalPrecision`, the value-change handler, the blur handler wired only when not read-only, `label`, `helperText: helperTextToDisplay`, `placeholder: placeholder ?? ''`, `required`, `disabled`, an error state when `status === 'error'`, small size, and the read-only/test-id attributes applied to the underlying input element.
|
|
48
|
+
|
|
49
|
+
## Behavioral Contract
|
|
50
|
+
|
|
51
|
+
1. **Local state:** Maintain `values` (string). Initialize from `value.toString()`.
|
|
52
|
+
2. **Sync from store:** A lifecycle effect watching `value` updates `values` (converted to string).
|
|
53
|
+
3. **Separators:** Derive the decimal separator and thousands separator from locale lookup using `currencyISOCode` (same as Currency/Decimal). Apply the thousands separator only when `showGroupSeparators` is truthy.
|
|
54
|
+
4. **Suffix:** Always append `%` suffix to the numeric input.
|
|
55
|
+
5. **Decimal scale:** Use the `decimalPrecision` input.
|
|
56
|
+
6. **No prefix:** Unlike Currency, no prefix symbol.
|
|
57
|
+
7. **On value change:** Update local `values` state with the raw numeric string.
|
|
58
|
+
8. **On blur:** Commit via the project's event-commit utility with event type `'changeNblur'`, the property name, and `values`.
|
|
59
|
+
9. **Read-only:** Set the read-only attribute on the input. Flat/borderless style. Blur handler omitted.
|
|
60
|
+
|
|
61
|
+
## Display Mode Rendering
|
|
62
|
+
|
|
63
|
+
Format the value using the project's formatting helper with the component's type name as the format key before display:
|
|
64
|
+
|
|
65
|
+
- **`DISPLAY_ONLY`:** Render `FieldValueList` with `name` set to `label` (or empty when `hideLabel` is true) and `value` set to the formatted value.
|
|
66
|
+
- **`STACKED_LARGE_VAL`:** Render `FieldValueList` the same way, with a stacked layout variant.
|
|
67
|
+
|
|
68
|
+
## Read-Only Rendering
|
|
69
|
+
|
|
70
|
+
Keep the numeric format input with the read-only attribute and `%` suffix still visible. Flat/borderless style.
|
|
71
|
+
|
|
72
|
+
## Visual Specifications
|
|
73
|
+
|
|
74
|
+
| Property | Value |
|
|
75
|
+
| ------------------- | ----------------------------------------- |
|
|
76
|
+
| Width | 100% |
|
|
77
|
+
| Size | Small |
|
|
78
|
+
| Variant editable | Outlined |
|
|
79
|
+
| Variant read-only | Flat/borderless |
|
|
80
|
+
| Suffix | `%` (always shown after the value) |
|
|
81
|
+
| Thousands separator | Only when `showGroupSeparators` is truthy |
|
|
82
|
+
| Decimal scale | `decimalPrecision` |
|
|
83
|
+
| Placeholder | From the `placeholder` input |
|
|
84
|
+
| Error state | Red border + red helper text |
|
|
85
|
+
|
|
86
|
+
**CSS-only notes:** Achieve the `%` suffix by wrapping the input in a relative container and absolutely positioning a `%` label at the right side, or using an input with a `::after` pseudo-element technique.
|
|
87
|
+
|
|
88
|
+
## Edge Cases & Special Logic
|
|
89
|
+
|
|
90
|
+
- `showGroupSeparators` is typed as `string` (not `boolean`) in the reference implementation — apply truthy check.
|
|
91
|
+
- `currencyISOCode` is only used for separator lookup (decimal/thousands), NOT for a currency symbol.
|
|
92
|
+
- The stored value is always a raw numeric string (e.g., `'45.5'`), not `'45.5%'`.
|
|
93
|
+
|
|
94
|
+
## Dependencies
|
|
95
|
+
|
|
96
|
+
- A numeric formatting library — handles locale-aware separators, suffix, and decimal scale.
|
|
97
|
+
- The project's currency utility helpers — for decimal indicator and digit group separator lookup.
|
|
98
|
+
- The project's currency options helper — for formatting options.
|
|
99
|
+
- The project's formatting helpers — specifically the named `format` export (not a method on the default export). Use it as a standalone function, not as a property of the default-exported object.
|
|
100
|
+
- The project's event-commit utility.
|
|
101
|
+
- The project's component registry, resolving `FieldValueList` — for display modes.
|
|
102
|
+
|
|
103
|
+
## Design System Mapping
|
|
104
|
+
|
|
105
|
+
**UI control type:** Percentage numeric input with `%` suffix.
|
|
106
|
+
|
|
107
|
+
When implementing in a specific design system, map the following:
|
|
108
|
+
|
|
109
|
+
- **Numeric format input** → use a numeric masking library compatible with the project's framework, or implement custom input masking
|
|
110
|
+
- **`%` suffix** → use the DS's input suffix/adornment slot, or absolutely position a `%` label
|
|
111
|
+
- **Decimal/thousands separators** → derive from the currency utility helpers based on the ISO code
|
|
112
|
+
- **Read-only** → flat/borderless style with read-only attribute, suffix still visible
|
|
113
|
+
- **Error state** → the DS's error/danger visual state
|