@pega/sdk 0.0.2 → 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 (222) hide show
  1. package/dist/index.js +2 -2
  2. package/package.json +1 -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 +1 -1
  213. package/templates/react-sdk-reference/pega-constellationjs-0.26.3-local.tgz +0 -0
  214. package/templates/react-sdk-reference/pega-sdk-react-0.1.0.tgz +0 -0
  215. package/templates/react-sdk-reference/sdk-config.json +1 -1
  216. package/templates/react-sdk-reference/vite.config.ts +1 -1
  217. package/templates/react-sdk-reference/.github/prompts/replace-all-fields.prompt.md +0 -48
  218. package/templates/react-sdk-reference/.github/prompts/replace-component.prompt.md +0 -81
  219. package/templates/react-sdk-reference/.github/prompts/replace-field.prompt.md +0 -41
  220. package/templates/react-sdk-reference/.github/prompts/swap-design-system.prompt.md +0 -49
  221. package/templates/react-sdk-reference/.github/skills/swap-design-system.md +0 -105
  222. package/templates/react-sdk-reference/pega-constellationjs-0.26.2.tgz +0 -0
@@ -0,0 +1,106 @@
1
+ ---
2
+ description: Template component skill: DynamicTabs
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Skill: DynamicTabs
7
+
8
+ Data-driven tab template. Renders tabs dynamically from a `referenceList` data source — one tab per row in the list, with tab labels derived from a configurable property.
9
+
10
+ > **Prerequisite skill:** [`template-components.md`](../template-components.md) — covers architecture, child rendering patterns, and registration conventions common to ALL template components.
11
+
12
+ ---
13
+
14
+ ## Component Purpose
15
+
16
+ Unlike `SubTabs` or `DetailsSubTabs` where tabs are defined statically in metadata, `DynamicTabs` generates tabs at runtime from a reference list. The number and labels of tabs depend on the data in the reference list. Each tab's content is built via `buildView`.
17
+
18
+ ## Pega Metadata
19
+
20
+ - **Registration key:** `DynamicTabs` (in `component-map.ts`)
21
+ - **Category:** Navigation template — data-driven
22
+ - **Extends:** `PConnProps`
23
+
24
+ ## Props
25
+
26
+ | Prop | Type | Required | Description |
27
+ |------|------|----------|-------------|
28
+ | `referenceList` | `string` | Yes | Property path to the reference list (e.g. `'.pxResults'`) |
29
+ | `getPConnect` | `function` | Yes | PConnect getter |
30
+
31
+ ## Behavioral Contract
32
+
33
+ ### Tab Label Resolution
34
+
35
+ 1. Get component config: `tablabel = getPConnect().getComponentConfig().tablabel`.
36
+ 2. Get property name: `tablabelProp = PCore.getAnnotationUtils().getPropertyName(tablabel)`.
37
+ 3. For each row `i` in `referenceListData`:
38
+ - Tab label = `pConnect.getValue(referenceList + '[' + i + '].' + tablabelProp)`.
39
+
40
+ ### Reference List Data
41
+
42
+ ```
43
+ referenceListData = pConnect.getValue(referenceList + '.pxResults')
44
+ ```
45
+ Returns an array of row objects.
46
+
47
+ ### Tab Views
48
+
49
+ For each row index `i`:
50
+ ```
51
+ tabView = buildView(pConnect, i, '')
52
+ ```
53
+ Memoized — recalculate only when `referenceListData` changes.
54
+
55
+ ### State
56
+
57
+ - `currentPanel`: index of active tab (number, default `0`).
58
+ - `changePanel(index)`: `setCurrentPanel(index)`.
59
+
60
+ ### Render
61
+
62
+ - `<TabContext value={currentPanel.toString()}>`.
63
+ - `<Tabs onChange={changePanel}>` — one `<Tab label={tabLabel[i]} value={i.toString()}>` per row.
64
+ - `<TabPanel value={i.toString()}>` containing `tabView[i]`.
65
+
66
+ ## Visual Specifications
67
+
68
+ Identical tab bar appearance to `SubTabs`.
69
+
70
+ **CSS-only implementation notes:**
71
+ - Same tab bar and panel styles as `SubTabs.md`.
72
+ - Tab count is dynamic — do not hard-code tab widths.
73
+
74
+ ## Edge Cases & Special Logic
75
+
76
+ - `referenceListData` may be undefined on first render — default to empty array, render no tabs.
77
+ - `tablabel` may be a reference annotation like `@[FIELD/.pyLabel]` — `getPropertyName` resolves it to the raw field path.
78
+ - `buildView` is memoized on `referenceListData` — if the list changes, tab views must be regenerated.
79
+ - `changePanel` receives the raw index (number) but `TabContext` value is a string — always `toString()` the index.
80
+ - Empty reference list — show a "No items" empty state instead of an empty tab bar.
81
+
82
+ ## Dependencies
83
+
84
+ - `buildView` from `../../helpers/field-group-utils`
85
+ - `PCore.getAnnotationUtils().getPropertyName()` — resolves annotation to property path
86
+ - `TabContext`, `TabPanel` from `@mui/lab`
87
+ - `Tab`, `Tabs` from `@mui/material`
88
+
89
+ ## Design System Mapping
90
+
91
+ **UI control type:** Data-driven tab navigation — tab count and labels from a reference list.
92
+
93
+ Listed design systems are examples only.
94
+
95
+ | Design System | Recommended Component |
96
+ |---|---|
97
+ | Default (CSS only) | Custom tab bar, dynamically generated from array |
98
+ | MUI | `<TabContext>` + `<Tabs>` + `<TabPanel>` |
99
+ | Ant Design | `<Tabs items={dynamicItems}>` |
100
+ | Chakra UI | `<Tabs>` with dynamic `<TabList>/<TabPanels>` |
101
+ | Shadcn/ui | `<Tabs>` with mapped triggers and content |
102
+
103
+ When implementing in a specific design system:
104
+ - `tablabelProp` resolution via `PCore.getAnnotationUtils().getPropertyName()` is required — do not hardcode the label field
105
+ - `buildView(pConnect, rowIndex, '')` generates the content for each tab — the empty string third arg means no specific child config lookup
106
+ - Tab count is entirely data-driven — handle 0, 1, and many tab cases
@@ -0,0 +1,114 @@
1
+ ---
2
+ description: Template component skill: FieldGroupTemplate
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Skill: FieldGroupTemplate
7
+
8
+ 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.
9
+
10
+ > **Prerequisite skill:** [`template-components.md`](../template-components.md) — covers architecture, child rendering patterns, and registration conventions common to ALL template components.
11
+
12
+ ---
13
+
14
+ ## Component Purpose
15
+
16
+ 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`.
17
+
18
+ ## Pega Metadata
19
+
20
+ - **Registration key:** `FieldGroupTemplate` (in `component-map.ts`)
21
+ - **Category:** Form template — repeating
22
+ - **Extends:** `PConnProps`
23
+
24
+ ## Props
25
+
26
+ | Prop | Type | Required | Description |
27
+ |------|------|----------|-------------|
28
+ | `label` | `string` | Yes | Section heading |
29
+ | `showLabel` | `boolean` | No | Whether to show the heading. Default `true` |
30
+ | `fieldHeader` | `string` | No | Property ref for the dynamic row heading. E.g. `'.pyStatusWork'` |
31
+ | `allowTableEdit` | `boolean` | No | Whether to show add/delete row controls. Default `true` |
32
+ | `displayMode` | `string` | No | `'DISPLAY_ONLY'` triggers read-only rendering |
33
+ | `readOnly` | `boolean` | No | Alternative read-only flag |
34
+ | `getPConnect` | `function` | Yes | PConnect getter |
35
+
36
+ ## Behavioral Contract
37
+
38
+ ### Read-Only Mode
39
+
40
+ If `displayMode === 'DISPLAY_ONLY'` or `readOnly === true`:
41
+ 1. Set `setInheritedProp('DISPLAY_ONLY', true)` on the pConn.
42
+ 2. Render `<FieldGroup>` — the DSE component that shows data in a read-only layout.
43
+
44
+ ### Edit Mode
45
+
46
+ 1. **Get reference list:** `resolvedList = getReferenceList(pConn)` — extracts the array of row data objects.
47
+ 2. **Set reference list:** `pConn.setReferenceList(resolvedList)` — ensures the pConn has the resolved list.
48
+ 3. **Build row views:** For each row index `i`, call `buildView(pConn, i, true)` to get the PConnect view for that row.
49
+ 4. **Render `<FieldGroupList>`** — the DSE component for edit mode, receiving:
50
+ - `resolvedList` for row count
51
+ - Row views as children
52
+ - `onAdd`: calls `pConn.getListActions().insert({})`
53
+ - `onDelete(index)`: calls `pConn.getListActions().deleteEntry(index)`
54
+ - `fieldHeader`: evaluated property ref for dynamic row heading
55
+ - `allowActions`: from `allowTableEdit` prop (controls visibility of add/delete buttons)
56
+
57
+ ### `allowActions` Override
58
+
59
+ 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`.
60
+
61
+ ## Visual Specifications
62
+
63
+ ### Edit Mode
64
+
65
+ - Section heading (`label`) at top (if `showLabel`).
66
+ - List of row sections, each with:
67
+ - Dynamic heading from `fieldHeader` property value (e.g. `"Active"`, `"Pending"`).
68
+ - Row fields in a grid layout.
69
+ - Delete button (trash icon) per row.
70
+ - Add row button at the bottom (e.g. `"+ Add row"`).
71
+
72
+ ### Read-Only Mode
73
+
74
+ - Section heading at top (if `showLabel`).
75
+ - Flat list of rows — no add/delete controls.
76
+
77
+ **CSS-only implementation notes:**
78
+ - Row section: `border: 1px solid var(--border-color); border-radius: 4px; padding: 1rem; margin-bottom: 0.5rem`.
79
+ - Add button: text button, below the last row.
80
+ - Delete button: icon button, top-right of each row section.
81
+
82
+ ## Edge Cases & Special Logic
83
+
84
+ - `getReferenceList(pConn)` returns `undefined` if the reference list is not yet loaded — guard and render empty list.
85
+ - `buildView(pConn, index, true)` — third argument `lookForChildInConfig=true` — required for embedded field groups.
86
+ - Row index must be passed to `deleteEntry` as a number (not string).
87
+ - `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.
88
+ - `FieldGroupList` and `FieldGroup` are DSE (design system extension) components registered in the component registry.
89
+
90
+ ## Dependencies
91
+
92
+ - `getReferenceList`, `buildView` from `../../helpers/field-group-utils`
93
+ - `getComponentFromRegistry('FieldGroupList')` — edit mode renderer
94
+ - `getComponentFromRegistry('FieldGroup')` — read-only renderer
95
+ - `PConnectComponent` from `@pega/sdk-react` — used inside `buildView`
96
+
97
+ ## Design System Mapping
98
+
99
+ **UI control type:** Repeating list of grouped form sections with add/delete row management.
100
+
101
+ Listed design systems are examples only.
102
+
103
+ | Design System | Recommended Component |
104
+ |---|---|
105
+ | Default (CSS only) | Custom row card list with add/delete buttons |
106
+ | MUI | `<Paper>` per row + `<IconButton>` for delete + `<Button>` for add |
107
+ | Ant Design | `<Form.List>` with `<Card>` per row |
108
+ | Chakra UI | Custom repeating section with `<Box>` rows |
109
+ | Shadcn/ui | Custom list with `<Card>` per row + `<Button variant='ghost'>` |
110
+
111
+ When implementing in a specific design system:
112
+ - The add/delete controls must be hidden when `allowActions` is false
113
+ - Row heading is dynamic — evaluate `fieldHeader` property ref per row
114
+ - `buildView` generates child PConnect views — render them inside each row section
@@ -0,0 +1,118 @@
1
+ ---
2
+ description: Template component skill: HierarchicalForm
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Skill: HierarchicalForm
7
+
8
+ Multi-step tabbed form template. Renders form sections as horizontal tabs with per-tab validation error badges and persisted active tab navigation.
9
+
10
+ > **Prerequisite skill:** [`template-components.md`](../template-components.md) — covers architecture, child rendering patterns, and registration conventions common to ALL template components.
11
+
12
+ ---
13
+
14
+ ## Component Purpose
15
+
16
+ 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.
17
+
18
+ ## Pega Metadata
19
+
20
+ - **Registration key:** `HierarchicalForm` (in `component-map.ts`)
21
+ - **Category:** Form template
22
+ - **Extends:** `PConnProps`
23
+
24
+ ## Props
25
+
26
+ | Prop | Type | Required | Description |
27
+ |------|------|----------|-------------|
28
+ | `children` | `ReactNode[]` | Yes | One child per tab section |
29
+ | `instructions` | `string` | No | HTML instruction text shown above the tab bar |
30
+ | `getPConnect` | `function` | Yes | PConnect getter |
31
+
32
+ ## Behavioral Contract
33
+
34
+ ### Hook: `useHierarchicalForm`
35
+
36
+ `useHierarchicalForm(getPConnect, numTabs)` returns:
37
+ - `activeTabId`: currently selected tab index (string, e.g. `'0'`)
38
+ - `setActiveTabId`: setter for `activeTabId`
39
+ - `tabErrorCounts`: `Record<string, number>` — error count per tab index key
40
+
41
+ Internally it calls `useGetTabsCount(getPConnect)` to compute `tabErrorCounts`.
42
+
43
+ ### Active Tab Persistence
44
+
45
+ - 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)`.
46
+ - On tab change, persist via `PCore.getNavigationUtils().setComponentState(navigationKey, { activeTabId: newId })`.
47
+ - `navigationKey` is derived from the component's fully-qualified context path.
48
+
49
+ ### Instructions
50
+
51
+ - Call `getInstructions(getPConnect(), props.instructions)` to get sanitized HTML.
52
+ - If non-empty, render `<div className='psdk-default-form-instruction-text' dangerouslySetInnerHTML={{ __html: instructions }} />` above the tabs.
53
+
54
+ ### Tab Items
55
+
56
+ - Build `tabItems` from `children` — each entry has `{ id: index.toString(), name: child.label }`.
57
+ - Filter to visible tabs via `getFirstVisibleTabId(tabItems)`.
58
+
59
+ ### Error Badge
60
+
61
+ - For each tab, read `tabErrorCounts[tabIndex]`.
62
+ - If `> 0`: wrap the tab label with `<Tooltip title={errorCountMsg}><Badge badgeContent={count} color='error'>{label}</Badge></Tooltip>`.
63
+ - Else: render the label plain.
64
+
65
+ ### Render
66
+
67
+ 1. Optional instruction block (above tabs).
68
+ 2. `<TabContext value={activeTabId}>` wrapper.
69
+ 3. `<Tabs onChange={handleTabChange} value={activeTabId}>` containing `<Tab>` per visible tab (with error badge label if applicable).
70
+ 4. `<TabPanel value={tabId}>` per tab containing the corresponding child.
71
+
72
+ ## Visual Specifications
73
+
74
+ ### Tab Bar
75
+
76
+ | Property | Value |
77
+ |----------|-------|
78
+ | Orientation | Horizontal |
79
+ | Error badge | Red MUI Badge with tooltip showing error count message |
80
+
81
+ **CSS-only implementation notes:**
82
+ - Tab bar: same as `DetailsSubTabs` — `display: flex; border-bottom: 2px solid var(--divider)`.
83
+ - Error badge: red circle badge overlaid top-right of the tab label text.
84
+ - Instruction text: `padding: 0.5rem 0; margin-bottom: 0.5rem; font-size: 0.875rem`.
85
+
86
+ ## Edge Cases & Special Logic
87
+
88
+ - `useGetTabsCount` is a custom hook specific to `HierarchicalForm` — it tracks validation errors per tab section.
89
+ - `getActiveTabId` / `getFirstVisibleTabId` are helpers from `tabUtils` — they handle the case where the persisted tab is no longer visible.
90
+ - `navigationKey` must be stable across re-renders — derive it once in `useMemo` from `getPConnect().getStateProps()` or equivalent.
91
+ - If no visible tabs, render nothing (null).
92
+
93
+ ## Dependencies
94
+
95
+ - `useHierarchicalForm`, `useGetTabsCount` from `./hooks`
96
+ - `getActiveTabId`, `getFirstVisibleTabId`, `tabClick` from `../SubTabs/tabUtils`
97
+ - `getInstructions` from `../../helpers/template-utils`
98
+ - `TabContext`, `TabPanel` from `@mui/lab`
99
+ - `Tab`, `Tabs`, `Badge`, `Tooltip` from `@mui/material`
100
+
101
+ ## Design System Mapping
102
+
103
+ **UI control type:** Multi-step tabbed form with per-tab error indicators and persistent active tab.
104
+
105
+ Listed design systems are examples only.
106
+
107
+ | Design System | Recommended Component |
108
+ |---|---|
109
+ | Default (CSS only) | Custom tab bar + CSS badge (red circle via pseudo-element) |
110
+ | MUI | `<Tabs>` + `<Badge>` + `<Tooltip>` + `<TabContext>/<TabPanel>` |
111
+ | Ant Design | `<Tabs>` with custom `tabBarExtraContent` for error badges |
112
+ | Chakra UI | `<Tabs>` + `<Badge colorScheme='red'>` inside tab label |
113
+ | Shadcn/ui | `<Tabs>` + custom badge overlay on tab trigger |
114
+
115
+ When implementing in a specific design system:
116
+ - Error badge is mandatory — always show error counts when `tabErrorCounts[id] > 0`
117
+ - Active tab must be persisted via `PCore.getNavigationUtils()` for correct navigation behavior
118
+ - Instructions HTML renders above the entire tab bar, not per-tab
@@ -0,0 +1,109 @@
1
+ ---
2
+ description: Template component skill: InlineDashboard
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Skill: InlineDashboard
7
+
8
+ Inline dashboard template. Renders a dashboard with a title, a main content area, and an optional filter panel whose position is configurable.
9
+
10
+ > **Prerequisite skill:** [`template-components.md`](../template-components.md) — covers architecture, child rendering patterns, and registration conventions common to ALL template components.
11
+
12
+ ---
13
+
14
+ ## Component Purpose
15
+
16
+ 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.
17
+
18
+ ## Pega Metadata
19
+
20
+ - **Registration key:** `InlineDashboard` (in `component-map.ts`)
21
+ - **Category:** Page template — dashboard
22
+ - **Extends:** `PConnProps`
23
+
24
+ ## Props
25
+
26
+ | Prop | Type | Required | Description |
27
+ |------|------|----------|-------------|
28
+ | `title` | `string` | No | Dashboard title displayed above the content area |
29
+ | `filterPosition` | `string` | No | Filter panel position: `'block-start'` (above) or other (side). Default: side |
30
+ | `children` | `ReactNode[]` | Yes | `children[0]` = main content, `children[1]` = filter panel |
31
+ | `getPConnect` | `function` | Yes | PConnect getter |
32
+
33
+ ## Behavioral Contract
34
+
35
+ ### Title
36
+
37
+ - If `title` is non-empty, render `<Typography variant='h4'>{title}</Typography>` above the grid.
38
+
39
+ ### Filter Position: `'block-start'`
40
+
41
+ Stacked layout — filter panel above main content:
42
+ - `<Grid container direction='column-reverse'>` (reverse so filter renders visually above content).
43
+ - Filter panel: `<Grid id='filters' size={{ xs: 12 }}>`.
44
+ - Main content: `<Grid size={{ xs: 12 }}>`.
45
+
46
+ ### Filter Position: Other (side)
47
+
48
+ Side-by-side layout — main content left, filters right:
49
+ - `<Grid container direction={...}>` (optionally `row-reverse` based on position value).
50
+ - Main content: `<Grid size={{ xs: 9 }}>`.
51
+ - Filter panel: `<Grid id='filters' size={{ xs: 3 }}>`.
52
+
53
+ ### Children Assignment
54
+
55
+ - `children[0]` = main content panel.
56
+ - `children[1]` = filter panel (may be absent if no filters configured).
57
+
58
+ ## Visual Specifications
59
+
60
+ ### Block-Start Layout (filter above content)
61
+
62
+ ```
63
+ [Filter panel — xs:12]
64
+ [Main content — xs:12]
65
+ ```
66
+
67
+ ### Side Layout (filter to side)
68
+
69
+ ```
70
+ [Main content — xs:9] [Filters — xs:3]
71
+ ```
72
+
73
+ **CSS-only implementation notes:**
74
+ - Title: `font-size: 1.5rem; font-weight: 600; margin-bottom: 1rem`.
75
+ - Block-start: `display: flex; flex-direction: column; gap: 1rem` (filter div first in DOM but ordered last visually with `order: -1`).
76
+ - Side: `display: grid; grid-template-columns: 3fr 1fr; gap: 1rem`.
77
+ - Filter panel: `id='filters'` — required for accessibility/selector targeting.
78
+ - Responsive: collapse side layout to stacked on mobile.
79
+
80
+ ## Edge Cases & Special Logic
81
+
82
+ - If `children[1]` is absent (no filters), render only the main content without the grid.
83
+ - `direction='column-reverse'` in block-start mode — this is the MUI Grid direction prop; in plain CSS, use flexbox `column` direction with `order` property.
84
+ - `title` is optional — if absent, skip the `<Typography h4>` entirely (no empty heading).
85
+ - Filter grid always gets `id='filters'` — this is used by `PromotedFilters` for integration.
86
+
87
+ ## Dependencies
88
+
89
+ - MUI: `<Typography variant='h4'>`, `<Grid container>`, `<Grid>` (child)
90
+ - `PConnectComponent` from `@pega/sdk-react`
91
+
92
+ ## Design System Mapping
93
+
94
+ **UI control type:** Dashboard layout with configurable title and filter panel position.
95
+
96
+ Listed design systems are examples only.
97
+
98
+ | Design System | Title | Content/Filter Grid |
99
+ |---|---|---|
100
+ | Default (CSS only) | `<h2>` | CSS grid or flexbox |
101
+ | MUI | `<Typography variant='h4'>` | `<Grid container>` |
102
+ | Ant Design | `<Typography.Title level={2}>` | `<Row>/<Col>` |
103
+ | Chakra UI | `<Heading>` | `<Grid>` or `<HStack>` |
104
+ | Shadcn/ui | `<h2>` | Tailwind grid |
105
+
106
+ When implementing in a specific design system:
107
+ - `filterPosition === 'block-start'` requires stacked layout (12/12) — not side layout (9/3)
108
+ - Filter panel must always have `id='filters'`
109
+ - Title heading (`h4` level) is optional — only render when `title` is provided
@@ -0,0 +1,90 @@
1
+ ---
2
+ description: Template component skill: InlineDashboardPage
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Skill: InlineDashboardPage
7
+
8
+ Inline dashboard page template. Builds filter components from promoted filters metadata and delegates rendering to `InlineDashboard`.
9
+
10
+ > **Prerequisite skill:** [`template-components.md`](../template-components.md) — covers architecture, child rendering patterns, and registration conventions common to ALL template components.
11
+
12
+ ---
13
+
14
+ ## Component Purpose
15
+
16
+ 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.
17
+
18
+ > See `InlineDashboard.md` for the layout and rendering behavior. This component only handles filter component construction.
19
+
20
+ ## Pega Metadata
21
+
22
+ - **Registration key:** `InlineDashboardPage` (in `component-map.ts`)
23
+ - **Category:** Page template — dashboard page
24
+ - **Extends:** `PConnProps`
25
+
26
+ ## Props
27
+
28
+ | Prop | Type | Required | Description |
29
+ |------|------|----------|-------------|
30
+ | `children` | `ReactNode[]` | Yes | Main content children passed to InlineDashboard |
31
+ | `title` | `string` | No | Dashboard title |
32
+ | `filterPosition` | `string` | No | Filter position: `'block-start'` or side |
33
+ | `getPConnect` | `function` | Yes | PConnect getter |
34
+
35
+ ## Behavioral Contract
36
+
37
+ ### Filter Component Construction
38
+
39
+ In `useEffect([])` (on mount):
40
+
41
+ 1. Get promoted filters: `allFilters = getPConnect().getRawMetadata().config.promotedFilters || []`.
42
+ 2. Call `buildFilterComponents(getPConnect, allFilters)`:
43
+ - For each filter in `allFilters`, creates a PConnect-based filter field component.
44
+ - Returns an array of React elements ready to render.
45
+ 3. Store result in `filterComponents` state.
46
+
47
+ ### Render
48
+
49
+ ```tsx
50
+ <InlineDashboard
51
+ title={title}
52
+ filterPosition={filterPosition}
53
+ getPConnect={getPConnect}
54
+ >
55
+ {children[0]} {/* main content */}
56
+ {filterComponents} {/* built filter components */}
57
+ </InlineDashboard>
58
+ ```
59
+
60
+ - `children[0]` = main content region.
61
+ - `filterComponents` = built filter elements (replaces raw `children[1]`).
62
+
63
+ ## Visual Specifications
64
+
65
+ Identical to `InlineDashboard` — see `InlineDashboard.md`. The only difference is that the filter panel children are programmatically built, not passed directly.
66
+
67
+ ## Edge Cases & Special Logic
68
+
69
+ - `allFilters` may be empty — if no promoted filters exist, `filterComponents` is an empty array, and `InlineDashboard` renders without a filter panel.
70
+ - `buildFilterComponents` is async in some implementations — show a loading state if needed until filters are ready.
71
+ - `children[0]` is always the main content — index is stable.
72
+ - `filterComponents` replaces `children[1]` entirely — do not render both.
73
+
74
+ ## Dependencies
75
+
76
+ - `buildFilterComponents` from `./utils` — constructs filter field components from promoted filter config
77
+ - `InlineDashboard` — the layout template this component wraps
78
+
79
+ ## Design System Mapping
80
+
81
+ **UI control type:** Dashboard page — programmatic filter construction + InlineDashboard delegation.
82
+
83
+ Listed design systems are examples only.
84
+
85
+ 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.
86
+
87
+ When implementing in a specific design system:
88
+ - `buildFilterComponents` must create proper PConnect-backed filter field components
89
+ - If `promotedFilters` is empty, skip the filter panel entirely
90
+ - All layout and styling is delegated to `InlineDashboard`
@@ -0,0 +1,73 @@
1
+ ---
2
+ description: Template component skill: ListPage
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Skill: ListPage
7
+
8
+ List page template. Thin wrapper that renders `ListView` in standalone page mode (`bInForm: false`).
9
+
10
+ > **Prerequisite skill:** [`template-components.md`](../template-components.md) — covers architecture, child rendering patterns, and registration conventions common to ALL template components.
11
+
12
+ ---
13
+
14
+ ## Component Purpose
15
+
16
+ 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."
17
+
18
+ > See `ListView.md` for full documentation of all capabilities.
19
+
20
+ ## Pega Metadata
21
+
22
+ - **Registration key:** `ListPage` (in `component-map.ts`)
23
+ - **Category:** Page template — list page
24
+ - **Extends:** `PConnProps`
25
+
26
+ ## Props
27
+
28
+ All props are forwarded to `ListView`. Key props:
29
+
30
+ | Prop | Type | Required | Description |
31
+ |------|------|----------|-------------|
32
+ | `dataPageName` | `string` | Yes | Data page to load records from |
33
+ | `columns` | `array` | No | Column definitions |
34
+ | `isSearchable` | `boolean` | No | Whether global search is shown |
35
+ | `payload` | `object` | No | Query payload |
36
+ | `getPConnect` | `function` | Yes | PConnect getter |
37
+
38
+ ## Behavioral Contract
39
+
40
+ ```tsx
41
+ <ListView {...props} bInForm={false} />
42
+ ```
43
+
44
+ That is the complete implementation. `bInForm: false` ensures ListView renders with full page chrome (outer padding, page-level toolbar layout).
45
+
46
+ ## Visual Specifications
47
+
48
+ Identical to `ListView` with `bInForm: false`:
49
+ - Full outer padding applied.
50
+ - Toolbar occupies full width.
51
+ - Table stretches to fill page width.
52
+
53
+ See `ListView.md` for all visual details.
54
+
55
+ ## Edge Cases & Special Logic
56
+
57
+ None beyond `ListView`. The only constraint is that `bInForm` is always `false` for `ListPage`.
58
+
59
+ ## Dependencies
60
+
61
+ - `ListView` — the primary list template component
62
+
63
+ ## Design System Mapping
64
+
65
+ **UI control type:** Full-page data list — pass-through to `ListView` with page-mode flag.
66
+
67
+ Listed design systems are examples only.
68
+
69
+ Implement identically to `ListView` — `ListPage` adds no new UI. The distinction is purely in the `bInForm` prop which controls spacing/chrome.
70
+
71
+ When implementing in a specific design system:
72
+ - `bInForm: false` signals that the list should have page-level layout (more padding, full-width toolbar)
73
+ - No additional logic beyond `ListView` is required