pi-apexlang 0.2.2 → 0.4.0

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 (239) hide show
  1. package/README.md +22 -5
  2. package/THIRD_PARTY_NOTICES.md +2 -2
  3. package/UPSTREAM.json +2 -2
  4. package/docs/assets/overview.en.png +0 -0
  5. package/docs/assets/overview.en.svg +89 -0
  6. package/docs/assets/overview.uk.png +0 -0
  7. package/docs/assets/overview.uk.svg +89 -0
  8. package/docs/en/README.md +41 -0
  9. package/docs/en/architecture.md +73 -0
  10. package/docs/en/getting-started.md +77 -0
  11. package/docs/en/maintenance.md +83 -0
  12. package/docs/en/tool-reference.md +85 -0
  13. package/docs/uk/README.md +41 -0
  14. package/docs/uk/architecture.md +73 -0
  15. package/docs/uk/getting-started.md +77 -0
  16. package/docs/uk/maintenance.md +83 -0
  17. package/docs/uk/tool-reference.md +85 -0
  18. package/extensions/apexlang/index.ts +19 -10
  19. package/extensions/lib/apexlang-cli.d.mts +1 -2
  20. package/extensions/lib/apexlang-cli.mjs +18 -13
  21. package/extensions/lib/apexlang-local-validate.mjs +83 -0
  22. package/extensions/lib/apexlang-local-validator.py +116 -0
  23. package/extensions/lib/apexlang-runtime-validate.mjs +76 -0
  24. package/package.json +2 -1
  25. package/skills/apexlang/APEXlang Skills and Workflows.md +325 -0
  26. package/skills/apexlang/README.md +6 -6
  27. package/skills/apexlang/RELEASE-NOTES.md +2 -2
  28. package/skills/apexlang/SKILL.md +24 -19
  29. package/skills/apexlang/agents/openai.yaml +4 -3
  30. package/skills/apexlang/assets/apex-generation/components.registry.json +1001 -16
  31. package/skills/apexlang/assets/apexlang/domains-catalog.json +6 -1
  32. package/skills/apexlang/assets/component-attributes.json +1924 -180
  33. package/skills/apexlang/assets/component-policies.json +19 -10
  34. package/skills/apexlang/assets/contracts/grammar-semantic-rules.json +134 -0
  35. package/skills/apexlang/assets/contracts/package-layers.json +56 -0
  36. package/skills/apexlang/assets/contracts/page-construction-packs.json +154 -0
  37. package/skills/apexlang/assets/contracts/page-patterns.json +119 -0
  38. package/skills/apexlang/assets/grammar/apexlang.ebnf +11743 -0
  39. package/skills/apexlang/assets/indexes/font-apex-icon-index.json +1699 -0
  40. package/skills/apexlang/assets/routing-catalog-main.json +11 -10
  41. package/skills/apexlang/assets/routing-load-policy.json +35 -9
  42. package/skills/apexlang/assets/rules-mapping.json +110 -2
  43. package/skills/apexlang/assets/rules.catalog.json +1298 -0
  44. package/skills/apexlang/assets/validator-fix-recipes.json +372 -17
  45. package/skills/apexlang/assets/workspace-intelligence.json +7 -10
  46. package/skills/apexlang/manifest.json +268 -12
  47. package/skills/apexlang/references/domains/README.md +1 -1
  48. package/skills/apexlang/references/domains/page-components/buttons.md +2 -2
  49. package/skills/apexlang/references/domains/page-components/page-items.md +3 -3
  50. package/skills/apexlang/references/domains/page-components/regions/region-display-selector/workflow-region-display-selector.md +69 -0
  51. package/skills/apexlang/references/domains/page-components/regions.md +1 -0
  52. package/skills/apexlang/references/domains/template-components/comments.md +61 -0
  53. package/skills/apexlang/references/domains/template-components/registry.md +2 -0
  54. package/skills/apexlang/references/domains/template-components/templates.md +47 -0
  55. package/skills/apexlang/references/domains/template-components/timeline.md +51 -0
  56. package/skills/apexlang/references/ops/one-message-router-contract.md +2 -2
  57. package/skills/apexlang/references/ops/runtime-gates/01-direct-sqlcl-import.md +1 -1
  58. package/skills/apexlang/references/ops/runtime-gates/02-direct-sqlcl-validate-gate.md +1 -1
  59. package/skills/apexlang/references/ops/runtime-gates.md +17 -16
  60. package/skills/apexlang/references/ops/sqlcl-agents/00-connection-gate.md +7 -7
  61. package/skills/apexlang/references/ops/sqlcl.md +7 -8
  62. package/skills/apexlang/references/policies/compiler-prop-map.md +6 -4
  63. package/skills/apexlang/references/policies/governance/00-governance.md +2 -2
  64. package/skills/apexlang/references/policies/memory-bank/00-guard/ai.guard.md +126 -922
  65. package/skills/apexlang/references/policies/memory-bank/20-data/apex.logic.md +3 -3
  66. package/skills/apexlang/references/policies/memory-bank/20-data/db.connection.md +9 -11
  67. package/skills/apexlang/references/policies/memory-bank/30-pages/apex.cards-page.md +95 -0
  68. package/skills/apexlang/references/policies/memory-bank/30-pages/apex.page.md +2 -2
  69. package/skills/apexlang/references/policies/memory-bank/30-pages/apex.smart-filter-search.md +145 -74
  70. package/skills/apexlang/references/policies/memory-bank/40-components/apex.region-interactions.md +9 -2
  71. package/skills/apexlang/references/policies/memory-bank/40-components/apex.region-media.md +6 -5
  72. package/skills/apexlang/references/policies/memory-bank/systemPatterns.md +9 -1
  73. package/skills/apexlang/references/workflows/apex-generation/agents/20-agent-draft.md +51 -232
  74. package/skills/apexlang/references/workflows/apex-generation/agents/30-agent-critique.md +49 -449
  75. package/skills/apexlang/references/workflows/apex-generation/agents/40-agent-revision.md +38 -238
  76. package/skills/apexlang/references/workflows/apex-generation/nlu/nlu-routing-test-matrix.md +8 -2
  77. package/skills/apexlang/references/workflows/apex-generation/nlu/nlu-routing-validation-notes.md +19 -3
  78. package/skills/apexlang/references/workflows/apex-generation/registry.md +15 -1
  79. package/skills/apexlang/references/workflows/apex-generation/templates.md +1 -1
  80. package/skills/apexlang/references/workflows/apex-generation.md +1 -1
  81. package/skills/apexlang/references/workflows/apexlang/apexlang-execution-model.md +5 -5
  82. package/skills/apexlang/references/workflows/apexlang/prompt-contracts.md +81 -10
  83. package/skills/apexlang/references/workflows/apexlang/workflow-create-app-from-fr-and-model.md +18 -7
  84. package/skills/apexlang/release-notes.json +156 -0
  85. package/skills/apexlang/runtime/grammar_contract.mjs +1166 -0
  86. package/skills/apexlang/runtime/internal/python/format_apexlang.py +210 -0
  87. package/skills/apexlang/runtime/internal/python/validate_apexlang.py +14142 -5843
  88. package/skills/apexlang/runtime/internal/python/validator_common.py +2 -0
  89. package/skills/apexlang/runtime/lib/catalogs.mjs +1026 -0
  90. package/skills/apexlang/runtime/lib/common.mjs +35 -0
  91. package/skills/apexlang/runtime/runtime.bundle.mjs +457 -57
  92. package/skills/apexlang/templates/items/combobox/combobox.explicit-defaults.md +1 -1
  93. package/skills/apexlang/templates/items/date-picker/date-picker._common.md +1 -1
  94. package/skills/apexlang/templates/items/date-picker/date-picker.explicit-defaults.md +1 -1
  95. package/skills/apexlang/templates/items/file-upload/file-upload._common.md +30 -24
  96. package/skills/apexlang/templates/items/file-upload/file-upload.compact-template.md +6 -0
  97. package/skills/apexlang/templates/items/file-upload/file-upload.explicit-defaults.md +23 -8
  98. package/skills/apexlang/templates/items/file-upload/file-upload.minimal.md +6 -0
  99. package/skills/apexlang/templates/items/hidden-item/hidden-item._common.md +1 -1
  100. package/skills/apexlang/templates/items/hidden-item/hidden-item.explicit-defaults.md +1 -1
  101. package/skills/apexlang/templates/items/items._common.md +3 -2
  102. package/skills/apexlang/templates/items/list-manager/list-manager.explicit-defaults.md +1 -1
  103. package/skills/apexlang/templates/items/markdown-editor/markdown-editor._common.md +1 -1
  104. package/skills/apexlang/templates/items/markdown-editor/markdown-editor.explicit-defaults.md +1 -1
  105. package/skills/apexlang/templates/items/number-field/number-field._common.md +8 -6
  106. package/skills/apexlang/templates/items/number-field/number-field.explicit-defaults.md +12 -2
  107. package/skills/apexlang/templates/items/popup-lov/popup-lov.explicit-defaults.md +1 -1
  108. package/skills/apexlang/templates/items/rich-text-editor/rich-text-editor._common.md +1 -1
  109. package/skills/apexlang/templates/items/rich-text-editor/rich-text-editor.explicit-defaults.md +1 -1
  110. package/skills/apexlang/templates/items/select-many/standard.md +1 -1
  111. package/skills/apexlang/templates/items/shuttle/shuttle.explicit-defaults.md +1 -1
  112. package/skills/apexlang/templates/items/switch/switch._common.md +8 -8
  113. package/skills/apexlang/templates/items/switch/switch.explicit-defaults.md +1 -1
  114. package/skills/apexlang/templates/items/text-area/text-area._common.md +2 -3
  115. package/skills/apexlang/templates/items/text-area/text-area.explicit-defaults.md +1 -1
  116. package/skills/apexlang/templates/items/text-area/text-area.required-length.md +1 -3
  117. package/skills/apexlang/templates/items/text-autocomplete/text-autocomplete.explicit-defaults.md +1 -1
  118. package/skills/apexlang/templates/items/text-autocomplete/text-autocomplete.required-length.md +1 -3
  119. package/skills/apexlang/templates/items/text-field/text-field._common.md +2 -3
  120. package/skills/apexlang/templates/items/text-field/text-field.explicit-defaults.md +1 -1
  121. package/skills/apexlang/templates/items/text-field/text-field.required-length.md +1 -3
  122. package/skills/apexlang/templates/page-examples/faceted-search/faceted-search.example.md +0 -5
  123. package/skills/apexlang/templates/page-examples/form-page/form-page.example.md +0 -9
  124. package/skills/apexlang/templates/page-examples/interactive-report-page/interactive-report-page.example.md +2 -2
  125. package/skills/apexlang/templates/page-examples/login-page/login-page.example.md +0 -8
  126. package/skills/apexlang/templates/page-examples/task-definition-initiated-tasks-page/task-definition-initiated-tasks-page.example.md +7 -17
  127. package/skills/apexlang/templates/page-examples/task-definition-my-tasks-page/task-definition-my-tasks-page.example.md +7 -65
  128. package/skills/apexlang/templates/page-examples/task-definition-task-details/task-definition-task-details.example.md +38 -201
  129. package/skills/apexlang/templates/region-components/calendar/calendar.custom-styling.md +3 -1
  130. package/skills/apexlang/templates/region-components/calendar/calendar.faceted-search.md +3 -2
  131. package/skills/apexlang/templates/region-components/cards/README.md +12 -4
  132. package/skills/apexlang/templates/region-components/cards/cards._common.md +176 -37
  133. package/skills/apexlang/templates/region-components/cards/cards._index.md +2 -1
  134. package/skills/apexlang/templates/region-components/cards/cards.refresh-after-dialog.md +46 -0
  135. package/skills/apexlang/templates/region-components/cards/cards.refresh-on-change.md +58 -0
  136. package/skills/apexlang/templates/region-components/cards/cards.rest-source.md +54 -18
  137. package/skills/apexlang/templates/region-components/cards/cards.standard.md +37 -21
  138. package/skills/apexlang/templates/region-components/chart/chart._series._common.md +1 -4
  139. package/skills/apexlang/templates/region-components/chart/chart.pie.md +6 -2
  140. package/skills/apexlang/templates/region-components/chart/chart.status-meter-gauge.md +1 -1
  141. package/skills/apexlang/templates/region-components/chart/chart.stock.md +2 -0
  142. package/skills/apexlang/templates/region-components/chart/features/chart.feature-chart-links.md +9 -7
  143. package/skills/apexlang/templates/region-components/faceted-search/faceted-search._common.md +1 -14
  144. package/skills/apexlang/templates/region-components/form/form._items._common.md +1 -5
  145. package/skills/apexlang/templates/region-components/interactive-report/interactive-report._columns._common.md +2 -6
  146. package/skills/apexlang/templates/region-components/interactive-report/interactive-report.page-header-actions.md +1 -7
  147. package/skills/apexlang/templates/region-components/list/README.md +1 -1
  148. package/skills/apexlang/templates/region-components/list/list._common.md +1 -1
  149. package/skills/apexlang/templates/region-components/map/map.backgrounds.md +12 -10
  150. package/skills/apexlang/templates/region-components/map/map.layer.extruded-polygons.md +16 -12
  151. package/skills/apexlang/templates/region-components/map/map.layer.heat-map.md +10 -7
  152. package/skills/apexlang/templates/region-components/map/map.layer.lines.md +10 -8
  153. package/skills/apexlang/templates/region-components/map/map.layer.polygons.md +21 -18
  154. package/skills/apexlang/templates/region-components/map/map.region.background-custom.md +25 -19
  155. package/skills/apexlang/templates/region-components/map/map.region.background-shared.md +19 -13
  156. package/skills/apexlang/templates/region-components/map/map.region.bbox-sql.md +13 -13
  157. package/skills/apexlang/templates/region-components/map/map.region.bbox-static.md +2 -2
  158. package/skills/apexlang/templates/region-components/map/map.region.browser-location.md +3 -7
  159. package/skills/apexlang/templates/region-components/map/map.region.init-position-sql.md +7 -7
  160. package/skills/apexlang/templates/region-components/region-display-selector/README.md +5 -2
  161. package/skills/apexlang/templates/region-components/region-display-selector/region-display-selector._common.md +60 -7
  162. package/skills/apexlang/templates/region-components/region-display-selector/region-display-selector._index.md +4 -1
  163. package/skills/apexlang/templates/region-components/region-display-selector/region-display-selector.permutations.md +55 -0
  164. package/skills/apexlang/templates/region-components/region-display-selector/region-display-selector.standard.md +91 -5
  165. package/skills/apexlang/templates/region-components/smart-filter-search/README.md +6 -2
  166. package/skills/apexlang/templates/region-components/smart-filter-search/smart-filter-search._common.md +107 -46
  167. package/skills/apexlang/templates/region-components/smart-filter-search/smart-filter-search._index.md +4 -3
  168. package/skills/apexlang/templates/region-components/smart-filter-search/smart-filter-search.standard.md +33 -17
  169. package/skills/apexlang/templates/shared-components/component-settings/component-settings._common.md +1 -0
  170. package/skills/apexlang/templates/shared-components/component-settings.example.md +1 -0
  171. package/skills/apexlang/templates/shared-components/email-templates.example.md +1 -1
  172. package/skills/apexlang/templates/shared-components/rest-data-sources/example_rest_data_source.example.md +40 -46
  173. package/skills/apexlang/templates/shared-components/task-definitions/action-task.example.md +2 -30
  174. package/skills/apexlang/templates/shared-components/task-definitions/approve-request.example.md +3 -31
  175. package/skills/apexlang/templates/template-components/README.md +27 -15
  176. package/skills/apexlang/templates/template-components/avatar/README.md +56 -0
  177. package/skills/apexlang/templates/template-components/avatar/avatar._common.md +149 -0
  178. package/skills/apexlang/templates/template-components/avatar/avatar._index.md +42 -0
  179. package/skills/apexlang/templates/template-components/{avatar._template_options.md → avatar/avatar._template_options.md} +1 -1
  180. package/skills/apexlang/templates/template-components/avatar/avatar.report-icon.md +48 -0
  181. package/skills/apexlang/templates/template-components/avatar/avatar.report-image-url-column.md +62 -0
  182. package/skills/apexlang/templates/template-components/avatar/avatar.report-initials.md +54 -0
  183. package/skills/apexlang/templates/template-components/badge/README.md +38 -0
  184. package/skills/apexlang/templates/template-components/badge/badge._common.md +183 -0
  185. package/skills/apexlang/templates/template-components/badge/badge._index.md +20 -0
  186. package/skills/apexlang/templates/template-components/badge/badge.report-link.md +66 -0
  187. package/skills/apexlang/templates/template-components/badge/badge.report-minimal.md +76 -0
  188. package/skills/apexlang/templates/template-components/comments/README.md +20 -0
  189. package/skills/apexlang/templates/template-components/comments/comments._common.md +43 -0
  190. package/skills/apexlang/templates/template-components/comments/comments._index.md +25 -0
  191. package/skills/apexlang/templates/template-components/{comments._template_options.md → comments/comments._template_options.md} +2 -1
  192. package/skills/apexlang/templates/template-components/comments/comments.apex-task-comments.md +77 -0
  193. package/skills/apexlang/templates/template-components/comments/comments.partial-column.md +120 -0
  194. package/skills/apexlang/templates/template-components/comments/comments.permutations.md +425 -0
  195. package/skills/apexlang/templates/template-components/content-row/README.md +1 -1
  196. package/skills/apexlang/templates/template-components/content-row/content-row._common.md +1 -1
  197. package/skills/apexlang/templates/template-components/content-row/content-row._index.md +1 -1
  198. package/skills/apexlang/templates/template-components/content-row/content-row._template_options.md +1 -1
  199. package/skills/apexlang/templates/template-components/flexbox-container/README.md +9 -0
  200. package/skills/apexlang/templates/template-components/flexbox-container/flexbox-container._index.md +13 -0
  201. package/skills/apexlang/templates/template-components/media-list/README.md +100 -0
  202. package/skills/apexlang/templates/template-components/media-list/media-list._common.md +174 -0
  203. package/skills/apexlang/templates/template-components/media-list/media-list._index.md +50 -0
  204. package/skills/apexlang/templates/template-components/{media-list._template_options.md → media-list/media-list._template_options.md} +8 -2
  205. package/skills/apexlang/templates/template-components/media-list/media-list.partial.md +50 -0
  206. package/skills/apexlang/templates/template-components/media-list/media-list.report-avatar-badge.md +76 -0
  207. package/skills/apexlang/templates/template-components/media-list/media-list.report-base.md +71 -0
  208. package/skills/apexlang/templates/template-components/media-list/media-list.report-grouped.md +40 -0
  209. package/skills/apexlang/templates/template-components/media-list/media-list.report-layouts.md +50 -0
  210. package/skills/apexlang/templates/template-components/media-list/media-list.report-link.md +53 -0
  211. package/skills/apexlang/templates/template-components/metric-card/README.md +19 -4
  212. package/skills/apexlang/templates/template-components/metric-card/metric-card._common.md +122 -29
  213. package/skills/apexlang/templates/template-components/metric-card/metric-card._index.md +6 -0
  214. package/skills/apexlang/templates/template-components/metric-card/metric-card._template_options.md +47 -2
  215. package/skills/apexlang/templates/template-components/metric-card/metric-card.partial-minimal.md +51 -0
  216. package/skills/apexlang/templates/template-components/metric-card/metric-card.permutations.md +56 -0
  217. package/skills/apexlang/templates/template-components/metric-card/metric-card.report-avatar-badge.md +98 -0
  218. package/skills/apexlang/templates/template-components/metric-card/metric-card.report-grouping-selection.md +131 -0
  219. package/skills/apexlang/templates/template-components/metric-card/metric-card.report-link.md +66 -0
  220. package/skills/apexlang/templates/template-components/metric-card/metric-card.report-minimal.md +97 -0
  221. package/skills/apexlang/templates/template-components/template-components.registry.json +90 -1
  222. package/skills/apexlang/templates/template-components/timeline/README.md +19 -0
  223. package/skills/apexlang/templates/template-components/timeline/timeline._common.md +43 -0
  224. package/skills/apexlang/templates/template-components/timeline/timeline._index.md +24 -0
  225. package/skills/apexlang/templates/template-components/{timeline._template_options.md → timeline/timeline._template_options.md} +2 -1
  226. package/skills/apexlang/templates/template-components/timeline/timeline.permutations.md +399 -0
  227. package/skills/apexlang/templates/template-components/timeline/timeline.report-sample-data.md +168 -0
  228. package/skills/apexlang/templates/workspace-components/credentials/credentials-for-open-ai.example.md +1 -1
  229. package/skills/apexlang/templates/workspace-components/generative-ai-services/open-ai.example.md +8 -6
  230. package/skills/apexlang/tools/apexctl.mjs +167 -4
  231. package/skills/apexlang/tools/compiler-truth-audit.mjs +95 -63
  232. package/skills/apexlang/tools/query-valid-props-context.mjs +30 -0
  233. package/skills/apexlang/tools/query-valid-props-normalize.mjs +1 -0
  234. package/skills/apexlang/tools/query-valid-props-runtime.mjs +13 -8
  235. package/skills/apexlang/tools/query-valid-props-semantics.mjs +391 -0
  236. package/skills/apexlang/tools/query-valid-props-template-components.mjs +15 -1
  237. package/skills/apexlang/tools/query-valid-props.mjs +198 -216
  238. /package/skills/apexlang/templates/template-components/{badge._template_options.md → badge/badge._template_options.md} +0 -0
  239. /package/skills/apexlang/templates/template-components/{flexbox-container._template_options.md → flexbox-container/flexbox-container._template_options.md} +0 -0
