@seniorsistemas/angular-components 19.8.0 → 19.9.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/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +2 -1
- package/code-editor/lib/code-editor/core/facades/core-facade.d.ts +3 -1
- package/code-editor/lib/code-editor/infra/cores/codemirror-6/codemirror-6-core.d.ts +12 -2
- package/drawer/README.md +119 -0
- package/drawer/index.d.ts +5 -0
- package/{sidebar/lib/sidebar/sidebar.component.d.ts → drawer/lib/drawer/drawer.component.d.ts} +18 -15
- package/drawer/lib/drawer/drawer.module.d.ts +8 -0
- package/drawer/public-api.d.ts +2 -0
- package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +6 -3
- package/esm2022/code-editor/lib/code-editor/core/facades/core-facade.mjs +7 -1
- package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/codemirror-6-core.mjs +47 -22
- package/esm2022/drawer/lib/drawer/drawer.component.mjs +192 -0
- package/esm2022/drawer/lib/drawer/drawer.module.mjs +17 -0
- package/esm2022/drawer/public-api.mjs +3 -0
- package/esm2022/drawer/seniorsistemas-angular-components-drawer.mjs +5 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +4 -5
- package/esm2022/lib/locale/fallback.mjs +3 -2
- package/esm2022/select/lib/select/select.component.mjs +11 -14
- package/esm2022/side-sheet/lib/side-sheet/models/side-sheet-config.mjs +2 -0
- package/esm2022/side-sheet/lib/side-sheet/models/side-sheet-size.mjs +2 -0
- package/esm2022/side-sheet/lib/side-sheet/services/side-sheet.service.mjs +82 -0
- package/esm2022/side-sheet/lib/side-sheet/side-sheet.component.mjs +171 -0
- package/esm2022/side-sheet/public-api.mjs +3 -0
- package/esm2022/side-sheet/seniorsistemas-angular-components-side-sheet.mjs +5 -0
- package/esm2022/sidebar/public-api.mjs +12 -3
- package/esm2022/switch/lib/switch/switch.component.mjs +5 -3
- package/esm2022/switch/lib/switch/switch.module.mjs +2 -2
- package/esm2022/tabs/lib/tab-item/tab-item.component.mjs +4 -3
- package/esm2022/tabs/lib/tabs/tabs.component.mjs +14 -10
- package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.mjs +82 -75
- package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +3 -3
- package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.mjs +35 -18
- package/esm2022/tiered-menu/lib/tiered-menu/services/tiered-menu.event.service.mjs +2 -1
- package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.directive.mjs +89 -77
- package/esm2022/toast/lib/toast/toast.service.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +5 -2
- package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +52 -21
- package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs +211 -0
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs.map +1 -0
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +3 -4
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select.mjs +10 -13
- package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs +257 -0
- package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs.map +1 -0
- package/fesm2022/seniorsistemas-angular-components-sidebar.mjs +10 -180
- package/fesm2022/seniorsistemas-angular-components-sidebar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-switch.mjs +5 -3
- package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tabs.mjs +16 -11
- package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +201 -164
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-toast.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-toast.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components.mjs +2 -1
- package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
- package/package.json +19 -7
- package/select/lib/select/select.component.d.ts +2 -1
- package/side-sheet/README.md +184 -0
- package/side-sheet/index.d.ts +5 -0
- package/side-sheet/lib/side-sheet/models/side-sheet-config.d.ts +20 -0
- package/side-sheet/lib/side-sheet/models/side-sheet-size.d.ts +1 -0
- package/side-sheet/lib/side-sheet/services/side-sheet.service.d.ts +49 -0
- package/side-sheet/lib/side-sheet/side-sheet.component.d.ts +61 -0
- package/side-sheet/public-api.d.ts +4 -0
- package/sidebar/README.md +20 -93
- package/sidebar/public-api.d.ts +11 -2
- package/tabs/lib/tab-item/tab-item.component.d.ts +1 -0
- package/tabs/lib/tabs/tabs.component.d.ts +2 -1
- package/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.d.ts +19 -7
- package/tiered-menu/lib/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.d.ts +4 -3
- package/tiered-menu/lib/tiered-menu/services/tiered-menu.event.service.d.ts +1 -0
- package/tiered-menu/lib/tiered-menu/tiered-menu.directive.d.ts +6 -5
- package/esm2022/sidebar/lib/sidebar/sidebar.component.mjs +0 -169
- package/esm2022/sidebar/lib/sidebar/sidebar.module.mjs +0 -17
- package/sidebar/lib/sidebar/sidebar.module.d.ts +0 -8
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { SideSheetService } from './services/side-sheet.service';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* @description Painel que empurra o conteúdo adjacente para a esquerda, dividindo o espaço
|
|
5
|
+
* horizontal com ele — sem escurecer a tela e sem sobrepor o conteúdo, no modo desktop
|
|
6
|
+
* (>= 1024px). Abaixo de 1024px o painel passa a funcionar como um overlay em tela cheia,
|
|
7
|
+
* com fundo escurecido, igual a um Drawer.
|
|
8
|
+
*
|
|
9
|
+
* Fecha somente pelo botão de fechar (X) do cabeçalho — não há fechamento por tecla Escape
|
|
10
|
+
* ou clique fora, em nenhuma resolução. Essa é uma decisão de produto deliberada: o conteúdo
|
|
11
|
+
* por trás do painel permanece interativo (filtros, dropdowns, autocomplete) e um atalho
|
|
12
|
+
* global de Escape entraria em conflito com outros overlays já abertos sobre esse conteúdo.
|
|
13
|
+
*
|
|
14
|
+
* Sem inputs: é uma instância **única** por aplicação, declarada uma vez no shell do app (ex:
|
|
15
|
+
* `app.component.html`, logo abaixo da topbar) e controlada remotamente por
|
|
16
|
+
* `SideSheetService.open()`/`close()` a partir de qualquer componente de rota. Uma segunda
|
|
17
|
+
* instância montada simultaneamente lança um erro em modo de desenvolvimento. O conteúdo
|
|
18
|
+
* projetado dentro do `<s-side-sheet>` é o conteúdo principal da página (ex: o
|
|
19
|
+
* `router-outlet`), empurrado pelo painel quando ele abre.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```html
|
|
23
|
+
* <!-- app.component.html -->
|
|
24
|
+
* <s-side-sheet>
|
|
25
|
+
* <router-outlet />
|
|
26
|
+
* </s-side-sheet>
|
|
27
|
+
* ```
|
|
28
|
+
* ```typescript
|
|
29
|
+
* // pedidos.component.ts
|
|
30
|
+
* private readonly sideSheetService = inject(SideSheetService);
|
|
31
|
+
* private readonly panelBody = viewChild<TemplateRef<unknown>>('panelBody');
|
|
32
|
+
*
|
|
33
|
+
* protected selecionarPedido(pedido: Pedido): void {
|
|
34
|
+
* this.sideSheetService.open({ header: pedido.numero, template: this.panelBody()! });
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @category Overlay
|
|
39
|
+
*/
|
|
40
|
+
export declare class SideSheetComponent {
|
|
41
|
+
protected readonly sideSheetService: SideSheetService;
|
|
42
|
+
/** @description Id único usado para associar o título ao painel via `aria-labelledby`. */
|
|
43
|
+
protected readonly titleId: string;
|
|
44
|
+
private readonly titleRef;
|
|
45
|
+
private readonly isDesktopViewport;
|
|
46
|
+
/** @description `true` quando o painel funciona como overlay em tela cheia (< 1024px). */
|
|
47
|
+
protected readonly isOverlayMode: import("@angular/core").Signal<boolean>;
|
|
48
|
+
protected readonly animationMode: import("@angular/core").Signal<"push" | "overlay">;
|
|
49
|
+
/**
|
|
50
|
+
* @description Largura do painel no modo push, por breakpoint. `half` só passa a ser
|
|
51
|
+
* fluido a partir de 1366px — entre 1024–1365px herda os mesmos 400px do `default`
|
|
52
|
+
* (conversão de "Half" para "Default" descrita na especificação de produto).
|
|
53
|
+
*/
|
|
54
|
+
protected readonly panelWidthClasses: import("@angular/core").Signal<"[@media(min-width:1024px)]:w-[400px] [@media(min-width:1366px)]:w-[max(400px,50vw)]" | "[@media(min-width:1024px)]:w-[400px] [@media(min-width:1920px)]:w-[480px] [@media(min-width:2560px)]:w-[560px] [@media(min-width:3440px)]:w-[640px]">;
|
|
55
|
+
private _elementToRefocus;
|
|
56
|
+
constructor();
|
|
57
|
+
protected closeSideSheet(): void;
|
|
58
|
+
private _matchesDesktop;
|
|
59
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SideSheetComponent, never>;
|
|
60
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SideSheetComponent, "s-side-sheet", never, {}, {}, never, ["*"], true, never>;
|
|
61
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { SideSheetComponent } from './lib/side-sheet/side-sheet.component';
|
|
2
|
+
export type { SideSheetSize } from './lib/side-sheet/models/side-sheet-size';
|
|
3
|
+
export type { SideSheetConfig } from './lib/side-sheet/models/side-sheet-config';
|
|
4
|
+
export { SideSheetService } from './lib/side-sheet/services/side-sheet.service';
|
package/sidebar/README.md
CHANGED
|
@@ -1,117 +1,44 @@
|
|
|
1
1
|
# Sidebar
|
|
2
2
|
|
|
3
|
-

|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
> **Descontinuado** — Este pacote é um alias de compatibilidade para o componente `Drawer` e será removido na versão 20.0.0.
|
|
6
|
+
|
|
7
|
+
O pacote `sidebar` re-exporta `DrawerComponent` e `DrawerModule` do pacote `@seniorsistemas/angular-components/drawer`.
|
|
6
8
|
|
|
7
9
|
## Quando usar
|
|
8
10
|
|
|
9
|
-
-
|
|
10
|
-
- Formulários simples de edição rápida sem necessidade de uma nova rota
|
|
11
|
-
- Painéis de filtros avançados em listas e tabelas
|
|
12
|
-
- Configurações ou propriedades de um elemento da interface
|
|
13
|
-
- Fluxos complementares que não devem interromper o contexto principal
|
|
11
|
+
- Apenas para manutenção de código legado que já usa `DrawerComponent` ou `DrawerModule` a partir deste pacote
|
|
14
12
|
|
|
15
13
|
## Quando não usar
|
|
16
14
|
|
|
17
|
-
-
|
|
18
|
-
- Conteúdo crítico que exige atenção exclusiva do usuário — prefira `Dialog` modal
|
|
19
|
-
- Navegação principal da aplicação — prefira um menu lateral (`nav`) fixo
|
|
15
|
+
- Em todo código novo — use `DrawerComponent` ou `DrawerModule` do pacote `@seniorsistemas/angular-components/drawer`
|
|
20
16
|
|
|
21
|
-
##
|
|
17
|
+
## Migração
|
|
22
18
|
|
|
23
19
|
```typescript
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
@NgModule({ imports: [SidebarModule] })
|
|
27
|
-
export class MeuModule {}
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## Uso básico
|
|
31
|
-
|
|
32
|
-
```html
|
|
33
|
-
<s-sidebar [(visible)]="sidebarAberta" header="Detalhes">
|
|
34
|
-
<p>Conteúdo do painel lateral.</p>
|
|
35
|
-
</s-sidebar>
|
|
36
|
-
|
|
37
|
-
<button (click)="sidebarAberta = true">Abrir Sidebar</button>
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
## API
|
|
41
|
-
|
|
42
|
-
### Inputs
|
|
43
|
-
|
|
44
|
-
| Propriedade | Tipo | Padrão | Obrigatório | Descrição |
|
|
45
|
-
|-------------|------|--------|:-----------:|-----------|
|
|
46
|
-
| `visible` | `ModelSignal<boolean>` | `false` | Não | Controla a visibilidade da sidebar. Suporta `[(visible)]` |
|
|
47
|
-
| `closable` | `boolean` | `true` | Não | Exibe o botão de fechar (X) no cabeçalho |
|
|
48
|
-
| `dismissible` | `boolean` | `true` | Não | Fechar ao clicar no backdrop (área escurecida fora do painel) |
|
|
49
|
-
| `closeOnEscape` | `boolean` | `true` | Não | Fechar ao pressionar a tecla Escape |
|
|
50
|
-
| `header` | `string` | `undefined` | Não | Texto exibido no cabeçalho padrão. Substituível via `sTemplate="header"` |
|
|
51
|
-
| `largeSized` | `boolean` | `false` | Não | Aumenta a largura da sidebar para acomodar mais conteúdo |
|
|
52
|
-
| `cache` | `boolean` | `false` | Não | Mantém o conteúdo no DOM quando fechada, preservando estado interno |
|
|
53
|
-
| `registerConfirmClose` | `() => boolean` | `() => true` | Não | Função chamada antes de fechar; retornar `false` bloqueia o fechamento |
|
|
54
|
-
|
|
55
|
-
## Exemplos
|
|
20
|
+
// Antes (descontinuado)
|
|
21
|
+
import { DrawerModule } from '@seniorsistemas/angular-components/sidebar';
|
|
56
22
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
```html
|
|
60
|
-
<s-sidebar [(visible)]="visible" header="Filtros Avançados" [closable]="true">
|
|
61
|
-
<p>Conteúdo do painel.</p>
|
|
62
|
-
</s-sidebar>
|
|
63
|
-
<s-button label="Abrir" (clicked)="visible = true"></s-button>
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### Sidebar grande
|
|
67
|
-
|
|
68
|
-
```html
|
|
69
|
-
<s-sidebar [(visible)]="visible" header="Edição de Registro" [largeSized]="true">
|
|
70
|
-
<!-- formulário complexo -->
|
|
71
|
-
</s-sidebar>
|
|
23
|
+
// Depois (recomendado)
|
|
24
|
+
import { DrawerModule } from '@seniorsistemas/angular-components/drawer';
|
|
72
25
|
```
|
|
73
26
|
|
|
74
|
-
### Com templates customizados
|
|
75
|
-
|
|
76
27
|
```html
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
<div style="display: flex; align-items: center; gap: 8px;">
|
|
80
|
-
<i class="fa fa-filter"></i>
|
|
81
|
-
<span>Filtros Avançados</span>
|
|
82
|
-
</div>
|
|
83
|
-
</ng-template>
|
|
84
|
-
<ng-template sTemplate="body">
|
|
85
|
-
<!-- conteúdo do painel -->
|
|
86
|
-
</ng-template>
|
|
87
|
-
<ng-template sTemplate="footer">
|
|
88
|
-
<s-button label="Aplicar" priority="primary" (clicked)="visible = false"></s-button>
|
|
89
|
-
</ng-template>
|
|
90
|
-
</s-sidebar>
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
### Com confirmação de fechamento
|
|
28
|
+
<!-- Antes (descontinuado) -->
|
|
29
|
+
<s-sidebar></s-sidebar>
|
|
94
30
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
return window.confirm('Deseja realmente fechar? As alterações serão perdidas.');
|
|
98
|
-
};
|
|
31
|
+
<!-- Depois (recomendado) -->
|
|
32
|
+
<s-drawer></s-drawer>
|
|
99
33
|
```
|
|
100
34
|
|
|
101
|
-
|
|
102
|
-
<s-sidebar [(visible)]="visible" [registerConfirmClose]="confirmClose">
|
|
103
|
-
<!-- formulário com alterações não salvas -->
|
|
104
|
-
</s-sidebar>
|
|
105
|
-
```
|
|
35
|
+
## Documentação
|
|
106
36
|
|
|
107
|
-
|
|
37
|
+
Consulte a documentação completa do componente no Drawer:
|
|
108
38
|
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
- O painel entra e sai com animação de deslizamento (300ms) vindo da direita
|
|
112
|
-
- Ao abrir, o scroll da página é bloqueado automaticamente e restaurado ao fechar
|
|
39
|
+
- **Storybook**: `Components/Overlay/Drawer`
|
|
40
|
+
- **Pacote**: `@seniorsistemas/angular-components/drawer`
|
|
113
41
|
|
|
114
42
|
## Componentes relacionados
|
|
115
43
|
|
|
116
|
-
- [`
|
|
117
|
-
- [`SlideInBar`](../slide-in-bar/README.md) — painel que expande/colapsa embutido no layout
|
|
44
|
+
- [`Drawer`](../drawer/README.md) — componente substituto recomendado
|
package/sidebar/public-api.d.ts
CHANGED
|
@@ -1,2 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { DrawerComponent as DrawerComponentOriginal, DrawerModule as DrawerModuleOriginal } from '@seniorsistemas/angular-components/drawer';
|
|
2
|
+
/**
|
|
3
|
+
* @deprecated Use DrawerComponent from '@seniorsistemas/angular-components/drawer'.
|
|
4
|
+
* O pacote sidebar será removido na versão 20.0.0.
|
|
5
|
+
*/
|
|
6
|
+
export declare const DrawerComponent: typeof DrawerComponentOriginal;
|
|
7
|
+
/**
|
|
8
|
+
* @deprecated Use DrawerModule from '@seniorsistemas/angular-components/drawer'.
|
|
9
|
+
* O pacote sidebar será removido na versão 20.0.0.
|
|
10
|
+
*/
|
|
11
|
+
export declare const DrawerModule: typeof DrawerModuleOriginal;
|
|
@@ -43,6 +43,7 @@ export declare class TabItemComponent implements AfterViewInit {
|
|
|
43
43
|
destroyOnHide: import("@angular/core").InputSignal<boolean>;
|
|
44
44
|
template: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
45
45
|
headerElement: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
46
|
+
alreadyOpened: boolean;
|
|
46
47
|
ngAfterViewInit(): void;
|
|
47
48
|
static ɵfac: i0.ɵɵFactoryDeclaration<TabItemComponent, never>;
|
|
48
49
|
static ɵcmp: i0.ɵɵComponentDeclaration<TabItemComponent, "s-tab-item", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "destroyOnHide": { "alias": "destroyOnHide"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, ["headerTemplateDirectives"], ["*"], true, never>;
|
|
@@ -19,7 +19,7 @@ import * as i0 from "@angular/core";
|
|
|
19
19
|
export declare class TabsComponent implements OnDestroy {
|
|
20
20
|
private readonly onDestroy$;
|
|
21
21
|
protected readonly tabItems: import("@angular/core").Signal<readonly TabItemComponent[]>;
|
|
22
|
-
protected readonly activeTabComponent: import("@angular/core").Signal<
|
|
22
|
+
protected readonly activeTabComponent: import("@angular/core").Signal<TabItemComponent | undefined>;
|
|
23
23
|
protected readonly keepAliveTabsContent: import("@angular/core").Signal<TabItemComponent[]>;
|
|
24
24
|
/**
|
|
25
25
|
* @description Valor da aba atualmente ativa. Suporta two-way binding via `[(activeTab)]`.
|
|
@@ -36,6 +36,7 @@ export declare class TabsComponent implements OnDestroy {
|
|
|
36
36
|
* @default 'horizontal'
|
|
37
37
|
*/
|
|
38
38
|
layoutType: import("@angular/core").InputSignal<"horizontal" | "vertical">;
|
|
39
|
+
private readonly activeTabEffect;
|
|
39
40
|
constructor();
|
|
40
41
|
ngOnDestroy(): void;
|
|
41
42
|
protected onActiveTab(tab: TabItemComponent): void;
|
|
@@ -3,23 +3,22 @@ import { TieredMenuItemInternalData } from '../../models/tiered-menu-item-intern
|
|
|
3
3
|
import { TieredMenuService } from '../../services/tiered-menu.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class TieredMenuComponent implements OnInit, OnDestroy {
|
|
6
|
-
private readonly
|
|
7
|
-
private readonly
|
|
6
|
+
private readonly _overlay;
|
|
7
|
+
private readonly _elementRef;
|
|
8
8
|
private readonly _injector;
|
|
9
|
+
private readonly _focusTrapFactory;
|
|
9
10
|
private readonly _changeDetectorRef;
|
|
10
11
|
readonly tieredMenuService: TieredMenuService;
|
|
11
12
|
private readonly _tieredMenuEventService;
|
|
12
13
|
ariaLabel?: string;
|
|
13
14
|
items: TieredMenuItemInternalData[];
|
|
14
|
-
top: number;
|
|
15
|
-
left: number;
|
|
16
15
|
menuTriggerEvent: 'click' | 'hover';
|
|
17
16
|
isSubmenu: boolean;
|
|
17
|
+
private _overlayRef;
|
|
18
18
|
private _componentRef;
|
|
19
|
-
private
|
|
19
|
+
private _focusTrap;
|
|
20
20
|
private _unsubscribe$;
|
|
21
21
|
destroyRequest: EventEmitter<boolean>;
|
|
22
|
-
onResize(): void;
|
|
23
22
|
onDocumentClick(event: MouseEvent): void;
|
|
24
23
|
onKeydownHandler(event: KeyboardEvent): void;
|
|
25
24
|
ngOnInit(): void;
|
|
@@ -27,9 +26,22 @@ export declare class TieredMenuComponent implements OnInit, OnDestroy {
|
|
|
27
26
|
private _focusCurrentItem;
|
|
28
27
|
private _incrementCurItem;
|
|
29
28
|
private _decrementCurItem;
|
|
29
|
+
private static readonly SUBMENU_POSITIONS;
|
|
30
30
|
private _createMenu;
|
|
31
|
+
/**
|
|
32
|
+
* Recreates the flyout chain for whichever item is currently marked `isOpen` in `items`,
|
|
33
|
+
* recursively — used when switching from the nested/mobile menu back to desktop, where the
|
|
34
|
+
* open state lives on the shared item data but each tier is a separate overlay that must be
|
|
35
|
+
* explicitly recreated to match it.
|
|
36
|
+
*/
|
|
37
|
+
restoreOpenChain(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Disposes this tier's own submenu overlay chain (if any) without touching `isOpen` state —
|
|
40
|
+
* used when switching from desktop to nested, where the open state must survive but the
|
|
41
|
+
* flyout overlays themselves need to go away.
|
|
42
|
+
*/
|
|
43
|
+
disposeChain(): void;
|
|
31
44
|
private _destroy;
|
|
32
|
-
private _setMenuPosition;
|
|
33
45
|
private _subscribeEvents;
|
|
34
46
|
static ɵfac: i0.ɵɵFactoryDeclaration<TieredMenuComponent, never>;
|
|
35
47
|
static ɵcmp: i0.ɵɵComponentDeclaration<TieredMenuComponent, "s-tiered-menu", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; }; }, { "destroyRequest": "destroyRequest"; }, never, never, true, never>;
|
package/tiered-menu/lib/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.d.ts
CHANGED
|
@@ -5,16 +5,17 @@ import * as i0 from "@angular/core";
|
|
|
5
5
|
export declare class TieredMenuNestedComponent implements OnInit, OnDestroy {
|
|
6
6
|
readonly tieredMenuService: TieredMenuService;
|
|
7
7
|
private readonly _tieredMenuEventService;
|
|
8
|
+
private readonly _elementRef;
|
|
9
|
+
private readonly _focusTrapFactory;
|
|
8
10
|
items: TieredMenuItemInternalData[];
|
|
9
|
-
top: number;
|
|
10
|
-
left: number;
|
|
11
11
|
private _lastOpenItem?;
|
|
12
|
+
private _focusTrap;
|
|
12
13
|
private _unsubscribe$;
|
|
13
|
-
onResize(): void;
|
|
14
14
|
onDocumentClick(event: MouseEvent): void;
|
|
15
15
|
onKeydownHandler(event: KeyboardEvent): void;
|
|
16
16
|
ngOnInit(): void;
|
|
17
17
|
ngOnDestroy(): void;
|
|
18
|
+
private _focusCurrentItem;
|
|
18
19
|
private _incrementCurItem;
|
|
19
20
|
private _decrementCurItem;
|
|
20
21
|
private _closeItem;
|
|
@@ -5,6 +5,7 @@ export declare class TieredMenuEventService {
|
|
|
5
5
|
incrementCurrentItemEvent: EventEmitter<any>;
|
|
6
6
|
decrementCurrentItemEvent: EventEmitter<any>;
|
|
7
7
|
closeAllMenusEvent: EventEmitter<any>;
|
|
8
|
+
restoreFocusEvent: EventEmitter<any>;
|
|
8
9
|
selectItemEvent: EventEmitter<TieredMenuItemInternalData | null>;
|
|
9
10
|
openItemMenuEvent: EventEmitter<TieredMenuItemInternalData | null>;
|
|
10
11
|
closeItemMenuEvent: EventEmitter<TieredMenuItemInternalData | null>;
|
|
@@ -16,8 +16,7 @@ import * as i0 from "@angular/core";
|
|
|
16
16
|
*/
|
|
17
17
|
export declare class TieredMenuDirective implements OnInit, OnChanges, OnDestroy {
|
|
18
18
|
private readonly _elementRef;
|
|
19
|
-
private readonly
|
|
20
|
-
private readonly _componentFactoryResolver;
|
|
19
|
+
private readonly _overlay;
|
|
21
20
|
private readonly _injector;
|
|
22
21
|
private readonly _tieredMenuEventService;
|
|
23
22
|
private readonly _tieredMenuService;
|
|
@@ -45,6 +44,7 @@ export declare class TieredMenuDirective implements OnInit, OnChanges, OnDestroy
|
|
|
45
44
|
ariaLabel?: string;
|
|
46
45
|
tieredMenuOpened: EventEmitter<void>;
|
|
47
46
|
tieredMenuClosed: EventEmitter<void>;
|
|
47
|
+
private _overlayRef;
|
|
48
48
|
private _componentRef;
|
|
49
49
|
private _showTimeout?;
|
|
50
50
|
private _isNested;
|
|
@@ -53,17 +53,18 @@ export declare class TieredMenuDirective implements OnInit, OnChanges, OnDestroy
|
|
|
53
53
|
private _lastActiveElement?;
|
|
54
54
|
private _previousItems;
|
|
55
55
|
private _itemsAreValid?;
|
|
56
|
-
private _resizeObserver;
|
|
57
56
|
ngOnInit(): void;
|
|
58
57
|
ngOnChanges(): void;
|
|
59
58
|
ngOnDestroy(): void;
|
|
60
59
|
onClick(event: MouseEvent): void;
|
|
60
|
+
onWindowResize(): void;
|
|
61
|
+
private _disposeOverlay;
|
|
61
62
|
private _createMenu;
|
|
63
|
+
private static readonly DESKTOP_POSITIONS;
|
|
64
|
+
private static readonly NESTED_POSITIONS;
|
|
62
65
|
private _createTieredMenu;
|
|
63
66
|
private _createNestedMenu;
|
|
64
|
-
private _createComponent;
|
|
65
67
|
private _destroy;
|
|
66
|
-
private _setMenuPosition;
|
|
67
68
|
private _setMenuComponentProperties;
|
|
68
69
|
private _subscribeEvents;
|
|
69
70
|
private _compareItems;
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
import { animate, style, transition, trigger } from '@angular/animations';
|
|
2
|
-
import { CdkTrapFocus } from '@angular/cdk/a11y';
|
|
3
|
-
import { NgTemplateOutlet } from '@angular/common';
|
|
4
|
-
import { Component, contentChild, ContentChildren, effect, Input, model, } from '@angular/core';
|
|
5
|
-
import { FooterComponent } from '@seniorsistemas/angular-components/structure';
|
|
6
|
-
import { TemplateDirective } from '@seniorsistemas/angular-components/template';
|
|
7
|
-
import { disableScroll, enableScroll } from '@seniorsistemas/angular-components/utils';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
/**
|
|
10
|
-
* @description Componente de painel lateral deslizante (sidebar) que aparece sobre o conteúdo
|
|
11
|
-
* vindo do lado direito da tela. Suporta templates customizados para cabeçalho, corpo e rodapé
|
|
12
|
-
* via `sTemplate`, bloqueio de scroll automático e confirmação de fechamento.
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```html
|
|
16
|
-
* <s-sidebar [(visible)]="sidebarOpen" header="Filtros" [closable]="true">
|
|
17
|
-
* <ng-template sTemplate="body">Conteúdo</ng-template>
|
|
18
|
-
* </s-sidebar>
|
|
19
|
-
* ```
|
|
20
|
-
*
|
|
21
|
-
* @category Overlay
|
|
22
|
-
*/
|
|
23
|
-
export class SidebarComponent {
|
|
24
|
-
templates = null;
|
|
25
|
-
/**
|
|
26
|
-
* @description Controla a visibilidade da sidebar. Suporta two-way binding via `[(visible)]`.
|
|
27
|
-
*
|
|
28
|
-
* @default false
|
|
29
|
-
*/
|
|
30
|
-
visible = model(false);
|
|
31
|
-
/**
|
|
32
|
-
* @description Quando `true`, exibe o botão de fechar (X) no cabeçalho da sidebar.
|
|
33
|
-
*
|
|
34
|
-
* @default true
|
|
35
|
-
*/
|
|
36
|
-
closable = true;
|
|
37
|
-
/**
|
|
38
|
-
* @description Quando `true`, clicar no backdrop (área escurecida fora da sidebar) fecha o painel.
|
|
39
|
-
*
|
|
40
|
-
* @default true
|
|
41
|
-
*/
|
|
42
|
-
dismissible = true;
|
|
43
|
-
/**
|
|
44
|
-
* @description Quando `true`, pressionar a tecla Escape fecha a sidebar.
|
|
45
|
-
*
|
|
46
|
-
* @default true
|
|
47
|
-
*/
|
|
48
|
-
closeOnEscape = true;
|
|
49
|
-
/**
|
|
50
|
-
* @description Texto exibido no cabeçalho padrão da sidebar.
|
|
51
|
-
* Pode ser substituído por um template customizado via `sTemplate="header"`.
|
|
52
|
-
*/
|
|
53
|
-
header;
|
|
54
|
-
/**
|
|
55
|
-
* @description Quando `true`, aumenta a largura da sidebar para acomodar mais conteúdo.
|
|
56
|
-
*
|
|
57
|
-
* @default false
|
|
58
|
-
*/
|
|
59
|
-
largeSized = false;
|
|
60
|
-
/**
|
|
61
|
-
* @description Quando `true`, mantém o conteúdo da sidebar no DOM mesmo quando oculta,
|
|
62
|
-
* preservando o estado interno dos componentes filhos.
|
|
63
|
-
*
|
|
64
|
-
* @default false
|
|
65
|
-
*/
|
|
66
|
-
cache = false;
|
|
67
|
-
/**
|
|
68
|
-
* @description Função de confirmação chamada antes de fechar a sidebar.
|
|
69
|
-
* Quando retornar `false`, o fechamento é bloqueado. Útil para validar formulários não salvos.
|
|
70
|
-
*/
|
|
71
|
-
set registerConfirmClose(fn) {
|
|
72
|
-
this._confirmClose = fn;
|
|
73
|
-
}
|
|
74
|
-
headerTemplate = null;
|
|
75
|
-
bodyTemplate = null;
|
|
76
|
-
footerTemplate = null;
|
|
77
|
-
footerComponent = contentChild(FooterComponent);
|
|
78
|
-
_confirmClose = () => true;
|
|
79
|
-
visibleEffect = effect(() => {
|
|
80
|
-
const visible = this.visible();
|
|
81
|
-
if (visible) {
|
|
82
|
-
disableScroll();
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
enableScroll();
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
ngAfterContentInit() {
|
|
89
|
-
this._getTemplates();
|
|
90
|
-
}
|
|
91
|
-
ngOnDestroy() {
|
|
92
|
-
this.visibleEffect.destroy();
|
|
93
|
-
}
|
|
94
|
-
closeSidebar() {
|
|
95
|
-
if (this._confirmClose()) {
|
|
96
|
-
this.visible.set(false);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
handleEscape() {
|
|
100
|
-
if (this.closeOnEscape) {
|
|
101
|
-
this.closeSidebar();
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
_getCustomTemplate(type) {
|
|
105
|
-
return this.templates?.find((template) => template.type === type)?.template ?? null;
|
|
106
|
-
}
|
|
107
|
-
getHeaderTemplate() {
|
|
108
|
-
return this._getCustomTemplate('header') ?? null;
|
|
109
|
-
}
|
|
110
|
-
getBodyTemplate() {
|
|
111
|
-
return this._getCustomTemplate('body') ?? null;
|
|
112
|
-
}
|
|
113
|
-
getFooterTemplate() {
|
|
114
|
-
return this._getCustomTemplate('footer') ?? null;
|
|
115
|
-
}
|
|
116
|
-
_getTemplates() {
|
|
117
|
-
this.headerTemplate = this.getHeaderTemplate();
|
|
118
|
-
this.bodyTemplate = this.getBodyTemplate();
|
|
119
|
-
this.footerTemplate = this.getFooterTemplate();
|
|
120
|
-
}
|
|
121
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SidebarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
122
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SidebarComponent, isStandalone: true, selector: "s-sidebar", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: false, isRequired: false, transformFunction: null }, dismissible: { classPropertyName: "dismissible", publicName: "dismissible", isSignal: false, isRequired: false, transformFunction: null }, closeOnEscape: { classPropertyName: "closeOnEscape", publicName: "closeOnEscape", isSignal: false, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: false, isRequired: false, transformFunction: null }, largeSized: { classPropertyName: "largeSized", publicName: "largeSized", isSignal: false, isRequired: false, transformFunction: null }, cache: { classPropertyName: "cache", publicName: "cache", isSignal: false, isRequired: false, transformFunction: null }, registerConfirmClose: { classPropertyName: "registerConfirmClose", publicName: "registerConfirmClose", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { visible: "visibleChange" }, host: { listeners: { "document:keydown.escape": "handleEscape()" } }, queries: [{ propertyName: "footerComponent", first: true, predicate: FooterComponent, descendants: true, isSignal: true }, { propertyName: "templates", predicate: TemplateDirective }], ngImport: i0, template: "@if (visible()) {\n <div\n class=\"backdrop\"\n (click)=\"dismissible && closeSidebar()\"\n ></div>\n}\n\n@if (cache || visible()) {\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"visible()\"\n [@visibilityChanged]\n class=\"sidebar\"\n [class.sidebar--open]=\"visible()\"\n [class.sidebar--large-size]=\"largeSized\"\n >\n <div class=\"sidebar__header\">\n @if (headerTemplate) {\n <ng-template *ngTemplateOutlet=\"headerTemplate\"></ng-template>\n } @else {\n <span class=\"sidebar__header__title\">{{ header }}</span>\n }\n @if (closable) {\n <button\n class=\"sidebar__header__close fa-solid fa-xmark\"\n (click)=\"closeSidebar()\"\n ></button>\n }\n </div>\n <div class=\"sidebar__body\">\n @if (bodyTemplate) {\n <ng-template [ngTemplateOutlet]=\"bodyTemplate\"></ng-template>\n } @else {\n <ng-content select=\":not(s-footer)\"></ng-content>\n }\n </div>\n @if (footerTemplate || footerComponent()) {\n <div class=\"sidebar__footer\">\n @if (footerTemplate) {\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"></ng-template>\n } @else {\n <ng-content select=\"s-footer\"></ng-content>\n }\n </div>\n }\n </div>\n}\n\n", styles: [".backdrop{background-color:#00000080;height:100%;left:0;position:fixed;top:0;transition:opacity .3s;width:100%;z-index:998}.sidebar{background-color:#fff;box-shadow:0 1px 5px #00000040;display:flex;flex-direction:column;height:100%;right:-100%;padding:1rem;position:fixed;top:0;transition:right .3s;width:100%;z-index:999}.sidebar__header{border-bottom:1px solid #dedce5;display:flex;justify-content:space-between;padding-bottom:.75rem}.sidebar__header__title{color:#212533;font-family:Inter,sans-serif;font-size:1rem;text-transform:uppercase;-webkit-user-select:none;user-select:none}.sidebar__header__close{background-color:transparent;border:none;color:#212533;cursor:pointer;font-size:1rem;padding:.5rem}.sidebar__body{flex-grow:1;overflow:auto;padding:1rem .5rem}.sidebar__footer{border-top:1px solid #dedce5;padding-top:.75rem}.sidebar--open{right:0}@media (min-width: 768px){.sidebar{width:75%}}@media (min-width: 992px){.sidebar{width:50%}}\n"], dependencies: [{ kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [
|
|
123
|
-
trigger('visibilityChanged', [
|
|
124
|
-
transition(':enter', [
|
|
125
|
-
style({ transform: 'translateX(100%)' }),
|
|
126
|
-
animate('300ms', style({ transform: 'translateX(0)' })),
|
|
127
|
-
]),
|
|
128
|
-
transition(':leave', [
|
|
129
|
-
style({ transform: 'translateX(0)' }),
|
|
130
|
-
animate('300ms', style({ transform: 'translateX(100%)' })),
|
|
131
|
-
]),
|
|
132
|
-
]),
|
|
133
|
-
] });
|
|
134
|
-
}
|
|
135
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SidebarComponent, decorators: [{
|
|
136
|
-
type: Component,
|
|
137
|
-
args: [{ selector: 's-sidebar', host: {
|
|
138
|
-
'(document:keydown.escape)': 'handleEscape()',
|
|
139
|
-
}, animations: [
|
|
140
|
-
trigger('visibilityChanged', [
|
|
141
|
-
transition(':enter', [
|
|
142
|
-
style({ transform: 'translateX(100%)' }),
|
|
143
|
-
animate('300ms', style({ transform: 'translateX(0)' })),
|
|
144
|
-
]),
|
|
145
|
-
transition(':leave', [
|
|
146
|
-
style({ transform: 'translateX(0)' }),
|
|
147
|
-
animate('300ms', style({ transform: 'translateX(100%)' })),
|
|
148
|
-
]),
|
|
149
|
-
]),
|
|
150
|
-
], standalone: true, imports: [CdkTrapFocus, NgTemplateOutlet], template: "@if (visible()) {\n <div\n class=\"backdrop\"\n (click)=\"dismissible && closeSidebar()\"\n ></div>\n}\n\n@if (cache || visible()) {\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"visible()\"\n [@visibilityChanged]\n class=\"sidebar\"\n [class.sidebar--open]=\"visible()\"\n [class.sidebar--large-size]=\"largeSized\"\n >\n <div class=\"sidebar__header\">\n @if (headerTemplate) {\n <ng-template *ngTemplateOutlet=\"headerTemplate\"></ng-template>\n } @else {\n <span class=\"sidebar__header__title\">{{ header }}</span>\n }\n @if (closable) {\n <button\n class=\"sidebar__header__close fa-solid fa-xmark\"\n (click)=\"closeSidebar()\"\n ></button>\n }\n </div>\n <div class=\"sidebar__body\">\n @if (bodyTemplate) {\n <ng-template [ngTemplateOutlet]=\"bodyTemplate\"></ng-template>\n } @else {\n <ng-content select=\":not(s-footer)\"></ng-content>\n }\n </div>\n @if (footerTemplate || footerComponent()) {\n <div class=\"sidebar__footer\">\n @if (footerTemplate) {\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"></ng-template>\n } @else {\n <ng-content select=\"s-footer\"></ng-content>\n }\n </div>\n }\n </div>\n}\n\n", styles: [".backdrop{background-color:#00000080;height:100%;left:0;position:fixed;top:0;transition:opacity .3s;width:100%;z-index:998}.sidebar{background-color:#fff;box-shadow:0 1px 5px #00000040;display:flex;flex-direction:column;height:100%;right:-100%;padding:1rem;position:fixed;top:0;transition:right .3s;width:100%;z-index:999}.sidebar__header{border-bottom:1px solid #dedce5;display:flex;justify-content:space-between;padding-bottom:.75rem}.sidebar__header__title{color:#212533;font-family:Inter,sans-serif;font-size:1rem;text-transform:uppercase;-webkit-user-select:none;user-select:none}.sidebar__header__close{background-color:transparent;border:none;color:#212533;cursor:pointer;font-size:1rem;padding:.5rem}.sidebar__body{flex-grow:1;overflow:auto;padding:1rem .5rem}.sidebar__footer{border-top:1px solid #dedce5;padding-top:.75rem}.sidebar--open{right:0}@media (min-width: 768px){.sidebar{width:75%}}@media (min-width: 992px){.sidebar{width:50%}}\n"] }]
|
|
151
|
-
}], propDecorators: { templates: [{
|
|
152
|
-
type: ContentChildren,
|
|
153
|
-
args: [TemplateDirective]
|
|
154
|
-
}], closable: [{
|
|
155
|
-
type: Input
|
|
156
|
-
}], dismissible: [{
|
|
157
|
-
type: Input
|
|
158
|
-
}], closeOnEscape: [{
|
|
159
|
-
type: Input
|
|
160
|
-
}], header: [{
|
|
161
|
-
type: Input
|
|
162
|
-
}], largeSized: [{
|
|
163
|
-
type: Input
|
|
164
|
-
}], cache: [{
|
|
165
|
-
type: Input
|
|
166
|
-
}], registerConfirmClose: [{
|
|
167
|
-
type: Input
|
|
168
|
-
}] } });
|
|
169
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc2lkZWJhci9zcmMvbGliL3NpZGViYXIvc2lkZWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc2lkZWJhci9zcmMvbGliL3NpZGViYXIvc2lkZWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssR0FJUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFFdkY7Ozs7Ozs7Ozs7Ozs7R0FhRztBQXVCSCxNQUFNLE9BQU8sZ0JBQWdCO0lBRWxCLFNBQVMsR0FBd0MsSUFBSSxDQUFDO0lBRTdEOzs7O09BSUc7SUFDSSxPQUFPLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBRXZDOzs7O09BSUc7SUFFSSxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBRXZCOzs7O09BSUc7SUFFSSxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBRTFCOzs7O09BSUc7SUFFSSxhQUFhLEdB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J0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBDZGtUcmFwRm9jdXMgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XHJcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcclxuICAgIENvbXBvbmVudCxcclxuICAgIGNvbnRlbnRDaGlsZCxcclxuICAgIENvbnRlbnRDaGlsZHJlbixcclxuICAgIGVmZmVjdCxcclxuICAgIElucHV0LFxyXG4gICAgbW9kZWwsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBRdWVyeUxpc3QsXHJcbiAgICBUZW1wbGF0ZVJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9vdGVyQ29tcG9uZW50IH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9zdHJ1Y3R1cmUnO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdGVtcGxhdGUnO1xyXG5pbXBvcnQgeyBkaXNhYmxlU2Nyb2xsLCBlbmFibGVTY3JvbGwgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3V0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50ZSBkZSBwYWluZWwgbGF0ZXJhbCBkZXNsaXphbnRlIChzaWRlYmFyKSBxdWUgYXBhcmVjZSBzb2JyZSBvIGNvbnRlw7pkb1xyXG4gKiB2aW5kbyBkbyBsYWRvIGRpcmVpdG8gZGEgdGVsYS4gU3Vwb3J0YSB0ZW1wbGF0ZXMgY3VzdG9taXphZG9zIHBhcmEgY2FiZcOnYWxobywgY29ycG8gZSByb2RhcMOpXHJcbiAqIHZpYSBgc1RlbXBsYXRlYCwgYmxvcXVlaW8gZGUgc2Nyb2xsIGF1dG9tw6F0aWNvIGUgY29uZmlybWHDp8OjbyBkZSBmZWNoYW1lbnRvLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBodG1sXHJcbiAqIDxzLXNpZGViYXIgWyh2aXNpYmxlKV09XCJzaWRlYmFyT3BlblwiIGhlYWRlcj1cIkZpbHRyb3NcIiBbY2xvc2FibGVdPVwidHJ1ZVwiPlxyXG4gKiAgIDxuZy10ZW1wbGF0ZSBzVGVtcGxhdGU9XCJib2R5XCI+Q29udGXDumRvPC9uZy10ZW1wbGF0ZT5cclxuICogPC9zLXNpZGViYXI+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgT3ZlcmxheVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Mtc2lkZWJhcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2lkZWJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9zaWRlYmFyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBob3N0OiB7XHJcbiAgICAgICAgJyhkb2N1bWVudDprZXlkb3duLmVzY2FwZSknOiAnaGFuZGxlRXNjYXBlKCknLFxyXG4gICAgfSxcclxuICAgIGFuaW1hdGlvbnM6IFtcclxuICAgICAgICB0cmlnZ2VyKCd2aXNpYmlsaXR5Q2hhbmdlZCcsIFtcclxuICAgICAgICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xyXG4gICAgICAgICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDEwMCUpJyB9KSxcclxuICAgICAgICAgICAgICAgIGFuaW1hdGUoJzMwMG1zJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDApJyB9KSksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXHJcbiAgICAgICAgICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMCknIH0pLFxyXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnMzAwbXMnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMTAwJSknIH0pKSxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgXSksXHJcbiAgICBdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtDZGtUcmFwRm9jdXMsIE5nVGVtcGxhdGVPdXRsZXRdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2lkZWJhckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlRGlyZWN0aXZlKVxyXG4gICAgcHVibGljIHRlbXBsYXRlczogUXVlcnlMaXN0PFRlbXBsYXRlRGlyZWN0aXZlPiB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnRyb2xhIGEgdmlzaWJpbGlkYWRlIGRhIHNpZGViYXIuIFN1cG9ydGEgdHdvLXdheSBiaW5kaW5nIHZpYSBgWyh2aXNpYmxlKV1gLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB2aXNpYmxlID0gbW9kZWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFF1YW5kbyBgdHJ1ZWAsIGV4aWJlIG8gYm90w6NvIGRlIGZlY2hhciAoWCkgbm8gY2FiZcOnYWxobyBkYSBzaWRlYmFyLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjbG9zYWJsZSA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUXVhbmRvIGB0cnVlYCwgY2xpY2FyIG5vIGJhY2tkcm9wICjDoXJlYSBlc2N1cmVjaWRhIGZvcmEgZGEgc2lkZWJhcikgZmVjaGEgbyBwYWluZWwuXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRpc21pc3NpYmxlID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBRdWFuZG8gYHRydWVgLCBwcmVzc2lvbmFyIGEgdGVjbGEgRXNjYXBlIGZlY2hhIGEgc2lkZWJhci5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY2xvc2VPbkVzY2FwZSA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGV4dG8gZXhpYmlkbyBubyBjYWJlw6dhbGhvIHBhZHLDo28gZGEgc2lkZWJhci5cclxuICAgICAqIFBvZGUgc2VyIHN1YnN0aXR1w61kbyBwb3IgdW0gdGVtcGxhdGUgY3VzdG9taXphZG8gdmlhIGBzVGVtcGxhdGU9XCJoZWFkZXJcImAuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaGVhZGVyPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFF1YW5kbyBgdHJ1ZWAsIGF1bWVudGEgYSBsYXJndXJhIGRhIHNpZGViYXIgcGFyYSBhY29tb2RhciBtYWlzIGNvbnRlw7pkby5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGxhcmdlU2l6ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBRdWFuZG8gYHRydWVgLCBtYW50w6ltIG8gY29udGXDumRvIGRhIHNpZGViYXIgbm8gRE9NIG1lc21vIHF1YW5kbyBvY3VsdGEsXHJcbiAgICAgKiBwcmVzZXJ2YW5kbyBvIGVzdGFkbyBpbnRlcm5vIGRvcyBjb21wb25lbnRlcyBmaWxob3MuXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjYWNoZSA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEZ1bsOnw6NvIGRlIGNvbmZpcm1hw6fDo28gY2hhbWFkYSBhbnRlcyBkZSBmZWNoYXIgYSBzaWRlYmFyLlxyXG4gICAgICogUXVhbmRvIHJldG9ybmFyIGBmYWxzZWAsIG8gZmVjaGFtZW50byDDqSBibG9xdWVhZG8uIMOadGlsIHBhcmEgdmFsaWRhciBmb3JtdWzDoXJpb3MgbsOjbyBzYWx2b3MuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IHJlZ2lzdGVyQ29uZmlybUNsb3NlKGZuOiAoKSA9PiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fY29uZmlybUNsb3NlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGwgPSBudWxsO1xyXG4gICAgcHVibGljIGJvZHlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsID0gbnVsbDtcclxuICAgIHB1YmxpYyBmb290ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZm9vdGVyQ29tcG9uZW50ID0gY29udGVudENoaWxkKEZvb3RlckNvbXBvbmVudCk7XHJcblxyXG4gICAgcHJpdmF0ZSBfY29uZmlybUNsb3NlID0gKCkgPT4gdHJ1ZTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpc2libGVFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZpc2libGUgPSB0aGlzLnZpc2libGUoKTtcclxuICAgICAgICBpZiAodmlzaWJsZSkge1xyXG4gICAgICAgICAgICBkaXNhYmxlU2Nyb2xsKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZW5hYmxlU2Nyb2xsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9nZXRUZW1wbGF0ZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlRWZmZWN0LmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2VTaWRlYmFyKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb25maXJtQ2xvc2UoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnZpc2libGUuc2V0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhbmRsZUVzY2FwZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5jbG9zZU9uRXNjYXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VTaWRlYmFyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2dldEN1c3RvbVRlbXBsYXRlKHR5cGU6IHN0cmluZyk6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZXM/LmZpbmQoKHRlbXBsYXRlOiBUZW1wbGF0ZURpcmVjdGl2ZSkgPT4gdGVtcGxhdGUudHlwZSA9PT0gdHlwZSk/LnRlbXBsYXRlID8/IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRIZWFkZXJUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRDdXN0b21UZW1wbGF0ZSgnaGVhZGVyJykgPz8gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEJvZHlUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRDdXN0b21UZW1wbGF0ZSgnYm9keScpID8/IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGb290ZXJUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRDdXN0b21UZW1wbGF0ZSgnZm9vdGVyJykgPz8gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9nZXRUZW1wbGF0ZXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuZ2V0SGVhZGVyVGVtcGxhdGUoKTtcclxuICAgICAgICB0aGlzLmJvZHlUZW1wbGF0ZSA9IHRoaXMuZ2V0Qm9keVRlbXBsYXRlKCk7XHJcbiAgICAgICAgdGhpcy5mb290ZXJUZW1wbGF0ZSA9IHRoaXMuZ2V0Rm9vdGVyVGVtcGxhdGUoKTtcclxuICAgIH1cclxufVxyXG4iLCJAaWYgKHZpc2libGUoKSkge1xuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJiYWNrZHJvcFwiXG4gICAgICAgIChjbGljayk9XCJkaXNtaXNzaWJsZSAmJiBjbG9zZVNpZGViYXIoKVwiXG4gICAgPjwvZGl2PlxufVxuXG5AaWYgKGNhY2hlIHx8IHZpc2libGUoKSkge1xuICAgIDxkaXZcbiAgICAgICAgY2RrVHJhcEZvY3VzXG4gICAgICAgIFtjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZV09XCJ2aXNpYmxlKClcIlxuICAgICAgICBbQHZpc2liaWxpdHlDaGFuZ2VkXVxuICAgICAgICBjbGFzcz1cInNpZGViYXJcIlxuICAgICAgICBbY2xhc3Muc2lkZWJhci0tb3Blbl09XCJ2aXNpYmxlKClcIlxuICAgICAgICBbY2xhc3Muc2lkZWJhci0tbGFyZ2Utc2l6ZV09XCJsYXJnZVNpemVkXCJcbiAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlYmFyX19oZWFkZXJcIj5cbiAgICAgICAgICAgIEBpZiAoaGVhZGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNpZGViYXJfX2hlYWRlcl9fdGl0bGVcIj57eyBoZWFkZXIgfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGNsb3NhYmxlKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNpZGViYXJfX2hlYWRlcl9fY2xvc2UgZmEtc29saWQgZmEteG1hcmtcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xvc2VTaWRlYmFyKClcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlYmFyX19ib2R5XCI+XG4gICAgICAgICAgICBAaWYgKGJvZHlUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJib2R5VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiOm5vdChzLWZvb3RlcilcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKGZvb3RlclRlbXBsYXRlIHx8IGZvb3RlckNvbXBvbmVudCgpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZWJhcl9fZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgQGlmIChmb290ZXJUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZm9vdGVyVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJzLWZvb3RlclwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxufVxuXG4iXX0=
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { SidebarComponent } from './sidebar.component';
|
|
3
|
-
import { TemplateModule } from '@seniorsistemas/angular-components/template';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class SidebarModule {
|
|
6
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SidebarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
7
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: SidebarModule, imports: [SidebarComponent], exports: [SidebarComponent, TemplateModule] });
|
|
8
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SidebarModule, imports: [TemplateModule] });
|
|
9
|
-
}
|
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SidebarModule, decorators: [{
|
|
11
|
-
type: NgModule,
|
|
12
|
-
args: [{
|
|
13
|
-
imports: [SidebarComponent],
|
|
14
|
-
exports: [SidebarComponent, TemplateModule],
|
|
15
|
-
}]
|
|
16
|
-
}] });
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc2lkZWJhci9zcmMvbGliL3NpZGViYXIvc2lkZWJhci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7O0FBTTdFLE1BQU0sT0FBTyxhQUFhO3dHQUFiLGFBQWE7eUdBQWIsYUFBYSxZQUhaLGdCQUFnQixhQUNoQixnQkFBZ0IsRUFBRSxjQUFjO3lHQUVqQyxhQUFhLFlBRk0sY0FBYzs7NEZBRWpDLGFBQWE7a0JBSnpCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQztpQkFDOUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgU2lkZWJhckNvbXBvbmVudCB9IGZyb20gJy4vc2lkZWJhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZU1vZHVsZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdGVtcGxhdGUnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtTaWRlYmFyQ29tcG9uZW50XSxcclxuICAgIGV4cG9ydHM6IFtTaWRlYmFyQ29tcG9uZW50LCBUZW1wbGF0ZU1vZHVsZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaWRlYmFyTW9kdWxlIHt9XHJcbiJdfQ==
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import * as i0 from "@angular/core";
|
|
2
|
-
import * as i1 from "./sidebar.component";
|
|
3
|
-
import * as i2 from "@seniorsistemas/angular-components/template";
|
|
4
|
-
export declare class SidebarModule {
|
|
5
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<SidebarModule, never>;
|
|
6
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<SidebarModule, never, [typeof i1.SidebarComponent], [typeof i1.SidebarComponent, typeof i2.TemplateModule]>;
|
|
7
|
-
static ɵinj: i0.ɵɵInjectorDeclaration<SidebarModule>;
|
|
8
|
-
}
|