import { ChangeDetectionStrategy, Component, Directive } from '@angular/core'; /** * Marks projected chrome as the non-scrolling overlay header (title + close). * * @example * ```html * *
*

Edit shipment

* *
* … *
* ``` */ @Directive({ selector: '[africaniesOverlayHeader]', standalone: true, }) /** * Marks projected chrome as the non-scrolling overlay header (title + close). */ export class OverlayHeaderDirective {} /** * Marks projected chrome as the non-scrolling overlay footer (actions). * * @example * ```html * * … *
* * *
*
* ``` */ @Directive({ selector: '[africaniesOverlayFooter]', standalone: true, }) /** * Marks projected chrome as the non-scrolling overlay footer (actions). */ export class OverlayFooterDirective {} /** * Header / scroll body / footer shell for {@link ModalService} and * {@link DrawerService} panels. * * WHY: the pane must not scroll. Overlay scrollbars sit on the right edge and * cover a top-right close control or bottom-right actions. This frame keeps * header and footer outside the scrollport; only the default slot scrolls, * with `.africanies-overlay-scroll` reserving a scrollbar gutter. * * Put `overflow-hidden` on the hosted component host so the pane child * does not become a second scroller (a Tailwind utility wins the base rule * on `.africanies-modal-panel > *`). * * @example * ```ts * @Component({ * selector: 'app-edit-modal', * standalone: true, * imports: [OverlayFrameComponent, OverlayHeaderDirective, OverlayFooterDirective], * host: { class: 'flex min-h-0 w-full flex-col overflow-hidden' }, * template: ` * *
…title + close…
* …form fields… *
…Cancel / Save…
*
* `, * }) * export class EditModal {} * ``` */ @Component({ selector: 'africanies-overlay-frame', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'flex min-h-0 w-full flex-1 flex-col overflow-hidden', }, template: `
`, }) /** * Header / scroll body / footer shell for {@link ModalService} and {@link DrawerService} panels. */ export class OverlayFrameComponent {}