@pega/sdk 0.0.1 → 0.0.3

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.
Files changed (223) hide show
  1. package/dist/index.js +2 -19
  2. package/package.json +4 -1
  3. package/templates/react-sdk-reference/.claude/instructions/component-map.md +38 -0
  4. package/templates/react-sdk-reference/.claude/instructions/dse-component.md +75 -0
  5. package/templates/react-sdk-reference/.claude/instructions/field-component.md +71 -0
  6. package/templates/react-sdk-reference/.claude/instructions/template-component.md +92 -0
  7. package/templates/react-sdk-reference/.claude/instructions/widget-component.md +87 -0
  8. package/templates/react-sdk-reference/.claude/prompts/add-component.md +144 -0
  9. package/templates/react-sdk-reference/.claude/prompts/component-manifest.json +111 -0
  10. package/templates/react-sdk-reference/.claude/prompts/generate-all-components.md +149 -0
  11. package/templates/react-sdk-reference/.claude/prompts/generate-dse-components.md +126 -0
  12. package/templates/react-sdk-reference/.claude/prompts/generate-field-components.md +139 -0
  13. package/templates/react-sdk-reference/.claude/prompts/generate-template-components.md +151 -0
  14. package/templates/react-sdk-reference/.claude/prompts/generate-widget-components.md +124 -0
  15. package/templates/react-sdk-reference/.claude/prompts/identify-components.md +105 -0
  16. package/templates/react-sdk-reference/.claude/prompts/replace-design-system.md +519 -0
  17. package/templates/react-sdk-reference/.claude/skills/component-contracts.md +140 -0
  18. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/AlertBanner.md +135 -0
  19. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/Banner.md +149 -0
  20. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/CaseSummaryFields.md +154 -0
  21. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/DetailsFields.md +144 -0
  22. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/FieldGroup.md +131 -0
  23. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/FieldGroupList.md +111 -0
  24. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/FieldValueList.md +115 -0
  25. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/Operator.md +149 -0
  26. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/Pulse.md +83 -0
  27. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/RichTextEditor.md +206 -0
  28. package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/WssQuickCreate.md +135 -0
  29. package/templates/react-sdk-reference/.claude/skills/design-system-extension.md +289 -0
  30. package/templates/react-sdk-reference/.claude/skills/field-components.md +294 -0
  31. package/templates/react-sdk-reference/.claude/skills/field-skills/AutoComplete.md +112 -0
  32. package/templates/react-sdk-reference/.claude/skills/field-skills/CancelAlert.md +203 -0
  33. package/templates/react-sdk-reference/.claude/skills/field-skills/Checkbox.md +158 -0
  34. package/templates/react-sdk-reference/.claude/skills/field-skills/Currency.md +106 -0
  35. package/templates/react-sdk-reference/.claude/skills/field-skills/Date.md +99 -0
  36. package/templates/react-sdk-reference/.claude/skills/field-skills/DateTime.md +103 -0
  37. package/templates/react-sdk-reference/.claude/skills/field-skills/Decimal.md +98 -0
  38. package/templates/react-sdk-reference/.claude/skills/field-skills/Dropdown.md +114 -0
  39. package/templates/react-sdk-reference/.claude/skills/field-skills/Email.md +107 -0
  40. package/templates/react-sdk-reference/.claude/skills/field-skills/Group.md +90 -0
  41. package/templates/react-sdk-reference/.claude/skills/field-skills/Integer.md +87 -0
  42. package/templates/react-sdk-reference/.claude/skills/field-skills/Location.md +136 -0
  43. package/templates/react-sdk-reference/.claude/skills/field-skills/Multiselect.md +164 -0
  44. package/templates/react-sdk-reference/.claude/skills/field-skills/ObjectReference.md +164 -0
  45. package/templates/react-sdk-reference/.claude/skills/field-skills/Percentage.md +92 -0
  46. package/templates/react-sdk-reference/.claude/skills/field-skills/Phone.md +110 -0
  47. package/templates/react-sdk-reference/.claude/skills/field-skills/RadioButtons.md +146 -0
  48. package/templates/react-sdk-reference/.claude/skills/field-skills/RichText.md +138 -0
  49. package/templates/react-sdk-reference/.claude/skills/field-skills/ScalarList.md +124 -0
  50. package/templates/react-sdk-reference/.claude/skills/field-skills/SelectableCard.md +216 -0
  51. package/templates/react-sdk-reference/.claude/skills/field-skills/SemanticLink.md +148 -0
  52. package/templates/react-sdk-reference/.claude/skills/field-skills/TextArea.md +96 -0
  53. package/templates/react-sdk-reference/.claude/skills/field-skills/TextContent.md +101 -0
  54. package/templates/react-sdk-reference/.claude/skills/field-skills/TextInput.md +104 -0
  55. package/templates/react-sdk-reference/.claude/skills/field-skills/Time.md +88 -0
  56. package/templates/react-sdk-reference/.claude/skills/field-skills/URL.md +85 -0
  57. package/templates/react-sdk-reference/.claude/skills/field-skills/UserReference.md +180 -0
  58. package/templates/react-sdk-reference/.claude/skills/run-and-verify.md +68 -0
  59. package/templates/react-sdk-reference/.claude/skills/template-components.md +322 -0
  60. package/templates/react-sdk-reference/.claude/skills/template-skills/AdvancedSearch.md +144 -0
  61. package/templates/react-sdk-reference/.claude/skills/template-skills/AppShell.md +122 -0
  62. package/templates/react-sdk-reference/.claude/skills/template-skills/BannerPage.md +83 -0
  63. package/templates/react-sdk-reference/.claude/skills/template-skills/CaseSummary.md +100 -0
  64. package/templates/react-sdk-reference/.claude/skills/template-skills/CaseView.md +131 -0
  65. package/templates/react-sdk-reference/.claude/skills/template-skills/CaseViewActionsMenu.md +126 -0
  66. package/templates/react-sdk-reference/.claude/skills/template-skills/Confirmation.md +107 -0
  67. package/templates/react-sdk-reference/.claude/skills/template-skills/DataReference.md +120 -0
  68. package/templates/react-sdk-reference/.claude/skills/template-skills/DefaultForm.md +102 -0
  69. package/templates/react-sdk-reference/.claude/skills/template-skills/DefaultPage.md +110 -0
  70. package/templates/react-sdk-reference/.claude/skills/template-skills/Details.md +88 -0
  71. package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsSubTabs.md +95 -0
  72. package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsThreeColumn.md +78 -0
  73. package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsTwoColumn.md +78 -0
  74. package/templates/react-sdk-reference/.claude/skills/template-skills/DynamicTabs.md +101 -0
  75. package/templates/react-sdk-reference/.claude/skills/template-skills/FieldGroupTemplate.md +109 -0
  76. package/templates/react-sdk-reference/.claude/skills/template-skills/HierarchicalForm.md +113 -0
  77. package/templates/react-sdk-reference/.claude/skills/template-skills/InlineDashboard.md +104 -0
  78. package/templates/react-sdk-reference/.claude/skills/template-skills/InlineDashboardPage.md +85 -0
  79. package/templates/react-sdk-reference/.claude/skills/template-skills/ListPage.md +68 -0
  80. package/templates/react-sdk-reference/.claude/skills/template-skills/ListView.md +139 -0
  81. package/templates/react-sdk-reference/.claude/skills/template-skills/MultiReferenceReadOnly.md +80 -0
  82. package/templates/react-sdk-reference/.claude/skills/template-skills/NarrowWide.md +141 -0
  83. package/templates/react-sdk-reference/.claude/skills/template-skills/OneColumn.md +109 -0
  84. package/templates/react-sdk-reference/.claude/skills/template-skills/PromotedFilters.md +124 -0
  85. package/templates/react-sdk-reference/.claude/skills/template-skills/SelfServiceCaseView.md +135 -0
  86. package/templates/react-sdk-reference/.claude/skills/template-skills/SimpleTable.md +127 -0
  87. package/templates/react-sdk-reference/.claude/skills/template-skills/SingleReferenceReadOnly.md +103 -0
  88. package/templates/react-sdk-reference/.claude/skills/template-skills/SubTabs.md +79 -0
  89. package/templates/react-sdk-reference/.claude/skills/template-skills/TwoColumn.md +131 -0
  90. package/templates/react-sdk-reference/.claude/skills/template-skills/WideNarrow.md +150 -0
  91. package/templates/react-sdk-reference/.claude/skills/template-skills/WssNavBar.md +135 -0
  92. package/templates/react-sdk-reference/.claude/skills/widget-components.md +271 -0
  93. package/templates/react-sdk-reference/.claude/skills/widget-skills/AppAnnouncement.md +82 -0
  94. package/templates/react-sdk-reference/.claude/skills/widget-skills/Attachment.md +146 -0
  95. package/templates/react-sdk-reference/.claude/skills/widget-skills/CaseHistory.md +107 -0
  96. package/templates/react-sdk-reference/.claude/skills/widget-skills/FileUtility.md +200 -0
  97. package/templates/react-sdk-reference/.claude/skills/widget-skills/Followers.md +99 -0
  98. package/templates/react-sdk-reference/.claude/skills/widget-skills/QuickCreate.md +114 -0
  99. package/templates/react-sdk-reference/.claude/skills/widget-skills/SummaryItem.md +167 -0
  100. package/templates/react-sdk-reference/.claude/skills/widget-skills/ToDo.md +190 -0
  101. package/templates/react-sdk-reference/.cursor/rules/component-map.mdrules +41 -0
  102. package/templates/react-sdk-reference/.cursor/rules/dse-component.mdrules +78 -0
  103. package/templates/react-sdk-reference/.cursor/rules/field-component.mdrules +74 -0
  104. package/templates/react-sdk-reference/.cursor/rules/pega-sdk.mdrules +247 -0
  105. package/templates/react-sdk-reference/.cursor/rules/prompts/add-component.mdrules +149 -0
  106. package/templates/react-sdk-reference/.cursor/rules/prompts/component-manifest.json +111 -0
  107. package/templates/react-sdk-reference/.cursor/rules/prompts/generate-all-components.mdrules +154 -0
  108. package/templates/react-sdk-reference/.cursor/rules/prompts/generate-dse-components.mdrules +131 -0
  109. package/templates/react-sdk-reference/.cursor/rules/prompts/generate-field-components.mdrules +144 -0
  110. package/templates/react-sdk-reference/.cursor/rules/prompts/generate-template-components.mdrules +156 -0
  111. package/templates/react-sdk-reference/.cursor/rules/prompts/generate-widget-components.mdrules +129 -0
  112. package/templates/react-sdk-reference/.cursor/rules/prompts/identify-components.mdrules +110 -0
  113. package/templates/react-sdk-reference/.cursor/rules/prompts/replace-design-system.mdrules +524 -0
  114. package/templates/react-sdk-reference/.cursor/rules/skills/component-contracts.mdrules +145 -0
  115. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/AlertBanner.mdrules +140 -0
  116. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/Banner.mdrules +154 -0
  117. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/CaseSummaryFields.mdrules +159 -0
  118. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/DetailsFields.mdrules +149 -0
  119. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/FieldGroup.mdrules +136 -0
  120. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/FieldGroupList.mdrules +116 -0
  121. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/FieldValueList.mdrules +120 -0
  122. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/Operator.mdrules +154 -0
  123. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/Pulse.mdrules +88 -0
  124. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/RichTextEditor.mdrules +211 -0
  125. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/WssQuickCreate.mdrules +140 -0
  126. package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension.mdrules +294 -0
  127. package/templates/react-sdk-reference/.cursor/rules/skills/field-components.mdrules +299 -0
  128. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/AutoComplete.mdrules +117 -0
  129. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/CancelAlert.mdrules +208 -0
  130. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Checkbox.mdrules +163 -0
  131. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Currency.mdrules +111 -0
  132. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Date.mdrules +104 -0
  133. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/DateTime.mdrules +108 -0
  134. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Decimal.mdrules +103 -0
  135. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Dropdown.mdrules +119 -0
  136. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Email.mdrules +112 -0
  137. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Group.mdrules +95 -0
  138. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Integer.mdrules +92 -0
  139. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Location.mdrules +141 -0
  140. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Multiselect.mdrules +169 -0
  141. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/ObjectReference.mdrules +169 -0
  142. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Percentage.mdrules +97 -0
  143. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Phone.mdrules +115 -0
  144. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/RadioButtons.mdrules +151 -0
  145. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/RichText.mdrules +143 -0
  146. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/ScalarList.mdrules +129 -0
  147. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/SelectableCard.mdrules +221 -0
  148. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/SemanticLink.mdrules +153 -0
  149. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/TextArea.mdrules +101 -0
  150. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/TextContent.mdrules +106 -0
  151. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/TextInput.mdrules +109 -0
  152. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Time.mdrules +93 -0
  153. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/URL.mdrules +90 -0
  154. package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/UserReference.mdrules +185 -0
  155. package/templates/react-sdk-reference/.cursor/rules/skills/run-and-verify.mdrules +73 -0
  156. package/templates/react-sdk-reference/.cursor/rules/skills/template-components.mdrules +327 -0
  157. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/AdvancedSearch.mdrules +149 -0
  158. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/AppShell.mdrules +127 -0
  159. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/BannerPage.mdrules +88 -0
  160. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/CaseSummary.mdrules +105 -0
  161. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/CaseView.mdrules +136 -0
  162. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/CaseViewActionsMenu.mdrules +131 -0
  163. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/Confirmation.mdrules +112 -0
  164. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DataReference.mdrules +125 -0
  165. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DefaultForm.mdrules +107 -0
  166. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DefaultPage.mdrules +115 -0
  167. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/Details.mdrules +93 -0
  168. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DetailsSubTabs.mdrules +100 -0
  169. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DetailsThreeColumn.mdrules +83 -0
  170. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DetailsTwoColumn.mdrules +83 -0
  171. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DynamicTabs.mdrules +106 -0
  172. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/FieldGroupTemplate.mdrules +114 -0
  173. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/HierarchicalForm.mdrules +118 -0
  174. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/InlineDashboard.mdrules +109 -0
  175. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/InlineDashboardPage.mdrules +90 -0
  176. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/ListPage.mdrules +73 -0
  177. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/ListView.mdrules +144 -0
  178. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/MultiReferenceReadOnly.mdrules +85 -0
  179. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/NarrowWide.mdrules +146 -0
  180. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/OneColumn.mdrules +114 -0
  181. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/PromotedFilters.mdrules +129 -0
  182. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SelfServiceCaseView.mdrules +140 -0
  183. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SimpleTable.mdrules +132 -0
  184. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SingleReferenceReadOnly.mdrules +108 -0
  185. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SubTabs.mdrules +84 -0
  186. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/TwoColumn.mdrules +136 -0
  187. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/WideNarrow.mdrules +155 -0
  188. package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/WssNavBar.mdrules +140 -0
  189. package/templates/react-sdk-reference/.cursor/rules/skills/widget-components.mdrules +276 -0
  190. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/AppAnnouncement.mdrules +87 -0
  191. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/Attachment.mdrules +151 -0
  192. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/CaseHistory.mdrules +112 -0
  193. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/FileUtility.mdrules +205 -0
  194. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/Followers.mdrules +104 -0
  195. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/QuickCreate.mdrules +119 -0
  196. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/SummaryItem.mdrules +172 -0
  197. package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/ToDo.mdrules +195 -0
  198. package/templates/react-sdk-reference/.cursor/rules/template-component.mdrules +95 -0
  199. package/templates/react-sdk-reference/.cursor/rules/widget-component.mdrules +90 -0
  200. package/templates/react-sdk-reference/.github/copilot-instructions.md +58 -0
  201. package/templates/react-sdk-reference/.github/prompts/add-component.prompt.md +144 -16
  202. package/templates/react-sdk-reference/.github/prompts/generate-all-components.prompt.md +154 -0
  203. package/templates/react-sdk-reference/.github/prompts/generate-dse-components.prompt.md +131 -0
  204. package/templates/react-sdk-reference/.github/prompts/generate-field-components.prompt.md +144 -0
  205. package/templates/react-sdk-reference/.github/prompts/generate-template-components.prompt.md +156 -0
  206. package/templates/react-sdk-reference/.github/prompts/generate-widget-components.prompt.md +129 -0
  207. package/templates/react-sdk-reference/.github/skills/design-system-extension.md +58 -18
  208. package/templates/react-sdk-reference/.github/skills/field-components.md +55 -23
  209. package/templates/react-sdk-reference/.github/skills/template-components.md +48 -11
  210. package/templates/react-sdk-reference/.github/skills/widget-components.md +49 -12
  211. package/templates/react-sdk-reference/AGENTS.md +217 -29
  212. package/templates/react-sdk-reference/package.json +3 -2
  213. package/templates/react-sdk-reference/pega-auth-0.2.42.tgz +0 -0
  214. package/templates/react-sdk-reference/pega-constellationjs-0.26.3-local.tgz +0 -0
  215. package/templates/react-sdk-reference/pega-sdk-react-0.1.0.tgz +0 -0
  216. package/templates/react-sdk-reference/pega-sdk-types-0.1.0.tgz +0 -0
  217. package/templates/react-sdk-reference/sdk-config.json +1 -1
  218. package/templates/react-sdk-reference/vite.config.ts +1 -1
  219. package/templates/react-sdk-reference/.github/prompts/replace-all-fields.prompt.md +0 -48
  220. package/templates/react-sdk-reference/.github/prompts/replace-component.prompt.md +0 -81
  221. package/templates/react-sdk-reference/.github/prompts/replace-field.prompt.md +0 -41
  222. package/templates/react-sdk-reference/.github/prompts/swap-design-system.prompt.md +0 -49
  223. package/templates/react-sdk-reference/.github/skills/swap-design-system.md +0 -105