@@ -0,0 +1,183 @@
1
+ ---
2
+ templateId: region.badge.common
3
+ componentType: region
4
+ version: 1.0
5
+ description: Shared contract for standalone report-mode Badge template-component regions.
6
+ ---
7
+
8
+ # Purpose
9
+
10
+ Document generation of a data-backed Badge region emitted as `themeTemplateComponent/badge`.
11
+
12
+ # Scope
13
+
14
+ In scope: report-mode Badge regions, verified data sources, Badge attributes, the optional `link` action, region/column authorization, security, and governance.
15
+
16
+ Out of scope: custom Badge template-component authoring and attaching Badge as a partial component inside another component.
17
+
18
+ # Generation Rules (MANDATORY)
19
+
20
+ 1. Emit `type: themeTemplateComponent/badge` and `componentAppearance.display: report`.
21
+ 2. Use any compiler-supported data-backed report source and preserve its exact `source.location` and `source.type` contract. The 26.1 matrix is `localDatabase` or `restEnabledSql` with `tableView`, `sqlQuery`, `functionBody`, or `propertyGraph`; plus `restSource`, `jsonDualityView`, `jsonSource`, and `sampleData`, whose locations select their source shape without `source.type`. Prefer a direct table/view source for a simple verified object, `sqlQuery` for joins or computed values, and an authoritative external-source contract when data is external.
22
+ 3. Require authoritative evidence for every referenced object and column before generating object-specific source code.
23
+ 4. Map `settings.label` and `settings.value`; both are required by the Badge template metadata.
24
+ 5. Keep `settings.label` static and concise because Badge label metadata uses raw rendering. Do not bind a source column, substitution token, or other runtime input into the label.
25
+ 6. Map the `sessionStateValue` settings `value` and `state` with bare source-column aliases such as `BADGE_VALUE` and `BADGE_STATE`. Do not wrap those aliases in `&COLUMN_NAME.` substitution syntax; APEX can resolve the substitution during import and then render the resolved text as a quoted column reference.
26
+ 7. Emit one explicit child `column (...)` for every delivered source projection. Each source-backed child column uses `source.type: databaseColumn`, `source.databaseColumn`, and an exact compiler-supported `source.dataType`.
27
+ 8. Treat `settings.state` as explicit user intent. When the user does not request a semantic state, omit `settings.state`, the state projection, and the state child column so the native Badge renders its normal state. When the user does request a state, use any compiler-supported source whose projected state column guarantees exact lowercase `danger`, `warning`, `success`, or `info`. For `sqlQuery`, require every branch and an explicit `ELSE` to return an allowlisted value. For table/view, REST, remote, or other sources, require authoritative upstream enum/constraint evidence; local lint verifies the mapping and `varchar2` datatype but cannot infer arbitrary runtime row values.
28
+ 9. Emit `icon`, `displayLabel`, `style`, `shape`, and `size` only when required. Before assigning any Badge icon, load and consult the pinned Font APEX 26.1 catalogue; the icon must contain exactly one catalogue icon, with at most one optional `fa` base class and unique optional catalogue-listed modifiers. Never use a column mapping, substitution, unresolved template value, or concatenated class fragment.
29
+ 10. Badge supports at most one action in the `link` position. Every emitted action must include a numeric `layout.sequence`, which the live compiler requires for region actions. Badge has no action templates. Do not invent button/menu templates or additional positions.
30
+ 11. Use a reviewed structured `behavior.target` for Badge navigation. The local Badge policy rejects `targetUrl` because the repository has no application-specific destination allowlist; do not weaken this by passing an external destination through a column or substitution.
31
+ 12. Do not emit Badge `linkAttributes`. Custom attributes and inline event handlers are rejected; implement behavior through the reviewed structured action target.
32
+ 13. Apply `security.authorizationScheme` to the Badge region when visibility requires a verified authorization scheme. A link target must independently enforce the same or stricter authorization; hiding the Badge is not access control.
33
+ 14. Keep output escaping enabled by default. Never generate HTML markup in SQL for the Badge value, label, state, or icon.
34
+ 15. Use the native region template and options for composition. Do not invent CSS classes to reproduce Badge structure or state styling.
35
+ 16. Keep deterministic ordering in top-level `orderBy {}` for multi-row Badge regions; do not place `ORDER BY` inside `source.sqlQuery`.
36
+
37
+ # Data Source Contract
38
+
39
+ - Direct table/view: use for a simple verified object with direct Badge mappings; an explicitly requested mapped state column requires authoritative enum/check-constraint evidence.
40
+ - `sqlQuery`: use for joins, computed Badge values/states, bind predicates, or aliases needed by the presentation contract; local lint proves literal and `CASE` state results.
41
+ - `functionBody`, `propertyGraph`, `restSource`, `jsonDualityView`, `jsonSource`, `sampleData`, and remote variants require an authoritative source contract, verified returned fields, and explicit upstream state-value guarantees when `settings.state` is mapped.
42
+ - Project only fields needed for label, value, optional state/icon, link context, deterministic ordering, and row identity.
43
+ - A link that passes row context requires a deterministic verified key column.
44
+ - Do not generate a source-free Badge region. The separate no-source region error is outside this component workflow.
45
+
46
+ # Attribute Contract
47
+
48
+ | Attribute | Required | Accepted value or mapping | Security note |
49
+ |---|---:|---|---|
50
+ | `settings.label` | yes | Non-empty plain static text only | Metadata renders the label raw; column mappings, substitutions, binds, unresolved template values, HTML, and event attributes are rejected. |
51
+ | `settings.value` | yes | Bare source-column alias such as `BADGE_VALUE` | Do not use `&BADGE_VALUE.`; value metadata strips HTML, but SQL must still return raw data rather than markup. |
52
+ | `settings.state` | no | Bare source-column alias whose values are restricted to `danger`, `warning`, `success`, or `info`; emit only when the user requests a semantic state | Do not use `&BADGE_STATE.`; treat the returned values as an allowlisted semantic token. |
53
+ | `settings.icon` | no | Exactly one pinned Font APEX icon with optional catalog modifiers | Do not accept dynamic values, duplicate base/modifier tokens, multiple icons, or arbitrary class fragments. |
54
+ | `settings.displayLabel` | no | boolean | Enable when the label adds meaning not already clear from context. |
55
+ | `settings.style` | no | `outline` or `subtle` | Omit to inherit the containing template default. |
56
+ | `settings.shape` | no | `circular`, `rounded`, or `square` | Omit to inherit the containing template default. |
57
+ | `settings.size` | no | `small`, `medium`, or `large` | Omit to inherit the containing template default. |
58
+
59
+ # Column Data Types
60
+
61
+ The child column mapped by `settings.value` must use an APEX 26.1 Badge-supported value datatype: `varchar2`, `number`, `date`, `intervalYearToMonth`, or `intervalDayToSecond`. The child column mapped by `settings.state` must use `varchar2`. Auxiliary projected columns may use any compiler-supported template-component datatype.
62
+
63
+ # Action Contract
64
+
65
+ - Omit the action when the Badge is informational.
66
+ - When navigation is required, emit at most one `action` with `position: link`.
67
+ - Give every action a deterministic numeric `layout.sequence`.
68
+ - Same-app targets must resolve to an existing authorized page and pass only verified item mappings.
69
+ - Use a structured target. Do not emit `targetUrl` or `linkAttributes` for Badge actions.
70
+ - Never treat Badge visibility as proof that the current user can access the target page or underlying row.
71
+ - Badge has no action-template inventory; omit `action.template`.
72
+
73
+ # Patterns
74
+
75
+ - Status list: static label plus a source-backed value and allowlisted state.
76
+ - Count/category list: source-backed value with an optional static label, no action by default.
77
+ - Authorized drilldown: source-backed Badge with one `link` action passing a verified row key to an existing authorized page.
78
+
79
+ # Anti-Patterns
80
+
81
+ - Static HTML or Classic Report markup that imitates a Badge.
82
+ - HTML-generating SQL for colors, labels, icons, or links.
83
+ - Arbitrary state values used as CSS classes.
84
+ - A dynamic label sourced from untrusted user HTML.
85
+ - A Badge link to an unresolved page, guessed item, or unrestricted external URL.
86
+ - A Badge action with `linkAttributes`, an inline event handler, or `targetUrl` without an application-specific allowlist.
87
+ - Adding a button/menu action template; Badge exposes only the `link` action position.
88
+ - Omitting `layout.sequence` from a Badge action; the live compiler requires it.
89
+ - Omitting child columns for fields projected by a report-mode source.
90
+ - Using region visibility as the only authorization check.
91
+
92
+ # Output Template – Report Mode
93
+
94
+ ```apexlang
95
+ region {{regionStaticId}} (
96
+ name: {{name}}
97
+ type: themeTemplateComponent/badge
98
+ layout {
99
+ sequence: {{layout.sequence}}
100
+ slot: body
101
+ startNewLayout: false
102
+ startNewRow: true
103
+ }
104
+ appearance {
105
+ template: @/standard
106
+ templateOptions: #DEFAULT#
107
+ }
108
+ componentAppearance {
109
+ display: report
110
+ }
111
+ {{source.block}}
112
+ settings {
113
+ label: {{settings.label}}
114
+ value: {{settings.valueColumn}}
115
+ {{#if settings.stateColumn}}
116
+ state: {{settings.stateColumn}}
117
+ {{/if}}
118
+ icon: {{settings.icon}}
119
+ displayLabel: {{settings.displayLabel}}
120
+ style: {{settings.style}}
121
+ shape: {{settings.shape}}
122
+ size: {{settings.size}}
123
+ }
124
+ orderBy {
125
+ type: staticValue
126
+ orderByClause: {{orderByClause}}
127
+ }
128
+ security {
129
+ authorizationScheme: {{security.authorizationScheme}}
130
+ }
131
+ column {{column.name}} (
132
+ layout {
133
+ sequence: {{column.layout.sequence}}
134
+ }
135
+ source {
136
+ type: databaseColumn
137
+ databaseColumn: {{column.source.databaseColumn}}
138
+ dataType: {{column.source.dataType}}
139
+ primaryKey: {{column.source.primaryKey}}
140
+ }
141
+ )
142
+ {{columns}}
143
+ {{linkAction}}
144
+ )
145
+ ```
146
+
147
+ # Conditional Rendering Rules
148
+
149
+ - Omit optional settings rather than emitting unsupported or empty values.
150
+ - Omit `settings.state`, its source projection, and its child column unless the user explicitly requests a semantic state.
151
+ - Omit `orderBy` only when the source is guaranteed to return one row and ordering is irrelevant.
152
+ - Emit `security.authorizationScheme` only when a verified scheme exists; do not invent an alias.
153
+ - Emit the link action only when the destination and row-context mapping are resolved.
154
+ - Mark one source column `primaryKey: true` when a row-level link or row identity requires it.
155
+
156
+ The `{{#if settings.stateColumn}}` block is a conditional template fragment: render its contents only when semantic state is explicitly requested. It keeps the state mapping visible in the contract while omitting the setting when state is unspecified. Project that alias in the source and add its `varchar2` child column through `{{columns}}` when the fragment is rendered.
157
+
158
+ # Security and Governance
159
+
160
+ - Keep the page authenticated under the application baseline and use a verified region authorization scheme for narrower visibility.
161
+ - Enforce authorization again on the target page and in protected data access; region hiding alone is insufficient.
162
+ - Return raw data from SQL. Do not disable escaping or embed HTML to obtain Badge styling.
163
+ - Keep labels static because the Badge label renderer is raw according to the template profile.
164
+ - Allowlist state and icon tokens. Do not concatenate user-controlled strings into CSS classes or navigation URLs.
165
+ - Validate every source object, projected column, target page, target item, and authorization alias before generation.
166
+
167
+ # Validation Checklist
168
+
169
+ - Region type is `themeTemplateComponent/badge` and display mode is `report`.
170
+ - `settings.label` and `settings.value` are present.
171
+ - `settings.label` is trusted static text; it does not contain a source-column or template substitution.
172
+ - `settings.value` and optional `settings.state` use bare projected source-column aliases.
173
+ - The value column uses only `varchar2`, `number`, `date`, `intervalYearToMonth`, or `intervalDayToSecond`.
174
+ - Every projected field has an explicit child column with an exact compiler-supported data type.
175
+ - Optional style, shape, and size values come from `badge._template_options.md`.
176
+ - When state is requested, the mapped projected column is `varchar2` and its source contract guarantees exact lowercase `danger`, `warning`, `success`, or `info`; SQL literals and `CASE` expressions additionally require an explicit allowlisted `ELSE`.
177
+ - When state is not requested, no state setting, state projection, or state child column is emitted.
178
+ - Any assigned icon is selected from the pinned Font APEX catalogue and contains exactly one catalogue icon, at most one `fa` base class, and unique catalogue-listed modifiers.
179
+ - Badge actions do not contain `targetUrl`, `linkAttributes`, or inline event handlers.
180
+ - At most one action is present; it uses `position: link`, defines numeric `layout.sequence`, omits `template`, and has a resolved target.
181
+ - Region and target authorization are independently enforced.
182
+ - SQL contains raw values rather than HTML and does not contain `ORDER BY`.
183
+ - No partial-component attachment or custom Badge template authoring was introduced.
@@ -0,0 +1,20 @@
1
+ ---
2
+ templateId: region.badge.index
3
+ componentType: region
4
+ version: 1.0
5
+ imports:
6
+ - badge._common.md
7
+ - badge._template_options.md
8
+ description: Routing entrypoint for standalone Badge template-component regions.
9
+ ---
10
+
11
+ # Purpose
12
+
13
+ Primary routing entrypoint for standalone report-mode `themeTemplateComponent/badge` regions.
14
+
15
+ # Load Order
16
+
17
+ 1. Load this file.
18
+ 2. Load `badge._common.md`.
19
+ 3. Load `badge._template_options.md`.
20
+ 4. Load exactly one matching scenario file.
@@ -0,0 +1,66 @@
1
+ ---
2
+ templateId: badge.report-link
3
+ componentType: templateComponent
4
+ imports:
5
+ - badge._common.md
6
+ version: 1.0
7
+ description: Report-mode Badge with its single supported link action.
8
+ ---
9
+
10
+ # Purpose
11
+
12
+ Render a Badge whose row navigates to a resolved same-application target.
13
+
14
+ # Output Template
15
+
16
+ ```apexlang
17
+ region {{regionStaticId}} (
18
+ name: {{name}}
19
+ type: themeTemplateComponent/badge
20
+ componentAppearance {
21
+ display: report
22
+ }
23
+ source {
24
+ location: localDatabase
25
+ type: sqlQuery
26
+ sqlQuery: ```
27
+ {{source.sqlQuery}}
28
+ ```
29
+ }
30
+ settings {
31
+ label: {{settings.label}}
32
+ value: {{settings.valueColumn}}
33
+ }
34
+ action {{actionId}} (
35
+ position: link
36
+ layout {
37
+ sequence: {{action.sequence}}
38
+ }
39
+ behavior {
40
+ type: redirectThisApp
41
+ target: {
42
+ page: {{targetPageId}}
43
+ items: {
44
+ {{targetItem}}: &{{sourceKeyColumn}}.
45
+ }
46
+ }
47
+ }
48
+ )
49
+ {{columns}}
50
+ )
51
+ ```
52
+
53
+ # Conditional Rendering Rules
54
+
55
+ - Use this scenario only when the target page, target item, and source key are resolved.
56
+ - Omit `action.template`; Badge has no action templates.
57
+ - Set a deterministic numeric `action.layout.sequence`; the live compiler requires it.
58
+ - Add the complete verified source plus explicit column contract from `badge._common.md`.
59
+
60
+ # Validation Checklist
61
+
62
+ - Action position is exactly `link`.
63
+ - Action includes numeric `layout.sequence`.
64
+ - Target is a structured same-application target.
65
+ - Source key is projected and marked as the row identity when required.
66
+ - Target page applies the same or stricter authorization than the Badge visibility rule.
@@ -0,0 +1,76 @@
1
+ ---
2
+ templateId: badge.report-minimal
3
+ componentType: templateComponent
4
+ imports:
5
+ - badge._common.md
6
+ version: 1.0
7
+ description: Minimal informational report-mode Badge with explicit source columns.
8
+ ---
9
+
10
+ # Purpose
11
+
12
+ Render one or more informational Badges without navigation.
13
+
14
+ # Output Template
15
+
16
+ ```apexlang
17
+ region {{regionStaticId}} (
18
+ name: {{name}}
19
+ type: themeTemplateComponent/badge
20
+ componentAppearance {
21
+ display: report
22
+ }
23
+ source {
24
+ location: localDatabase
25
+ type: sqlQuery
26
+ sqlQuery: ```
27
+ {{source.sqlQuery}}
28
+ ```
29
+ }
30
+ settings {
31
+ label: {{settings.label}}
32
+ value: {{settings.valueColumn}}
33
+ {{#if settings.stateColumn}}
34
+ state: {{settings.stateColumn}}
35
+ {{/if}}
36
+ }
37
+ column {{valueColumnId}} (
38
+ layout {
39
+ sequence: 10
40
+ }
41
+ source {
42
+ type: databaseColumn
43
+ databaseColumn: {{valueColumnName}}
44
+ dataType: varchar2
45
+ primaryKey: false
46
+ }
47
+ )
48
+ {{#if settings.stateColumn}}
49
+ column {{stateColumnId}} (
50
+ layout {
51
+ sequence: 20
52
+ }
53
+ source {
54
+ type: databaseColumn
55
+ databaseColumn: {{stateColumnName}}
56
+ dataType: varchar2
57
+ primaryKey: false
58
+ }
59
+ )
60
+ {{/if}}
61
+ )
62
+ ```
63
+
64
+ # Conditional Rendering Rules
65
+
66
+ - Omit the state setting and state column when no semantic state is required.
67
+ - The `{{#if settings.stateColumn}}` blocks are conditional template fragments: render their contents only when semantic state is explicitly requested. They retain the exact state setting and child-column contract while omitting both when state is unspecified.
68
+ - Add one child column for every additional projected field.
69
+ - Add top-level deterministic `orderBy` when multiple rows are returned.
70
+
71
+ # Validation Checklist
72
+
73
+ - Label and value are present.
74
+ - Value/state mappings resolve to projected aliases.
75
+ - No action is emitted.
76
+ - State output is allowlisted when used.
@@ -0,0 +1,20 @@
1
+ # Comments Templates
2
+
3
+ Canonical Universal Theme Comments template-component guidance.
4
+
5
+ ## Usage
6
+
7
+ - Load `comments._index.md` first.
8
+ - Load `comments._common.md` for the shared generation contract.
9
+ - Load `comments._template_options.md` only when Comments attributes or enum values are requested.
10
+ - Choose the canonical SQL report or a single permutation branch after source mappings are proven.
11
+ - Follow `references/domains/template-components/comments.md` for compiler authority and unsupported metadata.
12
+
13
+ ## Template Catalog
14
+
15
+ - `comments._index.md`
16
+ - `comments._common.md`
17
+ - `comments._template_options.md`
18
+ - `comments.apex-task-comments.md`
19
+ - `comments.partial-column.md`
20
+ - `comments.permutations.md`
@@ -0,0 +1,43 @@
1
+ ---
2
+ templateId: comments.common
3
+ componentType: templateComponent
4
+ version: 1.0
5
+ description: Shared canonical contract for Comments template-component generation.
6
+ ---
7
+
8
+ # Purpose
9
+
10
+ Define the shared source, appearance, settings, nested-Avatar, optional report behavior, and column contract for Comments regions.
11
+
12
+ # Generation Rules (MANDATORY)
13
+
14
+ 1. Use `type: themeTemplateComponent/comments` and `componentAppearance.display: partial` or `report`.
15
+ 2. Every Comments region must include `source`, `componentAppearance`, and `settings`.
16
+ 3. Map required `settings.userName` and `settings.commentText`, plus optional `settings.date`, directly to declared uppercase child-column identifiers. In report mode, use an accepted enum for required `settings.style`; omit `settings.style` in partial mode. `attributes`, `commentClass`, `alignment`, and `applyThemeColors` are optional.
17
+ 4. Keep explicit child `column (...)` declarations aligned with every projected report source column and its data type.
18
+ 5. Enable Avatar rendering only through `settings.displayAvatar`; keep the flag synchronized with `plugin-avatar` presence.
19
+ 6. When Avatar is enabled, emit `plugin-avatar.type` and `plugin-avatar.shape`, plus exactly one payload matching `icon`, `image`, or `initials`.
20
+ 7. Use a dedicated projected initials column, not the full user-name column. Do not treat the inventory's `sampleDataValue: INITIALS` as proof that `sampleData: tasks` exposes an `INITIALS` column; target-build runtime evidence rejects that identifier. For Tasks-backed initials, use a verified SQL projection such as `AVATAR_INITIALS` or omit the initials branch. URL-column images must use a declared varchar2 column containing only an application-managed static-file URL.
21
+ 8. Partial-mode Comments must use a source proven to return at most one row. For SQL sources, include an explicit `fetch first 1 row only` or equivalent `rownum` bound. Partial mode must omit `settings.style` and must not emit the report-only `rowSelection`, `performance`, `pagination`, `entityTitle`, `messages`, or `advanced` blocks. Report-mode Comments requires `settings.style` and may use those compiler-confirmed blocks. Omit `rowSelection` for the no-selection behavior; when selection is requested, use `focusOnly`, `singleSelection`, or `multipleSelection`.
22
+ 9. Comments supports compiler-proven actions at `actions`, `avatarLink`, and `userNameLink`. Use root `position`, `label` only for `actions`, a numeric `layout.sequence`, and a structured `behavior.target`; omit the stale `template` and `behavior.type` properties. A separate standalone Badge region is not a badge on each Comments row.
23
+ 10. Do not emit nested `plugin-badge` or `plugin-grouping` blocks. A direct APEX 26.1 probe rejects `plugin-grouping.groupTitle` and `plugin-grouping.groupIcon` as invalid application-source properties, so grouping is explicitly unsupported for generated APEXlang. A separate standalone Badge region is not a badge on each Comments row.
24
+ 11. Keep `settings.attributes` free of scriptable markup and event handlers. Keep `settings.commentClass` to static CSS tokens or a declared varchar2 source-column mapping; do not emit substitution-driven classes.
25
+ 12. Use `comments._template_options.md` as attribute inventory only. Compiler-backed APEXlang legality remains authoritative.
26
+
27
+ # Variable Contract
28
+
29
+ | Name | Required | Type | Notes |
30
+ |------|----------|------|-------|
31
+ | source | yes | block | Use a supported source mode with verified mappings. |
32
+ | componentAppearance.display | yes | enum | `partial` or `report`. |
33
+ | settings.userName | yes | column | Verified user-name column. |
34
+ | settings.commentText | yes | column | Verified comment-text column. |
35
+ | settings.style | report only | enum | Required for `report`; omit for `partial`. Values: `basic` or `chatSpeechBubbles`. |
36
+ | settings.date | optional | column | Verified date or timestamp column. |
37
+ | settings.displayAvatar | optional | boolean | Must agree with `plugin-avatar` presence. |
38
+ | plugin-avatar | conditional | block | Required only when Avatar display is enabled. |
39
+ | column | conditional | child component | Required for report projections and every referenced mapping. |
40
+
41
+ # Authority Boundary
42
+
43
+ The Universal Theme export includes grouping and action metadata that the current APEXlang compiler rejects. Follow the Comments workflow and target-build compiler validation for any structure not shown by the canonical fixtures.
@@ -0,0 +1,25 @@
1
+ ---
2
+ templateId: template-component.comments.index
3
+ componentType: template-component
4
+ version: 1.0
5
+ imports:
6
+ - comments._common.md
7
+ description: Routing entrypoint for Comments template-component regions.
8
+ ---
9
+
10
+ # Purpose
11
+
12
+ Select the narrowest supported Comments report or partial configuration.
13
+
14
+ # Load Order
15
+
16
+ 1. Load `comments._common.md`.
17
+ 2. Load `comments.apex-task-comments.md` as the canonical report example.
18
+ 3. Load `comments.partial-column.md` when Comments is requested as an Interactive Report column.
19
+ 4. Load `comments.permutations.md` only when a conditional Avatar, chat, or partial region variant is requested.
20
+ 5. Load `comments._template_options.md` only when attribute or enum evidence is required.
21
+ 6. Load the shared Avatar inventory only when nested Avatar rendering is enabled.
22
+
23
+ # Authority
24
+
25
+ Use the Comments workflow for compiler-backed legality. Theme-export `REPORT` and `REPORT_GROUP` metadata is inventory evidence only.
@@ -3,8 +3,9 @@
3
3
  These entries come from `create_plugin_attribute` and `create_plugin_attr_value`, not from `wwv_flow_template_options`.
