2026-07-10 13:43:53 +04:00
|
|
|
@if (bootstrap(); as bootstrap) {
|
2026-07-16 02:06:26 +04:00
|
|
|
<app-section-card [title]="'builder.footer' | translate">
|
2026-07-10 13:43:53 +04:00
|
|
|
<div class="editor-grid two">
|
feat(project-editor): adopt Design System primitives across editor sections
Applied app-input/app-form-field/app-button to 9 of 11 Project Editor
sections: general, branding, theme, footer, homepage, widgets, languages,
navigation, preview. header and features sections were left unchanged -
they contain only checkboxes and selects, and no Checkbox/Select primitive
exists yet.
Theme section's 8 color pickers stay native <input type=color> (app-input's
type union doesn't include 'color') but are now wrapped in app-form-field
for consistent label/hint treatment. Added app-form-field.full grid-column
rule to section.shared.scss (shared by all 11 sections) alongside the
existing label.full rule, since the custom element doesn't match that
selector.
Production build green, arch:check passes.
2026-07-15 07:55:38 +04:00
|
|
|
<app-form-field [label]="'builder.companyName' | translate" [hint]="'builder.companyNameDesc' | translate"><app-input [ngModel]="bootstrap.company.companyName" (ngModelChange)="updateCompanyName($event)" /></app-form-field>
|
|
|
|
|
<app-form-field [label]="'builder.address' | translate" [hint]="'builder.addressDesc' | translate"><app-input [ngModel]="bootstrap.company.address.street || ''" (ngModelChange)="updateAddress($event)" /></app-form-field>
|
|
|
|
|
<app-form-field [label]="'builder.phone' | translate" [hint]="'builder.phoneDesc' | translate"><app-input [ngModel]="bootstrap.company.contacts.phone || ''" (ngModelChange)="updatePhone($event)" /></app-form-field>
|
2026-07-17 16:57:43 +04:00
|
|
|
<app-form-field [label]="'builder.email' | translate" [hint]="'builder.emailDesc' | translate" [error]="fieldError('company.contacts.email')"><app-input [ngModel]="bootstrap.company.contacts.email" (ngModelChange)="updateEmail($event)" /></app-form-field>
|
feat(project-editor): adopt Design System primitives across editor sections
Applied app-input/app-form-field/app-button to 9 of 11 Project Editor
sections: general, branding, theme, footer, homepage, widgets, languages,
navigation, preview. header and features sections were left unchanged -
they contain only checkboxes and selects, and no Checkbox/Select primitive
exists yet.
Theme section's 8 color pickers stay native <input type=color> (app-input's
type union doesn't include 'color') but are now wrapped in app-form-field
for consistent label/hint treatment. Added app-form-field.full grid-column
rule to section.shared.scss (shared by all 11 sections) alongside the
existing label.full rule, since the custom element doesn't match that
selector.
Production build green, arch:check passes.
2026-07-15 07:55:38 +04:00
|
|
|
<app-form-field class="full" [label]="'builder.copyright' | translate" [hint]="'builder.copyrightDesc' | translate"><app-input [ngModel]="copyrightValue()" (ngModelChange)="updateCopyright($event)" /></app-form-field>
|
2026-07-16 02:06:26 +04:00
|
|
|
<app-form-field class="full" [label]="'builder.footerLogo' | translate" [hint]="'builder.footerLogoDesc' | translate">
|
2026-07-17 15:22:45 +04:00
|
|
|
<app-image-field [value]="bootstrap.footer?.logoUrl || ''" (valueChange)="updateLogo($event)" />
|
2026-07-16 02:06:26 +04:00
|
|
|
</app-form-field>
|
|
|
|
|
|
|
|
|
|
<div class="full">
|
|
|
|
|
<label><span>{{ 'builder.paymentIcons' | translate }}</span><small class="field-desc">{{ 'builder.paymentIconsDesc' | translate }}</small></label>
|
2026-07-17 16:57:43 +04:00
|
|
|
@if (fieldError('footer.paymentIcons'); as msg) {
|
|
|
|
|
<p class="editor-error">{{ msg }}</p>
|
|
|
|
|
}
|
2026-07-16 02:06:26 +04:00
|
|
|
<app-key-value-editor
|
|
|
|
|
[rows]="paymentIconRows()"
|
|
|
|
|
[addLabel]="'builder.addPaymentIcon' | translate"
|
|
|
|
|
[removeLabel]="'builder.removePaymentIcon' | translate"
|
|
|
|
|
[createRow]="createPaymentIconRow"
|
|
|
|
|
(rowsChange)="onPaymentIconsChange($event)"
|
|
|
|
|
>
|
|
|
|
|
<ng-template let-row let-index="index">
|
|
|
|
|
<div class="media-field-row">
|
2026-07-17 15:22:45 +04:00
|
|
|
<app-image-field [value]="row.src" (valueChange)="updatePaymentIconSrc(index, $event)" />
|
2026-07-16 02:06:26 +04:00
|
|
|
<app-input [ngModel]="row.alt" (ngModelChange)="updatePaymentIconAlt(index, $event)" [placeholder]="'builder.iconAltLabel' | translate" />
|
|
|
|
|
</div>
|
|
|
|
|
</ng-template>
|
|
|
|
|
</app-key-value-editor>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="full">
|
|
|
|
|
<label><span>{{ 'builder.socialLinks' | translate }}</span><small class="field-desc">{{ 'builder.socialLinksDesc' | translate }}</small></label>
|
2026-07-17 16:57:43 +04:00
|
|
|
@if (fieldError('footer.socialLinks'); as msg) {
|
|
|
|
|
<p class="editor-error">{{ msg }}</p>
|
|
|
|
|
}
|
2026-07-16 02:06:26 +04:00
|
|
|
<app-key-value-editor
|
|
|
|
|
[rows]="socialLinkRows()"
|
|
|
|
|
[addLabel]="'builder.addSocialLink' | translate"
|
|
|
|
|
[removeLabel]="'builder.removeSocialLink' | translate"
|
|
|
|
|
[createRow]="createSocialLinkRow"
|
|
|
|
|
(rowsChange)="onSocialLinksChange($event)"
|
|
|
|
|
>
|
|
|
|
|
<ng-template let-row let-index="index">
|
|
|
|
|
<div class="editor-grid two compact">
|
|
|
|
|
<app-form-field [label]="'builder.socialLinkLabel' | translate">
|
|
|
|
|
<app-input [ngModel]="row.label" (ngModelChange)="updateSocialLinkLabel(index, $event)" />
|
|
|
|
|
</app-form-field>
|
|
|
|
|
<app-form-field
|
|
|
|
|
[label]="'builder.socialLinkUrl' | translate"
|
|
|
|
|
[hint]="isValidUrl(row.url) ? ('builder.socialLinkUrlDesc' | translate) : null"
|
|
|
|
|
[error]="isValidUrl(row.url) ? null : ('builder.invalidUrl' | translate)"
|
|
|
|
|
>
|
|
|
|
|
<app-input type="url" [ngModel]="row.url" (ngModelChange)="updateSocialLinkUrl(index, $event)" />
|
|
|
|
|
</app-form-field>
|
|
|
|
|
</div>
|
|
|
|
|
</ng-template>
|
|
|
|
|
</app-key-value-editor>
|
|
|
|
|
</div>
|
|
|
|
|
|
feat(project-editor): adopt Design System primitives across editor sections
Applied app-input/app-form-field/app-button to 9 of 11 Project Editor
sections: general, branding, theme, footer, homepage, widgets, languages,
navigation, preview. header and features sections were left unchanged -
they contain only checkboxes and selects, and no Checkbox/Select primitive
exists yet.
Theme section's 8 color pickers stay native <input type=color> (app-input's
type union doesn't include 'color') but are now wrapped in app-form-field
for consistent label/hint treatment. Added app-form-field.full grid-column
rule to section.shared.scss (shared by all 11 sections) alongside the
existing label.full rule, since the custom element doesn't match that
selector.
Production build green, arch:check passes.
2026-07-15 07:55:38 +04:00
|
|
|
<app-form-field class="full" [label]="'builder.staticPages' | translate" [hint]="'builder.staticPagesFieldDesc' | translate"><app-input [ngModel]="staticPagesValue()" (ngModelChange)="updateStaticPages($event)" /></app-form-field>
|
2026-07-10 13:43:53 +04:00
|
|
|
</div>
|
2026-07-16 02:06:26 +04:00
|
|
|
</app-section-card>
|
2026-07-10 13:43:53 +04:00
|
|
|
}
|