{"version":3,"file":"seniorsistemas-angular-components-side-sheet.mjs","sources":["../../projects/angular-components/side-sheet/src/lib/side-sheet/services/side-sheet.service.ts","../../projects/angular-components/side-sheet/src/lib/side-sheet/side-sheet.component.ts","../../projects/angular-components/side-sheet/src/lib/side-sheet/side-sheet.component.html","../../projects/angular-components/side-sheet/src/seniorsistemas-angular-components-side-sheet.ts"],"sourcesContent":["import { Injectable, TemplateRef, inject, isDevMode, signal } from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\n\nimport { filter } from 'rxjs';\n\nimport { SideSheetConfig } from '../models/side-sheet-config';\nimport { SideSheetSize } from '../models/side-sheet-size';\n\n/**\n * @description Controla remotamente a única instância de `s-side-sheet` da aplicação —\n * declarada uma vez no shell do app (ex: em `app.component.html`, logo abaixo da topbar), sem\n * nenhum input — a partir de qualquer componente de rota.\n *\n * O componente que solicita a abertura declara seu próprio `<ng-template>` e passa o\n * `TemplateRef` correspondente; o `s-side-sheet` do shell projeta esse template internamente.\n * Fecha automaticamente a cada navegação de rota — tanto por UX (não deixar conteúdo de uma\n * página antiga empurrando uma página nova) quanto por segurança técnica (o `TemplateRef`\n * pertence a um componente que a navegação pode destruir).\n *\n * @example\n * ```typescript\n * private readonly sideSheetService = inject(SideSheetService);\n * private readonly panelBody = viewChild<TemplateRef<unknown>>('panelBody');\n *\n * protected selectOrder(order: Order): void {\n *     this.sideSheetService.open({ header: order.number, template: this.panelBody()! });\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class SideSheetService {\n    private readonly _header = signal('');\n    private readonly _template = signal<TemplateRef<unknown> | null>(null);\n    private readonly _context = signal<unknown>(undefined);\n    private readonly _size = signal<SideSheetSize>('default');\n    private _mountedInstanceCount = 0;\n\n    /** @description Visibilidade do painel. Controlada internamente pelo `s-side-sheet`. */\n    public readonly visible = signal(false);\n    public readonly header = this._header.asReadonly();\n    public readonly template = this._template.asReadonly();\n    public readonly context = this._context.asReadonly();\n    public readonly size = this._size.asReadonly();\n\n    constructor() {\n        const router = inject(Router, { optional: true });\n        router?.events.pipe(filter((event) => event instanceof NavigationStart)).subscribe(() => this.close());\n    }\n\n    /** @description Abre (ou atualiza, se já aberto) o painel com o cabeçalho e o template informados. */\n    public open<T>(config: SideSheetConfig<T>): void {\n        if (this._mountedInstanceCount === 0 && isDevMode()) {\n            console.warn(\n                '[SideSheetService] open() foi chamado, mas nenhum <s-side-sheet> está montado ' +\n                    'no shell do app. Declare um em app.component.html.',\n            );\n        }\n\n        this._header.set(config.header);\n        this._template.set(config.template as TemplateRef<unknown>);\n        this._context.set(config.context);\n        this._size.set(config.size ?? 'default');\n        this.visible.set(true);\n    }\n\n    /** @description Fecha o painel e limpa o cabeçalho, template, contexto e tamanho armazenados. */\n    public close(): void {\n        this.visible.set(false);\n        this._header.set('');\n        this._template.set(null);\n        this._context.set(undefined);\n        this._size.set('default');\n    }\n\n    /** @internal Chamado por SideSheetComponent ao ser criado. */\n    public _registerInstance(): void {\n        if (this._mountedInstanceCount > 0 && isDevMode()) {\n            throw new Error(\n                '[SideSheetComponent] Já existe uma instância montada nesta aplicação. ' +\n                    'Declare <s-side-sheet> uma única vez, no ponto mais alto da árvore ' +\n                    '(ex: app.component.html).',\n            );\n        }\n        this._mountedInstanceCount++;\n    }\n\n    /** @internal Chamado por SideSheetComponent ao ser destruído. */\n    public _unregisterInstance(): void {\n        this._mountedInstanceCount = Math.max(0, this._mountedInstanceCount - 1);\n    }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { Component, DestroyRef, ElementRef, computed, effect, inject, signal, untracked, viewChild } from '@angular/core';\nimport { createScrollLock, randomHash } from '@seniorsistemas/angular-components/utils';\n\nimport { SideSheetService } from './services/side-sheet.service';\n\n/** Mantida em sincronia com o breakpoint `[@media(min-width:1024px)]` usado no template e em `panelWidthClasses`. */\nconst OVERLAY_QUERY = '(min-width: 1024px)';\n\n/**\n * @description Painel que empurra o conteúdo adjacente para a esquerda, dividindo o espaço\n * horizontal com ele — sem escurecer a tela e sem sobrepor o conteúdo, no modo desktop\n * (>= 1024px). Abaixo de 1024px o painel passa a funcionar como um overlay em tela cheia,\n * com fundo escurecido, igual a um Drawer.\n *\n * Fecha somente pelo botão de fechar (X) do cabeçalho — não há fechamento por tecla Escape\n * ou clique fora, em nenhuma resolução. Essa é uma decisão de produto deliberada: o conteúdo\n * por trás do painel permanece interativo (filtros, dropdowns, autocomplete) e um atalho\n * global de Escape entraria em conflito com outros overlays já abertos sobre esse conteúdo.\n *\n * Sem inputs: é uma instância **única** por aplicação, declarada uma vez no shell do app (ex:\n * `app.component.html`, logo abaixo da topbar) e controlada remotamente por\n * `SideSheetService.open()`/`close()` a partir de qualquer componente de rota. Uma segunda\n * instância montada simultaneamente lança um erro em modo de desenvolvimento. O conteúdo\n * projetado dentro do `<s-side-sheet>` é o conteúdo principal da página (ex: o\n * `router-outlet`), empurrado pelo painel quando ele abre.\n *\n * @example\n * ```html\n * <!-- app.component.html -->\n * <s-side-sheet>\n *   <router-outlet />\n * </s-side-sheet>\n * ```\n * ```typescript\n * // pedidos.component.ts\n * private readonly sideSheetService = inject(SideSheetService);\n * private readonly panelBody = viewChild<TemplateRef<unknown>>('panelBody');\n *\n * protected selecionarPedido(pedido: Pedido): void {\n *     this.sideSheetService.open({ header: pedido.numero, template: this.panelBody()! });\n * }\n * ```\n *\n * @category Overlay\n */\n@Component({\n    selector: 's-side-sheet',\n    standalone: true,\n    templateUrl: './side-sheet.component.html',\n    host: {\n        class: 'block h-full w-full flex-1 min-h-0',\n    },\n    imports: [CdkTrapFocus, NgTemplateOutlet],\n    animations: [\n        trigger('panelVisibility', [\n            transition('void => push', [\n                style({ width: 0 }),\n                animate('300ms cubic-bezier(0.4, 0, 0.2, 1)', style({ width: '*' })),\n            ]),\n            transition('push => void', [\n                style({ width: '*' }),\n                animate('300ms cubic-bezier(0.4, 0, 0.2, 1)', style({ width: 0 })),\n            ]),\n            transition('void => overlay', [\n                style({ transform: 'translateX(100%)' }),\n                animate('300ms cubic-bezier(0.4, 0, 0.2, 1)', style({ transform: 'translateX(0)' })),\n            ]),\n            transition('overlay => void', [\n                style({ transform: 'translateX(0)' }),\n                animate('300ms cubic-bezier(0.4, 0, 0.2, 1)', style({ transform: 'translateX(100%)' })),\n            ]),\n            // Resize cruzando o breakpoint com o painel já aberto: não existe um tween visualmente\n            // coerente entre width:400px/static (push) e width:100%/absolute (overlay) — aplica o\n            // estado final imediatamente, sem transição residual.\n            transition('push => overlay', []),\n            transition('overlay => push', []),\n        ]),\n        trigger('backdropVisibility', [\n            transition(':enter', [style({ opacity: 0 }), animate('300ms ease', style({ opacity: 1 }))]),\n            transition(':leave', [style({ opacity: 1 }), animate('300ms ease', style({ opacity: 0 }))]),\n        ]),\n    ],\n})\nexport class SideSheetComponent {\n    protected readonly sideSheetService = inject(SideSheetService);\n\n    /** @description Id único usado para associar o título ao painel via `aria-labelledby`. */\n    protected readonly titleId = randomHash('side-sheet-title');\n\n    private readonly titleRef = viewChild<ElementRef<HTMLHeadingElement>>('titleRef');\n    private readonly isDesktopViewport = signal(this._matchesDesktop());\n\n    /** @description `true` quando o painel funciona como overlay em tela cheia (< 1024px). */\n    protected readonly isOverlayMode = computed(() => !this.isDesktopViewport());\n    protected readonly animationMode = computed<'push' | 'overlay'>(() =>\n        this.isOverlayMode() ? 'overlay' : 'push',\n    );\n\n    /**\n     * @description Largura do painel no modo push, por breakpoint. `half` só passa a ser\n     * fluido a partir de 1366px — entre 1024–1365px herda os mesmos 400px do `default`\n     * (conversão de \"Half\" para \"Default\" descrita na especificação de produto).\n     */\n    protected readonly panelWidthClasses = computed(() =>\n        this.sideSheetService.size() === 'half'\n            ? '[@media(min-width:1024px)]:w-[400px] [@media(min-width:1366px)]:w-[max(400px,50vw)]'\n            : '[@media(min-width:1024px)]:w-[400px] [@media(min-width:1920px)]:w-[480px] [@media(min-width:2560px)]:w-[560px] [@media(min-width:3440px)]:w-[640px]',\n    );\n\n    private _elementToRefocus: HTMLElement | null = null;\n    private readonly _scrollLock = createScrollLock();\n\n    constructor() {\n        const destroyRef = inject(DestroyRef);\n\n        this.sideSheetService._registerInstance();\n        destroyRef.onDestroy(() => this.sideSheetService._unregisterInstance());\n\n        if (typeof window !== 'undefined' && typeof window.matchMedia === 'function') {\n            const mediaQueryList = window.matchMedia(OVERLAY_QUERY);\n            const listener = (event: MediaQueryListEvent): void => this.isDesktopViewport.set(event.matches);\n            mediaQueryList.addEventListener('change', listener);\n            destroyRef.onDestroy(() => mediaQueryList.removeEventListener('change', listener));\n        }\n\n        effect(() => {\n            const shouldLockScroll = this.sideSheetService.visible() && this.isOverlayMode();\n            if (shouldLockScroll) {\n                this._scrollLock.lock();\n            } else {\n                this._scrollLock.unlock();\n            }\n        });\n\n        effect(() => {\n            if (this.sideSheetService.visible()) {\n                this._elementToRefocus = document.activeElement as HTMLElement | null;\n                if (!untracked(this.isOverlayMode)) {\n                    queueMicrotask(() => this.titleRef()?.nativeElement.focus());\n                }\n            } else {\n                this._elementToRefocus?.focus();\n                this._elementToRefocus = null;\n            }\n        });\n\n        destroyRef.onDestroy(() => this._scrollLock.unlock());\n    }\n\n    protected closeSideSheet(): void {\n        this.sideSheetService.close();\n    }\n\n    private _matchesDesktop(): boolean {\n        return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\n            ? window.matchMedia(OVERLAY_QUERY).matches\n            : true;\n    }\n}\n","<div class=\"side-sheet relative flex h-full w-full\">\n    <div class=\"side-sheet__content min-w-0 flex-1 overflow-auto\">\n        <ng-content></ng-content>\n    </div>\n\n    @if (sideSheetService.visible()) {\n        @if (isOverlayMode()) {\n            <div class=\"side-sheet__backdrop absolute inset-0 z-20 bg-[rgba(0,0,0,0.5)]\" @backdropVisibility></div>\n        }\n\n        <aside\n            cdkTrapFocus\n            [cdkTrapFocusAutoCapture]=\"isOverlayMode()\"\n            [@panelVisibility]=\"animationMode()\"\n            class=\"side-sheet__panel z-30 flex flex-col gap-4 border-l border-grayscale-20 bg-grayscale-0 p-4 shadow-[0px_2px_4px_rgba(0,0,0,0.2),0px_1px_10px_rgba(0,0,0,0.12),0px_4px_5px_rgba(0,0,0,0.14)] absolute inset-0 w-full [@media(min-width:1024px)]:static [@media(min-width:1024px)]:inset-auto\"\n            [class]=\"panelWidthClasses()\"\n            [class.side-sheet__panel--half]=\"sideSheetService.size() === 'half'\"\n            [attr.role]=\"isOverlayMode() ? 'dialog' : 'complementary'\"\n            [attr.aria-modal]=\"isOverlayMode() ? true : null\"\n            [attr.aria-labelledby]=\"titleId\"\n        >\n            <div class=\"side-sheet__header flex flex-col gap-3\">\n                <div class=\"flex items-center gap-4\">\n                    <h2\n                        #titleRef\n                        [id]=\"titleId\"\n                        tabindex=\"-1\"\n                        class=\"min-w-0 flex-1 break-words font-open-sans text-base font-normal uppercase text-grayscale-90 outline-none\"\n                    >\n                        {{ sideSheetService.header() }}\n                    </h2>\n                    <button\n                        type=\"button\"\n                        class=\"flex shrink-0 cursor-pointer items-center justify-center rounded-medium border-none bg-transparent p-2 outline-none focus-visible:ring-2 focus-visible:ring-primary\"\n                        aria-label=\"Fechar\"\n                        (click)=\"closeSideSheet()\"\n                    >\n                        <i class=\"fas fa-times text-xs\" aria-hidden=\"true\"></i>\n                    </button>\n                </div>\n                <hr class=\"h-px w-full border-0 bg-grayscale-20\" />\n            </div>\n\n            <div class=\"side-sheet__body min-h-0 flex-1 overflow-auto\">\n                <ng-container\n                    *ngTemplateOutlet=\"sideSheetService.template(); context: sideSheetService.context()\"\n                ></ng-container>\n            </div>\n        </aside>\n    }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;AAQA;;;;;;;;;;;;;;;;;;;;AAoBG;MAEU,gBAAgB,CAAA;AACR,IAAA,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AACrB,IAAA,SAAS,GAAG,MAAM,CAA8B,IAAI,CAAC,CAAC;AACtD,IAAA,QAAQ,GAAG,MAAM,CAAU,SAAS,CAAC,CAAC;AACtC,IAAA,KAAK,GAAG,MAAM,CAAgB,SAAS,CAAC,CAAC;IAClD,qBAAqB,GAAG,CAAC,CAAC;;AAGlB,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACxB,IAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;AACnC,IAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;AACvC,IAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;AACrC,IAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;AAE/C,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,QAAA,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;KAC1G;;AAGM,IAAA,IAAI,CAAI,MAA0B,EAAA;QACrC,IAAI,IAAI,CAAC,qBAAqB,KAAK,CAAC,IAAI,SAAS,EAAE,EAAE;YACjD,OAAO,CAAC,IAAI,CACR,gFAAgF;AAC5E,gBAAA,oDAAoD,CAC3D,CAAC;SACL;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAgC,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAC1B;;IAGM,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;KAC7B;;IAGM,iBAAiB,GAAA;QACpB,IAAI,IAAI,CAAC,qBAAqB,GAAG,CAAC,IAAI,SAAS,EAAE,EAAE;YAC/C,MAAM,IAAI,KAAK,CACX,wEAAwE;gBACpE,qEAAqE;AACrE,gBAAA,2BAA2B,CAClC,CAAC;SACL;QACD,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAChC;;IAGM,mBAAmB,GAAA;AACtB,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC;KAC5E;wGA3DQ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADH,MAAM,EAAA,CAAA,CAAA;;4FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACrBlC;AACA,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCG;MAuCU,kBAAkB,CAAA;AACR,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;;AAG5C,IAAA,OAAO,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;AAE3C,IAAA,QAAQ,GAAG,SAAS,CAAiC,UAAU,CAAC,CAAC;IACjE,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;;AAGjD,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAC1D,IAAA,aAAa,GAAG,QAAQ,CAAqB,MAC5D,IAAI,CAAC,aAAa,EAAE,GAAG,SAAS,GAAG,MAAM,CAC5C,CAAC;AAEF;;;;AAIG;AACgB,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAC5C,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,MAAM;AACnC,UAAE,qFAAqF;UACrF,qJAAqJ,CAC9J,CAAC;IAEM,iBAAiB,GAAuB,IAAI,CAAC;IACpC,WAAW,GAAG,gBAAgB,EAAE,CAAC;AAElD,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAEtC,QAAA,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC;AAC1C,QAAA,UAAU,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAExE,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE;YAC1E,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACxD,YAAA,MAAM,QAAQ,GAAG,CAAC,KAA0B,KAAW,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACjG,YAAA,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACpD,YAAA,UAAU,CAAC,SAAS,CAAC,MAAM,cAAc,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;SACtF;QAED,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACjF,IAAI,gBAAgB,EAAE;AAClB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;aAC3B;iBAAM;AACH,gBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;aAC7B;AACL,SAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE;AACjC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,aAAmC,CAAC;gBACtE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;AAChC,oBAAA,cAAc,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;iBAChE;aACJ;iBAAM;AACH,gBAAA,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC;AAChC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;aACjC;AACL,SAAC,CAAC,CAAC;AAEH,QAAA,UAAU,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;KACzD;IAES,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;KACjC;IAEO,eAAe,GAAA;QACnB,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;cACzE,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,OAAO;cACxC,IAAI,CAAC;KACd;wGA1EQ,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,8PCtF/B,kjFAmDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDIc,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAC5B,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA;YACR,OAAO,CAAC,iBAAiB,EAAE;gBACvB,UAAU,CAAC,cAAc,EAAE;AACvB,oBAAA,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;oBACnB,OAAO,CAAC,oCAAoC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;iBACvE,CAAC;gBACF,UAAU,CAAC,cAAc,EAAE;AACvB,oBAAA,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;oBACrB,OAAO,CAAC,oCAAoC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;iBACrE,CAAC;gBACF,UAAU,CAAC,iBAAiB,EAAE;AAC1B,oBAAA,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;oBACxC,OAAO,CAAC,oCAAoC,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;iBACvF,CAAC;gBACF,UAAU,CAAC,iBAAiB,EAAE;AAC1B,oBAAA,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;oBACrC,OAAO,CAAC,oCAAoC,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;iBAC1F,CAAC;;;;AAIF,gBAAA,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC;AACjC,gBAAA,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC;aACpC,CAAC;YACF,OAAO,CAAC,oBAAoB,EAAE;gBAC1B,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3F,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aAC9F,CAAC;AACL,SAAA,EAAA,CAAA,CAAA;;4FAEQ,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAtC9B,SAAS;+BACI,cAAc,EAAA,UAAA,EACZ,IAAI,EAEV,IAAA,EAAA;AACF,wBAAA,KAAK,EAAE,oCAAoC;AAC9C,qBAAA,EAAA,OAAA,EACQ,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAC7B,UAAA,EAAA;wBACR,OAAO,CAAC,iBAAiB,EAAE;4BACvB,UAAU,CAAC,cAAc,EAAE;AACvB,gCAAA,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gCACnB,OAAO,CAAC,oCAAoC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;6BACvE,CAAC;4BACF,UAAU,CAAC,cAAc,EAAE;AACvB,gCAAA,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;gCACrB,OAAO,CAAC,oCAAoC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;6BACrE,CAAC;4BACF,UAAU,CAAC,iBAAiB,EAAE;AAC1B,gCAAA,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;gCACxC,OAAO,CAAC,oCAAoC,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;6BACvF,CAAC;4BACF,UAAU,CAAC,iBAAiB,EAAE;AAC1B,gCAAA,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;gCACrC,OAAO,CAAC,oCAAoC,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;6BAC1F,CAAC;;;;AAIF,4BAAA,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC;AACjC,4BAAA,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC;yBACpC,CAAC;wBACF,OAAO,CAAC,oBAAoB,EAAE;4BAC1B,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;4BAC3F,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;yBAC9F,CAAC;AACL,qBAAA,EAAA,QAAA,EAAA,kjFAAA,EAAA,CAAA;;;AEpFL;;AAEG;;;;"}