4
4
 
5
5
  Apply these values through the owning component's settings plus the shared avatar owner file when avatar rendering is enabled.
6
- Load `avatar._template_options.md` for the shared avatar substructure used by Comments.
6
+ Load `../avatar/avatar._template_options.md` for the shared avatar substructure used by Comments.
7
7
  Emit only exact accepted values from this inventory. Do not concatenate adjacent values into one token and do not substitute labels or implementation details.
8
+ Rows scoped to `REPORT` or `REPORT_GROUP` record Universal Theme export metadata only; they do not by themselves prove an APEXlang emission shape. Emit report rows only where the curated Comments contract and target compiler permit them, and do not emit `REPORT_GROUP` rows because the pinned compiler exposes no supported Comments grouping block.
8
9
 
9
10
  When a row includes `values=`, pass the left-hand side of each `name=>return_value` pair.
10
11
 
@@ -0,0 +1,77 @@
1
+ ---
2
+ templateId: comments.apex-task-comments
3
+ componentType: region
4
+ version: 1.0
5
+ description: SQL-backed Comments example using the user-confirmed APEX_TASK_COMMENTS source.
6
+ object_evidence_source: user_asserted
7
+ ---
8
+
9
+ # Output Template
10
+
11
+ ```apexlang
12
+ region comments (
13
+ name: Comments
14
+ type: themeTemplateComponent/comments
15
+ source {
16
+ location: localDatabase
17
+ type: sqlQuery
18
+ sqlQuery:
19
+ ```sql
20
+ select created_by as user_name,
21
+ text as comment_text,
22
+ created_on as comment_date
23
+ from apex_task_comments
24
+ order by created_on desc
25
+ ```
26
+ }
27
+ layout {
28
+ sequence: 10
29
+ slot: body
30
+ }
31
+ appearance {
32
+ template: @/standard
33
+ templateOptions: #DEFAULT#
34
+ }
35
+ accessibility {
36
+ landmarkType: region
37
+ }
38
+ componentAppearance {
39
+ display: report
40
+ }
41
+ settings {
42
+ userName: USER_NAME
43
+ commentText: COMMENT_TEXT
44
+ date: COMMENT_DATE
45
+ style: basic
46
+ }
47
+ column USER_NAME (
48
+ layout {
49
+ sequence: 10
50
+ }
51
+ source {
52
+ databaseColumn: USER_NAME
53
+ dataType: varchar2
54
+ }
55
+ )
56
+ column COMMENT_TEXT (
57
+ layout {
58
+ sequence: 20
59
+ }
60
+ source {
61
+ databaseColumn: COMMENT_TEXT
62
+ dataType: varchar2
63
+ }
64
+ )
65
+ column COMMENT_DATE (
66
+ layout {
67
+ sequence: 30
68
+ }
69
+ source {
70
+ databaseColumn: COMMENT_DATE
71
+ dataType: date
72
+ }
73
+ )
74
+ )
75
+ ```
76
+
77
+ Use this source only with the confirmed `APEX_TASK_COMMENTS` object and columns. Add a nested Avatar only through one compiler-supported branch from `comments.permutations.md`. Grouping is unsupported. Add an action only at `actions`, `avatarLink`, or `userNameLink` using the compiler-proven action shape from the Comments workflow.
@@ -0,0 +1,120 @@
1
+ ---
2
+ templateId: comments.partial-column
3
+ componentType: column
4
+ version: 1.0
5
+ description: Partial Comments template component used as an Interactive Report column.
6
+ ---
7
+
8
+ # Purpose
9
+
10
+ Render one Comments entity per Interactive Report row. The column is the partial Comments context; it does not emit the region-only report blocks or `settings.style`.
11
+
12
+ # Output Template
13
+
14
+ ```apexlang
15
+ region comments_ir_column (
16
+ name: Comments Interactive Report Column
17
+ type: interactiveReport
18
+ source {
19
+ location: sampleData
20
+ sampleData: tasks
21
+ }
22
+ layout {
23
+ sequence: 10
24
+ slot: body
25
+ }
26
+ appearance {
27
+ template: @/interactive-report
28
+ templateOptions: #DEFAULT#
29
+ }
30
+ column ASSIGNED_TO_NAME (
31
+ type: plainText
32
+ heading {
33
+ heading: Author
34
+ }
35
+ layout {
36
+ sequence: 10
37
+ }
38
+ source {
39
+ dataType: STRING
40
+ }
41
+ )
42
+ column TASK_NAME (
43
+ type: plainText
44
+ heading {
45
+ heading: Comment
46
+ }
47
+ layout {
48
+ sequence: 20
49
+ }
50
+ source {
51
+ dataType: STRING
52
+ }
53
+ )
54
+ column COMMENTS (
55
+ type: themeTemplateComponent/comments
56
+ heading {
57
+ heading: Comments
58
+ }
59
+ layout {
60
+ sequence: 30
61
+ }
62
+ source {
63
+ dataType: STRING
64
+ }
65
+ settings {
66
+ userName: ASSIGNED_TO_NAME
67
+ commentText: TASK_NAME
68
+ }
69
+ action comments-column-action (
70
+ position: actions
71
+ label: Open comment
72
+ layout {
73
+ sequence: 40
74
+ }
75
+ behavior {
76
+ target: {
77
+ page: 1
78
+ }
79
+ }
80
+ )
81
+ action comments-column-avatar-link (
82
+ position: avatarLink
83
+ layout {
84
+ sequence: 50
85
+ }
86
+ behavior {
87
+ target: {
88
+ page: 1
89
+ }
90
+ }
91
+ )
92
+ action comments-column-user-link (
93
+ position: userNameLink
94
+ layout {
95
+ sequence: 60
96
+ }
97
+ behavior {
98
+ target: {
99
+ page: 1
100
+ }
101
+ }
102
+ )
103
+ )
104
+ )
105
+ ```
106
+
107
+ # Conditional Rendering Rules
108
+
109
+ - Keep `type: themeTemplateComponent/comments` on the `column COMMENTS` block.
110
+ - Include `heading`, `layout.sequence`, `source.dataType`, and `settings.userName` / `settings.commentText` on the Comments column.
111
+ - Actions may be attached to the column at `actions`, `avatarLink`, or `userNameLink`; use `layout.sequence` and structured `behavior.target`.
112
+ - Declare every mapped value as a sibling Interactive Report column and keep its source datatype compatible with the mapping.
113
+ - Treat the column as partial: omit `settings.style`, `componentAppearance`, `rowSelection`, pagination, performance, entity-title, messages, and advanced blocks.
114
+ - Add `settings.date` only when a sibling date or timestamp column is projected. Avatar settings use the same display toggle and nested payload contract as a partial Comments region.
115
+
116
+ # Validation Checklist
117
+
118
+ - The enclosing Interactive Report source projects all mapped sibling columns.
119
+ - The Comments column does not use `source.databaseColumn`, `source.sqlExpression`, or a report-only setting.
120
+ - No guessed grouping or nested Badge structure is emitted.