Files
marketplaces/src/app/components/footer/footer.component.html
sdarbinyan ce63931bc2
Some checks failed
Architecture Governance / architecture (push) Has been cancelled
feat: dead-config sweep, test suite foundation, widget settingsSchema validation
Sprint G: audited every BootstrapConfig field for a real runtime consumer
(docs/DEAD-CONFIG-AUDIT.md). Wired 3 previously-dead editable fields:
footer.logoUrl, company.address.street/contacts.phone, catalog.suggestionsEnabled.
Remaining dead fields needing a business/design decision tracked in
PRODUCT_BACKLOG.md/KNOWN-ISSUES.md, not silently left.

Sprint H: 6 new spec files (test count 57 -> 83), covering ProjectEditorFacade
(undo/redo, draft persistence, publish gating), AdminAnalyticsFacade
(never-fabricate-a-number contract), and regression coverage for this
session's carousel/hero/profile-toggle fixes.

Sprint I: widget settingsSchema (declared in widget-manifest.json, never
validated) now enforced via a new lightweight schema check in
ProjectValidator, surfaced through the existing issuesByField pipeline.
Same check reused in diagnostics so editor and diagnostics can't disagree.

Verification: tsc clean, ng build clean, 83/83 tests pass, barry-cache
validate clean (2 pre-existing unrelated warnings only).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-05 20:47:13 +04:00

58 lines
1.8 KiB
HTML

<footer class="app-footer">
<div class="app-footer__container page-container">
<div class="app-footer__top">
<div class="app-footer__brand">
<app-logo [srcOverride]="footerLogoUrl()" />
<p>{{ 'footer.description' | translate }}</p>
</div>
@for (group of footerGroups(); track group.id) {
<div class="app-footer__group">
@if (group.title) {
<h4>{{ group.title }}</h4>
}
<ul>
@for (item of group.items; track item.id) {
<li>
@if (item.external) {
<a [href]="item.route" target="_blank" rel="noopener">{{ item.label | translate }}</a>
} @else {
<a [routerLink]="item.route | langRoute">{{ item.label | translate }}</a>
}
</li>
}
</ul>
</div>
}
<div class="app-footer__group">
<h4>{{ 'footer.payment' | translate }}</h4>
<div class="app-footer__payments">
@for (icon of paymentIcons(); track $index) {
<img [src]="icon.src" [alt]="icon.alt" loading="lazy" [width]="icon.width" [height]="icon.height" (error)="onImageError($event)" />
}
</div>
</div>
</div>
<div class="app-footer__bottom">
<p>
@if (copyrightText()) {
{{ copyrightText() }}
} @else {
&copy; {{ currentYear }} {{ brandName }}. {{ 'footer.allRightsReserved' | translate }}
}
</p>
@if (contactEmail) {
<a [href]="'mailto:' + contactEmail">{{ contactEmail }}</a>
}
@if (contactPhone) {
<a [href]="'tel:' + contactPhone">{{ contactPhone }}</a>
}
@if (companyAddress) {
<span class="app-footer__address">{{ companyAddress }}</span>
}
</div>
</div>
</footer>