@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,127 @@
1
+ # Skill: SimpleTable
2
+
3
+ Simple table template. Routes to FieldGroupTemplate, ListView (read-only), or the manual editable table based on configuration. Also covers `SimpleTableManual`, `SimpleTableSelect`, and `SimpleTableSelectReadonly` sub-variants.
4
+
5
+ > **Prerequisite skill:** [`template-components.md`](../template-components.md) — covers architecture, child rendering patterns, and registration conventions common to ALL template components.
6
+
7
+ ---
8
+
9
+ ## Component Purpose
10
+
11
+ Entry-point template for embedded table data in a form or detail view. Routes to the appropriate sub-component based on `multiRecordDisplayAs`, `fieldMetadata.dataRetrievalType`, and `readOnly`/`displayMode` flags. Sub-variants handle selection, read-only display, and full manual editing.
12
+
13
+ ## Pega Metadata
14
+
15
+ - **Registration keys:** `SimpleTable`, `SimpleTableManual`, `SimpleTableSelect`, `SimpleTableSelectReadonly` (all in `component-map.ts`)
16
+ - **Category:** Data display / Form template — embedded table
17
+ - **Extends:** `PConnProps`
18
+
19
+ ## Props
20
+
21
+ | Prop | Type | Required | Description |
22
+ |------|------|----------|-------------|
23
+ | `multiRecordDisplayAs` | `string` | No | `'fieldGroup'` delegates to FieldGroupTemplate; else table |
24
+ | `fieldMetadata` | `object` | No | Field-level metadata including `dataRetrievalType` |
25
+ | `referenceList` | `string` | No | Property path to the reference list |
26
+ | `displayAs` | `string` | No | For SimpleTableSelectReadonly: `'readonlyMulti'`, `'combobox'`, `'checkboxgroup'` routing |
27
+ | `selectionMode` | `string` | No | `'single'` or `'multi'` (for SimpleTableSelect) |
28
+ | `displayMode` | `string` | No | `'DISPLAY_ONLY'` triggers read-only sub-variant |
29
+ | `readOnly` | `boolean` | No | Alternative read-only flag |
30
+ | `getPConnect` | `function` | Yes | PConnect getter |
31
+
32
+ ## Behavioral Contract
33
+
34
+ ### SimpleTable — Routing Logic
35
+
36
+ ```
37
+ if multiRecordDisplayAs === 'fieldGroup':
38
+ → render FieldGroupTemplate
39
+ else if fieldMetadata.dataRetrievalType === 'refer':
40
+ → render ListView (read-only, bInForm: true)
41
+ else:
42
+ → render SimpleTableManual (editable table)
43
+ ```
44
+
45
+ ### SimpleTableManual — Full Editable Table
46
+
47
+ Full MUI table with add/delete rows, inline editing, sort, filter, and column customization (~600+ lines).
48
+
49
+ Key behaviors:
50
+ 1. **Row data source:** `referenceList` property path via `pConn.getValue(referenceList + '.pxResults')`.
51
+ 2. **Add row:** `pConn.getListActions().insert({})`.
52
+ 3. **Delete row:** `pConn.getListActions().deleteEntry(index)`.
53
+ 4. **Inline field editing:** Each cell renders the field's registered edit component via `buildView(pConn, rowIndex, colFieldName)`.
54
+ 5. **Sort:** Client-side sort on loaded data.
55
+ 6. **Column customization:** Visibility toggles per column via a settings popover.
56
+ 7. **Filter dialog:** Same filter pattern as ListView.
57
+
58
+ ### SimpleTableSelect — Selection Mode
59
+
60
+ Wraps `ListView` with additional selection configuration:
61
+ - Passes `additionalTableConfig` with `selectionMode: 'single'` or `'multi'`.
62
+ - On selection: calls `pConn.getListActions().setSelectedRow(selectedData)`.
63
+ - Used when `DataReference` routes to table-based selection.
64
+
65
+ ### SimpleTableSelectReadonly — Read-Only with Modal
66
+
67
+ 1. Renders a link/chip showing the current selection count.
68
+ 2. On click: opens a `<Dialog>` containing a `<SimpleTableManual>` in read-only mode.
69
+ 3. Props: same as `SimpleTableManual` but all fields locked (no add/delete/edit).
70
+
71
+ ## Visual Specifications
72
+
73
+ ### SimpleTableManual
74
+
75
+ | Element | Description |
76
+ |---------|-------------|
77
+ | Toolbar | Column settings button, filter button, optional search |
78
+ | Table | Full-width, alternating row colors |
79
+ | Add row | `"+ Add row"` button below the table |
80
+ | Delete row | Trash icon per row (rightmost column) |
81
+ | Column settings | Popover with checkboxes for visibility toggles |
82
+
83
+ **CSS-only implementation notes:**
84
+ - Table: `width: 100%; border-collapse: collapse`.
85
+ - Add row button: `margin-top: 0.5rem; text-align: left`.
86
+ - Delete cell: `width: 40px; text-align: center`.
87
+ - Read-only mode: hide add/delete controls; cells show plain text.
88
+
89
+ ### SimpleTableSelectReadonly
90
+
91
+ | Element | Description |
92
+ |---------|-------------|
93
+ | Trigger | Link or chip showing selection count |
94
+ | Modal | Full-screen or large dialog with SimpleTableManual |
95
+ | Modal close | `X` button in modal header |
96
+
97
+ ## Edge Cases & Special Logic
98
+
99
+ - `multiRecordDisplayAs === 'fieldGroup'` — completely bypasses table; delegates to `FieldGroupTemplate`.
100
+ - `dataRetrievalType === 'refer'` — data comes from a reference list, not a full data page; use `ListView` in read-only mode.
101
+ - `SimpleTableManual` with 600+ lines — break into sub-hooks if re-implementing.
102
+ - Row keys must be unique — use composite keys from `compositeKeys` config if available.
103
+ - Column customization state is local — not persisted across navigation.
104
+
105
+ ## Dependencies
106
+
107
+ - `FieldGroupTemplate` (for `multiRecordDisplayAs === 'fieldGroup'` routing)
108
+ - `ListView` (for `dataRetrievalType === 'refer'` routing)
109
+ - `buildView` from `../../helpers/field-group-utils` (for inline cell rendering in SimpleTableManual)
110
+ - MUI: `<Table>`, `<Dialog>`, `<Popover>`, `<IconButton>`, `<Button>`, `<Checkbox>`
111
+
112
+ ## Design System Mapping
113
+
114
+ **UI control type:** Embedded data table with routing to field group, read-only list, or fully editable table.
115
+
116
+ Listed design systems are examples only.
117
+
118
+ | Sub-variant | Default (CSS only) | MUI |
119
+ |---|---|---|
120
+ | SimpleTableManual | `<table>` + custom controls | MUI `<Table>` |
121
+ | SimpleTableSelect | Custom table + radio/checkbox | `<ListView>` wrapper |
122
+ | SimpleTableSelectReadonly | Link + `<dialog>` | Chip + `<Dialog>` |
123
+
124
+ When implementing in a specific design system:
125
+ - Always check `multiRecordDisplayAs === 'fieldGroup'` first — this bypasses the table entirely
126
+ - `SimpleTableManual` add/delete row controls must be hidden when `readOnly === true` or `displayMode === 'DISPLAY_ONLY'`
127
+ - `SimpleTableSelect` uses the same `ListView` but adds selection callbacks
@@ -0,0 +1,103 @@
1
+ # Skill: SingleReferenceReadOnly
2
+
3
+ Single reference read-only template. Renders a read-only reference field as a semantic link for editable field types, or as a plain label otherwise.
4
+
5
+ > **Prerequisite skill:** [`template-components.md`](../template-components.md) — covers architecture, child rendering patterns, and registration conventions common to ALL template components.
6
+
7
+ ---
8
+
9
+ ## Component Purpose
10
+
11
+ Renders a single data reference field in read-only mode. For fields that were displayed as editable selection controls (autocomplete, table select, dropdown), renders a `SemanticLink` component so the reference value is clickable/navigable. For other display types, renders a plain read-only label.
12
+
13
+ ## Pega Metadata
14
+
15
+ - **Registration key:** `SingleReferenceReadOnly` (in `component-map.ts`)
16
+ - **Category:** Display template — read-only reference
17
+ - **Extends:** `PConnProps`
18
+
19
+ ## Props
20
+
21
+ | Prop | Type | Required | Description |
22
+ |------|------|----------|-------------|
23
+ | `label` | `string` | Yes | Field label |
24
+ | `displayAs` | `string` | Yes | The edit-mode display type this field was configured with |
25
+ | `value` | `string` | No | Current field value (display text) |
26
+ | `caseClass` | `string` | No | Class identifier for the referenced case |
27
+ | `text` | `string` | No | Display text for the semantic link |
28
+ | `caseID` | `string` | No | Case ID for the semantic link |
29
+ | `contextPage` | `string` | No | Context page identifier |
30
+ | `resourceParams` | `object` | No | Parameters for the referenced resource |
31
+ | `resourcePayload` | `object` | No | Payload for resource navigation |
32
+ | `getPConnect` | `function` | Yes | PConnect getter |
33
+
34
+ ## Behavioral Contract
35
+
36
+ ### Editable Component Check
37
+
38
+ ```
39
+ editableComponents = ['AutoComplete', 'SimpleTableSelect', 'Dropdown']
40
+ ```
41
+
42
+ If `displayAs` is in `editableComponents`:
43
+ 1. Build config with: `caseClass`, `text`, `caseID`, `contextPage`, `resourceParams`, `resourcePayload`.
44
+ 2. Create: `createComponent({ type: 'SemanticLink', config: { ...builtConfig } })`.
45
+ 3. Render the created `SemanticLink` component.
46
+
47
+ Else:
48
+ - Render a plain read-only display using `<FormControl variant='standard'>` + `<FormLabel>` + value text.
49
+
50
+ ### Layout
51
+
52
+ For both variants, wrap with:
53
+ ```tsx
54
+ <FormControl variant='standard' sx={{ flexDirection: 'row' }}>
55
+ <FormLabel sx={{ marginRight: '2rem' }}>{label}</FormLabel>
56
+ {semanLinkOrValue}
57
+ </FormControl>
58
+ ```
59
+
60
+ ## Visual Specifications
61
+
62
+ | Variant | Layout |
63
+ |---------|--------|
64
+ | SemanticLink | Label (left) + clickable link (right) |
65
+ | Plain read-only | Label (left) + plain text (right) |
66
+
67
+ **CSS-only implementation notes:**
68
+ - Wrapper: `display: flex; flex-direction: row; align-items: baseline; gap: 1rem`.
69
+ - Label: `font-size: 0.875rem; color: var(--secondary-text-color); min-width: 120px`.
70
+ - Semantic link: `color: var(--link-color); text-decoration: underline; cursor: pointer`.
71
+ - Plain value: `font-size: 0.875rem; color: var(--primary-text-color)`.
72
+
73
+ ## Edge Cases & Special Logic
74
+
75
+ - `displayAs` check is case-sensitive — values are `'AutoComplete'`, `'SimpleTableSelect'`, `'Dropdown'` (exact match).
76
+ - `createComponent` returns a PConnect config — render via `createElement(PConnectComponent, { ...createdConfig })`.
77
+ - If `text` is empty/undefined, the semantic link shows the `caseID` as fallback text.
78
+ - `SemanticLink` navigation requires `caseClass` and `caseID` — if either is missing, fall back to plain read-only display.
79
+
80
+ ## Dependencies
81
+
82
+ - `PConnectComponent` from `@pega/sdk-react` — for rendering the `SemanticLink`
83
+ - `getPConnect().createComponent()` — creates the SemanticLink component config
84
+ - MUI: `<FormControl>`, `<FormLabel>`
85
+
86
+ ## Design System Mapping
87
+
88
+ **UI control type:** Read-only reference field — semantic link for navigable references, plain label otherwise.
89
+
90
+ Listed design systems are examples only.
91
+
92
+ | Design System | Semantic Link | Plain Read-Only |
93
+ |---|---|---|
94
+ | Default (CSS only) | `<a>` with case navigation | `<span>` |
95
+ | MUI | `SemanticLink` rendered via `createComponent` | `<Typography>` |
96
+ | Ant Design | `<Typography.Link>` | `<Typography.Text>` |
97
+ | Chakra UI | `<Link>` | `<Text>` |
98
+ | Shadcn/ui | Custom link | `<span>` |
99
+
100
+ When implementing in a specific design system:
101
+ - The `editableComponents` list (`'AutoComplete'`, `'SimpleTableSelect'`, `'Dropdown'`) controls semantic link vs plain display
102
+ - `SemanticLink` must be rendered via `createComponent` — do not implement the link logic directly in this component
103
+ - Horizontal label + value layout (row direction) is required
@@ -0,0 +1,79 @@
1
+ # Skill: SubTabs
2
+
3
+ Sub-tabs navigation template. Renders a tab container for case view sections using shared tab utilities with deferred content loading.
4
+
5
+ > **Prerequisite skill:** [`template-components.md`](../template-components.md) — covers architecture, child rendering patterns, and registration conventions common to ALL template components.
6
+
7
+ ---
8
+
9
+ ## Component Purpose
10
+
11
+ Renders a horizontal tab bar for navigating between case view sections. Uses shared `tabUtils` for tab state management (visible tabs, transient tabs, tab click). Tab content is deferred — only the active tab loads content. No section heading.
12
+
13
+ ## Pega Metadata
14
+
15
+ - **Registration key:** `SubTabs` (in `component-map.ts`)
16
+ - **Category:** Navigation template
17
+ - **Extends:** `PConnProps`
18
+
19
+ ## Props
20
+
21
+ | Prop | Type | Required | Description |
22
+ |------|------|----------|-------------|
23
+ | `children` | `ReactNode[]` | Yes | `children[0]` is the deferred-loaded tabs container |
24
+ | `getPConnect` | `function` | Yes | PConnect getter |
25
+
26
+ ## Behavioral Contract
27
+
28
+ 1. **Extract deferred tabs:** `deferLoadedTabs = Children.toArray(children)[0]`.
29
+ 2. **State:** `currentTabId` (string, default `'0'`), `tabItems` (array).
30
+ 3. **Compute visible tabs:** `getVisibleTabs(deferLoadedTabs, 'tabsSubs')` in `useEffect([deferLoadedTabs])` → `availableTabs`.
31
+ 4. **Transient tabs:** `useEffect([currentTabId])` → `setTabItems(getTransientTabs(availableTabs, currentTabId, tabItems))`.
32
+ 5. **Tab click:** `tabClick(index, availableTabs, currentTabId, setCurrentTabId, tabItems)` from `tabUtils`.
33
+ 6. **Render:**
34
+ - `<TabContext value={currentTabId}>`
35
+ - `<Tabs onChange={handleTabClick} value={currentTabId}>` — one `<Tab>` per `tabItems`
36
+ - One `<TabPanel>` per `tabItems` with `tab.content || ''`
37
+ 7. No section heading (unlike `DetailsSubTabs`).
38
+
39
+ > **Difference from `DetailsSubTabs`:** SubTabs has no `label`/`showLabel` props and no `<h3>` heading. Uses `'tabsSubs'` identifier for `getVisibleTabs` (vs `'detailsSubTabs'`).
40
+
41
+ ## Visual Specifications
42
+
43
+ Identical to `DetailsSubTabs` except no heading above the tab bar.
44
+
45
+ **CSS-only implementation notes:**
46
+ - Tab bar: `display: flex; border-bottom: 2px solid var(--divider)`.
47
+ - Each tab: `padding: 8px 16px; cursor: pointer; border-bottom: 2px solid transparent`.
48
+ - Active tab: `border-bottom-color: var(--app-primary-color); font-weight: 600`.
49
+ - Tab panel: `padding: 16px 0`.
50
+
51
+ ## Edge Cases & Special Logic
52
+
53
+ See `DetailsSubTabs.md` for shared edge cases. Additional:
54
+ - `tabUtils` identifier string `'tabsSubs'` must match exactly — it is used internally by `getVisibleTabs` for scoping.
55
+
56
+ ## Dependencies
57
+
58
+ - `getTransientTabs`, `getVisibleTabs`, `tabClick` from `./tabUtils`
59
+ - `TabContext`, `TabPanel` from `@mui/lab`
60
+ - `Tab`, `Tabs` from `@mui/material`
61
+
62
+ ## Design System Mapping
63
+
64
+ **UI control type:** Tab navigation container — no heading, deferred content loading.
65
+
66
+ Listed design systems are examples only.
67
+
68
+ | Design System | Recommended Component |
69
+ |---|---|
70
+ | Default (CSS only) | Custom tab bar with CSS underline indicator |
71
+ | MUI | `<TabContext>` + `<Tabs>` + `<TabPanel>` from `@mui/lab` |
72
+ | Ant Design | `<Tabs>` with `items` array |
73
+ | Chakra UI | `<Tabs>` + `<TabList>` + `<TabPanels>` |
74
+ | Shadcn/ui | `<Tabs>` + `<TabsList>` + `<TabsContent>` |
75
+
76
+ When implementing in a specific design system:
77
+ - Use `getVisibleTabs(tabs, 'tabsSubs')` — the identifier string must be `'tabsSubs'`
78
+ - No heading above the tab bar (unlike `DetailsSubTabs`)
79
+ - Deferred loading: content populates lazily via `getTransientTabs`
@@ -0,0 +1,131 @@
1
+ # Skill: TwoColumn
2
+
3
+ Two-column layout template that splits children into two responsive grid columns with configurable width ratios.
4
+
5
+ > **Prerequisite skill:** [`template-components.md`](../template-components.md) — covers architecture, child rendering patterns, and registration conventions common to ALL template components.
6
+
7
+ ---
8
+
9
+ ## Component Purpose
10
+
11
+ Renders two child components side by side in a responsive grid. Column widths are driven by the `templateCol` prop (e.g., `'1fr 1fr'`, `'2fr 1fr'`). On mobile (`xs`), both columns collapse to full width. Three closely related sub-variants share this same layout logic:
12
+
13
+ - **`TwoColumn`** — core layout, used inside forms and views
14
+ - **`TwoColumnPage`** — thin wrapper that delegates to `TwoColumn` via the component registry
15
+ - **`TwoColumnTab`** — identical layout implementation used inside tab contexts
16
+
17
+ ## Pega Metadata
18
+
19
+ | Variant | Registration Key |
20
+ |---------|-----------------|
21
+ | TwoColumn | `TwoColumn` |
22
+ | TwoColumnPage | `TwoColumnPage` |
23
+ | TwoColumnTab | `TwoColumnTab` |
24
+
25
+ All three extend `PConnProps`. Children are received as React `children` (not via `getPConnect().getChildren()`).
26
+
27
+ ## Props
28
+
29
+ | Prop | Type | Required | Description |
30
+ |------|------|----------|-------------|
31
+ | `children` | `ReactNode[]` | Yes | Exactly 2 children (left column, right column) |
32
+ | `templateCol` | `string` | No | Column width ratio string, e.g., `'1fr 1fr'`, `'2fr 1fr'`. Default `'1fr 1fr'` |
33
+
34
+ ## Sub-Variants
35
+
36
+ ### TwoColumnPage
37
+
38
+ Thin pass-through wrapper. Retrieves `TwoColumn` from the component registry and renders it with all props forwarded:
39
+
40
+ ```typescript
41
+ const TwoColumn = getComponentFromRegistry('TwoColumn');
42
+ return <TwoColumn {...props} />;
43
+ ```
44
+
45
+ ### TwoColumnTab
46
+
47
+ Identical implementation to `TwoColumn` — same grid layout, same `templateCol` parsing, same column styles. Registered separately under `TwoColumnTab` key to support tab context rendering.
48
+
49
+ ## Behavioral Contract
50
+
51
+ 1. Accept exactly 2 children. If a different count is received, log an error (console only — still render).
52
+ 2. Parse `templateCol` to compute MUI Grid column sizes:
53
+ - Strip unit suffixes (e.g., `'fr'`) from each token using regex: `.replaceAll(/[a-z]+/g, '')`.
54
+ - Split on whitespace and convert to numbers.
55
+ - Compute `totalCols = sum(colArray)`.
56
+ - Compute `ratio = 12 / totalCols`.
57
+ - `aSize = ratio * colArray[0]`, `bSize = ratio * colArray[1]` (both clamped to MUI's 1–12 GridSize range).
58
+ 3. Render a Grid container with `spacing={1}`.
59
+ 4. Render `children[0]` in the left column at `size={{ xs: 12, md: aSize }}`.
60
+ 5. Render `children[1]` in the right column at `size={{ xs: 12, md: bSize }}`.
61
+ 6. Apply `colStyles` class to each column: `display: grid; gap: 1rem; alignContent: baseline`.
62
+
63
+ ## Visual Specifications
64
+
65
+ Derived from `TwoColumn.tsx` and `TwoColumnTab.tsx` makeStyles:
66
+
67
+ ### Column Style
68
+
69
+ | Property | Value |
70
+ |----------|-------|
71
+ | Display | grid |
72
+ | Gap | 1rem |
73
+ | Align content | baseline (children stack top-aligned) |
74
+
75
+ ### Grid Spacing
76
+
77
+ | Property | Value |
78
+ |----------|-------|
79
+ | Container spacing | 1 (≈ 8px between columns) |
80
+
81
+ ### Responsive Behavior
82
+
83
+ | Breakpoint | Column A | Column B |
84
+ |-----------|----------|----------|
85
+ | xs (mobile) | 12/12 (full width) | 12/12 (full width, stacks below) |
86
+ | md+ (desktop) | `aSize`/12 | `bSize`/12 |
87
+
88
+ **Column ratio examples:**
89
+
90
+ | `templateCol` | Column A | Column B |
91
+ |--------------|----------|----------|
92
+ | `'1fr 1fr'` | 6/12 (50%) | 6/12 (50%) |
93
+ | `'2fr 1fr'` | 8/12 (67%) | 4/12 (33%) |
94
+ | `'1fr 2fr'` | 4/12 (33%) | 8/12 (67%) |
95
+ | `'3fr 1fr'` | 9/12 (75%) | 3/12 (25%) |
96
+
97
+ **CSS-only implementation notes:**
98
+ - Column container: `display: grid; gap: 1rem; align-content: start`.
99
+ - Outer grid: `display: grid; grid-template-columns: <aFraction>fr <bFraction>fr; gap: 8px`.
100
+ - Mobile: `grid-template-columns: 1fr` (single column stack).
101
+ - Each column has `display: grid; gap: 1rem; align-content: baseline` for internal stacking.
102
+
103
+ ## Edge Cases & Special Logic
104
+
105
+ - Default `templateCol` is `'1fr 1fr'` (equal split) when not provided.
106
+ - The `templateCol` parsing is regex-based — any non-numeric suffix is stripped. If only numbers are provided (e.g., `'6 6'`), it still works.
107
+ - `TwoColumnPage` uses `getComponentFromRegistry('TwoColumn')` — if the registry returns an override, that override is used instead of the default `TwoColumn` implementation.
108
+
109
+ ## Dependencies
110
+
111
+ - `TwoColumnPage`: `getComponentFromRegistry` from `@pega/sdk-react` — to resolve the `TwoColumn` component at runtime
112
+ - `TwoColumn` / `TwoColumnTab`: no special dependencies beyond layout
113
+
114
+ ## Design System Mapping
115
+
116
+ **UI control type:** Responsive two-column grid layout.
117
+
118
+ Listed design systems are examples only.
119
+
120
+ | Design System | Recommended Component |
121
+ |---|---|
122
+ | Default (CSS only) | CSS Grid with `grid-template-columns: <a>fr <b>fr; gap: 8px` |
123
+ | MUI | `<Grid container spacing={1}><Grid size={{ xs: 12, md: N }}>` |
124
+ | Ant Design | `<Row gutter={8}><Col xs={24} md={N * 2}>` (Ant uses 24-column grid) |
125
+ | Chakra UI | `<SimpleGrid columns={{ base: 1, md: 2 }} spacing={2}>` |
126
+ | Shadcn/ui | Tailwind `grid grid-cols-1 md:grid-cols-[<a>fr_<b>fr] gap-2` |
127
+
128
+ When implementing in a specific design system:
129
+ - Parse `templateCol` using the same ratio algorithm (strip units, divide 12 by total)
130
+ - Apply `align-content: baseline` so children within each column stack top-aligned
131
+ - Collapse to single column on mobile breakpoint
@@ -0,0 +1,150 @@
1
+ # Skill: WideNarrow
2
+
3
+ Asymmetric two-column layout with a wide left column (~67%) and a narrow right column (~33%). Mirror of NarrowWide. Includes four sub-variants.
4
+
5
+ > **Prerequisite skill:** [`template-components.md`](../template-components.md) — covers architecture, child rendering patterns, and registration conventions common to ALL template components.
6
+
7
+ ---
8
+
9
+ ## Component Purpose
10
+
11
+ Renders two children side by side with the left column wider than the right. Typically used when the main content occupies the left and a utility/sidebar panel sits on the right. Four sub-variants:
12
+
13
+ - **`WideNarrow`** — core CSS-based layout, accepts either `a`/`b` slot props or React `children[0]`/`children[1]`
14
+ - **`WideNarrowPage`** — wrapper that passes React children as `a` and `b` slot props to `WideNarrow`
15
+ - **`WideNarrowForm`** — simplified wrapper using only `children`
16
+ - **`WideNarrowDetails`** — details read-only variant; sets children to DISPLAY_ONLY mode and supports highlighted data
17
+
18
+ > This component is the mirror of `NarrowWide`. All behavioral and structural patterns are identical except column order and CSS class names. See the `NarrowWide` skill for detailed pattern descriptions.
19
+
20
+ ## Pega Metadata
21
+
22
+ | Variant | Registration Key |
23
+ |---------|-----------------|
24
+ | WideNarrow | `WideNarrow` |
25
+ | WideNarrowPage | `WideNarrowPage` |
26
+ | WideNarrowForm | `WideNarrowForm` |
27
+ | WideNarrowDetails | `WideNarrowDetails` |
28
+
29
+ All extend `PConnProps`.
30
+
31
+ ## Props
32
+
33
+ ### WideNarrow
34
+
35
+ | Prop | Type | Required | Description |
36
+ |------|------|----------|-------------|
37
+ | `children` | `ReactNode[]` | No | Two children — `[0]` → wide (left), `[1]` → narrow (right) |
38
+ | `a` | `any` | No | Wide (left) column content |
39
+ | `b` | `any` | No | Narrow (right) column content |
40
+ | `title` | `string` | No | Optional title (not rendered) |
41
+ | `cols` | `string` | No | Column template (not rendered) |
42
+ | `icon` | `string` | No | Icon name (not rendered) |
43
+
44
+ ### WideNarrowPage
45
+
46
+ | Prop | Type | Required | Description |
47
+ |------|------|----------|-------------|
48
+ | `children` | `ReactNode[]` | Yes | Two children — `[0]` → wide slot, `[1]` → narrow slot |
49
+ | `title` | `string` | Yes | Page title (passed to WideNarrow) |
50
+ | `templateCol` | `string` | No | Column ratio (default `'1fr 1fr'`) |
51
+ | `icon` | `string` | No | Icon name (strips `'pi pi-'` prefix) |
52
+
53
+ ### WideNarrowForm
54
+
55
+ | Prop | Type | Required | Description |
56
+ |------|------|----------|-------------|
57
+ | `children` | `ReactNode[]` | Yes | Two children rendered in wide/narrow slots |
58
+
59
+ ### WideNarrowDetails
60
+
61
+ | Prop | Type | Required | Description |
62
+ |------|------|----------|-------------|
63
+ | `label` | `string` | No | Section label for FieldGroup |
64
+ | `showLabel` | `boolean` | No | Whether to show the label. Default `true` |
65
+ | `showHighlightedData` | `boolean` | No | Whether to render highlighted data fields. Default `false` |
66
+ | `getPConnect` | `function` | Yes | PConnect getter |
67
+
68
+ ## Behavioral Contract
69
+
70
+ ### WideNarrow
71
+
72
+ 1. If `children` is provided and has exactly 2 items: render `children[0]` in `.psdk-wide-column-column` and `children[1]` in `.psdk-narrow-column-column` (both wrapped in `.psdk-wide-narrow-column`).
73
+ 2. If `a` and `b` are provided: render `a` in the wide slot and `b` in the narrow slot.
74
+ 3. `children` takes priority over `a`/`b` when both are present.
75
+
76
+ ### WideNarrowPage
77
+
78
+ 1. Extract `childArray = Children.toArray(children)`.
79
+ 2. Retrieve `WideNarrow` from the component registry.
80
+ 3. Render `<WideNarrow a={childArray[0]} b={childArray[1]} title={title} cols={templateCol} icon={icon?.replace('pi pi-', '')} />`.
81
+
82
+ ### WideNarrowForm
83
+
84
+ 1. Render using `children` path — checks `children.length === 2`, renders wide/narrow CSS divs.
85
+
86
+ ### WideNarrowDetails
87
+
88
+ 1. Set `getPConnect().setInheritedProp('displayMode', 'DISPLAY_ONLY')` and `setInheritedProp('readOnly', true)`.
89
+ 2. Map `getPConnect().getChildren()` → `createElement(PConnectComponent, { ...configObject, key: index })`.
90
+ 3. If `showHighlightedData` is true, read `getRawMetadata().config.highlightedData`, set each field's `displayMode = 'STACKED_LARGE_VAL'`, mark `pyStatusWork` as `displayAsStatus=true`, and create components via `getPConnect().createComponent(field, '', 0, {})`.
91
+ 4. Wrap in `<FieldGroup name={theName}>` using `propsToUse.showLabel && propsToUse.label`.
92
+ 5. Layout: highlighted data in `Grid size={{ xs: COLUMN_WIDTHS[i] }}` where **`COLUMN_WIDTHS = [8, 4]`** (wide left, narrow right — reversed vs NarrowWideDetails).
93
+ 6. Children rendered in `Grid size={{ xs: 12 }}` rows.
94
+
95
+ ## Visual Specifications
96
+
97
+ Derived from `WideNarrow.css`:
98
+
99
+ ### Container
100
+
101
+ | CSS Class | Property | Value |
102
+ |-----------|----------|-------|
103
+ | `.psdk-wide-narrow-column` | Display | two-column row layout |
104
+ | `.psdk-wide-column-column` | Width | ~67% (2 of 3 parts) — LEFT column |
105
+ | `.psdk-narrow-column-column` | Width | ~33% (1 of 3 parts) — RIGHT column |
106
+
107
+ **CSS-only implementation notes:**
108
+ - `.psdk-wide-narrow-column`: `display: grid; grid-template-columns: 2fr 1fr; gap: 1rem`.
109
+ - Wide column (left): `2fr` — takes the first grid column.
110
+ - Narrow column (right): `1fr` — takes the second grid column.
111
+ - On mobile: `grid-template-columns: 1fr` (stacks vertically, wide on top).
112
+
113
+ ### Key Difference from NarrowWide
114
+
115
+ | | NarrowWide | WideNarrow |
116
+ |---|---|---|
117
+ | Left column | Narrow (~33%) | Wide (~67%) |
118
+ | Right column | Wide (~67%) | Narrow (~33%) |
119
+ | CSS container class | `.psdk-narrow-wide-column` | `.psdk-wide-narrow-column` |
120
+ | `COLUMN_WIDTHS` (Details) | `[4, 8]` | `[8, 4]` |
121
+
122
+ ## Edge Cases & Special Logic
123
+
124
+ - `WideNarrowDetails` defaults `children` to empty (`= []`) — safe even if no children are provided.
125
+ - Highlighted data guard: check `if (!theConfigObject) theConfigObject = {}` before creating PConnectComponent — prevents crash on null config objects.
126
+ - Icon cleanup in `WideNarrowPage`: strip `'pi pi-'` from icon string before passing to `WideNarrow`.
127
+
128
+ ## Dependencies
129
+
130
+ - `WideNarrowPage`: `getComponentFromRegistry` from `@pega/sdk-react`
131
+ - `WideNarrowDetails`: `getComponentFromRegistry('FieldGroup')`, `PConnectComponent` from `@pega/sdk-react`
132
+
133
+ ## Design System Mapping
134
+
135
+ **UI control type:** Asymmetric two-column layout (main content + sidebar).
136
+
137
+ Listed design systems are examples only.
138
+
139
+ | Design System | Recommended Component |
140
+ |---|---|
141
+ | Default (CSS only) | CSS Grid `grid-template-columns: 2fr 1fr; gap: 1rem` |
142
+ | MUI | `<Grid container><Grid size={{ xs: 12, md: 8 }}><Grid size={{ xs: 12, md: 4 }}>` |
143
+ | Ant Design | `<Row gutter={16}><Col xs={24} md={16}><Col xs={24} md={8}>` |
144
+ | Chakra UI | `<Grid templateColumns={{ base: '1fr', md: '2fr 1fr' }} gap={4}>` |
145
+ | Shadcn/ui | Tailwind `grid grid-cols-1 md:grid-cols-[2fr_1fr] gap-4` |
146
+
147
+ When implementing in a specific design system:
148
+ - Wide column ≈ 67% width (left side)
149
+ - Narrow column ≈ 33% width (right side)
150
+ - `WideNarrowDetails` forces DISPLAY_ONLY + readOnly on all children