@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,109 @@
1
+ # Skill: FieldGroupTemplate
2
+
3
+ Repeating field group template. Renders a list of field group rows from a reference list, supporting add/delete row actions and a read-only display mode.
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 repeating list of field group rows sourced from a PConnect reference list. In edit mode, rows can be added and deleted via list actions. In read-only mode (DISPLAY_ONLY), delegates to a read-only `FieldGroup` renderer. Each row is built via `buildView`.
12
+
13
+ ## Pega Metadata
14
+
15
+ - **Registration key:** `FieldGroupTemplate` (in `component-map.ts`)
16
+ - **Category:** Form template — repeating
17
+ - **Extends:** `PConnProps`
18
+
19
+ ## Props
20
+
21
+ | Prop | Type | Required | Description |
22
+ |------|------|----------|-------------|
23
+ | `label` | `string` | Yes | Section heading |
24
+ | `showLabel` | `boolean` | No | Whether to show the heading. Default `true` |
25
+ | `fieldHeader` | `string` | No | Property ref for the dynamic row heading. E.g. `'.pyStatusWork'` |
26
+ | `allowTableEdit` | `boolean` | No | Whether to show add/delete row controls. Default `true` |
27
+ | `displayMode` | `string` | No | `'DISPLAY_ONLY'` triggers read-only rendering |
28
+ | `readOnly` | `boolean` | No | Alternative read-only flag |
29
+ | `getPConnect` | `function` | Yes | PConnect getter |
30
+
31
+ ## Behavioral Contract
32
+
33
+ ### Read-Only Mode
34
+
35
+ If `displayMode === 'DISPLAY_ONLY'` or `readOnly === true`:
36
+ 1. Set `setInheritedProp('DISPLAY_ONLY', true)` on the pConn.
37
+ 2. Render `<FieldGroup>` — the DSE component that shows data in a read-only layout.
38
+
39
+ ### Edit Mode
40
+
41
+ 1. **Get reference list:** `resolvedList = getReferenceList(pConn)` — extracts the array of row data objects.
42
+ 2. **Set reference list:** `pConn.setReferenceList(resolvedList)` — ensures the pConn has the resolved list.
43
+ 3. **Build row views:** For each row index `i`, call `buildView(pConn, i, true)` to get the PConnect view for that row.
44
+ 4. **Render `<FieldGroupList>`** — the DSE component for edit mode, receiving:
45
+ - `resolvedList` for row count
46
+ - Row views as children
47
+ - `onAdd`: calls `pConn.getListActions().insert({})`
48
+ - `onDelete(index)`: calls `pConn.getListActions().deleteEntry(index)`
49
+ - `fieldHeader`: evaluated property ref for dynamic row heading
50
+ - `allowActions`: from `allowTableEdit` prop (controls visibility of add/delete buttons)
51
+
52
+ ### `allowActions` Override
53
+
54
+ If the field group is inside a read-only context (parent has set `readOnly` or `DISPLAY_ONLY`), `allowActions` is forced to `false` regardless of `allowTableEdit`.
55
+
56
+ ## Visual Specifications
57
+
58
+ ### Edit Mode
59
+
60
+ - Section heading (`label`) at top (if `showLabel`).
61
+ - List of row sections, each with:
62
+ - Dynamic heading from `fieldHeader` property value (e.g. `"Active"`, `"Pending"`).
63
+ - Row fields in a grid layout.
64
+ - Delete button (trash icon) per row.
65
+ - Add row button at the bottom (e.g. `"+ Add row"`).
66
+
67
+ ### Read-Only Mode
68
+
69
+ - Section heading at top (if `showLabel`).
70
+ - Flat list of rows — no add/delete controls.
71
+
72
+ **CSS-only implementation notes:**
73
+ - Row section: `border: 1px solid var(--border-color); border-radius: 4px; padding: 1rem; margin-bottom: 0.5rem`.
74
+ - Add button: text button, below the last row.
75
+ - Delete button: icon button, top-right of each row section.
76
+
77
+ ## Edge Cases & Special Logic
78
+
79
+ - `getReferenceList(pConn)` returns `undefined` if the reference list is not yet loaded — guard and render empty list.
80
+ - `buildView(pConn, index, true)` — third argument `lookForChildInConfig=true` — required for embedded field groups.
81
+ - Row index must be passed to `deleteEntry` as a number (not string).
82
+ - `fieldHeader` is a property ref like `'.pyStatusWork'` — evaluate it per-row via `pConn.getValue(fieldHeader, index)` to get the display label for each row heading.
83
+ - `FieldGroupList` and `FieldGroup` are DSE (design system extension) components registered in the component registry.
84
+
85
+ ## Dependencies
86
+
87
+ - `getReferenceList`, `buildView` from `../../helpers/field-group-utils`
88
+ - `getComponentFromRegistry('FieldGroupList')` — edit mode renderer
89
+ - `getComponentFromRegistry('FieldGroup')` — read-only renderer
90
+ - `PConnectComponent` from `@pega/sdk-react` — used inside `buildView`
91
+
92
+ ## Design System Mapping
93
+
94
+ **UI control type:** Repeating list of grouped form sections with add/delete row management.
95
+
96
+ Listed design systems are examples only.
97
+
98
+ | Design System | Recommended Component |
99
+ |---|---|
100
+ | Default (CSS only) | Custom row card list with add/delete buttons |
101
+ | MUI | `<Paper>` per row + `<IconButton>` for delete + `<Button>` for add |
102
+ | Ant Design | `<Form.List>` with `<Card>` per row |
103
+ | Chakra UI | Custom repeating section with `<Box>` rows |
104
+ | Shadcn/ui | Custom list with `<Card>` per row + `<Button variant='ghost'>` |
105
+
106
+ When implementing in a specific design system:
107
+ - The add/delete controls must be hidden when `allowActions` is false
108
+ - Row heading is dynamic — evaluate `fieldHeader` property ref per row
109
+ - `buildView` generates child PConnect views — render them inside each row section
@@ -0,0 +1,113 @@
1
+ # Skill: HierarchicalForm
2
+
3
+ Multi-step tabbed form template. Renders form sections as horizontal tabs with per-tab validation error badges and persisted active tab navigation.
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 multi-step form where each section is a tab. Tabs display error badges when their content has validation errors. The active tab index is persisted to navigation state so it survives renders. Optional instruction HTML is displayed above the tab bar.
12
+
13
+ ## Pega Metadata
14
+
15
+ - **Registration key:** `HierarchicalForm` (in `component-map.ts`)
16
+ - **Category:** Form template
17
+ - **Extends:** `PConnProps`
18
+
19
+ ## Props
20
+
21
+ | Prop | Type | Required | Description |
22
+ |------|------|----------|-------------|
23
+ | `children` | `ReactNode[]` | Yes | One child per tab section |
24
+ | `instructions` | `string` | No | HTML instruction text shown above the tab bar |
25
+ | `getPConnect` | `function` | Yes | PConnect getter |
26
+
27
+ ## Behavioral Contract
28
+
29
+ ### Hook: `useHierarchicalForm`
30
+
31
+ `useHierarchicalForm(getPConnect, numTabs)` returns:
32
+ - `activeTabId`: currently selected tab index (string, e.g. `'0'`)
33
+ - `setActiveTabId`: setter for `activeTabId`
34
+ - `tabErrorCounts`: `Record<string, number>` — error count per tab index key
35
+
36
+ Internally it calls `useGetTabsCount(getPConnect)` to compute `tabErrorCounts`.
37
+
38
+ ### Active Tab Persistence
39
+
40
+ - On mount, read persisted tab from `PCore.getNavigationUtils().getComponentState(navigationKey)` — use `getActiveTabId(componentState)` to extract the stored tab index, or fall back to `getFirstVisibleTabId(tabItems)`.
41
+ - On tab change, persist via `PCore.getNavigationUtils().setComponentState(navigationKey, { activeTabId: newId })`.
42
+ - `navigationKey` is derived from the component's fully-qualified context path.
43
+
44
+ ### Instructions
45
+
46
+ - Call `getInstructions(getPConnect(), props.instructions)` to get sanitized HTML.
47
+ - If non-empty, render `<div className='psdk-default-form-instruction-text' dangerouslySetInnerHTML={{ __html: instructions }} />` above the tabs.
48
+
49
+ ### Tab Items
50
+
51
+ - Build `tabItems` from `children` — each entry has `{ id: index.toString(), name: child.label }`.
52
+ - Filter to visible tabs via `getFirstVisibleTabId(tabItems)`.
53
+
54
+ ### Error Badge
55
+
56
+ - For each tab, read `tabErrorCounts[tabIndex]`.
57
+ - If `> 0`: wrap the tab label with `<Tooltip title={errorCountMsg}><Badge badgeContent={count} color='error'>{label}</Badge></Tooltip>`.
58
+ - Else: render the label plain.
59
+
60
+ ### Render
61
+
62
+ 1. Optional instruction block (above tabs).
63
+ 2. `<TabContext value={activeTabId}>` wrapper.
64
+ 3. `<Tabs onChange={handleTabChange} value={activeTabId}>` containing `<Tab>` per visible tab (with error badge label if applicable).
65
+ 4. `<TabPanel value={tabId}>` per tab containing the corresponding child.
66
+
67
+ ## Visual Specifications
68
+
69
+ ### Tab Bar
70
+
71
+ | Property | Value |
72
+ |----------|-------|
73
+ | Orientation | Horizontal |
74
+ | Error badge | Red MUI Badge with tooltip showing error count message |
75
+
76
+ **CSS-only implementation notes:**
77
+ - Tab bar: same as `DetailsSubTabs` — `display: flex; border-bottom: 2px solid var(--divider)`.
78
+ - Error badge: red circle badge overlaid top-right of the tab label text.
79
+ - Instruction text: `padding: 0.5rem 0; margin-bottom: 0.5rem; font-size: 0.875rem`.
80
+
81
+ ## Edge Cases & Special Logic
82
+
83
+ - `useGetTabsCount` is a custom hook specific to `HierarchicalForm` — it tracks validation errors per tab section.
84
+ - `getActiveTabId` / `getFirstVisibleTabId` are helpers from `tabUtils` — they handle the case where the persisted tab is no longer visible.
85
+ - `navigationKey` must be stable across re-renders — derive it once in `useMemo` from `getPConnect().getStateProps()` or equivalent.
86
+ - If no visible tabs, render nothing (null).
87
+
88
+ ## Dependencies
89
+
90
+ - `useHierarchicalForm`, `useGetTabsCount` from `./hooks`
91
+ - `getActiveTabId`, `getFirstVisibleTabId`, `tabClick` from `../SubTabs/tabUtils`
92
+ - `getInstructions` from `../../helpers/template-utils`
93
+ - `TabContext`, `TabPanel` from `@mui/lab`
94
+ - `Tab`, `Tabs`, `Badge`, `Tooltip` from `@mui/material`
95
+
96
+ ## Design System Mapping
97
+
98
+ **UI control type:** Multi-step tabbed form with per-tab error indicators and persistent active tab.
99
+
100
+ Listed design systems are examples only.
101
+
102
+ | Design System | Recommended Component |
103
+ |---|---|
104
+ | Default (CSS only) | Custom tab bar + CSS badge (red circle via pseudo-element) |
105
+ | MUI | `<Tabs>` + `<Badge>` + `<Tooltip>` + `<TabContext>/<TabPanel>` |
106
+ | Ant Design | `<Tabs>` with custom `tabBarExtraContent` for error badges |
107
+ | Chakra UI | `<Tabs>` + `<Badge colorScheme='red'>` inside tab label |
108
+ | Shadcn/ui | `<Tabs>` + custom badge overlay on tab trigger |
109
+
110
+ When implementing in a specific design system:
111
+ - Error badge is mandatory — always show error counts when `tabErrorCounts[id] > 0`
112
+ - Active tab must be persisted via `PCore.getNavigationUtils()` for correct navigation behavior
113
+ - Instructions HTML renders above the entire tab bar, not per-tab
@@ -0,0 +1,104 @@
1
+ # Skill: InlineDashboard
2
+
3
+ Inline dashboard template. Renders a dashboard with a title, a main content area, and an optional filter panel whose position is configurable.
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 an inline dashboard layout consisting of a title heading, a main content panel, and an optional filter panel. The filter panel position is configurable: `block-start` places filters above the content in a stacked layout; any other position places filters to the side using a 9/3 column split.
12
+
13
+ ## Pega Metadata
14
+
15
+ - **Registration key:** `InlineDashboard` (in `component-map.ts`)
16
+ - **Category:** Page template — dashboard
17
+ - **Extends:** `PConnProps`
18
+
19
+ ## Props
20
+
21
+ | Prop | Type | Required | Description |
22
+ |------|------|----------|-------------|
23
+ | `title` | `string` | No | Dashboard title displayed above the content area |
24
+ | `filterPosition` | `string` | No | Filter panel position: `'block-start'` (above) or other (side). Default: side |
25
+ | `children` | `ReactNode[]` | Yes | `children[0]` = main content, `children[1]` = filter panel |
26
+ | `getPConnect` | `function` | Yes | PConnect getter |
27
+
28
+ ## Behavioral Contract
29
+
30
+ ### Title
31
+
32
+ - If `title` is non-empty, render `<Typography variant='h4'>{title}</Typography>` above the grid.
33
+
34
+ ### Filter Position: `'block-start'`
35
+
36
+ Stacked layout — filter panel above main content:
37
+ - `<Grid container direction='column-reverse'>` (reverse so filter renders visually above content).
38
+ - Filter panel: `<Grid id='filters' size={{ xs: 12 }}>`.
39
+ - Main content: `<Grid size={{ xs: 12 }}>`.
40
+
41
+ ### Filter Position: Other (side)
42
+
43
+ Side-by-side layout — main content left, filters right:
44
+ - `<Grid container direction={...}>` (optionally `row-reverse` based on position value).
45
+ - Main content: `<Grid size={{ xs: 9 }}>`.
46
+ - Filter panel: `<Grid id='filters' size={{ xs: 3 }}>`.
47
+
48
+ ### Children Assignment
49
+
50
+ - `children[0]` = main content panel.
51
+ - `children[1]` = filter panel (may be absent if no filters configured).
52
+
53
+ ## Visual Specifications
54
+
55
+ ### Block-Start Layout (filter above content)
56
+
57
+ ```
58
+ [Filter panel — xs:12]
59
+ [Main content — xs:12]
60
+ ```
61
+
62
+ ### Side Layout (filter to side)
63
+
64
+ ```
65
+ [Main content — xs:9] [Filters — xs:3]
66
+ ```
67
+
68
+ **CSS-only implementation notes:**
69
+ - Title: `font-size: 1.5rem; font-weight: 600; margin-bottom: 1rem`.
70
+ - Block-start: `display: flex; flex-direction: column; gap: 1rem` (filter div first in DOM but ordered last visually with `order: -1`).
71
+ - Side: `display: grid; grid-template-columns: 3fr 1fr; gap: 1rem`.
72
+ - Filter panel: `id='filters'` — required for accessibility/selector targeting.
73
+ - Responsive: collapse side layout to stacked on mobile.
74
+
75
+ ## Edge Cases & Special Logic
76
+
77
+ - If `children[1]` is absent (no filters), render only the main content without the grid.
78
+ - `direction='column-reverse'` in block-start mode — this is the MUI Grid direction prop; in plain CSS, use flexbox `column` direction with `order` property.
79
+ - `title` is optional — if absent, skip the `<Typography h4>` entirely (no empty heading).
80
+ - Filter grid always gets `id='filters'` — this is used by `PromotedFilters` for integration.
81
+
82
+ ## Dependencies
83
+
84
+ - MUI: `<Typography variant='h4'>`, `<Grid container>`, `<Grid>` (child)
85
+ - `PConnectComponent` from `@pega/sdk-react`
86
+
87
+ ## Design System Mapping
88
+
89
+ **UI control type:** Dashboard layout with configurable title and filter panel position.
90
+
91
+ Listed design systems are examples only.
92
+
93
+ | Design System | Title | Content/Filter Grid |
94
+ |---|---|---|
95
+ | Default (CSS only) | `<h2>` | CSS grid or flexbox |
96
+ | MUI | `<Typography variant='h4'>` | `<Grid container>` |
97
+ | Ant Design | `<Typography.Title level={2}>` | `<Row>/<Col>` |
98
+ | Chakra UI | `<Heading>` | `<Grid>` or `<HStack>` |
99
+ | Shadcn/ui | `<h2>` | Tailwind grid |
100
+
101
+ When implementing in a specific design system:
102
+ - `filterPosition === 'block-start'` requires stacked layout (12/12) — not side layout (9/3)
103
+ - Filter panel must always have `id='filters'`
104
+ - Title heading (`h4` level) is optional — only render when `title` is provided
@@ -0,0 +1,85 @@
1
+ # Skill: InlineDashboardPage
2
+
3
+ Inline dashboard page template. Builds filter components from promoted filters metadata and delegates rendering to `InlineDashboard`.
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
+ Page-level wrapper for the inline dashboard. Extracts promoted filter definitions from the PConnect metadata, builds React filter components from them, and passes them to `InlineDashboard` as the second child (filter panel). The first child (main content) is passed through unchanged.
12
+
13
+ > See `InlineDashboard.md` for the layout and rendering behavior. This component only handles filter component construction.
14
+
15
+ ## Pega Metadata
16
+
17
+ - **Registration key:** `InlineDashboardPage` (in `component-map.ts`)
18
+ - **Category:** Page template — dashboard page
19
+ - **Extends:** `PConnProps`
20
+
21
+ ## Props
22
+
23
+ | Prop | Type | Required | Description |
24
+ |------|------|----------|-------------|
25
+ | `children` | `ReactNode[]` | Yes | Main content children passed to InlineDashboard |
26
+ | `title` | `string` | No | Dashboard title |
27
+ | `filterPosition` | `string` | No | Filter position: `'block-start'` or side |
28
+ | `getPConnect` | `function` | Yes | PConnect getter |
29
+
30
+ ## Behavioral Contract
31
+
32
+ ### Filter Component Construction
33
+
34
+ In `useEffect([])` (on mount):
35
+
36
+ 1. Get promoted filters: `allFilters = getPConnect().getRawMetadata().config.promotedFilters || []`.
37
+ 2. Call `buildFilterComponents(getPConnect, allFilters)`:
38
+ - For each filter in `allFilters`, creates a PConnect-based filter field component.
39
+ - Returns an array of React elements ready to render.
40
+ 3. Store result in `filterComponents` state.
41
+
42
+ ### Render
43
+
44
+ ```tsx
45
+ <InlineDashboard
46
+ title={title}
47
+ filterPosition={filterPosition}
48
+ getPConnect={getPConnect}
49
+ >
50
+ {children[0]} {/* main content */}
51
+ {filterComponents} {/* built filter components */}
52
+ </InlineDashboard>
53
+ ```
54
+
55
+ - `children[0]` = main content region.
56
+ - `filterComponents` = built filter elements (replaces raw `children[1]`).
57
+
58
+ ## Visual Specifications
59
+
60
+ Identical to `InlineDashboard` — see `InlineDashboard.md`. The only difference is that the filter panel children are programmatically built, not passed directly.
61
+
62
+ ## Edge Cases & Special Logic
63
+
64
+ - `allFilters` may be empty — if no promoted filters exist, `filterComponents` is an empty array, and `InlineDashboard` renders without a filter panel.
65
+ - `buildFilterComponents` is async in some implementations — show a loading state if needed until filters are ready.
66
+ - `children[0]` is always the main content — index is stable.
67
+ - `filterComponents` replaces `children[1]` entirely — do not render both.
68
+
69
+ ## Dependencies
70
+
71
+ - `buildFilterComponents` from `./utils` — constructs filter field components from promoted filter config
72
+ - `InlineDashboard` — the layout template this component wraps
73
+
74
+ ## Design System Mapping
75
+
76
+ **UI control type:** Dashboard page — programmatic filter construction + InlineDashboard delegation.
77
+
78
+ Listed design systems are examples only.
79
+
80
+ This component is a thin orchestration layer. All visual implementation is in `InlineDashboard`. The only implementation detail is `buildFilterComponents` — which creates filter field components from metadata definitions.
81
+
82
+ When implementing in a specific design system:
83
+ - `buildFilterComponents` must create proper PConnect-backed filter field components
84
+ - If `promotedFilters` is empty, skip the filter panel entirely
85
+ - All layout and styling is delegated to `InlineDashboard`
@@ -0,0 +1,68 @@
1
+ # Skill: ListPage
2
+
3
+ List page template. Thin wrapper that renders `ListView` in standalone page mode (`bInForm: false`).
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 full-page list view by forwarding all props to `ListView` with `bInForm: false`. There is no additional logic — this component exists solely to provide a registration key that signals "this is a page, not an inline table."
12
+
13
+ > See `ListView.md` for full documentation of all capabilities.
14
+
15
+ ## Pega Metadata
16
+
17
+ - **Registration key:** `ListPage` (in `component-map.ts`)
18
+ - **Category:** Page template — list page
19
+ - **Extends:** `PConnProps`
20
+
21
+ ## Props
22
+
23
+ All props are forwarded to `ListView`. Key props:
24
+
25
+ | Prop | Type | Required | Description |
26
+ |------|------|----------|-------------|
27
+ | `dataPageName` | `string` | Yes | Data page to load records from |
28
+ | `columns` | `array` | No | Column definitions |
29
+ | `isSearchable` | `boolean` | No | Whether global search is shown |
30
+ | `payload` | `object` | No | Query payload |
31
+ | `getPConnect` | `function` | Yes | PConnect getter |
32
+
33
+ ## Behavioral Contract
34
+
35
+ ```tsx
36
+ <ListView {...props} bInForm={false} />
37
+ ```
38
+
39
+ That is the complete implementation. `bInForm: false` ensures ListView renders with full page chrome (outer padding, page-level toolbar layout).
40
+
41
+ ## Visual Specifications
42
+
43
+ Identical to `ListView` with `bInForm: false`:
44
+ - Full outer padding applied.
45
+ - Toolbar occupies full width.
46
+ - Table stretches to fill page width.
47
+
48
+ See `ListView.md` for all visual details.
49
+
50
+ ## Edge Cases & Special Logic
51
+
52
+ None beyond `ListView`. The only constraint is that `bInForm` is always `false` for `ListPage`.
53
+
54
+ ## Dependencies
55
+
56
+ - `ListView` — the primary list template component
57
+
58
+ ## Design System Mapping
59
+
60
+ **UI control type:** Full-page data list — pass-through to `ListView` with page-mode flag.
61
+
62
+ Listed design systems are examples only.
63
+
64
+ Implement identically to `ListView` — `ListPage` adds no new UI. The distinction is purely in the `bInForm` prop which controls spacing/chrome.
65
+
66
+ When implementing in a specific design system:
67
+ - `bInForm: false` signals that the list should have page-level layout (more padding, full-width toolbar)
68
+ - No additional logic beyond `ListView` is required
@@ -0,0 +1,139 @@
1
+ # Skill: ListView
2
+
3
+ Full-featured list view template. Renders a data table with sorting, pagination, global search, single/multi selection, column menu, and filter dialog.
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
+ The primary data table component. Renders a sortable, paginated, filterable, and selectable table from a PConnect data source. Supports both standalone page use (`bInForm: false`) and embedded form use (`bInForm: true`). Columns are configurable, and the table supports row-level selection with callback.
12
+
13
+ ## Pega Metadata
14
+
15
+ - **Registration key:** `ListView` (in `component-map.ts`)
16
+ - **Category:** Data display template
17
+ - **Extends:** `PConnProps`
18
+
19
+ ## Props
20
+
21
+ | Prop | Type | Required | Description |
22
+ |------|------|----------|-------------|
23
+ | `bInForm` | `boolean` | No | Whether rendered inside a form (affects toolbar and padding). Default `false` |
24
+ | `selectionMode` | `string` | No | `'single'` (radio) or `'multi'` (checkbox) or absent (no selection) |
25
+ | `dataPageName` | `string` | No | Name of data page to fetch records from |
26
+ | `referenceList` | `array` | No | In-memory data array (used when data is already available) |
27
+ | `compositeKeys` | `object` | No | Key fields for unique row identification |
28
+ | `columns` | `array` | No | Column definition objects `{ fieldName, label, sortable, filterable }` |
29
+ | `additionalTableConfig` | `object` | No | Extra config merged with column/sort/filter settings |
30
+ | `isSearchable` | `boolean` | No | Whether global search input is shown |
31
+ | `payload` | `object` | No | Query payload for data page requests |
32
+ | `getPConnect` | `function` | Yes | PConnect getter |
33
+
34
+ ## Behavioral Contract
35
+
36
+ ### Initialization
37
+
38
+ `useInit(getPConnect, columns, dataPageName, payload)` hook:
39
+ 1. Calls `initializeColumns(getPConnect, columns)` to build `configFields`.
40
+ 2. Calls `buildFieldsForTable(configFields)` to produce display column definitions.
41
+ 3. Calls `getConfigFields(configFields)` for sort/filter metadata.
42
+ 4. Fetches initial data via `PCore.getDataApiUtils().getDataAsync(dataPageName, payload)`.
43
+ 5. Returns `{ tableDataRows, configFields, totalCount }`.
44
+
45
+ ### Sorting
46
+
47
+ - `<TableSortLabel>` in each sortable column header.
48
+ - On click: call `PCore.getDataApiUtils().getDataAsync(dataPageName, { ...payload, sortBy, sortOrder })`.
49
+ - `sortBy` = column field name, `sortOrder` = `'ASC'` or `'DESC'`.
50
+
51
+ ### Pagination
52
+
53
+ - `<TablePagination>` component below the table.
54
+ - `rowsPerPageOptions`: `[5, 10, 25]`.
55
+ - On page/rows change: re-fetch with `startIndex` and `maxResults` params.
56
+
57
+ ### Global Search
58
+
59
+ - Shown when `isSearchable === true`.
60
+ - `<TextField>` input above the table (toolbar area).
61
+ - On submit/debounce: re-fetch with `searchText` param.
62
+
63
+ ### Selection
64
+
65
+ | `selectionMode` | Control per row | Callback |
66
+ |---|---|---|
67
+ | `'single'` | `<Radio>` | `onRowSelect(rowData)` |
68
+ | `'multi'` | `<Checkbox>` | `onRowsSelect(selectedRows)` |
69
+ | absent | None | None |
70
+
71
+ - Select-all checkbox in the header for multi-selection.
72
+ - Selected rows highlighted with `selected` row class.
73
+
74
+ ### Column Menu
75
+
76
+ - `<MoreVertIcon>` button in each column header.
77
+ - Opens `<Menu>` with options: Show/Hide column, Pin column.
78
+ - Column visibility stored in local state `columnVisibility`.
79
+
80
+ ### Filter Dialog
81
+
82
+ - Filter icon in toolbar or column header.
83
+ - Opens `<Dialog>` with filter form fields for each filterable column.
84
+ - On apply: re-fetch with filter params.
85
+ - `filterData(filters, configFields)` formats filter objects for the API.
86
+
87
+ ### Snackbar Toast
88
+
89
+ - Shown on fetch errors or action feedback.
90
+ - Auto-hides after 3000ms.
91
+
92
+ ## Visual Specifications
93
+
94
+ | Element | Description |
95
+ |---------|-------------|
96
+ | Toolbar | Search input + filter button + (optional) action buttons |
97
+ | Table head | Sticky header with sort labels and column menu |
98
+ | Table body | Striped rows, hover state, selected state |
99
+ | Pagination bar | Below table, page size selector + page nav |
100
+
101
+ **CSS-only implementation notes:**
102
+ - Table container: `overflow-x: auto`.
103
+ - Header row: `background: var(--table-header-bg); font-weight: 600`.
104
+ - Selected row: `background: var(--selection-highlight-bg)`.
105
+ - Hover row: `background: var(--hover-bg)`.
106
+ - Sticky header: `position: sticky; top: 0; z-index: 1`.
107
+
108
+ ## Edge Cases & Special Logic
109
+
110
+ - `bInForm: true` — remove outer padding, hide some toolbar elements.
111
+ - Empty result set — show empty state message `"No records found"`.
112
+ - `compositeKeys` — used for unique row key generation when no single ID field exists.
113
+ - Column visibility changes are local state only — not persisted by default.
114
+ - Large datasets — pagination is mandatory; do not load all rows at once.
115
+
116
+ ## Dependencies
117
+
118
+ - `useInit`, `filterData`, `buildFieldsForTable`, `getConfigFields`, `initializeColumns` from `./utils`
119
+ - `PCore.getDataApiUtils().getDataAsync()` — data fetching
120
+ - MUI: `<Table>`, `<TableHead>`, `<TableBody>`, `<TableRow>`, `<TableCell>`, `<TableSortLabel>`, `<TablePagination>`, `<Checkbox>`, `<Radio>`, `<Dialog>`, `<TextField>`, `<Menu>`, `<MenuItem>`, `<Snackbar>`
121
+
122
+ ## Design System Mapping
123
+
124
+ **UI control type:** Full-featured data table with sorting, pagination, search, selection, and filtering.
125
+
126
+ Listed design systems are examples only.
127
+
128
+ | Design System | Table | Pagination | Dialog |
129
+ |---|---|---|---|
130
+ | Default (CSS only) | `<table>/<thead>/<tbody>` | Custom pagination controls | `<dialog>` element |
131
+ | MUI | `<Table>` + sub-components | `<TablePagination>` | `<Dialog>` |
132
+ | Ant Design | `<Table>` | Built-in pagination prop | `<Modal>` |
133
+ | Chakra UI | `<Table>` | Custom or `react-table` | `<Modal>` |
134
+ | Shadcn/ui | `<Table>` + TanStack Table | Custom pagination | `<Dialog>` |
135
+
136
+ When implementing in a specific design system:
137
+ - `bInForm` prop affects layout — tighten spacing and remove outer chrome when `true`
138
+ - Sorting, pagination, and search all trigger data re-fetches — do not filter client-side for server-paged data
139
+ - Selection mode (`single`/`multi`) requires different controls and callbacks