@@ -0,0 +1,115 @@
1
+ ---
2
+ description: Field component skill: Phone
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Skill: Phone
7
+
8
+ Telephone input field with country code selector, binds to a Pega case property.
9
+
10
+ > **Prerequisite skill:** [`field-components.md`](../field-components.md) — covers architecture, props interface, display modes, event handling, and registration patterns common to ALL field components.
11
+
12
+ ---
13
+
14
+ ## Component Purpose
15
+
16
+ Renders a telephone number input with an integrated country code selector (flag + dial code). Stores the phone number in E.164 format (e.g., `+15551234567`). Uses a specialized phone input library for the country picker. Separate handling for read-only mode (keeps country picker but sets input as read-only).
17
+
18
+ ## Pega Metadata
19
+
20
+ - **Pega Name:** `Phone`
21
+ - **Type / Subtype:** `Field` / `Text-Phone`
22
+ - **Registration key:** `Phone` (in `component-map.ts`)
23
+
24
+ ## Props (component-specific)
25
+
26
+ No props beyond `PConnFieldProps`. Import type as:
27
+ ```typescript
28
+ import type { PConnFieldProps } from '@pega/sdk-react';
29
+ ```
30
+
31
+ ## Behavioral Contract
32
+
33
+ 1. **Local state:** Maintain `inputValue` (string). Initialize from `value` prop. `useEffect` watching `value` → `setInputValue(value)`.
34
+ 2. **Default country:** `'US'` — the country code selector defaults to United States.
35
+ 3. **On change (editable):** Update local `inputValue` state with the formatted phone string from the library callback.
36
+ 4. **On blur (editable):** Extract and normalize the phone number to E.164 format:
37
+ ```
38
+ const phoneValue = event?.target?.value
39
+ let phoneNumber = phoneValue.split(' ').slice(1).join() // remove country code prefix
40
+ phoneNumber = phoneNumber ? `+${phoneValue.replace(/\D+/g, '')}` : ''
41
+ handleEvent(actions, 'changeNblur', propName, phoneNumber)
42
+ ```
43
+ 5. **Read-only:** Render the phone input with `readOnly: true` on the input element and `disableDropdown: true` (country picker dropdown disabled). Keep the country flag/code visible but non-interactive. `onBlur` and `onChange` are NOT committed — use the `onChange` prop from the component itself but disable dropdown.
44
+ 6. **testId:** Pass as attribute on the input element.
45
+
46
+ ## Display Mode Rendering
47
+
48
+ - **`DISPLAY_ONLY`:** `<FieldValueList name={hideLabel ? '' : label} value={value} />` — raw phone string.
49
+ - **`STACKED_LARGE_VAL`:** `<FieldValueList name={hideLabel ? '' : label} value={value} variant='stacked' />`.
50
+
51
+ ## Read-Only Rendering
52
+
53
+ Render phone input with `readOnly: true` and `disableDropdown: true` on the country picker. The `onChange` prop is `onChange` from `PConnFieldProps` (passed through). Wrapped in a `<div>`.
54
+
55
+ ```
56
+ <div>
57
+ <PhoneInput
58
+ readOnly: true on input
59
+ disableDropdown={true}
60
+ onChange={onChange} // from props — not local handler
61
+ value={value}
62
+ defaultCountry='US'
63
+ />
64
+ </div>
65
+ ```
66
+
67
+ ## Visual Specifications
68
+
69
+ | Property | Editable | Read-only |
70
+ |----------|----------|-----------|
71
+ | Width | 100% | 100% |
72
+ | Size | Small | Small |
73
+ | Variant | Outlined | Outlined (same, with readOnly input) |
74
+ | Country selector | Dropdown with flag + dial code | Flag + dial code shown, dropdown disabled |
75
+ | Default country | US (`+1`) | US (`+1`) |
76
+ | Error state | Red border + red helper text | — |
77
+ | Helper text | Below input | Below input |
78
+
79
+ **CSS-only notes:**
80
+ For a CSS-only implementation, create a two-part input:
81
+ ```css
82
+ .phone-input-wrapper { display: flex; border: 1px solid rgba(0,0,0,0.23); border-radius: 4px; overflow: hidden; }
83
+ .phone-country-select { border: none; border-right: 1px solid rgba(0,0,0,0.23); padding: 0 8px; background: none; }
84
+ .phone-number-input { flex: 1; border: none; padding: 8px 12px; font-size: 0.875rem; outline: none; }
85
+ ```
86
+
87
+ ## Edge Cases & Special Logic
88
+
89
+ - **E.164 normalization on blur:** Strip all non-digit chars from the full value (including country code), then prepend `+`. If the result after stripping the country part is empty, store `''`.
90
+ - **Read-only uses `onChange` from props** (not the local `handleChange`) — this is the platform-wired handler, not our local state updater. Do NOT call `handleEvent` in read-only mode.
91
+ - `disableDropdown: true` in read-only — prevents country switching.
92
+ - The library provides the formatted display value (e.g., `+1 (555) 123-4567`) in the callback; we normalize it to E.164 only on blur.
93
+
94
+ ## Dependencies
95
+
96
+ - A phone input library with country code selector and E.164 formatting support (e.g., `mui-tel-input`).
97
+ - `handleEvent` from `../../helpers/event-utils`.
98
+ - `getComponentFromRegistry('FieldValueList')` for display modes.
99
+
100
+ **For CSS-only / non-library implementations:**
101
+ - Use a `<select>` for country code + a text `<input>` for the number.
102
+ - On blur, combine dial code + number and strip non-digits, then format as `+{digits}`.
103
+
104
+ ## Design System Mapping
105
+
106
+ **UI control type:** Telephone input with integrated country code selector.
107
+
108
+ Listed design systems are examples only.
109
+
110
+ | Design System | Recommended Component |
111
+ |---|---|
112
+ | Default (CSS only) | `<select>` (country) + `<input type="tel">` |
113
+ | MUI | `<MuiTelInput>` from `mui-tel-input` |
114
+ | Ant Design | `<Input addonBefore={countrySelect}>` |
115
+ | Chakra UI | `<InputGroup>` with `<InputLeftAddon>` for country |
@@ -0,0 +1,151 @@
1
+ ---
2
+ description: Field component skill: RadioButtons
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Skill: RadioButtons
7
+
8
+ Radio button group field with optional card-style variant and localized option labels.
9
+
10
+ > **Prerequisite skill:** [`field-components.md`](../field-components.md) — covers architecture, props interface, display modes, event handling, and registration patterns common to ALL field components.
11
+
12
+ ---
13
+
14
+ ## Component Purpose
15
+
16
+ Renders a group of radio buttons for single-selection from a list of options. Supports standard radio button layout (inline or stacked) and a card-style visual variant. Option labels are localized. Commits value immediately on selection.
17
+
18
+ ## Pega Metadata
19
+
20
+ - **Pega Name:** `RadioButtons`
21
+ - **Type / Subtype:** `Field` / `Picklist-Radio`
22
+ - **Registration key:** `RadioButtons` (in `component-map.ts`)
23
+
24
+ ## Props (component-specific)
25
+
26
+ | Prop | Type | Description |
27
+ |------|------|-------------|
28
+ | `inline` | `boolean` | If `true`, render radio buttons in a horizontal row; if `false`, vertical stack |
29
+ | `fieldMetadata` | `any` (optional) | For localization context (tableType, datasource name, display text property) |
30
+ | `variant` | `string` (optional) | `'card'` — renders options as selectable cards instead of radio buttons |
31
+ | `hideFieldLabels` | `boolean` (optional) | Hide field labels inside card variant |
32
+ | `additionalProps` | `any` (optional) | Extra props passed to `SelectableCard` in card variant |
33
+ | `imagePosition` | `string` (optional) | Card image position: `'inline-start'`, `'inline-end'`, or block |
34
+ | `imageSize` | `string` (optional) | Card image size |
35
+ | `showImageDescription` | `boolean` (optional) | Whether to show image description in cards |
36
+ | `datasource` | `any` (optional) | Datasource for card variant |
37
+
38
+ ## Behavioral Contract
39
+
40
+ 1. **Local state:** Maintain `theSelectedButton` (string). Initialize from `value` prop. `useEffect` watching `value` → `setSelectedButton(value)`.
41
+ 2. **Options:** Load options from `Utils.getOptionList(theConfigProps, pConn.getDataObject(''))` — returns `Array<{key: string, value: string}>`.
42
+ 3. **On change:** Commit via `handleEvent(actionsApi, 'changeNblur', propName, event.target.value)`.
43
+ 4. **On blur:** Validate via `pConn.getValidationApi().validate(event.target.value, '')`. Second arg is empty string (optional parameter).
44
+ 5. **Inline layout:** Use `row={inline}` on the radio group — horizontal when `inline=true`.
45
+ 6. **Read-only:** Disable radio inputs (set `disabled` to `readOnly` value) — do NOT use a separate read-only component.
46
+ 7. **Localization:** Option labels are localized via `pConn.getLocalizedValue(option.value, localePath, localeRuleName)`.
47
+ 8. **Localization keys derivation:**
48
+ - Strip `@P ` prefix and leading `.` from `configProperty` (from `pConn.getRawMetadata()`).
49
+ - `localeContext`: `'datapage'` if `fieldMetadata.datasource.tableType === 'DataPage'`, else `'associated'`.
50
+ - `localeClass`: `'@baseclass'` for datapage, else `className`.
51
+ - `localeName`: datapage name or property name.
52
+ - `localePath`: display text property or localeName.
53
+
54
+ ### Variant: Standard (default)
55
+
56
+ Render a radio group with `FormControl > FormLabel > RadioGroup > FormControlLabel (Radio)` pattern:
57
+ - `FormLabel`: the `label` prop
58
+ - `RadioGroup`: `value={theSelectedButton}`, `onChange={handleChange}`, `onBlur`, `row={inline}`
59
+ - Each `FormControlLabel`: `value={option.key}`, `label={localizedLabel}`, `control={<Radio color='primary' disabled={readOnly} />}`
60
+ - Wrap in `FormHelperText` for `helperTextToDisplay`
61
+ - `error={status === 'error'}` on `FormControl`
62
+
63
+ ### Variant: Card (`variant === 'card'`)
64
+
65
+ Render a heading (`<h4>`) with the `label`, then delegate to `SelectableCard` component:
66
+ ```
67
+ <div>
68
+ <h4 style={{ marginTop: 0, marginBottom: 0 }}>{label}</h4>
69
+ <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(min(200px, 100%), 1fr))', gap: '1rem' }}>
70
+ <SelectableCard
71
+ type='radio'
72
+ dataSource={datasource}
73
+ recordKey={stateProps.value?.split('.').pop()}
74
+ cardLabel={stateProps.primaryField?.split('.').pop()}
75
+ radioBtnValue={value}
76
+ onChange={handleChange}
77
+ image={{ imagePosition, imageSize, showImageDescription, imageField, imageDescription }}
78
+ setIsRadioCardSelected={displayMode !== 'DISPLAY_ONLY' ? setSelectedButton : undefined}
79
+ hideFieldLabels={hideFieldLabels}
80
+ additionalProps={additionalProps}
81
+ getPConnect={getPConnect}
82
+ />
83
+ </div>
84
+ </div>
85
+ ```
86
+ - `imageField`: `stateProps.image?.split('.').pop()`
87
+ - `imageDescription`: `stateProps.imageDescription?.split('.').pop()`
88
+
89
+ ## Display Mode Rendering
90
+
91
+ Both modes render the localized display label of the selected option:
92
+ - **`DISPLAY_ONLY`:** `<FieldValueList name={hideLabel ? '' : label} value={localizedValue} />`
93
+ - **`STACKED_LARGE_VAL`:** `<FieldValueList name={hideLabel ? '' : label} value={localizedValue} variant='stacked' />`
94
+
95
+ Where `localizedValue = pConn.getLocalizedValue(value, localePath, localeRuleName)`.
96
+
97
+ ## Visual Specifications
98
+
99
+ ### Standard Variant
100
+
101
+ | Property | Value |
102
+ |----------|-------|
103
+ | Layout | Vertical stack (or horizontal row when `inline=true`) |
104
+ | Radio indicator | Circle button with filled inner circle when selected |
105
+ | Label | Label text to the right of the radio button (`labelPlacement='end'`) |
106
+ | Group label | `<legend>` / `<FormLabel>` above the group |
107
+ | Error state | Group border or text in red |
108
+ | Helper text | Below the group |
109
+ | Disabled (readOnly) | Greyed-out radio buttons, not-allowed cursor |
110
+
111
+ **CSS-only notes:**
112
+ ```css
113
+ .radio-group { display: flex; flex-direction: column; gap: 4px; }
114
+ .radio-group.inline { flex-direction: row; flex-wrap: wrap; gap: 8px; }
115
+ .radio-label { display: flex; align-items: center; gap: 8px; cursor: pointer; }
116
+ input[type="radio"]:disabled { opacity: 0.38; cursor: default; }
117
+ ```
118
+
119
+ ### Card Variant
120
+
121
+ | Property | Value |
122
+ |----------|-------|
123
+ | Layout | CSS Grid: `repeat(auto-fit, minmax(min(200px, 100%), 1fr))`, gap `1rem` |
124
+ | Card | Elevated card with click handler that activates the radio |
125
+ | Heading | `<h4>` with `marginTop: 0, marginBottom: 0` above grid |
126
+
127
+ ## Edge Cases & Special Logic
128
+
129
+ - `theOptions` is loaded synchronously from `Utils.getOptionList()` on every render — no async fetching.
130
+ - `theSelectedButton` tracks the selected key locally and syncs from `value` prop via `useEffect`.
131
+ - Card variant uses `setIsRadioCardSelected` callback to inform parent when a radio card is selected.
132
+
133
+ ## Dependencies
134
+
135
+ - `Utils.getOptionList()` from `../../helpers/utils`.
136
+ - `handleEvent` from `../../helpers/event-utils`.
137
+ - `getComponentFromRegistry('FieldValueList')` for display modes.
138
+ - `getComponentFromRegistry('SelectableCard')` for card variant.
139
+
140
+ ## Design System Mapping
141
+
142
+ **UI control type:** Radio button group (single selection).
143
+
144
+ Listed design systems are examples only.
145
+
146
+ | Design System | Recommended Component |
147
+ |---|---|
148
+ | Default (CSS only) | `<input type="radio">` with `<label>` per option |
149
+ | MUI | `<RadioGroup>` with `<FormControlLabel control={<Radio />}>` |
150
+ | Ant Design | `<Radio.Group>` with `<Radio>` options |
151
+ | Chakra UI | `<RadioGroup>` with `<Radio>` items |
@@ -0,0 +1,143 @@
1
+ ---
2
+ description: Field component skill: RichText
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Skill: RichText
7
+
8
+ Rich text editor field with HTML content support, binds to a Pega case property.
9
+
10
+ > **Prerequisite skill:** [`field-components.md`](../field-components.md) — covers architecture, props interface, display modes, event handling, and registration patterns common to ALL field components.
11
+
12
+ ---
13
+
14
+ ## Component Purpose
15
+
16
+ Renders a rich text (WYSIWYG) editor for HTML content. Uses a registry-resolved `RichTextEditor` component. Handles both read-only and editable states. Commits HTML content on blur by reading from the editor's internal ref.
17
+
18
+ ## Pega Metadata
19
+
20
+ - **Pega Name:** `RichText`
21
+ - **Type / Subtype:** `Field` / `Text-RichText`
22
+ - **Registration key:** `RichText` (in `component-map.ts`)
23
+
24
+ ## Props (component-specific)
25
+
26
+ | Prop | Type | Description |
27
+ |------|------|-------------|
28
+ | `additionalProps` | `object` (optional) | Extra props forwarded to the `RichTextEditor` |
29
+
30
+ ## Behavioral Contract
31
+
32
+ 1. **Editor ref:** Maintain an `editorRef` (via `useRef`) — the editor exposes its content via `editorRef.current.getContent({ format: 'html' })`.
33
+ 2. **No local state** — unlike text inputs, value is NOT tracked in local state. The editor manages its own internal content via `defaultValue`.
34
+ 3. **Props coercion:** `readOnly`, `required`, `disabled` must be coerced to booleans:
35
+ ```typescript
36
+ [readOnly, required, disabled] = [readOnly, required, disabled].map(
37
+ prop => prop === true || (typeof prop === 'string' && prop === 'true')
38
+ )
39
+ ```
40
+ 4. **Editable mode:**
41
+ - Track `status` for error state.
42
+ - **On change:** If `status === 'error'`, clear error messages via:
43
+ ```
44
+ pConn.clearErrorMessages({ property, category: '', context: '' })
45
+ ```
46
+ - **On blur:** Read HTML from editor ref and commit:
47
+ ```
48
+ const editorValue = editorRef.current.getContent({ format: 'html' })
49
+ handleEvent(actionsApi, 'changeNblur', property, editorValue)
50
+ ```
51
+ 5. **Read-only mode:** Render `RichTextEditor` with `readOnly` prop only — no `onChange`/`onBlur`.
52
+ 6. **`RichTextEditor` component:** Resolved via `getComponentFromRegistry('RichTextEditor')`. This is a design-system extension component that wraps the actual WYSIWYG library (e.g., TinyMCE).
53
+
54
+ ### Editable RichTextEditor props
55
+ ```
56
+ label, labelHidden={hideLabel}, info={helperTextToDisplay}, defaultValue={value},
57
+ placeholder, disabled, required, testId, ref={editorRef},
58
+ error={status === 'error'}, onBlur={handleBlur}, onChange={handleChange}
59
+ ```
60
+
61
+ ### Read-only RichTextEditor props
62
+ ```
63
+ label, labelHidden={hideLabel}, defaultValue={value}, testId, info={helperTextToDisplay},
64
+ ref={editorRef}, readOnly
65
+ ```
66
+
67
+ ## Display Mode Rendering
68
+
69
+ Display modes pass `isHtml={true}` to render HTML content safely:
70
+ - **`DISPLAY_ONLY`:** `<FieldValueList name={hideLabel ? '' : label} value={value} isHtml />`
71
+ - **`STACKED_LARGE_VAL`:** `<FieldValueList name={hideLabel ? '' : label} value={value} isHtml variant='stacked' />`
72
+
73
+ ## Read-Only Rendering
74
+
75
+ Render `RichTextEditor` with `readOnly` prop. Uses same `editorRef`.
76
+
77
+ ## Visual Specifications
78
+
79
+ The visual appearance of the rich text editor depends on the underlying `RichTextEditor` implementation. The reference implementation uses TinyMCE theming via CSS variables:
80
+
81
+ ```css
82
+ /* RichText.css — must be imported */
83
+ .tox .tox-toolbar { background-color: var(--app-background-color) !important; }
84
+ .tox .tox-toolbar__primary { background-color: var(--app-background-color) !important; }
85
+ .tox .tox-toolbar__button { color: var(--app-text-color) !important; }
86
+ .tox .tox-toolbar__button--enabled {
87
+ background: var(--app-primary-color) !important;
88
+ color: #fff !important;
89
+ }
90
+ .tox .tox-dialog {
91
+ background-color: var(--modal-top-color) !important;
92
+ color: var(--app-text-color) !important;
93
+ border: 1px solid var(--modal-border-color) !important;
94
+ padding: 20px !important;
95
+ box-shadow: 0 0 10px 3px var(--modal-box-shadow-color) !important;
96
+ }
97
+ .tox .tox-dialog__header {
98
+ background-color: var(--modal-top-color) !important;
99
+ color: var(--app-text-color) !important;
100
+ font-weight: 500;
101
+ border-bottom: 1px solid var(--modal-border-color);
102
+ }
103
+ ```
104
+
105
+ **Note:** Import `./RichText.css` in the component file. The CSS variables (`--app-background-color`, `--app-text-color`, etc.) are set by the application theme.
106
+
107
+ When implementing with a different design system:
108
+ - Custom CSS for toolbar theming may be needed
109
+ - The editor container should be full-width
110
+ - Minimum height: ~200px for a usable editing area
111
+
112
+ ## Edge Cases & Special Logic
113
+
114
+ - **Props coercion to boolean:** Pega may pass these props as strings (`'true'`/`'false'`) — always coerce.
115
+ - **On blur, NOT on change:** Content is committed to the store only on blur (when user leaves the editor), not on every keystroke.
116
+ - **Error clearing:** When `status === 'error'`, the `onChange` handler clears the error message from Pega so it doesn't persist after the user starts editing.
117
+ - **`editorRef.current.getContent`:** This is specific to the TinyMCE API. For other rich text libraries, use the equivalent method to get HTML content.
118
+ - **`FieldValueList` with `isHtml`:** The display mode renders HTML — ensure XSS protection in the `FieldValueList` component (use `dangerouslySetInnerHTML` only with sanitization, or a trusted HTML renderer).
119
+
120
+ ## Dependencies
121
+
122
+ - `getComponentFromRegistry('RichTextEditor')` — the actual editor widget (e.g., TinyMCE wrapper).
123
+ - `getComponentFromRegistry('FieldValueList')` for display modes.
124
+ - `handleEvent` from `../../helpers/event-utils`.
125
+ - `./RichText.css` — must be imported for TinyMCE toolbar theming.
126
+ - `useRef` from React.
127
+
128
+ **For other rich text editors:**
129
+ - Any WYSIWYG editor that exposes `ref.current.getContent()` or equivalent.
130
+ - Examples: Quill, Draft.js, Slate.js, CKEditor.
131
+
132
+ ## Design System Mapping
133
+
134
+ **UI control type:** WYSIWYG rich text editor (HTML content).
135
+
136
+ Listed design systems are examples only.
137
+
138
+ | Design System | Recommended Component |
139
+ |---|---|
140
+ | Default (CSS only) | `contenteditable` div + custom toolbar OR TinyMCE |
141
+ | MUI | `RichTextEditor` custom extension (TinyMCE) |
142
+ | Ant Design | Quill or TinyMCE with Ant styling |
143
+ | Chakra UI | Quill or TipTap with Chakra styling |
@@ -0,0 +1,129 @@
1
+ ---
2
+ description: Field component skill: ScalarList
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Skill: ScalarList
7
+
8
+ Read-only display component that renders a list of scalar values by creating a child component for each item.
9
+
10
+ > **Prerequisite skill:** [`field-components.md`](../field-components.md) — covers architecture, props interface, display modes, event handling, and registration patterns common to ALL field components.
11
+
12
+ ---
13
+
14
+ ## Component Purpose
15
+
16
+ Renders a list of scalar (primitive) values by dynamically creating a child component of a specified type for each item. Used for read-only display of list-type properties. Not an editable input.
17
+
18
+ ## Pega Metadata
19
+
20
+ - **Pega Name:** `ScalarList`
21
+ - **Type / Subtype:** `Field` / `ScalarList`
22
+ - **Registration key:** `ScalarList` (in `component-map.ts`)
23
+
24
+ ## Props (component-specific)
25
+
26
+ > ScalarList uses `PConnProps` (NOT `PConnFieldProps`) because its `value` is an array, not a string:
27
+
28
+ ```typescript
29
+ import type { PConnProps } from '@pega/sdk-react';
30
+ ```
31
+
32
+ | Prop | Type | Description |
33
+ |------|------|-------------|
34
+ | `value` | `any[]` | Array of scalar values to display |
35
+ | `componentType` | `string` | The Pega component type to use for each item (e.g., `'TextInput'`, `'Date'`) |
36
+ | `label` | `string` | Field label |
37
+ | `displayMode` | `string` | Display mode |
38
+ | `hideLabel` | `boolean` | Whether to hide the label |
39
+ | `displayInModal` | `boolean` | Whether this is displayed in a modal context |
40
+
41
+ All remaining props (`...restProps`) are forwarded to each child component.
42
+
43
+ ## Behavioral Contract
44
+
45
+ 1. **No state, no event handling** — purely display/read-only.
46
+ 2. **Item rendering:** Map each value in `scalarValues` to a component via `getPConnect().createComponent(...)`:
47
+ ```typescript
48
+ const items = scalarValues?.map(scalarValue =>
49
+ getPConnect().createComponent(
50
+ {
51
+ type: componentType,
52
+ config: {
53
+ value: scalarValue,
54
+ displayMode: 'DISPLAY_ONLY',
55
+ label,
56
+ ...restProps,
57
+ readOnly: 'true'
58
+ }
59
+ },
60
+ '', // 2nd arg: empty string
61
+ '', // 3rd arg: empty string
62
+ {} // 4th arg: empty object
63
+ )
64
+ )
65
+ ```
66
+ 3. **`CommaSeparatedList` sub-component:** A local component that renders items as `<span>` elements inside a `<ul>` with no list styling:
67
+ ```html
68
+ <ul style="padding: 0; margin: 0;">
69
+ <span>item1</span>
70
+ <span>item2</span>
71
+ ...
72
+ </ul>
73
+ ```
74
+
75
+ ## Display Mode Rendering
76
+
77
+ **`STACKED_LARGE_VAL` or `DISPLAY_ONLY`:**
78
+ ```html
79
+ <div>
80
+ <CommaSeparatedList items={items} />
81
+ </div>
82
+ ```
83
+ No `FieldValueList` wrapper in these modes — the items are rendered directly.
84
+
85
+ **Default (no display mode):**
86
+ ```
87
+ <FieldValueList name={hideLabel ? '' : label} value={<CommaSeparatedList items={items} />} variant='stacked' />
88
+ ```
89
+
90
+ ## Visual Specifications
91
+
92
+ | Property | Value |
93
+ |----------|-------|
94
+ | List style | No bullets, no padding, no margin on `<ul>` |
95
+ | Item display | Each item rendered as `<span>` (inline) |
96
+ | Separator | Items are adjacent spans (no comma separator despite the name) |
97
+ | Layout | Vertical stack when wrapped in `FieldValueList variant='stacked'` |
98
+
99
+ **CSS-only notes:**
100
+ ```css
101
+ .scalar-list { list-style: none; padding: 0; margin: 0; }
102
+ .scalar-list-item { display: inline; }
103
+ ```
104
+
105
+ ## Edge Cases & Special Logic
106
+
107
+ - `scalarValues` may be `undefined` — the `?.map()` safely returns `undefined`; ensure null-check before rendering.
108
+ - Each child component is created with `displayMode: 'DISPLAY_ONLY'` and `readOnly: 'true'` (as string) — the read-only is passed as a string, not boolean.
109
+ - `restProps` includes all remaining props from the parent beyond the destructured ones — these are forwarded to each child component config.
110
+ - `createComponent` takes 4 args — 2nd, 3rd, 4th are empty string/object as the typedef marks them optional.
111
+
112
+ ## Dependencies
113
+
114
+ - `getComponentFromRegistry('FieldValueList')` for default display.
115
+ - `getPConnect().createComponent()` — for creating each child component.
116
+ - No `handleEvent` — read-only component.
117
+
118
+ ## Design System Mapping
119
+
120
+ **UI control type:** Read-only list of scalar values.
121
+
122
+ Listed design systems are examples only.
123
+
124
+ | Design System | Recommended Component |
125
+ |---|---|
126
+ | Default (CSS only) | `<ul>` with `<span>` items |
127
+ | MUI | `<List>` with `<ListItem>` or just `<Typography>` per item |
128
+ | Ant Design | `<List>` items or `<Space>` with `<Tag>` |
129
+ | Chakra UI | `<List>` or `<HStack>` with `<Tag>` |