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.
- package/README.md +22 -5
- package/THIRD_PARTY_NOTICES.md +2 -2
- package/UPSTREAM.json +2 -2
- package/docs/assets/overview.en.png +0 -0
- package/docs/assets/overview.en.svg +89 -0
- package/docs/assets/overview.uk.png +0 -0
- package/docs/assets/overview.uk.svg +89 -0
- package/docs/en/README.md +41 -0
- package/docs/en/architecture.md +73 -0
- package/docs/en/getting-started.md +77 -0
- package/docs/en/maintenance.md +83 -0
- package/docs/en/tool-reference.md +85 -0
- package/docs/uk/README.md +41 -0
- package/docs/uk/architecture.md +73 -0
- package/docs/uk/getting-started.md +77 -0
- package/docs/uk/maintenance.md +83 -0
- package/docs/uk/tool-reference.md +85 -0
- package/extensions/apexlang/index.ts +19 -10
- package/extensions/lib/apexlang-cli.d.mts +1 -2
- package/extensions/lib/apexlang-cli.mjs +18 -13
- package/extensions/lib/apexlang-local-validate.mjs +83 -0
- package/extensions/lib/apexlang-local-validator.py +116 -0
- package/extensions/lib/apexlang-runtime-validate.mjs +76 -0
- package/package.json +2 -1
- package/skills/apexlang/APEXlang Skills and Workflows.md +325 -0
- package/skills/apexlang/README.md +6 -6
- package/skills/apexlang/RELEASE-NOTES.md +2 -2
- package/skills/apexlang/SKILL.md +24 -19
- package/skills/apexlang/agents/openai.yaml +4 -3
- package/skills/apexlang/assets/apex-generation/components.registry.json +1001 -16
- package/skills/apexlang/assets/apexlang/domains-catalog.json +6 -1
- package/skills/apexlang/assets/component-attributes.json +1924 -180
- package/skills/apexlang/assets/component-policies.json +19 -10
- package/skills/apexlang/assets/contracts/grammar-semantic-rules.json +134 -0
- package/skills/apexlang/assets/contracts/package-layers.json +56 -0
- package/skills/apexlang/assets/contracts/page-construction-packs.json +154 -0
- package/skills/apexlang/assets/contracts/page-patterns.json +119 -0
- package/skills/apexlang/assets/grammar/apexlang.ebnf +11743 -0
- package/skills/apexlang/assets/indexes/font-apex-icon-index.json +1699 -0
- package/skills/apexlang/assets/routing-catalog-main.json +11 -10
- package/skills/apexlang/assets/routing-load-policy.json +35 -9
- package/skills/apexlang/assets/rules-mapping.json +110 -2
- package/skills/apexlang/assets/rules.catalog.json +1298 -0
- package/skills/apexlang/assets/validator-fix-recipes.json +372 -17
- package/skills/apexlang/assets/workspace-intelligence.json +7 -10
- package/skills/apexlang/manifest.json +268 -12
- package/skills/apexlang/references/domains/README.md +1 -1
- package/skills/apexlang/references/domains/page-components/buttons.md +2 -2
- package/skills/apexlang/references/domains/page-components/page-items.md +3 -3
- package/skills/apexlang/references/domains/page-components/regions/region-display-selector/workflow-region-display-selector.md +69 -0
- package/skills/apexlang/references/domains/page-components/regions.md +1 -0
- package/skills/apexlang/references/domains/template-components/comments.md +61 -0
- package/skills/apexlang/references/domains/template-components/registry.md +2 -0
- package/skills/apexlang/references/domains/template-components/templates.md +47 -0
- package/skills/apexlang/references/domains/template-components/timeline.md +51 -0
- package/skills/apexlang/references/ops/one-message-router-contract.md +2 -2
- package/skills/apexlang/references/ops/runtime-gates/01-direct-sqlcl-import.md +1 -1
- package/skills/apexlang/references/ops/runtime-gates/02-direct-sqlcl-validate-gate.md +1 -1
- package/skills/apexlang/references/ops/runtime-gates.md +17 -16
- package/skills/apexlang/references/ops/sqlcl-agents/00-connection-gate.md +7 -7
- package/skills/apexlang/references/ops/sqlcl.md +7 -8
- package/skills/apexlang/references/policies/compiler-prop-map.md +6 -4
- package/skills/apexlang/references/policies/governance/00-governance.md +2 -2
- package/skills/apexlang/references/policies/memory-bank/00-guard/ai.guard.md +126 -922
- package/skills/apexlang/references/policies/memory-bank/20-data/apex.logic.md +3 -3
- package/skills/apexlang/references/policies/memory-bank/20-data/db.connection.md +9 -11
- package/skills/apexlang/references/policies/memory-bank/30-pages/apex.cards-page.md +95 -0
- package/skills/apexlang/references/policies/memory-bank/30-pages/apex.page.md +2 -2
- package/skills/apexlang/references/policies/memory-bank/30-pages/apex.smart-filter-search.md +145 -74
- package/skills/apexlang/references/policies/memory-bank/40-components/apex.region-interactions.md +9 -2
- package/skills/apexlang/references/policies/memory-bank/40-components/apex.region-media.md +6 -5
- package/skills/apexlang/references/policies/memory-bank/systemPatterns.md +9 -1
- package/skills/apexlang/references/workflows/apex-generation/agents/20-agent-draft.md +51 -232
- package/skills/apexlang/references/workflows/apex-generation/agents/30-agent-critique.md +49 -449
- package/skills/apexlang/references/workflows/apex-generation/agents/40-agent-revision.md +38 -238
- package/skills/apexlang/references/workflows/apex-generation/nlu/nlu-routing-test-matrix.md +8 -2
- package/skills/apexlang/references/workflows/apex-generation/nlu/nlu-routing-validation-notes.md +19 -3
- package/skills/apexlang/references/workflows/apex-generation/registry.md +15 -1
- package/skills/apexlang/references/workflows/apex-generation/templates.md +1 -1
- package/skills/apexlang/references/workflows/apex-generation.md +1 -1
- package/skills/apexlang/references/workflows/apexlang/apexlang-execution-model.md +5 -5
- package/skills/apexlang/references/workflows/apexlang/prompt-contracts.md +81 -10
- package/skills/apexlang/references/workflows/apexlang/workflow-create-app-from-fr-and-model.md +18 -7
- package/skills/apexlang/release-notes.json +156 -0
- package/skills/apexlang/runtime/grammar_contract.mjs +1166 -0
- package/skills/apexlang/runtime/internal/python/format_apexlang.py +210 -0
- package/skills/apexlang/runtime/internal/python/validate_apexlang.py +14142 -5843
- package/skills/apexlang/runtime/internal/python/validator_common.py +2 -0
- package/skills/apexlang/runtime/lib/catalogs.mjs +1026 -0
- package/skills/apexlang/runtime/lib/common.mjs +35 -0
- package/skills/apexlang/runtime/runtime.bundle.mjs +457 -57
- package/skills/apexlang/templates/items/combobox/combobox.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/date-picker/date-picker._common.md +1 -1
- package/skills/apexlang/templates/items/date-picker/date-picker.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/file-upload/file-upload._common.md +30 -24
- package/skills/apexlang/templates/items/file-upload/file-upload.compact-template.md +6 -0
- package/skills/apexlang/templates/items/file-upload/file-upload.explicit-defaults.md +23 -8
- package/skills/apexlang/templates/items/file-upload/file-upload.minimal.md +6 -0
- package/skills/apexlang/templates/items/hidden-item/hidden-item._common.md +1 -1
- package/skills/apexlang/templates/items/hidden-item/hidden-item.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/items._common.md +3 -2
- package/skills/apexlang/templates/items/list-manager/list-manager.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/markdown-editor/markdown-editor._common.md +1 -1
- package/skills/apexlang/templates/items/markdown-editor/markdown-editor.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/number-field/number-field._common.md +8 -6
- package/skills/apexlang/templates/items/number-field/number-field.explicit-defaults.md +12 -2
- package/skills/apexlang/templates/items/popup-lov/popup-lov.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/rich-text-editor/rich-text-editor._common.md +1 -1
- package/skills/apexlang/templates/items/rich-text-editor/rich-text-editor.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/select-many/standard.md +1 -1
- package/skills/apexlang/templates/items/shuttle/shuttle.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/switch/switch._common.md +8 -8
- package/skills/apexlang/templates/items/switch/switch.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/text-area/text-area._common.md +2 -3
- package/skills/apexlang/templates/items/text-area/text-area.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/text-area/text-area.required-length.md +1 -3
- package/skills/apexlang/templates/items/text-autocomplete/text-autocomplete.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/text-autocomplete/text-autocomplete.required-length.md +1 -3
- package/skills/apexlang/templates/items/text-field/text-field._common.md +2 -3
- package/skills/apexlang/templates/items/text-field/text-field.explicit-defaults.md +1 -1
- package/skills/apexlang/templates/items/text-field/text-field.required-length.md +1 -3
- package/skills/apexlang/templates/page-examples/faceted-search/faceted-search.example.md +0 -5
- package/skills/apexlang/templates/page-examples/form-page/form-page.example.md +0 -9
- package/skills/apexlang/templates/page-examples/interactive-report-page/interactive-report-page.example.md +2 -2
- package/skills/apexlang/templates/page-examples/login-page/login-page.example.md +0 -8
- package/skills/apexlang/templates/page-examples/task-definition-initiated-tasks-page/task-definition-initiated-tasks-page.example.md +7 -17
- package/skills/apexlang/templates/page-examples/task-definition-my-tasks-page/task-definition-my-tasks-page.example.md +7 -65
- package/skills/apexlang/templates/page-examples/task-definition-task-details/task-definition-task-details.example.md +38 -201
- package/skills/apexlang/templates/region-components/calendar/calendar.custom-styling.md +3 -1
- package/skills/apexlang/templates/region-components/calendar/calendar.faceted-search.md +3 -2
- package/skills/apexlang/templates/region-components/cards/README.md +12 -4
- package/skills/apexlang/templates/region-components/cards/cards._common.md +176 -37
- package/skills/apexlang/templates/region-components/cards/cards._index.md +2 -1
- package/skills/apexlang/templates/region-components/cards/cards.refresh-after-dialog.md +46 -0
- package/skills/apexlang/templates/region-components/cards/cards.refresh-on-change.md +58 -0
- package/skills/apexlang/templates/region-components/cards/cards.rest-source.md +54 -18
- package/skills/apexlang/templates/region-components/cards/cards.standard.md +37 -21
- package/skills/apexlang/templates/region-components/chart/chart._series._common.md +1 -4
- package/skills/apexlang/templates/region-components/chart/chart.pie.md +6 -2
- package/skills/apexlang/templates/region-components/chart/chart.status-meter-gauge.md +1 -1
- package/skills/apexlang/templates/region-components/chart/chart.stock.md +2 -0
- package/skills/apexlang/templates/region-components/chart/features/chart.feature-chart-links.md +9 -7
- package/skills/apexlang/templates/region-components/faceted-search/faceted-search._common.md +1 -14
- package/skills/apexlang/templates/region-components/form/form._items._common.md +1 -5
- package/skills/apexlang/templates/region-components/interactive-report/interactive-report._columns._common.md +2 -6
- package/skills/apexlang/templates/region-components/interactive-report/interactive-report.page-header-actions.md +1 -7
- package/skills/apexlang/templates/region-components/list/README.md +1 -1
- package/skills/apexlang/templates/region-components/list/list._common.md +1 -1
- package/skills/apexlang/templates/region-components/map/map.backgrounds.md +12 -10
- package/skills/apexlang/templates/region-components/map/map.layer.extruded-polygons.md +16 -12
- package/skills/apexlang/templates/region-components/map/map.layer.heat-map.md +10 -7
- package/skills/apexlang/templates/region-components/map/map.layer.lines.md +10 -8
- package/skills/apexlang/templates/region-components/map/map.layer.polygons.md +21 -18
- package/skills/apexlang/templates/region-components/map/map.region.background-custom.md +25 -19
- package/skills/apexlang/templates/region-components/map/map.region.background-shared.md +19 -13
- package/skills/apexlang/templates/region-components/map/map.region.bbox-sql.md +13 -13
- package/skills/apexlang/templates/region-components/map/map.region.bbox-static.md +2 -2
- package/skills/apexlang/templates/region-components/map/map.region.browser-location.md +3 -7
- package/skills/apexlang/templates/region-components/map/map.region.init-position-sql.md +7 -7
- package/skills/apexlang/templates/region-components/region-display-selector/README.md +5 -2
- package/skills/apexlang/templates/region-components/region-display-selector/region-display-selector._common.md +60 -7
- package/skills/apexlang/templates/region-components/region-display-selector/region-display-selector._index.md +4 -1
- package/skills/apexlang/templates/region-components/region-display-selector/region-display-selector.permutations.md +55 -0
- package/skills/apexlang/templates/region-components/region-display-selector/region-display-selector.standard.md +91 -5
- package/skills/apexlang/templates/region-components/smart-filter-search/README.md +6 -2
- package/skills/apexlang/templates/region-components/smart-filter-search/smart-filter-search._common.md +107 -46
- package/skills/apexlang/templates/region-components/smart-filter-search/smart-filter-search._index.md +4 -3
- package/skills/apexlang/templates/region-components/smart-filter-search/smart-filter-search.standard.md +33 -17
- package/skills/apexlang/templates/shared-components/component-settings/component-settings._common.md +1 -0
- package/skills/apexlang/templates/shared-components/component-settings.example.md +1 -0
- package/skills/apexlang/templates/shared-components/email-templates.example.md +1 -1
- package/skills/apexlang/templates/shared-components/rest-data-sources/example_rest_data_source.example.md +40 -46
- package/skills/apexlang/templates/shared-components/task-definitions/action-task.example.md +2 -30
- package/skills/apexlang/templates/shared-components/task-definitions/approve-request.example.md +3 -31
- package/skills/apexlang/templates/template-components/README.md +27 -15
- package/skills/apexlang/templates/template-components/avatar/README.md +56 -0
- package/skills/apexlang/templates/template-components/avatar/avatar._common.md +149 -0
- package/skills/apexlang/templates/template-components/avatar/avatar._index.md +42 -0
- package/skills/apexlang/templates/template-components/{avatar._template_options.md → avatar/avatar._template_options.md} +1 -1
- package/skills/apexlang/templates/template-components/avatar/avatar.report-icon.md +48 -0
- package/skills/apexlang/templates/template-components/avatar/avatar.report-image-url-column.md +62 -0
- package/skills/apexlang/templates/template-components/avatar/avatar.report-initials.md +54 -0
- package/skills/apexlang/templates/template-components/badge/README.md +38 -0
- package/skills/apexlang/templates/template-components/badge/badge._common.md +183 -0
- package/skills/apexlang/templates/template-components/badge/badge._index.md +20 -0
- package/skills/apexlang/templates/template-components/badge/badge.report-link.md +66 -0
- package/skills/apexlang/templates/template-components/badge/badge.report-minimal.md +76 -0
- package/skills/apexlang/templates/template-components/comments/README.md +20 -0
- package/skills/apexlang/templates/template-components/comments/comments._common.md +43 -0
- package/skills/apexlang/templates/template-components/comments/comments._index.md +25 -0
- package/skills/apexlang/templates/template-components/{comments._template_options.md → comments/comments._template_options.md} +2 -1
- package/skills/apexlang/templates/template-components/comments/comments.apex-task-comments.md +77 -0
- package/skills/apexlang/templates/template-components/comments/comments.partial-column.md +120 -0
- package/skills/apexlang/templates/template-components/comments/comments.permutations.md +425 -0
- package/skills/apexlang/templates/template-components/content-row/README.md +1 -1
- package/skills/apexlang/templates/template-components/content-row/content-row._common.md +1 -1
- package/skills/apexlang/templates/template-components/content-row/content-row._index.md +1 -1
- package/skills/apexlang/templates/template-components/content-row/content-row._template_options.md +1 -1
- package/skills/apexlang/templates/template-components/flexbox-container/README.md +9 -0
- package/skills/apexlang/templates/template-components/flexbox-container/flexbox-container._index.md +13 -0
- package/skills/apexlang/templates/template-components/media-list/README.md +100 -0
- package/skills/apexlang/templates/template-components/media-list/media-list._common.md +174 -0
- package/skills/apexlang/templates/template-components/media-list/media-list._index.md +50 -0
- package/skills/apexlang/templates/template-components/{media-list._template_options.md → media-list/media-list._template_options.md} +8 -2
- package/skills/apexlang/templates/template-components/media-list/media-list.partial.md +50 -0
- package/skills/apexlang/templates/template-components/media-list/media-list.report-avatar-badge.md +76 -0
- package/skills/apexlang/templates/template-components/media-list/media-list.report-base.md +71 -0
- package/skills/apexlang/templates/template-components/media-list/media-list.report-grouped.md +40 -0
- package/skills/apexlang/templates/template-components/media-list/media-list.report-layouts.md +50 -0
- package/skills/apexlang/templates/template-components/media-list/media-list.report-link.md +53 -0
- package/skills/apexlang/templates/template-components/metric-card/README.md +19 -4
- package/skills/apexlang/templates/template-components/metric-card/metric-card._common.md +122 -29
- package/skills/apexlang/templates/template-components/metric-card/metric-card._index.md +6 -0
- package/skills/apexlang/templates/template-components/metric-card/metric-card._template_options.md +47 -2
- package/skills/apexlang/templates/template-components/metric-card/metric-card.partial-minimal.md +51 -0
- package/skills/apexlang/templates/template-components/metric-card/metric-card.permutations.md +56 -0
- package/skills/apexlang/templates/template-components/metric-card/metric-card.report-avatar-badge.md +98 -0
- package/skills/apexlang/templates/template-components/metric-card/metric-card.report-grouping-selection.md +131 -0
- package/skills/apexlang/templates/template-components/metric-card/metric-card.report-link.md +66 -0
- package/skills/apexlang/templates/template-components/metric-card/metric-card.report-minimal.md +97 -0
- package/skills/apexlang/templates/template-components/template-components.registry.json +90 -1
- package/skills/apexlang/templates/template-components/timeline/README.md +19 -0
- package/skills/apexlang/templates/template-components/timeline/timeline._common.md +43 -0
- package/skills/apexlang/templates/template-components/timeline/timeline._index.md +24 -0
- package/skills/apexlang/templates/template-components/{timeline._template_options.md → timeline/timeline._template_options.md} +2 -1
- package/skills/apexlang/templates/template-components/timeline/timeline.permutations.md +399 -0
- package/skills/apexlang/templates/template-components/timeline/timeline.report-sample-data.md +168 -0
- package/skills/apexlang/templates/workspace-components/credentials/credentials-for-open-ai.example.md +1 -1
- package/skills/apexlang/templates/workspace-components/generative-ai-services/open-ai.example.md +8 -6
- package/skills/apexlang/tools/apexctl.mjs +167 -4
- package/skills/apexlang/tools/compiler-truth-audit.mjs +95 -63
- package/skills/apexlang/tools/query-valid-props-context.mjs +30 -0
- package/skills/apexlang/tools/query-valid-props-normalize.mjs +1 -0
- package/skills/apexlang/tools/query-valid-props-runtime.mjs +13 -8
- package/skills/apexlang/tools/query-valid-props-semantics.mjs +391 -0
- package/skills/apexlang/tools/query-valid-props-template-components.mjs +15 -1
- package/skills/apexlang/tools/query-valid-props.mjs +198 -216
- /package/skills/apexlang/templates/template-components/{badge._template_options.md → badge/badge._template_options.md} +0 -0
- /package/skills/apexlang/templates/template-components/{flexbox-container._template_options.md → flexbox-container/flexbox-container._template_options.md} +0 -0
|
@@ -9,21 +9,33 @@ Catalog of canonical markdown-first template-component families and their routin
|
|
|
9
9
|
- Use the dedicated owner `*_template_options.md` file when the request changes helper/template-component plugin attributes or settings.
|
|
10
10
|
- When a row includes `values=`, pass the left-hand side of each `name=>return_value` pair, not the emitted CSS or return token.
|
|
11
11
|
- Use `template-components.registry.json` for tooling discovery and preserve markdown-first conventions when updating workflow or registry links.
|
|
12
|
-
- For report-type template components,
|
|
13
|
-
|
|
12
|
+
- For report-type template components, emit one compiler-appropriate child column for every delivered source projection. Resolve the active target-build grammar before choosing a child-column variant. Media List must use the single column declaration and property shape selected by that contract; do not hardcode a compiler component type across builds.
|
|
13
|
+
- This default applies to Content Row, Metric Card, Media List, and Comments, while the target-build contract still determines each family's exact column declaration.
|
|
14
|
+
- Do not mix template-component column variants or satisfy projection coverage with one placeholder child column.
|
|
14
15
|
- For any template component that emits `rowSelection` with a non-null mode, mark one child column as the identity column with `source.primaryKey: true`.
|
|
16
|
+
- For Metric Card, query-backed title, metric, and meta text uses `&COLUMN.` substitution.
|
|
17
|
+
- Metric Card's nested Avatar/Badge groups use the Metric Card inventory; selector attributes use bare projected aliases and do not reuse standalone Avatar/Badge region settings.
|
|
18
|
+
- Metric Card row navigation uses only the compiler-backed `link` action position and no action template.
|
|
19
|
+
- Metric Card supports `partial` and `report`; partial mode omits report-only layout/item classes, grouping, row selection, messages, and pagination, while report pagination exposes only `entitiesPerPage`.
|
|
15
20
|
|
|
16
21
|
## Template Catalog
|
|
17
22
|
- `actions/`
|
|
23
|
+
- `avatar/`
|
|
18
24
|
- `button/`
|
|
19
25
|
- `content-row/`
|
|
20
26
|
- `metric-card/`
|
|
21
|
-
- `
|
|
22
|
-
- `
|
|
23
|
-
- `
|
|
24
|
-
- `
|
|
25
|
-
- `
|
|
26
|
-
- `
|
|
27
|
+
- `badge/`
|
|
28
|
+
- `comments/`
|
|
29
|
+
- `flexbox-container/`
|
|
30
|
+
- `media-list/`
|
|
31
|
+
- `timeline/`
|
|
32
|
+
- `avatar/avatar._template_options.md`
|
|
33
|
+
- Owns standalone Avatar settings and shared Avatar value inventories used by other components
|
|
34
|
+
- `badge/badge._template_options.md`
|
|
35
|
+
- `comments/comments._template_options.md`
|
|
36
|
+
- `flexbox-container/flexbox-container._template_options.md`
|
|
37
|
+
- `media-list/media-list._template_options.md`
|
|
38
|
+
- `timeline/timeline._template_options.md`
|
|
27
39
|
- `template-components.registry.json`
|
|
28
40
|
|
|
29
41
|
## Maintenance
|
|
@@ -43,15 +55,15 @@ These inventories come from `create_plugin_attribute` and `create_plugin_attr_va
|
|
|
43
55
|
- Owns `contentRow`
|
|
44
56
|
- `metric-card/metric-card._template_options.md`
|
|
45
57
|
- Owns `metricCard`
|
|
46
|
-
- `avatar._template_options.md`
|
|
58
|
+
- `avatar/avatar._template_options.md`
|
|
47
59
|
- Owns shared `avatar` settings used by multiple template components
|
|
48
|
-
- `badge._template_options.md`
|
|
49
|
-
- Owns shared `badge` settings used by
|
|
50
|
-
- `comments._template_options.md`
|
|
60
|
+
- `badge/badge._template_options.md`
|
|
61
|
+
- Owns shared `badge` settings used by the standalone Badge family and other template components
|
|
62
|
+
- `comments/comments._template_options.md`
|
|
51
63
|
- Owns `comments`
|
|
52
|
-
- `flexbox-container._template_options.md`
|
|
64
|
+
- `flexbox-container/flexbox-container._template_options.md`
|
|
53
65
|
- Owns `flexboxContainer`
|
|
54
|
-
- `media-list._template_options.md`
|
|
66
|
+
- `media-list/media-list._template_options.md`
|
|
55
67
|
- Owns `mediaList`
|
|
56
|
-
- `timeline._template_options.md`
|
|
68
|
+
- `timeline/timeline._template_options.md`
|
|
57
69
|
- Owns `timeline`
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Avatar Templates
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Canonical standalone Avatar template pack for `themeTemplateComponent/avatar` in report mode.
|
|
6
|
+
|
|
7
|
+
## Usage
|
|
8
|
+
|
|
9
|
+
- Load `avatar._common.md` first for the shared region, source, ordering, settings, and column contract.
|
|
10
|
+
- Use `avatar._index.md` to select exactly one display scenario.
|
|
11
|
+
- Use `avatar._template_options.md` for accepted Avatar attributes and enum values.
|
|
12
|
+
- Emit one explicit child `column <UPPERCASE_SNAKE_CASE> (...)` for every projected source column; lowercase or hyphenated external identifiers fail live validation.
|
|
13
|
+
- Keep SQL ordering in top-level `orderBy {}`; do not place `ORDER BY` inside `source.sqlQuery`.
|
|
14
|
+
- Bind `settings.initials` with the direct uppercase source-column identifier. Use `&COLUMN_NAME.` only for free-text settings such as `description`, not for the initials column selector.
|
|
15
|
+
- For restricted Avatar data, use `mustNotBePublicUser` or an `@alias` that resolves to an existing shared authorization declaration in the validation set.
|
|
16
|
+
- Use report mode only in this pack. Partial mode requires separate compiler and runtime evidence.
|
|
17
|
+
|
|
18
|
+
## Action Template Applicability
|
|
19
|
+
|
|
20
|
+
The Avatar theme export declares the `link` action position but declares no action templates (`actionTemplates: []`). Therefore this pack does not apply an action-template scenario. The separate generic link-action shape remains deferred until its target mapping and security behavior have dedicated evidence.
|
|
21
|
+
|
|
22
|
+
## Patterns and Anti-Patterns
|
|
23
|
+
|
|
24
|
+
- Pattern: one report-mode Avatar family selected by initials, icon, or URL-column image.
|
|
25
|
+
- Pattern: explicit source projection, deterministic top-level ordering, and one named template-component child column per projection.
|
|
26
|
+
- Pattern: region authorization using an existing shared authorization scheme when the owning page or application contract restricts access.
|
|
27
|
+
- Pattern: SQL image projections use canonical `:APP_FILES` or `:APEX_FILES` bind concatenation with a static relative path; template tokens, substitutions, BLOB endpoints, unsafe paths, and external URL forms are rejected.
|
|
28
|
+
- Pattern: exact Font APEX catalog membership for literals and every output of a column-backed icon mapping.
|
|
29
|
+
- Pattern: verified descriptions for meaningful Avatars with recorded evidence provenance; decorative templates omit both description property and column and carry the exact decorative-purpose comment.
|
|
30
|
+
- Pattern: native shape, size, and spacing before static component-scoped custom CSS; custom CSS always carries a comments rationale.
|
|
31
|
+
- Anti-pattern: falling back to Classic Report or Interactive Report to simulate Avatar rendering.
|
|
32
|
+
- Anti-pattern: inventing authorization scheme names or relying on UI hiding as authorization.
|
|
33
|
+
- Anti-pattern: raw URL or icon columns, arbitrary icon classes, dynamic CSS substitutions, visibility-changing CSS, or undocumented framework utilities.
|
|
34
|
+
- Anti-pattern: emitting BLOB images, grouping, generic link actions, or partial mode without dedicated evidence.
|
|
35
|
+
|
|
36
|
+
## Template Catalog
|
|
37
|
+
|
|
38
|
+
- `avatar._common.md`
|
|
39
|
+
- `avatar._index.md`
|
|
40
|
+
- `avatar.report-initials.md`
|
|
41
|
+
- `avatar.report-icon.md`
|
|
42
|
+
- `avatar.report-image-url-column.md`
|
|
43
|
+
|
|
44
|
+
## Deferred Variants
|
|
45
|
+
|
|
46
|
+
- BLOB-backed images
|
|
47
|
+
- report grouping
|
|
48
|
+
- generic link actions (the export has a `link` position but no action templates)
|
|
49
|
+
- partial mode
|
|
50
|
+
|
|
51
|
+
These variants require dedicated policy or live-runtime confirmation before becoming canonical scenarios.
|
|
52
|
+
|
|
53
|
+
## Maintenance
|
|
54
|
+
|
|
55
|
+
- Keep this README, `avatar._index.md`, and `../template-components.registry.json` synchronized.
|
|
56
|
+
- Do not add a scenario from prose or neighboring component behavior alone; require Avatar-specific compiler evidence.
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
templateId: region.avatar.common
|
|
3
|
+
componentType: region
|
|
4
|
+
version: 1.0
|
|
5
|
+
description: Shared contract for standalone Avatar report regions.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Purpose
|
|
9
|
+
|
|
10
|
+
Document the compiler-backed standalone Avatar region emitted as `themeTemplateComponent/avatar`.
|
|
11
|
+
|
|
12
|
+
# Generation Rules (MANDATORY)
|
|
13
|
+
|
|
14
|
+
1. Use `type: themeTemplateComponent/avatar`.
|
|
15
|
+
2. Emit `componentAppearance { display: report }`.
|
|
16
|
+
3. Emit an `appearance {}` block and default to `@/standard` unless an owning page contract proves another region template.
|
|
17
|
+
4. For SQL-backed Avatar regions, keep `source.sqlQuery` unordered and emit deterministic sorting in top-level `orderBy {}`.
|
|
18
|
+
5. Use `settings {}` for standalone Avatar attributes. Do not wrap standalone settings in `plugin-avatar {}`.
|
|
19
|
+
6. Set exactly one Avatar type: `initials`, `icon`, or `image`.
|
|
20
|
+
7. Emit only the payload property activated by the selected type: `initials`, `icon`, or `image`.
|
|
21
|
+
8. For `settings.initials`, emit the direct uppercase source-column identifier such as `AVATAR_INITIALS`; this `sessionStateValue` property selects a column and must not use `&COLUMN_NAME.` substitution syntax.
|
|
22
|
+
9. For initials, bind a declared `varchar2` source column; the Avatar export does not support non-character initials values. Free-text properties such as `settings.description` may use `&COLUMN_NAME.` substitution syntax.
|
|
23
|
+
10. For icons, use exactly one icon from the canonical build-pinned `assets/indexes/font-apex-icon-index.json` plus only optional listed modifiers. Validate literals directly. For column-backed icons, project approved literals or an explicit `case` mapping whose every output satisfies the same contract; raw/unverified icon columns, multiple icons, and arbitrary classes are forbidden.
|
|
24
|
+
11. The canonical image scenario in this pack uses `image.type: urlColumn` and a projected character URL column. In SQL, build every rendered value with the canonical bind form `:APP_FILES || 'relative/path'` or `:APEX_FILES || 'relative/path'`. Reject template and substitution tokens inside SQL literals, `AUTHENTICATED_URL_PREFIX`, BLOB endpoints, path traversal, raw URL columns, `javascript:`, `data:`, protocol-relative, and absolute external URLs.
|
|
25
|
+
12. Emit one explicitly named `column <COLUMN_STATIC_ID> (...)` child for every delivered source projection.
|
|
26
|
+
13. Every child column must define a unique uppercase snake_case declaration name, `layout.sequence`, `source.databaseColumn`, and `source.dataType`; the live compiler rejects lowercase or hyphenated external identifiers.
|
|
27
|
+
14. Do not emit generic-column `columnName` or `show` properties on standalone Avatar child columns; use its template-component column contract instead.
|
|
28
|
+
15. Use only shape, size, spacing, and type values listed in `avatar._template_options.md`.
|
|
29
|
+
16. Require `settings.description` for every meaningful initials, icon, or image Avatar. It must be nonempty human-readable text or an `&UPPERCASE_COLUMN.` substitution backed by a declared `varchar2` source column whose meaning is verified from schema documentation, live metadata, or an explicit user assertion. For dynamic sources, persist the provenance as exactly one of `AVATAR_DESCRIPTION_EVIDENCE_SOURCE=schema_doc`, `AVATAR_DESCRIPTION_EVIDENCE_SOURCE=live_db`, or `AVATAR_DESCRIPTION_EVIDENCE_SOURCE=user_asserted`.
|
|
30
|
+
17. Omit `settings.description` only when the Avatar is explicitly decorative and emit the exact region comment marker `AVATAR_PURPOSE_DECORATIVE`. Universal Theme 42 build `26.1.0+3102` renders description-less non-image Avatars with `aria-hidden="true"` and image Avatars with `alt=""`.
|
|
31
|
+
18. Emit `cssClasses` only for an explicit styling requirement. Values must be static; custom classes must use the `avatar-` prefix; visibility-changing classes are forbidden. Add `AVATAR_CSS_RATIONALE=<reason>` to region comments. Framework utility classes also require the exact comment marker `AVATAR_FRAMEWORK_UTILITIES_EXPLICIT_REQUEST`.
|
|
32
|
+
19. Prefer shape, size, spacing, templates, and template options over custom or framework CSS. Do not invent CSS to solve layout or composition.
|
|
33
|
+
20. When the owning page or application contract restricts Avatar visibility, emit `security.authorizationScheme` as `mustNotBePublicUser` or an `@alias` that resolves to a declared shared authorization scheme in the validation set.
|
|
34
|
+
21. Do not invent authorization schemes or treat visual hiding as access control.
|
|
35
|
+
22. The Avatar theme export declares no action templates; do not emit an action-template scenario from the separate `link` action position.
|
|
36
|
+
23. Do not emit BLOB image, grouping, link-action, or partial-mode structures from this contract.
|
|
37
|
+
|
|
38
|
+
# Variable Contract
|
|
39
|
+
|
|
40
|
+
| Name | Required | Type | Notes |
|
|
41
|
+
|------|----------|------|-------|
|
|
42
|
+
| regionStaticId | yes | string | Stable region identifier. |
|
|
43
|
+
| name | yes | string | Region name. |
|
|
44
|
+
| source.sqlQuery | yes for SQL mode | SQL | Must use verified database-object evidence when it references DB objects. |
|
|
45
|
+
| orderBy.orderByClause | yes for SQL mode | string | Deterministic clause body without the `ORDER BY` keyword. |
|
|
46
|
+
| layout.sequence | yes | number | Stable page-region sequence. |
|
|
47
|
+
| settingsBlock | yes | block | Exact settings block from one selected Avatar scenario. |
|
|
48
|
+
| settings.type | yes | enum | `initials`, `icon`, or `image`. |
|
|
49
|
+
| settings.initials | conditional | source-column identifier | Required only when `settings.type: initials`; direct uppercase identifier without `&` or trailing `.`. |
|
|
50
|
+
| settings.icon | conditional | string/substitution | Required only when `settings.type: icon`. |
|
|
51
|
+
| settings.image | conditional | object | Required only when `settings.type: image`. |
|
|
52
|
+
| settings.description | conditional | string/substitution | Required for meaningful Avatars; nonempty human-readable text or a declared `varchar2` description-column substitution. Omit only for an explicitly decorative Avatar. |
|
|
53
|
+
| settings.shape | optional | enum | Accepted Avatar shape token. |
|
|
54
|
+
| settings.size | optional | enum | Accepted Avatar size token. |
|
|
55
|
+
| settings.spacing | optional | enum | Report-level spacing token. |
|
|
56
|
+
| settings.cssClasses | optional | string | Static, documented, component-scoped classes only; never dynamic or visibility-changing. |
|
|
57
|
+
| commentsBlock | conditional | block | Required for decorative intent, dynamic-description evidence, and whenever `cssClasses` is emitted; carries exact governance markers, evidence provenance, and CSS rationale. |
|
|
58
|
+
| securityBlock | conditional | block | Required when the owning contract restricts access; omit only for intentionally unrestricted Avatar data. |
|
|
59
|
+
| security.authorizationScheme | conditional | shared-component reference | Exact existing authorization scheme; never inferred. |
|
|
60
|
+
| column.name | yes | identifier | Unique uppercase snake_case child declaration name that supplies `identification.name`. |
|
|
61
|
+
| column.layout.sequence | yes | number | Stable column sequence. |
|
|
62
|
+
| column.source.databaseColumn | yes | string | Exact projected source alias. |
|
|
63
|
+
| column.source.dataType | yes | enum | Compiler-supported source datatype such as `varchar2` or `number`. |
|
|
64
|
+
| columns | yes | list | One explicit child column for every delivered source projection. |
|
|
65
|
+
|
|
66
|
+
# Output Template
|
|
67
|
+
|
|
68
|
+
```apexlang
|
|
69
|
+
region {{regionStaticId}} (
|
|
70
|
+
name: {{name}}
|
|
71
|
+
type: themeTemplateComponent/avatar
|
|
72
|
+
source {
|
|
73
|
+
location: localDatabase
|
|
74
|
+
type: sqlQuery
|
|
75
|
+
sqlQuery:
|
|
76
|
+
```sql
|
|
77
|
+
{{source.sqlQuery}}
|
|
78
|
+
```
|
|
79
|
+
}
|
|
80
|
+
orderBy {
|
|
81
|
+
type: staticValue
|
|
82
|
+
orderByClause: {{orderBy.orderByClause}}
|
|
83
|
+
}
|
|
84
|
+
layout {
|
|
85
|
+
sequence: {{layout.sequence}}
|
|
86
|
+
slot: body
|
|
87
|
+
}
|
|
88
|
+
appearance {
|
|
89
|
+
template: @/standard
|
|
90
|
+
templateOptions: #DEFAULT#
|
|
91
|
+
}
|
|
92
|
+
componentAppearance {
|
|
93
|
+
display: report
|
|
94
|
+
}
|
|
95
|
+
{{securityBlock}}
|
|
96
|
+
{{settingsBlock}}
|
|
97
|
+
{{commentsBlock}}
|
|
98
|
+
column {{column.nameUpperSnakeCase}} (
|
|
99
|
+
layout {
|
|
100
|
+
sequence: {{column.layout.sequence}}
|
|
101
|
+
}
|
|
102
|
+
source {
|
|
103
|
+
databaseColumn: {{column.source.databaseColumn}}
|
|
104
|
+
dataType: {{column.source.dataType}}
|
|
105
|
+
}
|
|
106
|
+
)
|
|
107
|
+
{{columns}}
|
|
108
|
+
)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
# Conditional Rendering Rules
|
|
112
|
+
|
|
113
|
+
- `settings.type: initials` emits `initials` and omits `icon` and `image`.
|
|
114
|
+
- `settings.type: icon` emits `icon` and omits `initials` and `image`.
|
|
115
|
+
- `settings.type: image` emits `image: { ... }` and omits `initials` and `icon`.
|
|
116
|
+
- Omit optional settings when no authoritative input requires them.
|
|
117
|
+
- For a decorative Avatar, omit `settings.description` and emit:
|
|
118
|
+
```apexlang
|
|
119
|
+
comments {
|
|
120
|
+
comments: AVATAR_PURPOSE_DECORATIVE
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
- For a dynamic description source, record the verified provenance with exactly one `AVATAR_DESCRIPTION_EVIDENCE_SOURCE=schema_doc|live_db|user_asserted` entry in region comments. A generic assertion-only marker is not evidence.
|
|
124
|
+
- When custom CSS is required, keep the comment scalar semicolon-delimited when it carries multiple markers, for example `AVATAR_CSS_RATIONALE=Distinguishes approved support identities; AVATAR_FRAMEWORK_UTILITIES_EXPLICIT_REQUEST`.
|
|
125
|
+
- Include one child column for every source alias, including hidden identity, description, icon, initials, and URL columns.
|
|
126
|
+
- Keep uppercase snake_case declaration names unique within the Avatar region. Bind `settings.initials` through its direct projected database-column identifier; use substitutions only for free-text settings that support them.
|
|
127
|
+
- Keep the selected payload column datatype compatible with the Avatar attribute: initials, icon, description, and URL-column image values are `varchar2` in this pack.
|
|
128
|
+
- Require `description` unless the exact decorative-purpose region comment marker is present; do not emit both.
|
|
129
|
+
- When `cssClasses` is present, require static safe classes and the matching comments rationale/approval evidence.
|
|
130
|
+
- Emit `security { authorizationScheme: ... }` only with `mustNotBePublicUser` or an `@alias` resolving to an existing shared authorization scheme selected by the owning security contract.
|
|
131
|
+
- If restricted access is required but the scheme cannot be resolved, stop with Missing Inputs.
|
|
132
|
+
|
|
133
|
+
# Validation Checklist
|
|
134
|
+
|
|
135
|
+
- Region type is exactly `themeTemplateComponent/avatar`.
|
|
136
|
+
- Component display is `report`.
|
|
137
|
+
- SQL contains no `ORDER BY`; top-level `orderBy` supplies deterministic sorting.
|
|
138
|
+
- Exactly one type-specific payload is present.
|
|
139
|
+
- Every query projection has an explicitly named `column <COLUMN_STATIC_ID> (...)` child.
|
|
140
|
+
- Every column contains a declaration name, `layout.sequence`, `source.databaseColumn`, and `source.dataType`.
|
|
141
|
+
- `settings.initials` uses a direct declared `varchar2` source-column identifier, while free-text values such as `settings.description` may use `&COLUMN_NAME.` substitutions.
|
|
142
|
+
- Meaningful Avatars have a verified human-readable description; dynamic description sources record their evidence provenance, while decorative Avatars use the exact decorative marker and no description or description column.
|
|
143
|
+
- Icon values are exact members of the build-pinned Font APEX index; column-backed values use a statically verified mapping.
|
|
144
|
+
- URL-column image expressions are application-managed and reject unsafe or untrusted URL forms.
|
|
145
|
+
- `cssClasses` are static, component-scoped, documented, and do not alter visibility.
|
|
146
|
+
- Shape, size, spacing, and type tokens exist in `avatar._template_options.md`.
|
|
147
|
+
- Restricted Avatar regions reference an existing shared authorization scheme.
|
|
148
|
+
- No action template is emitted because the Avatar export defines none.
|
|
149
|
+
- No deferred BLOB, grouping, link-action, or partial-mode structure is present.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
templateId: region.avatar.index
|
|
3
|
+
componentType: region
|
|
4
|
+
version: 1.0
|
|
5
|
+
imports:
|
|
6
|
+
- avatar._common.md
|
|
7
|
+
description: Routing entrypoint for standalone Avatar report regions.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Purpose
|
|
11
|
+
|
|
12
|
+
Select the narrowest standalone Avatar report scenario.
|
|
13
|
+
|
|
14
|
+
# Load Order
|
|
15
|
+
|
|
16
|
+
1. Load `avatar._common.md`.
|
|
17
|
+
2. Load exactly one scenario file matching the requested Avatar type.
|
|
18
|
+
3. Load `avatar._template_options.md` only when validating settings or enum values.
|
|
19
|
+
|
|
20
|
+
# Scenario Routing
|
|
21
|
+
|
|
22
|
+
- Initials: `avatar.report-initials.md`
|
|
23
|
+
- Font APEX icon: `avatar.report-icon.md`
|
|
24
|
+
- Image from a projected URL column: `avatar.report-image-url-column.md`
|
|
25
|
+
|
|
26
|
+
# Unsupported Routing
|
|
27
|
+
|
|
28
|
+
Do not route BLOB images, report grouping, link actions, or partial mode to this pack until their standalone Avatar contracts have dedicated evidence.
|
|
29
|
+
|
|
30
|
+
# Action Template Decision
|
|
31
|
+
|
|
32
|
+
The Avatar export contains no action templates, so `Apply Action Templates` is not applicable to the current report scenarios. Do not confuse the separate `link` action position with an action template.
|
|
33
|
+
|
|
34
|
+
# Authorization Routing
|
|
35
|
+
|
|
36
|
+
When the owning application or page restricts Avatar visibility, require the exact existing shared authorization scheme and emit it through the common contract. Stop with Missing Inputs rather than guessing a scheme name.
|
|
37
|
+
|
|
38
|
+
# Security and Accessibility Routing
|
|
39
|
+
|
|
40
|
+
- Route image URLs through the application-managed URL contract in `avatar.report-image-url-column.md`.
|
|
41
|
+
- Route icons through the build-pinned Font APEX allowlist contract in `avatar.report-icon.md`.
|
|
42
|
+
- Apply the common meaningful-description/decorative marker and safe `cssClasses` contracts to every scenario.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
These entries come from `create_plugin_attribute` and `create_plugin_attr_value`, not from `wwv_flow_template_options`.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
For a standalone `themeTemplateComponent/avatar` region, apply these values through `settings {}`. For an owning component that embeds Avatar behavior, apply them through that component's documented avatar block such as `plugin-avatar {}`.
|
|
6
6
|
Emit only exact accepted values from this inventory. Do not concatenate adjacent values into one token and do not substitute labels or implementation details.
|
|
7
7
|
|
|
8
8
|
When a row includes `values=`, pass the left-hand side of each `name=>return_value` pair.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
templateId: avatar.report-icon
|
|
3
|
+
componentType: templateComponent
|
|
4
|
+
imports:
|
|
5
|
+
- avatar._common.md
|
|
6
|
+
version: 1.0
|
|
7
|
+
description: Standalone report-mode Avatar using a Font APEX icon.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Purpose
|
|
11
|
+
|
|
12
|
+
Render one Avatar per source row using an approved Font APEX icon value.
|
|
13
|
+
|
|
14
|
+
# Output Template
|
|
15
|
+
|
|
16
|
+
```apexlang
|
|
17
|
+
settings {
|
|
18
|
+
type: icon
|
|
19
|
+
icon: {{iconValue}}
|
|
20
|
+
{{descriptionProperty}}
|
|
21
|
+
shape: {{shape}}
|
|
22
|
+
size: {{size}}
|
|
23
|
+
spacing: {{spacing}}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
{{iconColumnBlock}}
|
|
27
|
+
|
|
28
|
+
{{descriptionColumnBlock}}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
# Conditional Rendering Rules
|
|
32
|
+
|
|
33
|
+
- The icon value must contain exactly one icon from `assets/indexes/font-apex-icon-index.json` and only optional modifiers listed there.
|
|
34
|
+
- For literal mode, set `iconValue` to one allowlisted literal and omit `iconColumnBlock`.
|
|
35
|
+
- For column mode, set `iconValue` to `&{{iconColumn}}.` and emit the complete `iconColumnBlock`; the source must project approved literals directly or use an explicit SQL `case` mapping whose every result satisfies that canonical contract. Raw dynamic columns, unknown icons or modifiers, multiple icons, and arbitrary classes are forbidden.
|
|
36
|
+
- `iconColumnStaticId` and `descriptionColumnStaticId` must resolve to uppercase snake_case external identifiers.
|
|
37
|
+
- For meaningful icons, set `descriptionProperty` to `description: &{{descriptionColumn}}.` and emit the complete `descriptionColumnBlock`; dynamic sources also record `AVATAR_DESCRIPTION_EVIDENCE_SOURCE=schema_doc|live_db|user_asserted` in comments.
|
|
38
|
+
- For decorative icons, omit both description placeholders and emit `AVATAR_PURPOSE_DECORATIVE`; never leave an unused description column in the output.
|
|
39
|
+
- Omit `initials` and `image`.
|
|
40
|
+
- Add the remaining source projections as explicit child columns using `avatar._common.md`.
|
|
41
|
+
|
|
42
|
+
# Validation Checklist
|
|
43
|
+
|
|
44
|
+
- `settings.type` is `icon`.
|
|
45
|
+
- `settings.icon` is one allowlisted literal or an `&COLUMN_NAME.` substitution whose source projection is a fully verified allowlisted mapping.
|
|
46
|
+
- The icon and description source columns are declared as `varchar2` when column-backed.
|
|
47
|
+
- Meaningful icons have a description; decorative icons omit it and use the exact marker so Universal Theme renders `aria-hidden="true"`.
|
|
48
|
+
- Every Avatar child declaration identifier is uppercase snake_case.
|
package/skills/apexlang/templates/template-components/avatar/avatar.report-image-url-column.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
templateId: avatar.report-image-url-column
|
|
3
|
+
componentType: templateComponent
|
|
4
|
+
imports:
|
|
5
|
+
- avatar._common.md
|
|
6
|
+
version: 1.0
|
|
7
|
+
description: Standalone report-mode Avatar using an image URL supplied by a source column.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Purpose
|
|
11
|
+
|
|
12
|
+
Render one Avatar per source row using a projected image URL column.
|
|
13
|
+
|
|
14
|
+
# Output Template
|
|
15
|
+
|
|
16
|
+
```apexlang
|
|
17
|
+
settings {
|
|
18
|
+
type: image
|
|
19
|
+
image: {
|
|
20
|
+
type: urlColumn
|
|
21
|
+
urlColumn: {{imageUrlColumn}}
|
|
22
|
+
}
|
|
23
|
+
{{descriptionProperty}}
|
|
24
|
+
shape: {{shape}}
|
|
25
|
+
size: {{size}}
|
|
26
|
+
spacing: {{spacing}}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
column {{imageUrlColumnStaticId}} (
|
|
30
|
+
layout {
|
|
31
|
+
sequence: {{imageUrlColumnSequence}}
|
|
32
|
+
}
|
|
33
|
+
source {
|
|
34
|
+
databaseColumn: {{imageUrlColumn}}
|
|
35
|
+
dataType: varchar2
|
|
36
|
+
}
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
{{descriptionColumnBlock}}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
# Conditional Rendering Rules
|
|
43
|
+
|
|
44
|
+
- `imageUrlColumn` is required and must be projected by the region source.
|
|
45
|
+
- `imageUrlColumnStaticId` and `descriptionColumnStaticId` must resolve to uppercase snake_case external identifiers.
|
|
46
|
+
- In SQL projections, build every URL as `:APP_FILES || 'relative/path'` or `:APEX_FILES || 'relative/path'`. The bind is SQL syntax; do not quote it or replace it with `#...#` or `&...` syntax.
|
|
47
|
+
- Do not pass through a raw database URL column. Reject `AUTHENTICATED_URL_PREFIX` because it may be absolute, BLOB endpoints because this scenario has no FILE-item/primary-key evidence contract, path traversal, `javascript:`, `data:`, protocol-relative (`//...`), and absolute external URLs.
|
|
48
|
+
- For meaningful images, set `descriptionProperty` to `description: &{{descriptionColumn}}.` and emit the complete `descriptionColumnBlock`; dynamic sources also record `AVATAR_DESCRIPTION_EVIDENCE_SOURCE=schema_doc|live_db|user_asserted` in comments.
|
|
49
|
+
- For decorative images, omit both placeholders and emit `AVATAR_PURPOSE_DECORATIVE`; never leave an unused description column in the output.
|
|
50
|
+
- Omit `initials` and `icon`.
|
|
51
|
+
- Do not convert this scenario into a BLOB image pattern; BLOB support is deferred.
|
|
52
|
+
- Add the remaining source projections as explicit child columns using `avatar._common.md`.
|
|
53
|
+
|
|
54
|
+
# Validation Checklist
|
|
55
|
+
|
|
56
|
+
- `settings.type` is `image`.
|
|
57
|
+
- `settings.image.type` is `urlColumn`.
|
|
58
|
+
- `settings.image.urlColumn` names a projected character column.
|
|
59
|
+
- The URL and description source columns are declared as `varchar2`.
|
|
60
|
+
- Every URL projection branch is statically proven to stay within the application-managed APEX URL contract.
|
|
61
|
+
- Meaningful images have a description; decorative images omit it and use the exact decorative-purpose comment marker so Universal Theme renders `alt=""`.
|
|
62
|
+
- Every Avatar child declaration identifier is uppercase snake_case.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
templateId: avatar.report-initials
|
|
3
|
+
componentType: templateComponent
|
|
4
|
+
imports:
|
|
5
|
+
- avatar._common.md
|
|
6
|
+
version: 1.0
|
|
7
|
+
description: Standalone report-mode Avatar using initials from a varchar2 source column.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Purpose
|
|
11
|
+
|
|
12
|
+
Render one Avatar per source row using character initials.
|
|
13
|
+
|
|
14
|
+
# Output Template
|
|
15
|
+
|
|
16
|
+
```apexlang
|
|
17
|
+
settings {
|
|
18
|
+
type: initials
|
|
19
|
+
initials: {{initialsColumn}}
|
|
20
|
+
{{descriptionProperty}}
|
|
21
|
+
shape: {{shape}}
|
|
22
|
+
size: {{size}}
|
|
23
|
+
spacing: {{spacing}}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
column {{initialsColumnStaticId}} (
|
|
27
|
+
layout {
|
|
28
|
+
sequence: {{initialsColumnSequence}}
|
|
29
|
+
}
|
|
30
|
+
source {
|
|
31
|
+
databaseColumn: {{initialsColumn}}
|
|
32
|
+
dataType: varchar2
|
|
33
|
+
}
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
{{descriptionColumnBlock}}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
# Conditional Rendering Rules
|
|
40
|
+
|
|
41
|
+
- `initialsColumn` is required and must resolve to a projected `varchar2` column; emit the direct column identifier without `&` or a trailing period.
|
|
42
|
+
- `initialsColumnStaticId` and `descriptionColumnStaticId` must resolve to uppercase snake_case external identifiers.
|
|
43
|
+
- For meaningful initials, set `descriptionProperty` to `description: &{{descriptionColumn}}.` and emit the complete `descriptionColumnBlock`; dynamic sources also record `AVATAR_DESCRIPTION_EVIDENCE_SOURCE=schema_doc|live_db|user_asserted` in comments.
|
|
44
|
+
- For decorative initials, omit both placeholders and emit `AVATAR_PURPOSE_DECORATIVE`; never leave an unused description column in the output.
|
|
45
|
+
- Omit `icon` and `image`.
|
|
46
|
+
- Add the remaining source projections as explicit child columns using `avatar._common.md`.
|
|
47
|
+
|
|
48
|
+
# Validation Checklist
|
|
49
|
+
|
|
50
|
+
- `settings.type` is `initials`.
|
|
51
|
+
- `settings.initials` uses the direct uppercase source-column identifier because the compiler metadata defines it as a `sessionStateValue` column selector.
|
|
52
|
+
- The initials source column is named and declares `source.databaseColumn` plus `source.dataType: varchar2`.
|
|
53
|
+
- Meaningful initials have a description; decorative initials omit it and use the exact marker so Universal Theme renders `aria-hidden="true"`.
|
|
54
|
+
- Every Avatar child declaration identifier is uppercase snake_case.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Badge Templates
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Canonical standalone report-mode Badge template-component guidance for `themeTemplateComponent/badge`.
|
|
6
|
+
|
|
7
|
+
## Usage
|
|
8
|
+
|
|
9
|
+
- Load `badge._index.md`, then `badge._common.md`.
|
|
10
|
+
- Load `badge._template_options.md` for the compiler-derived Badge attribute inventory.
|
|
11
|
+
- Use `badge.report-minimal.md` for a non-interactive Badge region.
|
|
12
|
+
- Use `badge.report-link.md` only when the requirement includes one row-level Badge link.
|
|
13
|
+
- Keep partial attachment and custom template-component authoring out of this family.
|
|
14
|
+
- Keep labels as plain static text and icons limited to exactly one pinned Font APEX catalog icon with optional catalog-listed modifiers. Treat state as optional explicit intent: omit it when unspecified, and limit requested state results to exact lowercase `danger`, `warning`, `success`, or `info` from any supported projected source.
|
|
15
|
+
- Before assigning an icon, load and consult `assets/indexes/font-apex-icon-index.json`; never invent an icon token.
|
|
16
|
+
- Use reviewed structured targets. Badge generation must not emit `targetUrl`, arbitrary `linkAttributes`, or inline event handlers.
|
|
17
|
+
|
|
18
|
+
## Template Catalog
|
|
19
|
+
|
|
20
|
+
- `badge._index.md`
|
|
21
|
+
- `badge._common.md`
|
|
22
|
+
- `badge.report-minimal.md`
|
|
23
|
+
- `badge.report-link.md`
|
|
24
|
+
- `badge._template_options.md`
|
|
25
|
+
|
|
26
|
+
## Permutation Harness
|
|
27
|
+
|
|
28
|
+
Run the focused Badge harness from the repository root:
|
|
29
|
+
|
|
30
|
+
`node --test --test-name-pattern='Badge permutation harness' the source package regression tests`
|
|
31
|
+
|
|
32
|
+
The harness generates temporary fixtures for all 576 finite combinations of `style`, `shape`, `size`, `displayLabel`, semantic `state`, icon presence, and optional `link` action. It validates them in one pass and removes the fixtures afterward. Focused regression matrices separately validate plain static labels, exact state results, every compiler-supported 26.1 `source.location`/`source.type` shape, and pinned Font APEX icon/modifier membership.
|
|
33
|
+
|
|
34
|
+
## Maintenance
|
|
35
|
+
|
|
36
|
+
- Keep the attribute and action guidance aligned with compiler-backed Universal Theme metadata.
|
|
37
|
+
- Every scenario must include purpose, output template, conditional rules, and validation checks.
|
|
38
|
+
- Keep examples schema-neutral; generated object-specific SQL still requires schema, live DB, or explicit user evidence.
|