@pega/sdk 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +183 -183
- package/README.md +6 -6
- package/SECURITY.md +2 -1
- package/dist/index.js +299 -56
- package/package.json +7 -6
- package/templates/angular-sdk-reference/package.json +15 -15
- package/templates/angular-sdk-reference/tsconfig.json +2 -2
- package/templates/react-native-sdk-reference/App.tsx +2 -4
- package/templates/react-native-sdk-reference/expo-env.d.ts +3 -0
- package/templates/react-native-sdk-reference/package.json +6 -6
- package/templates/react-native-sdk-reference/tsconfig.json +2 -1
- package/templates/react-sdk-reference/.ai-common/agents/implementation-expert.md +132 -0
- package/templates/react-sdk-reference/{.github/copilot-instructions.md → .ai-common/global/ai-agent-instructions.md} +7 -7
- package/templates/react-sdk-reference/{.github/instructions/component-map.instructions.md → .ai-common/instructions/component-map.md} +9 -2
- package/templates/react-sdk-reference/{.github/instructions/dse-component.instructions.md → .ai-common/instructions/dse-component.md} +1 -1
- package/templates/react-sdk-reference/{.cursor/rules/field-component.mdrules → .ai-common/instructions/field-component.md} +6 -2
- package/templates/react-sdk-reference/{.github/instructions/template-component.instructions.md → .ai-common/instructions/template-component.md} +3 -2
- package/templates/react-sdk-reference/{.github/instructions/widget-component.instructions.md → .ai-common/instructions/widget-component.md} +2 -1
- package/templates/react-sdk-reference/.ai-common/prompts/add-component.md +219 -0
- package/templates/react-sdk-reference/.ai-common/prompts/component-manifest.json +199 -0
- package/templates/react-sdk-reference/.ai-common/prompts/generate-all-components.md +528 -0
- package/templates/react-sdk-reference/.ai-common/prompts/generate-dse-components.md +216 -0
- package/templates/react-sdk-reference/.ai-common/prompts/generate-field-components.md +239 -0
- package/templates/react-sdk-reference/.ai-common/prompts/generate-template-components.md +283 -0
- package/templates/react-sdk-reference/.ai-common/prompts/generate-widget-components.md +222 -0
- package/templates/react-sdk-reference/.ai-common/prompts/identify-components.md +109 -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/.ai-common/skills/design-system-extension-skills/AlertBanner.md +187 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/Banner.md +196 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/CaseSummaryFields.md +213 -0
- package/templates/react-sdk-reference/{.cursor/rules/skills/design-system-extension-skills/DetailsFields.mdrules → .ai-common/skills/design-system-extension-skills/DetailsFields.md} +81 -33
- package/templates/react-sdk-reference/{.cursor/rules/skills/design-system-extension-skills/FieldGroup.mdrules → .ai-common/skills/design-system-extension-skills/FieldGroup.md} +82 -40
- package/templates/react-sdk-reference/{.cursor/rules/skills/design-system-extension-skills/FieldGroupList.mdrules → .ai-common/skills/design-system-extension-skills/FieldGroupList.md} +68 -28
- package/templates/react-sdk-reference/{.cursor/rules/skills/design-system-extension-skills/FieldValueList.mdrules → .ai-common/skills/design-system-extension-skills/FieldValueList.md} +75 -31
- package/templates/react-sdk-reference/{.cursor/rules/skills/design-system-extension-skills/Operator.mdrules → .ai-common/skills/design-system-extension-skills/Operator.md} +99 -31
- package/templates/react-sdk-reference/{.cursor/rules/skills/design-system-extension-skills/Pulse.mdrules → .ai-common/skills/design-system-extension-skills/Pulse.md} +37 -20
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/RichTextEditor.md +290 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/WssQuickCreate.md +168 -0
- package/templates/react-sdk-reference/{.cursor/rules/skills/design-system-extension.mdrules → .ai-common/skills/design-system-extension.md} +14 -17
- package/templates/react-sdk-reference/{.cursor/rules/skills/field-components.mdrules → .ai-common/skills/field-components.md} +27 -14
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/AutoComplete.md +298 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/CancelAlert.md +340 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Checkbox.md +358 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Currency.md +230 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Date.md +221 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/DateTime.md +213 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Decimal.md +198 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Dropdown.md +260 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Email.md +177 -0
- package/templates/react-sdk-reference/{.cursor/rules/skills/field-skills/Group.mdrules → .ai-common/skills/field-skills/Group.md} +72 -20
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Integer.md +169 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Location.md +250 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Multiselect.md +258 -0
- package/templates/react-sdk-reference/{.cursor/rules/skills/field-skills/ObjectReference.mdrules → .ai-common/skills/field-skills/ObjectReference.md} +101 -23
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Percentage.md +177 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Phone.md +210 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/RadioButtons.md +260 -0
- package/templates/react-sdk-reference/{.cursor/rules/skills/field-skills/RichText.mdrules → .ai-common/skills/field-skills/RichText.md} +108 -17
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/ScalarList.md +188 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/SelectableCard.md +286 -0
- package/templates/react-sdk-reference/{.cursor/rules/skills/field-skills/SemanticLink.mdrules → .ai-common/skills/field-skills/SemanticLink.md} +98 -32
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/TextArea.md +164 -0
- package/templates/react-sdk-reference/{.cursor/rules/skills/field-skills/TextContent.mdrules → .ai-common/skills/field-skills/TextContent.md} +66 -27
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/TextInput.md +174 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Time.md +156 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/URL.md +145 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/UserReference.md +293 -0
- package/templates/react-sdk-reference/.ai-common/skills/run-and-verify.md +70 -0
- package/templates/react-sdk-reference/{.cursor/rules/skills/template-components.mdrules → .ai-common/skills/template-components.md} +89 -64
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/AdvancedSearch.md +227 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/AppShell.md +273 -0
- package/templates/react-sdk-reference/{.cursor/rules/skills/template-skills/BannerPage.mdrules → .ai-common/skills/template-skills/BannerPage.md} +58 -21
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/CaseSummary.md +185 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/CaseView.md +399 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/CaseViewActionsMenu.md +282 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/Confirmation.md +198 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/DataReference.md +174 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/DefaultForm.md +221 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/DefaultPage.md +161 -0
- package/templates/react-sdk-reference/{.cursor/rules/skills/template-skills/Details.mdrules → .ai-common/skills/template-skills/Details.md} +78 -22
- package/templates/react-sdk-reference/{.cursor/rules/skills/template-skills/DetailsSubTabs.mdrules → .ai-common/skills/template-skills/DetailsSubTabs.md} +82 -25
- package/templates/react-sdk-reference/{.cursor/rules/skills/template-skills/DetailsThreeColumn.mdrules → .ai-common/skills/template-skills/DetailsThreeColumn.md} +31 -22
- package/templates/react-sdk-reference/{.cursor/rules/skills/template-skills/DetailsTwoColumn.mdrules → .ai-common/skills/template-skills/DetailsTwoColumn.md} +31 -22
- package/templates/react-sdk-reference/{.cursor/rules/skills/template-skills/DynamicTabs.mdrules → .ai-common/skills/template-skills/DynamicTabs.md} +82 -15
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/FieldGroupTemplate.md +231 -0
- package/templates/react-sdk-reference/{.cursor/rules/skills/template-skills/HierarchicalForm.mdrules → .ai-common/skills/template-skills/HierarchicalForm.md} +63 -20
- package/templates/react-sdk-reference/{.cursor/rules/skills/template-skills/InlineDashboard.mdrules → .ai-common/skills/template-skills/InlineDashboard.md} +58 -18
- package/templates/react-sdk-reference/{.cursor/rules/skills/template-skills/InlineDashboardPage.mdrules → .ai-common/skills/template-skills/InlineDashboardPage.md} +66 -18
- package/templates/react-sdk-reference/{.cursor/rules/skills/template-skills/ListPage.mdrules → .ai-common/skills/template-skills/ListPage.md} +27 -12
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/ListView.md +419 -0
- package/templates/react-sdk-reference/{.cursor/rules/skills/template-skills/MultiReferenceReadOnly.mdrules → .ai-common/skills/template-skills/MultiReferenceReadOnly.md} +53 -16
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/NarrowWide.md +209 -0
- package/templates/react-sdk-reference/{.cursor/rules/skills/template-skills/OneColumn.mdrules → .ai-common/skills/template-skills/OneColumn.md} +59 -25
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/PromotedFilters.md +222 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/SelfServiceCaseView.md +198 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/SimpleTable.md +190 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/SingleReferenceReadOnly.md +160 -0
- package/templates/react-sdk-reference/{.cursor/rules/skills/template-skills/SubTabs.mdrules → .ai-common/skills/template-skills/SubTabs.md} +61 -16
- package/templates/react-sdk-reference/{.cursor/rules/skills/template-skills/TwoColumn.mdrules → .ai-common/skills/template-skills/TwoColumn.md} +83 -37
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/WideNarrow.md +48 -46
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/WssNavBar.md +210 -0
- package/templates/react-sdk-reference/{.cursor/rules/skills/widget-components.mdrules → .ai-common/skills/widget-components.md} +12 -28
- package/templates/react-sdk-reference/.ai-common/skills/widget-skills/AppAnnouncement.md +121 -0
- package/templates/react-sdk-reference/.ai-common/skills/widget-skills/Attachment.md +209 -0
- package/templates/react-sdk-reference/{.cursor/rules/skills/widget-skills/CaseHistory.mdrules → .ai-common/skills/widget-skills/CaseHistory.md} +81 -20
- package/templates/react-sdk-reference/.ai-common/skills/widget-skills/FileUtility.md +273 -0
- package/templates/react-sdk-reference/{.cursor/rules/skills/widget-skills/Followers.mdrules → .ai-common/skills/widget-skills/Followers.md} +43 -24
- package/templates/react-sdk-reference/{.cursor/rules/skills/widget-skills/QuickCreate.mdrules → .ai-common/skills/widget-skills/QuickCreate.md} +68 -21
- package/templates/react-sdk-reference/{.cursor/rules/skills/widget-skills/SummaryItem.mdrules → .ai-common/skills/widget-skills/SummaryItem.md} +92 -29
- package/templates/react-sdk-reference/.ai-common/skills/widget-skills/ToDo.md +492 -0
- package/templates/react-sdk-reference/index.html +1 -4
- package/templates/react-sdk-reference/package.json +15 -15
- package/templates/react-sdk-reference/package.minimal.json +29 -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/AppSelector.tsx +6 -6
- package/templates/react-sdk-reference/src/FallbackComponent.tsx +2 -6
- package/templates/react-sdk-reference/src/MashupApp.styles.ts +269 -41
- package/templates/react-sdk-reference/src/MashupApp.tsx +194 -104
- package/templates/react-sdk-reference/src/PortalApp.tsx +15 -50
- package/templates/react-sdk-reference/src/components/component-map.ts +2 -7
- package/templates/react-sdk-reference/src/components/designSystemExtension/AlertBanner/AlertBanner.tsx +7 -28
- package/templates/react-sdk-reference/src/components/designSystemExtension/Banner/Banner.tsx +12 -7
- package/templates/react-sdk-reference/src/components/designSystemExtension/CaseSummaryFields/CaseSummaryFields.tsx +35 -33
- package/templates/react-sdk-reference/src/components/designSystemExtension/DetailsFields/DetailsFields.tsx +6 -27
- package/templates/react-sdk-reference/src/components/designSystemExtension/FieldGroup/FieldGroup.tsx +15 -11
- package/templates/react-sdk-reference/src/components/designSystemExtension/FieldGroupList/FieldGroupList.tsx +7 -7
- package/templates/react-sdk-reference/src/components/designSystemExtension/FieldValueList/FieldValueList.tsx +18 -12
- package/templates/react-sdk-reference/src/components/designSystemExtension/Operator/Operator.tsx +27 -25
- package/templates/react-sdk-reference/src/components/designSystemExtension/Pulse/Pulse.tsx +4 -4
- package/templates/react-sdk-reference/src/components/designSystemExtension/RichTextEditor/RichTextEditor.tsx +8 -40
- package/templates/react-sdk-reference/src/components/designSystemExtension/WssQuickCreate/WssQuickCreate.tsx +9 -9
- package/templates/react-sdk-reference/src/components/field/AutoComplete/AutoComplete.tsx +26 -20
- package/templates/react-sdk-reference/src/components/field/CancelAlert/CancelAlert.tsx +35 -17
- package/templates/react-sdk-reference/src/components/field/Checkbox/Checkbox.tsx +27 -25
- package/templates/react-sdk-reference/src/components/field/Currency/Currency.tsx +10 -6
- package/templates/react-sdk-reference/src/components/field/Currency/currency-utils.ts +1 -1
- package/templates/react-sdk-reference/src/components/field/Date/Date.tsx +20 -7
- package/templates/react-sdk-reference/src/components/field/DateTime/DateTime.tsx +23 -8
- package/templates/react-sdk-reference/src/components/field/Decimal/Decimal.tsx +5 -5
- package/templates/react-sdk-reference/src/components/field/Dropdown/Dropdown.tsx +45 -25
- package/templates/react-sdk-reference/src/components/field/Email/Email.tsx +8 -8
- package/templates/react-sdk-reference/src/components/field/Group/Group.tsx +1 -1
- package/templates/react-sdk-reference/src/components/field/Integer/Integer.tsx +5 -5
- package/templates/react-sdk-reference/src/components/field/Location/Location.tsx +21 -16
- package/templates/react-sdk-reference/src/components/field/Multiselect/Multiselect.tsx +42 -27
- package/templates/react-sdk-reference/src/components/field/Multiselect/utils.ts +43 -29
- package/templates/react-sdk-reference/src/components/field/ObjectReference/ObjectReference.tsx +53 -30
- package/templates/react-sdk-reference/src/components/field/ObjectReference/utils.ts +12 -11
- package/templates/react-sdk-reference/src/components/field/Percentage/Percentage.tsx +6 -6
- package/templates/react-sdk-reference/src/components/field/Phone/Phone.tsx +12 -12
- package/templates/react-sdk-reference/src/components/field/RadioButtons/RadioButtons.tsx +38 -16
- package/templates/react-sdk-reference/src/components/field/RichText/RichText.tsx +17 -4
- package/templates/react-sdk-reference/src/components/field/ScalarList/ScalarList.tsx +5 -5
- package/templates/react-sdk-reference/src/components/field/SelectableCard/SelectableCard.tsx +31 -18
- package/templates/react-sdk-reference/src/components/field/SelectableCard/utils.tsx +28 -20
- package/templates/react-sdk-reference/src/components/field/SemanticLink/SemanticLink.tsx +28 -19
- package/templates/react-sdk-reference/src/components/field/SemanticLink/utils.ts +3 -1
- package/templates/react-sdk-reference/src/components/field/TextArea/TextArea.tsx +4 -4
- package/templates/react-sdk-reference/src/components/field/TextInput/TextInput.tsx +4 -4
- package/templates/react-sdk-reference/src/components/field/Time/Time.tsx +20 -7
- package/templates/react-sdk-reference/src/components/field/URL/URL.tsx +7 -7
- package/templates/react-sdk-reference/src/components/field/UserReference/UserReference.tsx +14 -14
- package/templates/react-sdk-reference/src/components/field/UserReference/UserReferenceUtils.ts +2 -2
- package/templates/react-sdk-reference/src/components/helpers/case-utils.tsx +5 -5
- package/templates/react-sdk-reference/src/components/helpers/data_page.ts +3 -3
- package/templates/react-sdk-reference/src/components/helpers/date-format-utils.ts +5 -5
- package/templates/react-sdk-reference/src/components/helpers/field-group-utils.ts +2 -7
- package/templates/react-sdk-reference/src/components/helpers/formatters/Boolean.ts +9 -3
- package/templates/react-sdk-reference/src/components/helpers/formatters/Currency.ts +18 -6
- package/templates/react-sdk-reference/src/components/helpers/formatters/CurrencyMap.ts +168 -168
- package/templates/react-sdk-reference/src/components/helpers/formatters/Date.ts +5 -5
- package/templates/react-sdk-reference/src/components/helpers/formatters/index.ts +8 -5
- package/templates/react-sdk-reference/src/components/helpers/instructions-utils.ts +2 -2
- package/templates/react-sdk-reference/src/components/helpers/simpleTableHelpers.ts +54 -30
- package/templates/react-sdk-reference/src/components/helpers/state-utils.tsx +5 -2
- package/templates/react-sdk-reference/src/components/helpers/template-utils.ts +5 -4
- package/templates/react-sdk-reference/src/components/helpers/utils.ts +3 -3
- package/templates/react-sdk-reference/src/components/helpers/versionHelpers.ts +3 -1
- package/templates/react-sdk-reference/src/components/index.ts +1 -4
- package/templates/react-sdk-reference/src/components/template/AdvancedSearch/AdvancedSearch.tsx +18 -10
- package/templates/react-sdk-reference/src/components/template/AdvancedSearch/SearchGroup/persistUtils.ts +3 -3
- package/templates/react-sdk-reference/src/components/template/AdvancedSearch/SearchGroups/SearchGroups.tsx +26 -90
- package/templates/react-sdk-reference/src/components/template/AdvancedSearch/SearchGroups/hooks.ts +8 -5
- package/templates/react-sdk-reference/src/components/template/AdvancedSearch/SearchGroups/utils.ts +8 -4
- package/templates/react-sdk-reference/src/components/template/AdvancedSearch/TemplateContext.ts +1 -1
- package/templates/react-sdk-reference/src/components/template/AppShell/AppShell.tsx +28 -19
- package/templates/react-sdk-reference/src/components/template/BannerPage/BannerPage.tsx +2 -2
- package/templates/react-sdk-reference/src/components/template/CaseSummary/CaseSummary.tsx +5 -5
- package/templates/react-sdk-reference/src/components/template/CaseView/CaseView.tsx +35 -16
- package/templates/react-sdk-reference/src/components/template/CaseViewActionsMenu/CaseViewActionsMenu.tsx +10 -10
- package/templates/react-sdk-reference/src/components/template/Confirmation/Confirmation.tsx +12 -26
- package/templates/react-sdk-reference/src/components/template/DataReference/DataReference.tsx +41 -124
- package/templates/react-sdk-reference/src/components/template/DataReference/DataReferenceAdvancedSearchContext.ts +2 -2
- package/templates/react-sdk-reference/src/components/template/DataReference/SearchForm.tsx +18 -78
- package/templates/react-sdk-reference/src/components/template/DataReference/utils.ts +18 -12
- package/templates/react-sdk-reference/src/components/template/DefaultForm/DefaultForm.tsx +4 -12
- package/templates/react-sdk-reference/src/components/template/DefaultForm/utils/index.ts +3 -3
- package/templates/react-sdk-reference/src/components/template/DefaultPage/DefaultPage.tsx +3 -3
- package/templates/react-sdk-reference/src/components/template/Details/Details/Details.tsx +6 -8
- package/templates/react-sdk-reference/src/components/template/Details/DetailsThreeColumn/DetailsThreeColumn.tsx +7 -14
- package/templates/react-sdk-reference/src/components/template/Details/DetailsTwoColumn/DetailsTwoColumn.tsx +7 -14
- package/templates/react-sdk-reference/src/components/template/Details/DynamicTabs/DynamicTabs.tsx +16 -8
- package/templates/react-sdk-reference/src/components/template/FieldGroupTemplate/FieldGroupTemplate.tsx +7 -4
- package/templates/react-sdk-reference/src/components/template/HierarchicalForm/HierarchicalForm.tsx +20 -5
- package/templates/react-sdk-reference/src/components/template/HierarchicalForm/hooks.ts +35 -77
- package/templates/react-sdk-reference/src/components/template/InlineDashboard/InlineDashboard.tsx +10 -10
- package/templates/react-sdk-reference/src/components/template/ListView/DefaultViewMeta.ts +31 -31
- package/templates/react-sdk-reference/src/components/template/ListView/ListView.tsx +173 -133
- package/templates/react-sdk-reference/src/components/template/ListView/hooks.ts +17 -10
- package/templates/react-sdk-reference/src/components/template/ListView/utils.ts +64 -51
- package/templates/react-sdk-reference/src/components/template/MultiReferenceReadOnly/MultiReferenceReadOnly.tsx +6 -6
- package/templates/react-sdk-reference/src/components/template/NarrowWide/NarrowWide/NarrowWide.tsx +6 -6
- package/templates/react-sdk-reference/src/components/template/NarrowWide/NarrowWideDetails/NarrowWideDetails.tsx +8 -18
- package/templates/react-sdk-reference/src/components/template/NarrowWide/NarrowWideForm/NarrowWideForm.tsx +3 -3
- package/templates/react-sdk-reference/src/components/template/NarrowWide/NarrowWidePage/NarrowWidePage.tsx +7 -1
- package/templates/react-sdk-reference/src/components/template/OneColumn/OneColumn/OneColumn.tsx +3 -3
- package/templates/react-sdk-reference/src/components/template/OneColumn/OneColumnTab/OneColumnTab.tsx +1 -1
- package/templates/react-sdk-reference/src/components/template/PromotedFilters/PromotedFilters.tsx +13 -40
- package/templates/react-sdk-reference/src/components/template/SelfServiceCaseView/SelfServiceCaseView.tsx +19 -16
- package/templates/react-sdk-reference/src/components/template/SimpleTable/SimpleTable/SimpleTable.tsx +8 -7
- package/templates/react-sdk-reference/src/components/template/SimpleTable/SimpleTableManual/SimpleTableManual.tsx +84 -203
- package/templates/react-sdk-reference/src/components/template/SimpleTable/SimpleTableSelect/SimpleTableSelect.tsx +15 -5
- package/templates/react-sdk-reference/src/components/template/SimpleTable/SimpleTableSelectReadonly/SimpleTableSelectReadonly.tsx +15 -29
- package/templates/react-sdk-reference/src/components/template/SingleReferenceReadOnly/SingleReferenceReadOnly.tsx +7 -7
- package/templates/react-sdk-reference/src/components/template/SubTabs/SubTabs.tsx +1 -1
- package/templates/react-sdk-reference/src/components/template/SubTabs/tabUtils.ts +13 -11
- package/templates/react-sdk-reference/src/components/template/TwoColumn/TwoColumn/TwoColumn.tsx +3 -3
- package/templates/react-sdk-reference/src/components/template/TwoColumn/TwoColumnTab/TwoColumnTab.tsx +3 -3
- package/templates/react-sdk-reference/src/components/template/WideNarrow/WideNarrow/WideNarrow.tsx +6 -6
- package/templates/react-sdk-reference/src/components/template/WideNarrow/WideNarrowDetails/WideNarrowDetails.tsx +13 -24
- package/templates/react-sdk-reference/src/components/template/WideNarrow/WideNarrowForm/WideNarrowForm.tsx +3 -3
- package/templates/react-sdk-reference/src/components/template/WideNarrow/WideNarrowPage/WideNarrowPage.tsx +7 -1
- package/templates/react-sdk-reference/src/components/template/WssNavBar/WssNavBar.tsx +25 -25
- package/templates/react-sdk-reference/src/components/template/utils.tsx +6 -6
- package/templates/react-sdk-reference/src/components/widget/AppAnnouncement/AppAnnouncement.tsx +9 -9
- package/templates/react-sdk-reference/src/components/widget/Attachment/Attachment.tsx +125 -79
- package/templates/react-sdk-reference/src/components/widget/Attachment/AttachmentUtils.ts +58 -33
- package/templates/react-sdk-reference/src/components/widget/CaseHistory/CaseHistory.tsx +14 -12
- package/templates/react-sdk-reference/src/components/widget/FileUtility/ActionButtonsForFileUtil/ActionButtonsForFileUtil.tsx +19 -7
- package/templates/react-sdk-reference/src/components/widget/FileUtility/FileUtility/FileUtility.tsx +137 -107
- package/templates/react-sdk-reference/src/components/widget/Followers/Followers.tsx +4 -4
- package/templates/react-sdk-reference/src/components/widget/QuickCreate/QuickCreate.tsx +15 -11
- package/templates/react-sdk-reference/src/components/widget/SummaryItem/SummaryItem.tsx +25 -18
- package/templates/react-sdk-reference/src/components/widget/SummaryList/SummaryList.tsx +7 -2
- package/templates/react-sdk-reference/src/components/widget/ToDo/ToDo.tsx +30 -116
- package/templates/react-sdk-reference/src/main.tsx +1 -1
- package/templates/react-sdk-reference/tsconfig.json +2 -1
- package/templates/react-sdk-reference/vite.config.ts +51 -26
- package/templates/wc-sdk-reference/package.json +3 -3
- package/templates/wc-sdk-reference/src/index.ts +10 -10
- package/templates/wc-sdk-reference/tsconfig.json +1 -0
- 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 -71
- package/templates/react-sdk-reference/.claude/instructions/template-component.md +0 -92
- package/templates/react-sdk-reference/.claude/instructions/widget-component.md +0 -87
- package/templates/react-sdk-reference/.claude/prompts/add-component.md +0 -144
- package/templates/react-sdk-reference/.claude/prompts/component-manifest.json +0 -111
- package/templates/react-sdk-reference/.claude/prompts/generate-all-components.md +0 -149
- package/templates/react-sdk-reference/.claude/prompts/generate-dse-components.md +0 -126
- package/templates/react-sdk-reference/.claude/prompts/generate-field-components.md +0 -139
- package/templates/react-sdk-reference/.claude/prompts/generate-template-components.md +0 -151
- package/templates/react-sdk-reference/.claude/prompts/generate-widget-components.md +0 -124
- package/templates/react-sdk-reference/.claude/prompts/identify-components.md +0 -105
- 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 -135
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/Banner.md +0 -149
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/CaseSummaryFields.md +0 -154
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/DetailsFields.md +0 -144
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/FieldGroup.md +0 -131
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/FieldGroupList.md +0 -111
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/FieldValueList.md +0 -115
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/Operator.md +0 -149
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/Pulse.md +0 -83
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/RichTextEditor.md +0 -206
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/WssQuickCreate.md +0 -135
- package/templates/react-sdk-reference/.claude/skills/design-system-extension.md +0 -289
- package/templates/react-sdk-reference/.claude/skills/field-components.md +0 -294
- package/templates/react-sdk-reference/.claude/skills/field-skills/AutoComplete.md +0 -112
- package/templates/react-sdk-reference/.claude/skills/field-skills/CancelAlert.md +0 -203
- package/templates/react-sdk-reference/.claude/skills/field-skills/Checkbox.md +0 -158
- package/templates/react-sdk-reference/.claude/skills/field-skills/Currency.md +0 -106
- package/templates/react-sdk-reference/.claude/skills/field-skills/Date.md +0 -99
- package/templates/react-sdk-reference/.claude/skills/field-skills/DateTime.md +0 -103
- package/templates/react-sdk-reference/.claude/skills/field-skills/Decimal.md +0 -98
- package/templates/react-sdk-reference/.claude/skills/field-skills/Dropdown.md +0 -114
- package/templates/react-sdk-reference/.claude/skills/field-skills/Email.md +0 -107
- package/templates/react-sdk-reference/.claude/skills/field-skills/Group.md +0 -90
- package/templates/react-sdk-reference/.claude/skills/field-skills/Integer.md +0 -87
- package/templates/react-sdk-reference/.claude/skills/field-skills/Location.md +0 -136
- package/templates/react-sdk-reference/.claude/skills/field-skills/Multiselect.md +0 -164
- package/templates/react-sdk-reference/.claude/skills/field-skills/ObjectReference.md +0 -164
- package/templates/react-sdk-reference/.claude/skills/field-skills/Percentage.md +0 -92
- package/templates/react-sdk-reference/.claude/skills/field-skills/Phone.md +0 -110
- package/templates/react-sdk-reference/.claude/skills/field-skills/RadioButtons.md +0 -146
- package/templates/react-sdk-reference/.claude/skills/field-skills/RichText.md +0 -138
- package/templates/react-sdk-reference/.claude/skills/field-skills/ScalarList.md +0 -124
- package/templates/react-sdk-reference/.claude/skills/field-skills/SelectableCard.md +0 -216
- package/templates/react-sdk-reference/.claude/skills/field-skills/SemanticLink.md +0 -148
- package/templates/react-sdk-reference/.claude/skills/field-skills/TextArea.md +0 -96
- package/templates/react-sdk-reference/.claude/skills/field-skills/TextContent.md +0 -101
- package/templates/react-sdk-reference/.claude/skills/field-skills/TextInput.md +0 -104
- package/templates/react-sdk-reference/.claude/skills/field-skills/Time.md +0 -88
- package/templates/react-sdk-reference/.claude/skills/field-skills/URL.md +0 -85
- package/templates/react-sdk-reference/.claude/skills/field-skills/UserReference.md +0 -180
- package/templates/react-sdk-reference/.claude/skills/run-and-verify.md +0 -68
- package/templates/react-sdk-reference/.claude/skills/template-components.md +0 -322
- package/templates/react-sdk-reference/.claude/skills/template-skills/AdvancedSearch.md +0 -144
- package/templates/react-sdk-reference/.claude/skills/template-skills/AppShell.md +0 -122
- package/templates/react-sdk-reference/.claude/skills/template-skills/BannerPage.md +0 -83
- package/templates/react-sdk-reference/.claude/skills/template-skills/CaseSummary.md +0 -100
- package/templates/react-sdk-reference/.claude/skills/template-skills/CaseView.md +0 -131
- package/templates/react-sdk-reference/.claude/skills/template-skills/CaseViewActionsMenu.md +0 -126
- package/templates/react-sdk-reference/.claude/skills/template-skills/Confirmation.md +0 -107
- package/templates/react-sdk-reference/.claude/skills/template-skills/DataReference.md +0 -120
- package/templates/react-sdk-reference/.claude/skills/template-skills/DefaultForm.md +0 -102
- package/templates/react-sdk-reference/.claude/skills/template-skills/DefaultPage.md +0 -110
- package/templates/react-sdk-reference/.claude/skills/template-skills/Details.md +0 -88
- package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsSubTabs.md +0 -95
- package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsThreeColumn.md +0 -78
- package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsTwoColumn.md +0 -78
- package/templates/react-sdk-reference/.claude/skills/template-skills/DynamicTabs.md +0 -101
- package/templates/react-sdk-reference/.claude/skills/template-skills/FieldGroupTemplate.md +0 -109
- package/templates/react-sdk-reference/.claude/skills/template-skills/HierarchicalForm.md +0 -113
- package/templates/react-sdk-reference/.claude/skills/template-skills/InlineDashboard.md +0 -104
- package/templates/react-sdk-reference/.claude/skills/template-skills/InlineDashboardPage.md +0 -85
- package/templates/react-sdk-reference/.claude/skills/template-skills/ListPage.md +0 -68
- package/templates/react-sdk-reference/.claude/skills/template-skills/ListView.md +0 -139
- package/templates/react-sdk-reference/.claude/skills/template-skills/MultiReferenceReadOnly.md +0 -80
- package/templates/react-sdk-reference/.claude/skills/template-skills/NarrowWide.md +0 -141
- package/templates/react-sdk-reference/.claude/skills/template-skills/OneColumn.md +0 -109
- package/templates/react-sdk-reference/.claude/skills/template-skills/PromotedFilters.md +0 -124
- package/templates/react-sdk-reference/.claude/skills/template-skills/SelfServiceCaseView.md +0 -135
- package/templates/react-sdk-reference/.claude/skills/template-skills/SimpleTable.md +0 -127
- package/templates/react-sdk-reference/.claude/skills/template-skills/SingleReferenceReadOnly.md +0 -103
- package/templates/react-sdk-reference/.claude/skills/template-skills/SubTabs.md +0 -79
- package/templates/react-sdk-reference/.claude/skills/template-skills/TwoColumn.md +0 -131
- package/templates/react-sdk-reference/.claude/skills/template-skills/WssNavBar.md +0 -135
- package/templates/react-sdk-reference/.claude/skills/widget-components.md +0 -271
- package/templates/react-sdk-reference/.claude/skills/widget-skills/AppAnnouncement.md +0 -82
- package/templates/react-sdk-reference/.claude/skills/widget-skills/Attachment.md +0 -146
- package/templates/react-sdk-reference/.claude/skills/widget-skills/CaseHistory.md +0 -107
- package/templates/react-sdk-reference/.claude/skills/widget-skills/FileUtility.md +0 -200
- package/templates/react-sdk-reference/.claude/skills/widget-skills/Followers.md +0 -99
- package/templates/react-sdk-reference/.claude/skills/widget-skills/QuickCreate.md +0 -114
- package/templates/react-sdk-reference/.claude/skills/widget-skills/SummaryItem.md +0 -167
- package/templates/react-sdk-reference/.claude/skills/widget-skills/ToDo.md +0 -190
- 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/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 -111
- 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/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/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/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/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/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/TextArea.mdrules +0 -101
- 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-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/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/FieldGroupTemplate.mdrules +0 -114
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/ListView.mdrules +0 -144
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/NarrowWide.mdrules +0 -146
- 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/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-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/FileUtility.mdrules +0 -205
- 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/instructions/field-component.instructions.md +0 -73
- package/templates/react-sdk-reference/.github/prompts/add-component.prompt.md +0 -149
- package/templates/react-sdk-reference/.github/prompts/component-manifest.json +0 -111
- package/templates/react-sdk-reference/.github/prompts/generate-all-components.prompt.md +0 -154
- package/templates/react-sdk-reference/.github/prompts/generate-dse-components.prompt.md +0 -131
- package/templates/react-sdk-reference/.github/prompts/generate-field-components.prompt.md +0 -144
- package/templates/react-sdk-reference/.github/prompts/generate-template-components.prompt.md +0 -156
- package/templates/react-sdk-reference/.github/prompts/generate-widget-components.prompt.md +0 -129
- 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/AlertBanner.md +0 -135
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/Banner.md +0 -149
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/CaseSummaryFields.md +0 -154
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/DetailsFields.md +0 -144
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/FieldGroup.md +0 -131
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/FieldGroupList.md +0 -111
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/FieldValueList.md +0 -115
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/Operator.md +0 -149
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/Pulse.md +0 -83
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/RichTextEditor.md +0 -206
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/WssQuickCreate.md +0 -135
- package/templates/react-sdk-reference/.github/skills/design-system-extension.md +0 -289
- package/templates/react-sdk-reference/.github/skills/field-components.md +0 -294
- package/templates/react-sdk-reference/.github/skills/field-skills/AutoComplete.md +0 -112
- package/templates/react-sdk-reference/.github/skills/field-skills/CancelAlert.md +0 -203
- package/templates/react-sdk-reference/.github/skills/field-skills/Checkbox.md +0 -158
- package/templates/react-sdk-reference/.github/skills/field-skills/Currency.md +0 -106
- package/templates/react-sdk-reference/.github/skills/field-skills/Date.md +0 -99
- package/templates/react-sdk-reference/.github/skills/field-skills/DateTime.md +0 -103
- package/templates/react-sdk-reference/.github/skills/field-skills/Decimal.md +0 -98
- package/templates/react-sdk-reference/.github/skills/field-skills/Dropdown.md +0 -114
- package/templates/react-sdk-reference/.github/skills/field-skills/Email.md +0 -107
- package/templates/react-sdk-reference/.github/skills/field-skills/Group.md +0 -90
- package/templates/react-sdk-reference/.github/skills/field-skills/Integer.md +0 -87
- package/templates/react-sdk-reference/.github/skills/field-skills/Location.md +0 -136
- package/templates/react-sdk-reference/.github/skills/field-skills/Multiselect.md +0 -164
- package/templates/react-sdk-reference/.github/skills/field-skills/ObjectReference.md +0 -164
- package/templates/react-sdk-reference/.github/skills/field-skills/Percentage.md +0 -92
- package/templates/react-sdk-reference/.github/skills/field-skills/Phone.md +0 -110
- package/templates/react-sdk-reference/.github/skills/field-skills/RadioButtons.md +0 -146
- package/templates/react-sdk-reference/.github/skills/field-skills/RichText.md +0 -138
- package/templates/react-sdk-reference/.github/skills/field-skills/ScalarList.md +0 -124
- package/templates/react-sdk-reference/.github/skills/field-skills/SelectableCard.md +0 -216
- package/templates/react-sdk-reference/.github/skills/field-skills/SemanticLink.md +0 -148
- package/templates/react-sdk-reference/.github/skills/field-skills/TextArea.md +0 -96
- package/templates/react-sdk-reference/.github/skills/field-skills/TextContent.md +0 -101
- package/templates/react-sdk-reference/.github/skills/field-skills/TextInput.md +0 -104
- package/templates/react-sdk-reference/.github/skills/field-skills/Time.md +0 -88
- package/templates/react-sdk-reference/.github/skills/field-skills/URL.md +0 -85
- package/templates/react-sdk-reference/.github/skills/field-skills/UserReference.md +0 -180
- package/templates/react-sdk-reference/.github/skills/run-and-verify.md +0 -68
- package/templates/react-sdk-reference/.github/skills/template-components.md +0 -322
- package/templates/react-sdk-reference/.github/skills/template-skills/AdvancedSearch.md +0 -144
- package/templates/react-sdk-reference/.github/skills/template-skills/AppShell.md +0 -122
- package/templates/react-sdk-reference/.github/skills/template-skills/BannerPage.md +0 -83
- package/templates/react-sdk-reference/.github/skills/template-skills/CaseSummary.md +0 -100
- package/templates/react-sdk-reference/.github/skills/template-skills/CaseView.md +0 -131
- package/templates/react-sdk-reference/.github/skills/template-skills/CaseViewActionsMenu.md +0 -126
- package/templates/react-sdk-reference/.github/skills/template-skills/Confirmation.md +0 -107
- package/templates/react-sdk-reference/.github/skills/template-skills/DataReference.md +0 -120
- package/templates/react-sdk-reference/.github/skills/template-skills/DefaultForm.md +0 -102
- package/templates/react-sdk-reference/.github/skills/template-skills/DefaultPage.md +0 -110
- package/templates/react-sdk-reference/.github/skills/template-skills/Details.md +0 -88
- package/templates/react-sdk-reference/.github/skills/template-skills/DetailsSubTabs.md +0 -95
- package/templates/react-sdk-reference/.github/skills/template-skills/DetailsThreeColumn.md +0 -78
- package/templates/react-sdk-reference/.github/skills/template-skills/DetailsTwoColumn.md +0 -78
- package/templates/react-sdk-reference/.github/skills/template-skills/DynamicTabs.md +0 -101
- package/templates/react-sdk-reference/.github/skills/template-skills/FieldGroupTemplate.md +0 -109
- package/templates/react-sdk-reference/.github/skills/template-skills/HierarchicalForm.md +0 -113
- package/templates/react-sdk-reference/.github/skills/template-skills/InlineDashboard.md +0 -104
- package/templates/react-sdk-reference/.github/skills/template-skills/InlineDashboardPage.md +0 -85
- package/templates/react-sdk-reference/.github/skills/template-skills/ListPage.md +0 -68
- package/templates/react-sdk-reference/.github/skills/template-skills/ListView.md +0 -139
- package/templates/react-sdk-reference/.github/skills/template-skills/MultiReferenceReadOnly.md +0 -80
- package/templates/react-sdk-reference/.github/skills/template-skills/NarrowWide.md +0 -141
- package/templates/react-sdk-reference/.github/skills/template-skills/OneColumn.md +0 -109
- package/templates/react-sdk-reference/.github/skills/template-skills/PromotedFilters.md +0 -124
- package/templates/react-sdk-reference/.github/skills/template-skills/SelfServiceCaseView.md +0 -135
- package/templates/react-sdk-reference/.github/skills/template-skills/SimpleTable.md +0 -127
- package/templates/react-sdk-reference/.github/skills/template-skills/SingleReferenceReadOnly.md +0 -103
- package/templates/react-sdk-reference/.github/skills/template-skills/SubTabs.md +0 -79
- package/templates/react-sdk-reference/.github/skills/template-skills/TwoColumn.md +0 -131
- package/templates/react-sdk-reference/.github/skills/template-skills/WideNarrow.md +0 -150
- package/templates/react-sdk-reference/.github/skills/template-skills/WssNavBar.md +0 -135
- package/templates/react-sdk-reference/.github/skills/widget-components.md +0 -271
- package/templates/react-sdk-reference/.github/skills/widget-skills/AppAnnouncement.md +0 -82
- package/templates/react-sdk-reference/.github/skills/widget-skills/Attachment.md +0 -146
- package/templates/react-sdk-reference/.github/skills/widget-skills/CaseHistory.md +0 -107
- package/templates/react-sdk-reference/.github/skills/widget-skills/FileUtility.md +0 -200
- package/templates/react-sdk-reference/.github/skills/widget-skills/Followers.md +0 -99
- package/templates/react-sdk-reference/.github/skills/widget-skills/QuickCreate.md +0 -114
- package/templates/react-sdk-reference/.github/skills/widget-skills/SummaryItem.md +0 -167
- package/templates/react-sdk-reference/.github/skills/widget-skills/ToDo.md +0 -190
- package/templates/react-sdk-reference/AGENTS.md +0 -247
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# Skill: Currency
|
|
2
|
+
|
|
3
|
+
Currency input field with locale-aware symbol, decimal separator, and thousands separator. Supports ISO currency codes.
|
|
4
|
+
|
|
5
|
+
> **Prerequisite skill:** [`field-components.md`](../field-components.md) — covers architecture, props interface, display modes, event handling, and registration patterns common to ALL field components.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Component Purpose
|
|
10
|
+
|
|
11
|
+
Renders a numeric input formatted as a currency value. Displays the correct currency symbol, decimal separator, and thousands separator for the given ISO currency code. Uses a numeric formatting library to handle locale-aware input. Shows formatted read-only values in display modes.
|
|
12
|
+
|
|
13
|
+
## Pega Metadata
|
|
14
|
+
|
|
15
|
+
- **Pega Name:** `Currency`
|
|
16
|
+
- **Type / Subtype:** `Field` / `Decimal-Currency`
|
|
17
|
+
- **Registration key:** `Currency` (in `component-map.ts`)
|
|
18
|
+
|
|
19
|
+
## Props (component-specific)
|
|
20
|
+
|
|
21
|
+
| Prop | Type | Default | Description |
|
|
22
|
+
| ----------------- | ------------------- | ------- | ------------------------------------------------------------------------------------------------------ |
|
|
23
|
+
| `currencyISOCode` | `string` (optional) | `'USD'` | ISO 4217 currency code (e.g., `'USD'`, `'EUR'`, `'GBP'`) |
|
|
24
|
+
| `allowDecimals` | `boolean` | — | Whether to allow decimal input. If `false`, `decimalScale=0`. If `true`, fixed 2 decimal places shown. |
|
|
25
|
+
|
|
26
|
+
All other props from `PConnFieldProps`. Import type as:
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
import type { PConnFieldProps } from '@pega/sdk-react';
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Component Skeleton
|
|
33
|
+
|
|
34
|
+
Follow this exact structure. Replace `<NumericFormatInput>` and `<TextFieldWidget>` with equivalents from your chosen design system / numeric format library.
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import { useEffect, useState } from 'react';
|
|
38
|
+
import { getComponentFromRegistry } from '@pega/sdk-react';
|
|
39
|
+
import type { PConnFieldProps } from '@pega/sdk-react';
|
|
40
|
+
import handleEvent from '../../helpers/event-utils';
|
|
41
|
+
import { format } from '../../helpers/formatters';
|
|
42
|
+
import { getCurrencyCharacters, getCurrencyOptions } from './currency-utils';
|
|
43
|
+
|
|
44
|
+
// ── Props interface ──────────────────────────────────────────
|
|
45
|
+
interface CurrencyProps extends PConnFieldProps {
|
|
46
|
+
currencyISOCode?: string;
|
|
47
|
+
allowDecimals: boolean;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// ── Component ────────────────────────────────────────────────
|
|
51
|
+
export default function Currency(props: CurrencyProps) {
|
|
52
|
+
// 1. Registry lookups
|
|
53
|
+
const FieldValueList = getComponentFromRegistry('FieldValueList');
|
|
54
|
+
|
|
55
|
+
// 2. Destructure props
|
|
56
|
+
const {
|
|
57
|
+
getPConnect, label, required, disabled, value = '',
|
|
58
|
+
validatemessage, status, readOnly, testId,
|
|
59
|
+
helperText, displayMode, hideLabel,
|
|
60
|
+
currencyISOCode = 'USD', placeholder, allowDecimals,
|
|
61
|
+
} = props;
|
|
62
|
+
|
|
63
|
+
// 3. PConnect setup
|
|
64
|
+
const pConn = getPConnect();
|
|
65
|
+
const actions = pConn.getActionsApi();
|
|
66
|
+
const propName = (pConn.getStateProps() as any).value;
|
|
67
|
+
|
|
68
|
+
// 4. Derived values
|
|
69
|
+
const helperTextToDisplay = validatemessage || helperText;
|
|
70
|
+
const testProps: any = { 'data-test-id': testId };
|
|
71
|
+
|
|
72
|
+
// 5. State
|
|
73
|
+
const [values, setValues] = useState(value.toString());
|
|
74
|
+
|
|
75
|
+
// 6. useEffect: sync from store — deps: [value]
|
|
76
|
+
useEffect(() => { setValues(value.toString()); }, [value]);
|
|
77
|
+
|
|
78
|
+
// 7. Currency symbol lookup
|
|
79
|
+
const theSymbols = getCurrencyCharacters(currencyISOCode);
|
|
80
|
+
const theCurrSym = theSymbols.theCurrencySymbol;
|
|
81
|
+
const theCurrDec = theSymbols.theDecimalIndicator;
|
|
82
|
+
const theCurrSep = theSymbols.theDigitGroupSeparator;
|
|
83
|
+
|
|
84
|
+
// 8. Formatted value for display modes (computed eagerly, before display mode check)
|
|
85
|
+
const theCurrencyOptions = getCurrencyOptions(currencyISOCode);
|
|
86
|
+
const formattedValue = format(value, pConn.getComponentName()?.toLowerCase(), theCurrencyOptions);
|
|
87
|
+
|
|
88
|
+
// 9. Read-only prop object
|
|
89
|
+
let readOnlyProp = {};
|
|
90
|
+
if (readOnly) {
|
|
91
|
+
readOnlyProp = { readOnly: true };
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// 10. Currency format config object
|
|
95
|
+
const currencyProp = {
|
|
96
|
+
prefix: theCurrSym,
|
|
97
|
+
decimalSeparator: theCurrDec,
|
|
98
|
+
thousandSeparator: theCurrSep,
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
// 11. Display mode returns
|
|
102
|
+
if (displayMode === 'DISPLAY_ONLY') {
|
|
103
|
+
return <FieldValueList name={hideLabel ? '' : label} value={formattedValue} />;
|
|
104
|
+
}
|
|
105
|
+
if (displayMode === 'STACKED_LARGE_VAL') {
|
|
106
|
+
return <FieldValueList name={hideLabel ? '' : label} value={formattedValue} variant="stacked" />;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// 12. Event handlers
|
|
110
|
+
function currOnBlur() {
|
|
111
|
+
handleEvent(actions, 'changeNblur', propName, values);
|
|
112
|
+
}
|
|
113
|
+
const handleChange = (val) => { setValues(val.value); };
|
|
114
|
+
|
|
115
|
+
// 13. Main render — numeric format input
|
|
116
|
+
// Key props to pass to your numeric format component:
|
|
117
|
+
// - valueIsNumericString: true
|
|
118
|
+
// - value: values
|
|
119
|
+
// - ...currencyProp (prefix, decimalSeparator, thousandSeparator)
|
|
120
|
+
// - decimalScale: allowDecimals !== false ? 2 : 0
|
|
121
|
+
// - fixedDecimalScale: allowDecimals
|
|
122
|
+
// - onValueChange: (val) => handleChange(val)
|
|
123
|
+
// - onBlur: !readOnly ? currOnBlur : undefined
|
|
124
|
+
// - variant: readOnly ? 'standard' : 'outlined'
|
|
125
|
+
// - label, helperText: helperTextToDisplay, placeholder: placeholder ?? ''
|
|
126
|
+
// - required, disabled, error: status === 'error'
|
|
127
|
+
// - inputProps: { ...readOnlyProp, inputProps: { ...testProps } }
|
|
128
|
+
return <NumericFormatInput ... />;
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Behavioral Contract
|
|
133
|
+
|
|
134
|
+
1. **Local state:** Maintain `values` (string). Initialize from `value.toString()`.
|
|
135
|
+
2. **Sync from store:** `useEffect` with deps **`[value]`** → `setValues(value.toString())`.
|
|
136
|
+
3. **Helper text:** `helperTextToDisplay = validatemessage || helperText`.
|
|
137
|
+
4. **Test ID prop:** Build `testProps = { 'data-test-id': testId }` — passed via `inputProps` on the inner input element.
|
|
138
|
+
5. **Currency symbols:** Derive from `getCurrencyCharacters(currencyISOCode)`:
|
|
139
|
+
- Returns `{ theCurrencySymbol, theDecimalIndicator, theDigitGroupSeparator }`.
|
|
140
|
+
- Default (USD): `$`, `.`, `,`.
|
|
141
|
+
6. **Formatted value:** Computed eagerly (before display mode check):
|
|
142
|
+
```
|
|
143
|
+
const theCurrencyOptions = getCurrencyOptions(currencyISOCode);
|
|
144
|
+
const formattedValue = format(value, pConn.getComponentName()?.toLowerCase(), theCurrencyOptions);
|
|
145
|
+
```
|
|
146
|
+
7. **Read-only prop:** `let readOnlyProp = {}; if (readOnly) readOnlyProp = { readOnly: true };`
|
|
147
|
+
8. **Currency format config:**
|
|
148
|
+
```
|
|
149
|
+
const currencyProp = {
|
|
150
|
+
prefix: theCurrSym,
|
|
151
|
+
decimalSeparator: theCurrDec,
|
|
152
|
+
thousandSeparator: theCurrSep,
|
|
153
|
+
};
|
|
154
|
+
```
|
|
155
|
+
9. **Numeric format props (merged at render):**
|
|
156
|
+
- `valueIsNumericString: true`
|
|
157
|
+
- `value: values` (local state string)
|
|
158
|
+
- `...currencyProp` (spread prefix + separators)
|
|
159
|
+
- `decimalScale: allowDecimals !== false ? 2 : 0`
|
|
160
|
+
- `fixedDecimalScale: allowDecimals`
|
|
161
|
+
- `onValueChange: (val) => setValues(val.value)`
|
|
162
|
+
- `onBlur: !readOnly ? currOnBlur : undefined`
|
|
163
|
+
- `variant: readOnly ? 'standard' : 'outlined'`
|
|
164
|
+
- Input slot/props: `{ ...readOnlyProp, inputProps: { ...testProps } }`
|
|
165
|
+
10. **On value change:** `setValues(val.value)` — raw numeric string from the format library's callback object.
|
|
166
|
+
11. **On blur:** `handleEvent(actions, 'changeNblur', propName, values)` — commits local state to store.
|
|
167
|
+
|
|
168
|
+
## Display Mode Rendering
|
|
169
|
+
|
|
170
|
+
Format the value before display using a currency formatter with `currencyISOCode`:
|
|
171
|
+
|
|
172
|
+
- **`DISPLAY_ONLY`:** `<FieldValueList name={hideLabel ? '' : label} value={formattedValue} />` where `formattedValue = format(value, 'currency', currencyOptions)`.
|
|
173
|
+
- **`STACKED_LARGE_VAL`:** `<FieldValueList name={hideLabel ? '' : label} value={formattedValue} variant='stacked' />`.
|
|
174
|
+
|
|
175
|
+
The `formattedValue` uses the locale and currency from `currencyISOCode` to produce a localized string (e.g., `$1,234.56`).
|
|
176
|
+
|
|
177
|
+
## Read-Only Rendering
|
|
178
|
+
|
|
179
|
+
Keep the numeric format input but set `readOnly: true` on the input element. Switch the visual variant to flat/borderless. The `onBlur` handler is omitted (`onBlur={!readOnly ? currOnBlur : undefined}`).
|
|
180
|
+
|
|
181
|
+
## Visual Specifications
|
|
182
|
+
|
|
183
|
+
| Property | Standard (editable) | Read-only |
|
|
184
|
+
| -------------- | ---------------------------- | --------------- |
|
|
185
|
+
| Width | 100% | 100% |
|
|
186
|
+
| Size | Small | Small |
|
|
187
|
+
| Variant | Outlined | Standard (flat) |
|
|
188
|
+
| Prefix | Currency symbol (e.g., `$`) | Currency symbol |
|
|
189
|
+
| Alignment | Left-aligned text | Left-aligned |
|
|
190
|
+
| Decimal places | 2 (when `allowDecimals`) | 2 |
|
|
191
|
+
| Error state | Red border + red helper text | — |
|
|
192
|
+
| Placeholder | From `placeholder` prop | — |
|
|
193
|
+
|
|
194
|
+
## Edge Cases & Special Logic
|
|
195
|
+
|
|
196
|
+
- **EUR uses `nl-NL` locale:** When `currencyISOCode === 'EUR'`, use NL locale for symbol/separator lookup.
|
|
197
|
+
- **Fallback:** If `currencyISOCode` lookup fails, fall back to USD (`$`, `.`, `,`).
|
|
198
|
+
- **`allowDecimals` vs `fixedDecimalScale`:** `fixedDecimalScale` is set directly to `allowDecimals` (boolean). `decimalScale` uses `allowDecimals !== false ? 2 : 0` (note: `!== false` means undefined/missing also gives 2 decimals).
|
|
199
|
+
- The input stores the raw numeric string (e.g., `'1234.56'`) in state and in the Pega store — not the formatted display string.
|
|
200
|
+
- `formattedValue` is computed eagerly (before display mode check) using `pConn.getComponentName()?.toLowerCase()` as the format type — this resolves to `'currency'`.
|
|
201
|
+
- `data-test-id` is passed via nested `slotProps.input.inputProps` (or `InputProps.inputProps` depending on design system) — not on the outer wrapper.
|
|
202
|
+
- `placeholder` defaults to `''` if undefined: `placeholder ?? ''`.
|
|
203
|
+
- Variant switches between `'outlined'` (editable) and `'standard'` (read-only) — this is design-system specific but the visual intent is: bordered input vs flat/borderless.
|
|
204
|
+
|
|
205
|
+
## Dependencies
|
|
206
|
+
|
|
207
|
+
- A numeric formatting library (e.g., `react-number-format`'s `NumericFormat`) — handles locale-aware separators, prefix, and decimal scale.
|
|
208
|
+
- `format()` from `../../helpers/formatters` — for display mode value formatting.
|
|
209
|
+
- `getCurrencyCharacters(currencyISOCode)` — returns `{ theCurrencySymbol, theDecimalIndicator, theDigitGroupSeparator }`.
|
|
210
|
+
- `getCurrencyOptions(currencyISOCode)` — returns `{ locale, style: 'currency', currency }` for the `format()` call.
|
|
211
|
+
- `handleEvent` from `../../helpers/event-utils`.
|
|
212
|
+
- `getComponentFromRegistry('FieldValueList')` for display modes.
|
|
213
|
+
|
|
214
|
+
**For CSS-only / design-system-agnostic implementations:**
|
|
215
|
+
|
|
216
|
+
- The numeric format library handles the input masking. Use any numeric format library that supports prefix, decimal separator, and thousands separator configuration.
|
|
217
|
+
- Alternatively, implement manually: on change, strip non-numeric chars, insert separators, prepend symbol.
|
|
218
|
+
|
|
219
|
+
## Design System Mapping
|
|
220
|
+
|
|
221
|
+
**UI control type:** Currency / numeric formatted input with prefix symbol.
|
|
222
|
+
|
|
223
|
+
Listed design systems are examples only.
|
|
224
|
+
|
|
225
|
+
| Design System | Recommended Component |
|
|
226
|
+
| ------------------ | --------------------------------------------------------------------------- |
|
|
227
|
+
| Default (CSS only) | `<input type="text">` + custom numeric formatting logic |
|
|
228
|
+
| MUI | `NumericFormat` (from `react-number-format`) with `customInput={TextField}` |
|
|
229
|
+
| Ant Design | `<InputNumber prefix="$" precision={2} />` |
|
|
230
|
+
| Chakra UI | `<NumberInput>` + custom formatting |
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
# Skill: Date
|
|
2
|
+
|
|
3
|
+
Date picker field with locale-aware date format string, binds to a Pega case property.
|
|
4
|
+
|
|
5
|
+
> **Prerequisite skill:** [`field-components.md`](../field-components.md) — covers architecture, props interface, display modes, event handling, and registration patterns common to ALL field components.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Component Purpose
|
|
10
|
+
|
|
11
|
+
Renders a date picker input. Stores dates as `YYYY-MM-DD` strings. Displays dates according to locale-aware format (e.g., `MM/DD/YYYY` for en-US). Uses a date picker library for the calendar UI. Delegates read-only rendering to `TextInput`.
|
|
12
|
+
|
|
13
|
+
## Pega Metadata
|
|
14
|
+
|
|
15
|
+
- **Pega Name:** `Date`
|
|
16
|
+
- **Type / Subtype:** `Field` / `Date`
|
|
17
|
+
- **Registration key:** `Date` (mapped to `DateField` import in `component-map.ts` to avoid conflicts with the JS `Date` global)
|
|
18
|
+
|
|
19
|
+
## Props (component-specific)
|
|
20
|
+
|
|
21
|
+
No props beyond `PConnFieldProps`. Import type as:
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import type { PConnFieldProps } from '@pega/sdk-react';
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
> **Important naming note:** The component file exports a function named `Date`. In `component-map.ts`, import it as `DateField` and register it as `Date: DateField`.
|
|
28
|
+
|
|
29
|
+
## Component Skeleton
|
|
30
|
+
|
|
31
|
+
Follow this exact structure. Replace `<DatePickerWidget>` with equivalents from your chosen design system.
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
import { useEffect, useState } from 'react';
|
|
35
|
+
import dayjs, { Dayjs } from 'dayjs';
|
|
36
|
+
import handleEvent from '../../helpers/event-utils';
|
|
37
|
+
import { format } from '../../helpers/formatters';
|
|
38
|
+
import { dateFormatInfoDefault, getDateFormatInfo } from '../../helpers/date-format-utils';
|
|
39
|
+
import { getComponentFromRegistry } from '@pega/sdk-react';
|
|
40
|
+
import type { PConnFieldProps } from '@pega/sdk-react';
|
|
41
|
+
|
|
42
|
+
// ── Helper function (top-level, outside component) ────────
|
|
43
|
+
// Returns date as YYYY-MM-DD string for POSTing to server
|
|
44
|
+
function getFormattedDate(date) {
|
|
45
|
+
return `${date.$y.toString()}-${(date.$M + 1).toString().padStart(2, '0')}-${date.$D.toString().padStart(2, '0')}`;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// ── Props interface ──────────────────────────────────────────
|
|
49
|
+
interface DateProps extends PConnFieldProps {}
|
|
50
|
+
|
|
51
|
+
// ── Component ────────────────────────────────────────────────
|
|
52
|
+
export default function Date(props: DateProps) {
|
|
53
|
+
// 1. Registry lookups
|
|
54
|
+
const TextInput = getComponentFromRegistry('TextInput');
|
|
55
|
+
const FieldValueList = getComponentFromRegistry('FieldValueList');
|
|
56
|
+
|
|
57
|
+
// 2. Destructure props
|
|
58
|
+
const {
|
|
59
|
+
getPConnect, label, required, disabled, value,
|
|
60
|
+
validatemessage, status, readOnly, testId,
|
|
61
|
+
helperText, displayMode, hideLabel,
|
|
62
|
+
} = props;
|
|
63
|
+
|
|
64
|
+
// 3. State — initialize from value prop (null if empty)
|
|
65
|
+
const [dateValue, setDateValue] = useState<Dayjs | null>(
|
|
66
|
+
value ? dayjs(value) : null
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
// 4. PConnect setup
|
|
70
|
+
const pConn = getPConnect();
|
|
71
|
+
const actions = pConn.getActionsApi();
|
|
72
|
+
const propName = (pConn.getStateProps() as any).value;
|
|
73
|
+
const helperTextToDisplay = validatemessage || helperText;
|
|
74
|
+
|
|
75
|
+
// 5. Date format info (mutate default with locale-specific values)
|
|
76
|
+
const dateFormatInfo = dateFormatInfoDefault;
|
|
77
|
+
const theDateFormat = getDateFormatInfo();
|
|
78
|
+
dateFormatInfo.dateFormatString = theDateFormat.dateFormatString;
|
|
79
|
+
dateFormatInfo.dateFormatStringLC = theDateFormat.dateFormatStringLC;
|
|
80
|
+
dateFormatInfo.dateFormatMask = theDateFormat.dateFormatMask;
|
|
81
|
+
|
|
82
|
+
// 6. useEffect: sync from store — deps: [value]
|
|
83
|
+
useEffect(() => { setDateValue(dayjs(value)); }, [value]);
|
|
84
|
+
|
|
85
|
+
// 7. Display mode returns
|
|
86
|
+
if (displayMode === 'DISPLAY_ONLY') {
|
|
87
|
+
const formattedDate = format(props.value, 'date', {
|
|
88
|
+
format: dateFormatInfo.dateFormatString,
|
|
89
|
+
});
|
|
90
|
+
return <FieldValueList name={hideLabel ? '' : label} value={formattedDate} />;
|
|
91
|
+
}
|
|
92
|
+
if (displayMode === 'STACKED_LARGE_VAL') {
|
|
93
|
+
const formattedDate = format(props.value, 'date', {
|
|
94
|
+
format: dateFormatInfo.dateFormatString,
|
|
95
|
+
});
|
|
96
|
+
return <FieldValueList name={hideLabel ? '' : label} value={formattedDate} variant="stacked" />;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// 8. Read-only return (BEFORE event handlers)
|
|
100
|
+
if (readOnly) {
|
|
101
|
+
return <TextInput {...props} />;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// 9. Test ID prop
|
|
105
|
+
const testProps: any = { 'data-test-id': testId };
|
|
106
|
+
|
|
107
|
+
// 10. handleChange — only commits valid dates
|
|
108
|
+
const handleChange = (date) => {
|
|
109
|
+
if (date && date.isValid()) {
|
|
110
|
+
setDateValue(date);
|
|
111
|
+
handleEvent(actions, 'changeNblur', propName, getFormattedDate(date));
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
// 11. Main render — date picker
|
|
116
|
+
// Key props:
|
|
117
|
+
// - label, disabled, value: dateValue
|
|
118
|
+
// - format: dateFormatInfo.dateFormatString
|
|
119
|
+
// - onChange: handleChange
|
|
120
|
+
// - textField slot: required, variant: 'outlined', size: 'small',
|
|
121
|
+
// placeholder: dateFormatInfo.dateFormatStringLC,
|
|
122
|
+
// error: status === 'error', helperText: helperTextToDisplay,
|
|
123
|
+
// InputProps: { ...testProps }
|
|
124
|
+
return <DatePickerWidget ... />;
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Behavioral Contract
|
|
129
|
+
|
|
130
|
+
1. **Local state:** Maintain `dateValue` as a `Dayjs | null`. Initialize: `value ? dayjs(value) : null`.
|
|
131
|
+
2. **Sync from store:** `useEffect` with deps **`[value]`** → `setDateValue(dayjs(value))`.
|
|
132
|
+
3. **Helper text:** `helperTextToDisplay = validatemessage || helperText`.
|
|
133
|
+
4. **Date format info:** Start from `dateFormatInfoDefault`, then **mutate** its properties with locale-specific values from `getDateFormatInfo()`:
|
|
134
|
+
```
|
|
135
|
+
const dateFormatInfo = dateFormatInfoDefault;
|
|
136
|
+
const theDateFormat = getDateFormatInfo();
|
|
137
|
+
dateFormatInfo.dateFormatString = theDateFormat.dateFormatString;
|
|
138
|
+
dateFormatInfo.dateFormatStringLC = theDateFormat.dateFormatStringLC;
|
|
139
|
+
dateFormatInfo.dateFormatMask = theDateFormat.dateFormatMask;
|
|
140
|
+
```
|
|
141
|
+
5. **On change (valid date selected):**
|
|
142
|
+
- Guard: `if (date && date.isValid())` — skip invalid/incomplete dates.
|
|
143
|
+
- Update state: `setDateValue(date)`.
|
|
144
|
+
- Format to `YYYY-MM-DD` using `getFormattedDate(date)` (see Helper Function below).
|
|
145
|
+
- Commit immediately: `handleEvent(actions, 'changeNblur', propName, formattedDate)`.
|
|
146
|
+
6. **Read-only:** Return early with `<TextInput {...props} />` — delegates rendering entirely.
|
|
147
|
+
7. **Placeholder:** Use `dateFormatInfo.dateFormatStringLC` (lowercase format, e.g., `'mm/dd/yyyy'`).
|
|
148
|
+
8. **Test ID:** Build `testProps = { 'data-test-id': testId }` and pass via `InputProps` on the text field slot.
|
|
149
|
+
|
|
150
|
+
## Helper Function
|
|
151
|
+
|
|
152
|
+
Top-level pure function (outside the component). Uses dayjs internal properties:
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
function getFormattedDate(date) {
|
|
156
|
+
return `${date.$y.toString()}-${(date.$M + 1).toString().padStart(2, '0')}-${date.$D.toString().padStart(2, '0')}`;
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Note:** `date.$y` = year, `date.$M` = month (0-indexed), `date.$D` = day. If using a different date library, replace with equivalent accessors.
|
|
161
|
+
|
|
162
|
+
## Display Mode Rendering
|
|
163
|
+
|
|
164
|
+
Format the value before display using `format(value, 'date', { format: dateFormatInfo.dateFormatString })`:
|
|
165
|
+
|
|
166
|
+
- **`DISPLAY_ONLY`:** `<FieldValueList name={hideLabel ? '' : label} value={formattedDate} />`.
|
|
167
|
+
- **`STACKED_LARGE_VAL`:** `<FieldValueList name={hideLabel ? '' : label} value={formattedDate} variant='stacked' />`.
|
|
168
|
+
- Both modes compute `formattedDate` from the raw `props.value` (not local state).
|
|
169
|
+
|
|
170
|
+
## Read-Only Rendering
|
|
171
|
+
|
|
172
|
+
Delegate to `TextInput`: `return <TextInput {...props} />`. The raw `YYYY-MM-DD` string is displayed as-is (or formatted by `TextInput`'s read-only rendering).
|
|
173
|
+
|
|
174
|
+
## Visual Specifications
|
|
175
|
+
|
|
176
|
+
| Property | Value |
|
|
177
|
+
| ------------------ | ----------------------------------------------- |
|
|
178
|
+
| Width | Auto (date picker natural width) |
|
|
179
|
+
| Size | Small |
|
|
180
|
+
| Variant | Outlined |
|
|
181
|
+
| Placeholder | Lowercase format string (e.g., `mm/dd/yyyy`) |
|
|
182
|
+
| Calendar popup | Opens below the input |
|
|
183
|
+
| Error state | Red border + red helper text |
|
|
184
|
+
| Required indicator | `*` on label |
|
|
185
|
+
| Format display | Locale-aware (e.g., `MM/DD/YYYY`, `DD/MM/YYYY`) |
|
|
186
|
+
|
|
187
|
+
**CSS-only notes:** For a CSS-only date input, use `<input type="date">` — note that the display format is browser-controlled. A custom date picker component is needed for locale-aware format strings.
|
|
188
|
+
|
|
189
|
+
## Edge Cases & Special Logic
|
|
190
|
+
|
|
191
|
+
- Commit on **change** (when a valid date is selected), not on blur — this differs from text inputs.
|
|
192
|
+
- Always store value as `YYYY-MM-DD` regardless of display format.
|
|
193
|
+
- Invalid/incomplete dates (e.g., partially typed) are ignored — only commit when `isValid()` returns true.
|
|
194
|
+
- Locale format info is derived at render time from `getDateFormatInfo()` — this reads the Pega environment locale.
|
|
195
|
+
- **Render ordering:** display modes → readOnly return → testProps → handleChange → main render. The readOnly check comes BEFORE handler definitions.
|
|
196
|
+
- `dateFormatInfoDefault` is mutated in place (not spread-copied) — this is the existing pattern, maintain it.
|
|
197
|
+
- `getFormattedDate` accesses dayjs internals (`$y`, `$M`, `$D`) — if using a different date library, adapt the accessors.
|
|
198
|
+
|
|
199
|
+
## Dependencies
|
|
200
|
+
|
|
201
|
+
- Date manipulation library (e.g., `dayjs`) — for parsing, formatting, validity checking.
|
|
202
|
+
- Date picker UI component (e.g., `@mui/x-date-pickers/DatePicker`) — for calendar popup.
|
|
203
|
+
- `getDateFormatInfo()` from `../../helpers/date-format-utils` — for locale-aware format string.
|
|
204
|
+
- `dateFormatInfoDefault` from same helper — default fallback.
|
|
205
|
+
- `format()` from `../../helpers/formatters` — for display mode formatting.
|
|
206
|
+
- `handleEvent` from `../../helpers/event-utils`.
|
|
207
|
+
- `getComponentFromRegistry('TextInput')` for read-only delegation.
|
|
208
|
+
- `getComponentFromRegistry('FieldValueList')` for display modes.
|
|
209
|
+
|
|
210
|
+
## Design System Mapping
|
|
211
|
+
|
|
212
|
+
**UI control type:** Date picker with calendar popup.
|
|
213
|
+
|
|
214
|
+
Listed design systems are examples only.
|
|
215
|
+
|
|
216
|
+
| Design System | Recommended Component |
|
|
217
|
+
| ------------------ | ---------------------------------------------------------------- |
|
|
218
|
+
| Default (CSS only) | `<input type="date">` (browser native, limited locale control) |
|
|
219
|
+
| MUI | `<DatePicker />` from `@mui/x-date-pickers` with `dayjs` adapter |
|
|
220
|
+
| Ant Design | `<DatePicker format="MM/DD/YYYY" />` |
|
|
221
|
+
| Chakra UI | Third-party date picker or `<input type="date">` |
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# Skill: DateTime
|
|
2
|
+
|
|
3
|
+
Date and time picker with timezone conversion, binds to a Pega case property.
|
|
4
|
+
|
|
5
|
+
> **Prerequisite skill:** [`field-components.md`](../field-components.md) — covers architecture, props interface, display modes, event handling, and registration patterns common to ALL field components.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Component Purpose
|
|
10
|
+
|
|
11
|
+
Renders a combined date and time picker. Stores values as ISO 8601 UTC strings. Converts to/from the Pega environment's configured timezone for display. Shows formatted date-time in display modes. Delegates read-only rendering to `TextInput` with a formatted string.
|
|
12
|
+
|
|
13
|
+
## Pega Metadata
|
|
14
|
+
|
|
15
|
+
- **Pega Name:** `DateTime`
|
|
16
|
+
- **Type / Subtype:** `Field` / `DateTime`
|
|
17
|
+
- **Registration key:** `DateTime` (in `component-map.ts`)
|
|
18
|
+
|
|
19
|
+
## Props (component-specific)
|
|
20
|
+
|
|
21
|
+
No props beyond `PConnFieldProps`. Import type as:
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import type { PConnFieldProps } from '@pega/sdk-react';
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Component Skeleton
|
|
28
|
+
|
|
29
|
+
Follow this exact structure. Replace `<DateTimePickerWidget>` with equivalents from your chosen design system.
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import { useEffect, useState } from 'react';
|
|
33
|
+
import dayjs, { Dayjs } from 'dayjs';
|
|
34
|
+
import DateFormatter from '../../helpers/formatters/Date';
|
|
35
|
+
import handleEvent from '../../helpers/event-utils';
|
|
36
|
+
import { format } from '../../helpers/formatters';
|
|
37
|
+
import { dateFormatInfoDefault, getDateFormatInfo } from '../../helpers/date-format-utils';
|
|
38
|
+
import { getComponentFromRegistry } from '@pega/sdk-react';
|
|
39
|
+
import type { PConnFieldProps } from '@pega/sdk-react';
|
|
40
|
+
|
|
41
|
+
interface DateTimeProps extends PConnFieldProps {}
|
|
42
|
+
|
|
43
|
+
export default function DateTime(props: DateTimeProps) {
|
|
44
|
+
// 1. Registry lookups
|
|
45
|
+
const TextInput = getComponentFromRegistry('TextInput');
|
|
46
|
+
const FieldValueList = getComponentFromRegistry('FieldValueList');
|
|
47
|
+
|
|
48
|
+
// 2. Destructure props
|
|
49
|
+
const {
|
|
50
|
+
getPConnect, label, required, disabled, value = '',
|
|
51
|
+
validatemessage, status, readOnly, testId,
|
|
52
|
+
helperText, displayMode, hideLabel,
|
|
53
|
+
} = props;
|
|
54
|
+
|
|
55
|
+
// 3. Timezone
|
|
56
|
+
const environmentInfo = PCore.getEnvironmentInfo();
|
|
57
|
+
const timezone = environmentInfo && environmentInfo.getTimeZone();
|
|
58
|
+
|
|
59
|
+
// 4. State — convert UTC value to environment timezone for display
|
|
60
|
+
const [dateValue, setDateValue] = useState<Dayjs | null>(
|
|
61
|
+
value ? dayjs(DateFormatter.convertToTimezone(value, { timezone })) : null
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
// 5. PConnect setup
|
|
65
|
+
const pConn = getPConnect();
|
|
66
|
+
const actions = pConn.getActionsApi();
|
|
67
|
+
const propName = (pConn.getStateProps() as any).value;
|
|
68
|
+
const helperTextToDisplay = validatemessage || helperText;
|
|
69
|
+
|
|
70
|
+
// 6. Date format info (mutate default with locale values)
|
|
71
|
+
const dateFormatInfo = dateFormatInfoDefault;
|
|
72
|
+
const theDateFormat = getDateFormatInfo();
|
|
73
|
+
dateFormatInfo.dateFormatString = theDateFormat.dateFormatString;
|
|
74
|
+
dateFormatInfo.dateFormatStringLC = theDateFormat.dateFormatStringLC;
|
|
75
|
+
dateFormatInfo.dateFormatMask = theDateFormat.dateFormatMask;
|
|
76
|
+
|
|
77
|
+
// 7. useEffect: sync from store — deps: [value]
|
|
78
|
+
useEffect(() => {
|
|
79
|
+
setDateValue(dayjs(DateFormatter.convertToTimezone(value, { timezone })));
|
|
80
|
+
}, [value]);
|
|
81
|
+
|
|
82
|
+
// 8. Display mode returns
|
|
83
|
+
if (displayMode === 'DISPLAY_ONLY') {
|
|
84
|
+
const formattedDateTime = format(props.value, 'datetime', {
|
|
85
|
+
format: `${dateFormatInfo.dateFormatString} hh:mm a`,
|
|
86
|
+
});
|
|
87
|
+
return <FieldValueList name={hideLabel ? '' : label} value={formattedDateTime} />;
|
|
88
|
+
}
|
|
89
|
+
if (displayMode === 'STACKED_LARGE_VAL') {
|
|
90
|
+
const formattedDateTime = format(props.value, 'datetime', {
|
|
91
|
+
format: `${dateFormatInfo.dateFormatString} hh:mm a`,
|
|
92
|
+
});
|
|
93
|
+
return <FieldValueList name={hideLabel ? '' : label} value={formattedDateTime} variant="stacked" />;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// 9. Read-only return
|
|
97
|
+
if (readOnly) {
|
|
98
|
+
const formattedDateTime = format(props.value, 'datetime');
|
|
99
|
+
return <TextInput {...props} value={formattedDateTime} />;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// 10. Test ID prop
|
|
103
|
+
const testProps: any = { 'data-test-id': testId };
|
|
104
|
+
|
|
105
|
+
// 11. handleChange — convert to timezone-aware ISO, commit immediately
|
|
106
|
+
const handleChange = (date) => {
|
|
107
|
+
const timeZoneDateTime = (dayjs as any).tz(
|
|
108
|
+
date.format('YYYY-MM-DDTHH:mm:ss'), timezone
|
|
109
|
+
);
|
|
110
|
+
const changeValue = timeZoneDateTime?.isValid()
|
|
111
|
+
? timeZoneDateTime.toISOString() : '';
|
|
112
|
+
setDateValue(timeZoneDateTime);
|
|
113
|
+
handleEvent(actions, 'changeNblur', propName, changeValue);
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
// 12. Main render — datetime picker
|
|
117
|
+
// Key props:
|
|
118
|
+
// - disabled, label, value: dateValue
|
|
119
|
+
// - format: `${dateFormatInfo.dateFormatString} hh:mm a`
|
|
120
|
+
// - minutesStep: 5
|
|
121
|
+
// - onChange: handleChange
|
|
122
|
+
// - textField slot: variant 'outlined', required, size 'small',
|
|
123
|
+
// placeholder: `${dateFormatInfo.dateFormatStringLC} hh:mm a`,
|
|
124
|
+
// error: status === 'error', helperText: helperTextToDisplay,
|
|
125
|
+
// InputProps: { ...testProps }
|
|
126
|
+
return <DateTimePickerWidget ... />;
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Behavioral Contract
|
|
131
|
+
|
|
132
|
+
1. **Timezone:** Read the environment timezone at render time:
|
|
133
|
+
```
|
|
134
|
+
const environmentInfo = PCore.getEnvironmentInfo();
|
|
135
|
+
const timezone = environmentInfo && environmentInfo.getTimeZone();
|
|
136
|
+
```
|
|
137
|
+
2. **Local state:** Maintain `dateValue` as `Dayjs | null`. Initialize: `value ? dayjs(DateFormatter.convertToTimezone(value, { timezone })) : null`.
|
|
138
|
+
3. **Helper text:** `helperTextToDisplay = validatemessage || helperText`.
|
|
139
|
+
4. **Sync from store:** `useEffect` with deps **`[value]`** → `setDateValue(dayjs(DateFormatter.convertToTimezone(value, { timezone })))`.
|
|
140
|
+
5. **Date/time format:** Mutate `dateFormatInfoDefault` with locale values from `getDateFormatInfo()` (same pattern as Date component). Combined format: `` `${dateFormatString} hh:mm a` ``.
|
|
141
|
+
6. **Minutes step:** `minutesStep={5}` — time picker snaps to 5-minute increments.
|
|
142
|
+
7. **On change:**
|
|
143
|
+
- Convert the selected date to timezone-aware ISO string:
|
|
144
|
+
```
|
|
145
|
+
const timeZoneDateTime = (dayjs as any).tz(date.format('YYYY-MM-DDTHH:mm:ss'), timezone)
|
|
146
|
+
const changeValue = timeZoneDateTime?.isValid() ? timeZoneDateTime.toISOString() : ''
|
|
147
|
+
```
|
|
148
|
+
- Update state: `setDateValue(timeZoneDateTime)`.
|
|
149
|
+
- Commit immediately: `handleEvent(actions, 'changeNblur', propName, changeValue)`.
|
|
150
|
+
8. **Read-only:** Format with `format(props.value, 'datetime')` (no format option), delegate to `TextInput`.
|
|
151
|
+
9. **Test ID:** `testProps = { 'data-test-id': testId }` — passed via `InputProps` on the text field slot.
|
|
152
|
+
10. **Render ordering:** display modes → readOnly → testProps → handleChange → main render.
|
|
153
|
+
|
|
154
|
+
## Display Mode Rendering
|
|
155
|
+
|
|
156
|
+
Format using `format(value, 'datetime', { format: \`${dateFormatString} hh:mm a\` })`:
|
|
157
|
+
|
|
158
|
+
- **`DISPLAY_ONLY`:** `<FieldValueList name={hideLabel ? '' : label} value={formattedDateTime} />`.
|
|
159
|
+
- **`STACKED_LARGE_VAL`:** `<FieldValueList name={hideLabel ? '' : label} value={formattedDateTime} variant='stacked' />`.
|
|
160
|
+
|
|
161
|
+
## Read-Only Rendering
|
|
162
|
+
|
|
163
|
+
Format value as `format(props.value, 'datetime')` then pass to `TextInput`:
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
return <TextInput {...props} value={formattedDateTime} />
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Visual Specifications
|
|
170
|
+
|
|
171
|
+
| Property | Value |
|
|
172
|
+
| ------------ | --------------------------------------------------- |
|
|
173
|
+
| Width | Auto |
|
|
174
|
+
| Size | Small |
|
|
175
|
+
| Variant | Outlined |
|
|
176
|
+
| Format | `MM/DD/YYYY hh:mm a` (locale-aware date + 12h time) |
|
|
177
|
+
| Placeholder | Lowercase format, e.g., `mm/dd/yyyy hh:mm a` |
|
|
178
|
+
| Minutes step | 5 minutes |
|
|
179
|
+
| Error state | Red border + red helper text |
|
|
180
|
+
|
|
181
|
+
**Note on known issue:** Keyboard input in the minute field may jump to the am/pm field after one digit — this is a known quirk of some date-time picker library versions.
|
|
182
|
+
|
|
183
|
+
## Edge Cases & Special Logic
|
|
184
|
+
|
|
185
|
+
- All stored values are **UTC ISO 8601 strings** (e.g., `'2024-03-15T14:30:00.000Z'`).
|
|
186
|
+
- **Timezone conversion** is critical: always convert from UTC → environment timezone for display, and from environment timezone → UTC when committing.
|
|
187
|
+
- If `timeZoneDateTime.isValid()` is false, commit an empty string `''`.
|
|
188
|
+
- Commits on **change** (picker selection), not on blur.
|
|
189
|
+
- `dayjs.tz` requires `dayjs-timezone` plugin.
|
|
190
|
+
|
|
191
|
+
## Dependencies
|
|
192
|
+
|
|
193
|
+
- Date manipulation library with timezone support (e.g., `dayjs` + `dayjs/plugin/timezone`).
|
|
194
|
+
- `DateFormatter.convertToTimezone(value, { timezone })` from `../../helpers/formatters/Date` — converts stored UTC value to display timezone.
|
|
195
|
+
- `format()` from `../../helpers/formatters` — for display mode formatting.
|
|
196
|
+
- `getDateFormatInfo()` from `../../helpers/date-format-utils` — for locale date format string.
|
|
197
|
+
- Date-time picker UI component (e.g., `@mui/x-date-pickers/DateTimePicker`).
|
|
198
|
+
- `handleEvent` from `../../helpers/event-utils`.
|
|
199
|
+
- `getComponentFromRegistry('TextInput')` for read-only.
|
|
200
|
+
- `getComponentFromRegistry('FieldValueList')` for display modes.
|
|
201
|
+
|
|
202
|
+
## Design System Mapping
|
|
203
|
+
|
|
204
|
+
**UI control type:** Combined date and time picker with timezone awareness.
|
|
205
|
+
|
|
206
|
+
Listed design systems are examples only.
|
|
207
|
+
|
|
208
|
+
| Design System | Recommended Component |
|
|
209
|
+
| ------------------ | ------------------------------------------------------------ |
|
|
210
|
+
| Default (CSS only) | `<input type="datetime-local">` (no timezone control) |
|
|
211
|
+
| MUI | `<DateTimePicker />` from `@mui/x-date-pickers` + `dayjs.tz` |
|
|
212
|
+
| Ant Design | `<DatePicker showTime />` |
|
|
213
|
+
| Chakra UI | Third-party datetime picker |
|