@praxisui/tabs 9.0.0-beta.2 → 9.0.0-beta.21
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/README.md +10 -43
- package/ai/component-registry.json +2061 -0
- package/fesm2022/praxisui-tabs.mjs +72 -35
- package/package.json +11 -14
- package/src/lib/praxis-tabs-config-editor.json-api.md +6 -2
- package/types/praxisui-tabs.d.ts +6 -0
|
@@ -273,6 +273,12 @@ const PRAXIS_TABS_PT_BR = {
|
|
|
273
273
|
'editor.actions.addTab': 'Adicionar aba',
|
|
274
274
|
'editor.actions.addLink': 'Adicionar link',
|
|
275
275
|
'editor.actions.add': 'Adicionar',
|
|
276
|
+
'editor.actions.moveTabUp': 'Mover aba para cima',
|
|
277
|
+
'editor.actions.moveTabDown': 'Mover aba para baixo',
|
|
278
|
+
'editor.actions.removeTab': 'Remover aba',
|
|
279
|
+
'editor.actions.moveLinkUp': 'Mover link para cima',
|
|
280
|
+
'editor.actions.moveLinkDown': 'Mover link para baixo',
|
|
281
|
+
'editor.actions.removeLink': 'Remover link',
|
|
276
282
|
'editor.actions.removeLabel': 'Remover rótulo',
|
|
277
283
|
'editor.actions.dragToReorder': 'Arrastar para reordenar',
|
|
278
284
|
'editor.actions.removeComponent': 'Remover componente',
|
|
@@ -364,6 +370,7 @@ const PRAXIS_TABS_PT_BR = {
|
|
|
364
370
|
'editor.toggles.disablePagination': 'Sem paginação',
|
|
365
371
|
'editor.toggles.disableRipple': 'Sem ripple',
|
|
366
372
|
'editor.toggles.preserveContent': 'Preservar conteúdo',
|
|
373
|
+
'editor.toggles.renderBody': 'Renderizar conteúdo interno',
|
|
367
374
|
'editor.toggles.stretchTabs': 'Esticar abas',
|
|
368
375
|
'editor.toggles.highContrast': 'Alto contraste',
|
|
369
376
|
'editor.toggles.reduceMotion': 'Reduzir movimento',
|
|
@@ -418,6 +425,12 @@ const PRAXIS_TABS_EN_US = {
|
|
|
418
425
|
'editor.actions.addTab': 'Add tab',
|
|
419
426
|
'editor.actions.addLink': 'Add link',
|
|
420
427
|
'editor.actions.add': 'Add',
|
|
428
|
+
'editor.actions.moveTabUp': 'Move tab up',
|
|
429
|
+
'editor.actions.moveTabDown': 'Move tab down',
|
|
430
|
+
'editor.actions.removeTab': 'Remove tab',
|
|
431
|
+
'editor.actions.moveLinkUp': 'Move link up',
|
|
432
|
+
'editor.actions.moveLinkDown': 'Move link down',
|
|
433
|
+
'editor.actions.removeLink': 'Remove link',
|
|
421
434
|
'editor.actions.removeLabel': 'Remove label',
|
|
422
435
|
'editor.actions.dragToReorder': 'Drag to reorder',
|
|
423
436
|
'editor.actions.removeComponent': 'Remove component',
|
|
@@ -509,6 +522,7 @@ const PRAXIS_TABS_EN_US = {
|
|
|
509
522
|
'editor.toggles.disablePagination': 'Disable pagination',
|
|
510
523
|
'editor.toggles.disableRipple': 'Disable ripple',
|
|
511
524
|
'editor.toggles.preserveContent': 'Preserve content',
|
|
525
|
+
'editor.toggles.renderBody': 'Render internal content',
|
|
512
526
|
'editor.toggles.stretchTabs': 'Stretch tabs',
|
|
513
527
|
'editor.toggles.highContrast': 'High contrast',
|
|
514
528
|
'editor.toggles.reduceMotion': 'Reduce motion',
|
|
@@ -1116,6 +1130,7 @@ class PraxisTabsConfigEditor {
|
|
|
1116
1130
|
<mat-slide-toggle [(ngModel)]="group.disablePagination" (ngModelChange)="onAppearanceChange()">{{ t('editor.toggles.disablePagination', 'Sem paginacao') }}</mat-slide-toggle>
|
|
1117
1131
|
<mat-slide-toggle [(ngModel)]="group.disableRipple" (ngModelChange)="onAppearanceChange()">{{ t('editor.toggles.disableRipple', 'Sem ripple') }}</mat-slide-toggle>
|
|
1118
1132
|
<mat-slide-toggle [(ngModel)]="group.preserveContent" (ngModelChange)="onAppearanceChange()">{{ t('editor.toggles.preserveContent', 'Preservar conteudo') }}</mat-slide-toggle>
|
|
1133
|
+
<mat-slide-toggle [ngModel]="group.renderBody !== false" (ngModelChange)="group.renderBody = $event ? undefined : false; onAppearanceChange()">{{ t('editor.toggles.renderBody', 'Renderizar conteudo interno') }}</mat-slide-toggle>
|
|
1119
1134
|
<mat-slide-toggle [(ngModel)]="group.stretchTabs" (ngModelChange)="onAppearanceChange()">{{ t('editor.toggles.stretchTabs', 'Esticar abas') }}</mat-slide-toggle>
|
|
1120
1135
|
</div>
|
|
1121
1136
|
</div>
|
|
@@ -1197,6 +1212,7 @@ class PraxisTabsConfigEditor {
|
|
|
1197
1212
|
<mat-slide-toggle [(ngModel)]="nav.fitInkBarToContent" (ngModelChange)="onAppearanceChange()">{{ t('editor.toggles.fitInkBarToContent', 'Indicador ajustado ao conteudo') }}</mat-slide-toggle>
|
|
1198
1213
|
<mat-slide-toggle [(ngModel)]="nav.disablePagination" (ngModelChange)="onAppearanceChange()">{{ t('editor.toggles.disablePagination', 'Sem paginacao') }}</mat-slide-toggle>
|
|
1199
1214
|
<mat-slide-toggle [(ngModel)]="nav.disableRipple" (ngModelChange)="onAppearanceChange()">{{ t('editor.toggles.disableRipple', 'Sem ripple') }}</mat-slide-toggle>
|
|
1215
|
+
<mat-slide-toggle [ngModel]="nav.renderBody !== false" (ngModelChange)="nav.renderBody = $event ? undefined : false; onAppearanceChange()">{{ t('editor.toggles.renderBody', 'Renderizar conteudo interno') }}</mat-slide-toggle>
|
|
1200
1216
|
<mat-slide-toggle [(ngModel)]="nav.stretchTabs" (ngModelChange)="onAppearanceChange()">{{ t('editor.toggles.stretchTabs', 'Esticar abas') }}</mat-slide-toggle>
|
|
1201
1217
|
</div>
|
|
1202
1218
|
</div>
|
|
@@ -1321,9 +1337,9 @@ class PraxisTabsConfigEditor {
|
|
|
1321
1337
|
<div class="editor-card">
|
|
1322
1338
|
<div class="editor-card-header">
|
|
1323
1339
|
<strong class="editor-card-title">{{ t('editor.cards.tab', 'Aba') }} #{{ i+1 }}</strong>
|
|
1324
|
-
<button mat-icon-button (click)="moveTab(i, -1)" [disabled]="i===0"><mat-icon [praxisIcon]="'arrow_upward'"></mat-icon></button>
|
|
1325
|
-
<button mat-icon-button (click)="moveTab(i, 1)" [disabled]="i===editedConfig.tabs!.length-1"><mat-icon [praxisIcon]="'arrow_downward'"></mat-icon></button>
|
|
1326
|
-
<button mat-icon-button color="warn" (click)="removeTab(i)"><mat-icon [praxisIcon]="'delete'"></mat-icon></button>
|
|
1340
|
+
<button mat-icon-button (click)="moveTab(i, -1)" [disabled]="i===0" [matTooltip]="t('editor.actions.moveTabUp', 'Mover aba para cima')" [attr.aria-label]="t('editor.actions.moveTabUp', 'Mover aba para cima')"><mat-icon aria-hidden="true" [praxisIcon]="'arrow_upward'"></mat-icon></button>
|
|
1341
|
+
<button mat-icon-button (click)="moveTab(i, 1)" [disabled]="i===editedConfig.tabs!.length-1" [matTooltip]="t('editor.actions.moveTabDown', 'Mover aba para baixo')" [attr.aria-label]="t('editor.actions.moveTabDown', 'Mover aba para baixo')"><mat-icon aria-hidden="true" [praxisIcon]="'arrow_downward'"></mat-icon></button>
|
|
1342
|
+
<button mat-icon-button color="warn" (click)="removeTab(i)" [matTooltip]="t('editor.actions.removeTab', 'Remover aba')" [attr.aria-label]="t('editor.actions.removeTab', 'Remover aba')"><mat-icon aria-hidden="true" [praxisIcon]="'delete'"></mat-icon></button>
|
|
1327
1343
|
</div>
|
|
1328
1344
|
<div class="editor-grid two tight">
|
|
1329
1345
|
<mat-form-field appearance="outline"><mat-label>{{ t('editor.fields.id', 'ID') }}</mat-label>
|
|
@@ -1427,9 +1443,9 @@ class PraxisTabsConfigEditor {
|
|
|
1427
1443
|
<div class="editor-card">
|
|
1428
1444
|
<div class="editor-card-header">
|
|
1429
1445
|
<strong class="editor-card-title">{{ t('editor.cards.link', 'Link') }} #{{ i+1 }}</strong>
|
|
1430
|
-
<button mat-icon-button (click)="moveLink(i, -1)" [disabled]="i===0"><mat-icon [praxisIcon]="'arrow_upward'"></mat-icon></button>
|
|
1431
|
-
<button mat-icon-button (click)="moveLink(i, 1)" [disabled]="i===nav.links!.length-1"><mat-icon [praxisIcon]="'arrow_downward'"></mat-icon></button>
|
|
1432
|
-
<button mat-icon-button color="warn" (click)="removeLink(i)"><mat-icon [praxisIcon]="'delete'"></mat-icon></button>
|
|
1446
|
+
<button mat-icon-button (click)="moveLink(i, -1)" [disabled]="i===0" [matTooltip]="t('editor.actions.moveLinkUp', 'Mover link para cima')" [attr.aria-label]="t('editor.actions.moveLinkUp', 'Mover link para cima')"><mat-icon aria-hidden="true" [praxisIcon]="'arrow_upward'"></mat-icon></button>
|
|
1447
|
+
<button mat-icon-button (click)="moveLink(i, 1)" [disabled]="i===nav.links!.length-1" [matTooltip]="t('editor.actions.moveLinkDown', 'Mover link para baixo')" [attr.aria-label]="t('editor.actions.moveLinkDown', 'Mover link para baixo')"><mat-icon aria-hidden="true" [praxisIcon]="'arrow_downward'"></mat-icon></button>
|
|
1448
|
+
<button mat-icon-button color="warn" (click)="removeLink(i)" [matTooltip]="t('editor.actions.removeLink', 'Remover link')" [attr.aria-label]="t('editor.actions.removeLink', 'Remover link')"><mat-icon aria-hidden="true" [praxisIcon]="'delete'"></mat-icon></button>
|
|
1433
1449
|
</div>
|
|
1434
1450
|
<div class="editor-grid two tight">
|
|
1435
1451
|
<mat-form-field appearance="outline"><mat-label>{{ t('editor.fields.id', 'ID') }}</mat-label>
|
|
@@ -1656,6 +1672,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
1656
1672
|
<mat-slide-toggle [(ngModel)]="group.disablePagination" (ngModelChange)="onAppearanceChange()">{{ t('editor.toggles.disablePagination', 'Sem paginacao') }}</mat-slide-toggle>
|
|
1657
1673
|
<mat-slide-toggle [(ngModel)]="group.disableRipple" (ngModelChange)="onAppearanceChange()">{{ t('editor.toggles.disableRipple', 'Sem ripple') }}</mat-slide-toggle>
|
|
1658
1674
|
<mat-slide-toggle [(ngModel)]="group.preserveContent" (ngModelChange)="onAppearanceChange()">{{ t('editor.toggles.preserveContent', 'Preservar conteudo') }}</mat-slide-toggle>
|
|
1675
|
+
<mat-slide-toggle [ngModel]="group.renderBody !== false" (ngModelChange)="group.renderBody = $event ? undefined : false; onAppearanceChange()">{{ t('editor.toggles.renderBody', 'Renderizar conteudo interno') }}</mat-slide-toggle>
|
|
1659
1676
|
<mat-slide-toggle [(ngModel)]="group.stretchTabs" (ngModelChange)="onAppearanceChange()">{{ t('editor.toggles.stretchTabs', 'Esticar abas') }}</mat-slide-toggle>
|
|
1660
1677
|
</div>
|
|
1661
1678
|
</div>
|
|
@@ -1737,6 +1754,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
1737
1754
|
<mat-slide-toggle [(ngModel)]="nav.fitInkBarToContent" (ngModelChange)="onAppearanceChange()">{{ t('editor.toggles.fitInkBarToContent', 'Indicador ajustado ao conteudo') }}</mat-slide-toggle>
|
|
1738
1755
|
<mat-slide-toggle [(ngModel)]="nav.disablePagination" (ngModelChange)="onAppearanceChange()">{{ t('editor.toggles.disablePagination', 'Sem paginacao') }}</mat-slide-toggle>
|
|
1739
1756
|
<mat-slide-toggle [(ngModel)]="nav.disableRipple" (ngModelChange)="onAppearanceChange()">{{ t('editor.toggles.disableRipple', 'Sem ripple') }}</mat-slide-toggle>
|
|
1757
|
+
<mat-slide-toggle [ngModel]="nav.renderBody !== false" (ngModelChange)="nav.renderBody = $event ? undefined : false; onAppearanceChange()">{{ t('editor.toggles.renderBody', 'Renderizar conteudo interno') }}</mat-slide-toggle>
|
|
1740
1758
|
<mat-slide-toggle [(ngModel)]="nav.stretchTabs" (ngModelChange)="onAppearanceChange()">{{ t('editor.toggles.stretchTabs', 'Esticar abas') }}</mat-slide-toggle>
|
|
1741
1759
|
</div>
|
|
1742
1760
|
</div>
|
|
@@ -1861,9 +1879,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
1861
1879
|
<div class="editor-card">
|
|
1862
1880
|
<div class="editor-card-header">
|
|
1863
1881
|
<strong class="editor-card-title">{{ t('editor.cards.tab', 'Aba') }} #{{ i+1 }}</strong>
|
|
1864
|
-
<button mat-icon-button (click)="moveTab(i, -1)" [disabled]="i===0"><mat-icon [praxisIcon]="'arrow_upward'"></mat-icon></button>
|
|
1865
|
-
<button mat-icon-button (click)="moveTab(i, 1)" [disabled]="i===editedConfig.tabs!.length-1"><mat-icon [praxisIcon]="'arrow_downward'"></mat-icon></button>
|
|
1866
|
-
<button mat-icon-button color="warn" (click)="removeTab(i)"><mat-icon [praxisIcon]="'delete'"></mat-icon></button>
|
|
1882
|
+
<button mat-icon-button (click)="moveTab(i, -1)" [disabled]="i===0" [matTooltip]="t('editor.actions.moveTabUp', 'Mover aba para cima')" [attr.aria-label]="t('editor.actions.moveTabUp', 'Mover aba para cima')"><mat-icon aria-hidden="true" [praxisIcon]="'arrow_upward'"></mat-icon></button>
|
|
1883
|
+
<button mat-icon-button (click)="moveTab(i, 1)" [disabled]="i===editedConfig.tabs!.length-1" [matTooltip]="t('editor.actions.moveTabDown', 'Mover aba para baixo')" [attr.aria-label]="t('editor.actions.moveTabDown', 'Mover aba para baixo')"><mat-icon aria-hidden="true" [praxisIcon]="'arrow_downward'"></mat-icon></button>
|
|
1884
|
+
<button mat-icon-button color="warn" (click)="removeTab(i)" [matTooltip]="t('editor.actions.removeTab', 'Remover aba')" [attr.aria-label]="t('editor.actions.removeTab', 'Remover aba')"><mat-icon aria-hidden="true" [praxisIcon]="'delete'"></mat-icon></button>
|
|
1867
1885
|
</div>
|
|
1868
1886
|
<div class="editor-grid two tight">
|
|
1869
1887
|
<mat-form-field appearance="outline"><mat-label>{{ t('editor.fields.id', 'ID') }}</mat-label>
|
|
@@ -1967,9 +1985,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
1967
1985
|
<div class="editor-card">
|
|
1968
1986
|
<div class="editor-card-header">
|
|
1969
1987
|
<strong class="editor-card-title">{{ t('editor.cards.link', 'Link') }} #{{ i+1 }}</strong>
|
|
1970
|
-
<button mat-icon-button (click)="moveLink(i, -1)" [disabled]="i===0"><mat-icon [praxisIcon]="'arrow_upward'"></mat-icon></button>
|
|
1971
|
-
<button mat-icon-button (click)="moveLink(i, 1)" [disabled]="i===nav.links!.length-1"><mat-icon [praxisIcon]="'arrow_downward'"></mat-icon></button>
|
|
1972
|
-
<button mat-icon-button color="warn" (click)="removeLink(i)"><mat-icon [praxisIcon]="'delete'"></mat-icon></button>
|
|
1988
|
+
<button mat-icon-button (click)="moveLink(i, -1)" [disabled]="i===0" [matTooltip]="t('editor.actions.moveLinkUp', 'Mover link para cima')" [attr.aria-label]="t('editor.actions.moveLinkUp', 'Mover link para cima')"><mat-icon aria-hidden="true" [praxisIcon]="'arrow_upward'"></mat-icon></button>
|
|
1989
|
+
<button mat-icon-button (click)="moveLink(i, 1)" [disabled]="i===nav.links!.length-1" [matTooltip]="t('editor.actions.moveLinkDown', 'Mover link para baixo')" [attr.aria-label]="t('editor.actions.moveLinkDown', 'Mover link para baixo')"><mat-icon aria-hidden="true" [praxisIcon]="'arrow_downward'"></mat-icon></button>
|
|
1990
|
+
<button mat-icon-button color="warn" (click)="removeLink(i)" [matTooltip]="t('editor.actions.removeLink', 'Remover link')" [attr.aria-label]="t('editor.actions.removeLink', 'Remover link')"><mat-icon aria-hidden="true" [praxisIcon]="'delete'"></mat-icon></button>
|
|
1973
1991
|
</div>
|
|
1974
1992
|
<div class="editor-grid two tight">
|
|
1975
1993
|
<mat-form-field appearance="outline"><mat-label>{{ t('editor.fields.id', 'ID') }}</mat-label>
|
|
@@ -3964,6 +3982,12 @@ class PraxisTabs {
|
|
|
3964
3982
|
groupContentReady(index) {
|
|
3965
3983
|
return !this.isLazy() || this.groupLoaded.has(index) || this.selectedIndexSignal() === index;
|
|
3966
3984
|
}
|
|
3985
|
+
shouldRenderGroupBody() {
|
|
3986
|
+
return this.config?.group?.renderBody !== false;
|
|
3987
|
+
}
|
|
3988
|
+
shouldRenderNavBody() {
|
|
3989
|
+
return this.config?.nav?.renderBody !== false;
|
|
3990
|
+
}
|
|
3967
3991
|
navContentReady(index) {
|
|
3968
3992
|
return !this.isLazy() || this.navLoaded.has(index) || this.currentNavIndex() === index;
|
|
3969
3993
|
}
|
|
@@ -4350,18 +4374,21 @@ class PraxisTabs {
|
|
|
4350
4374
|
>
|
|
4351
4375
|
@if (config?.behavior?.reorderable) {
|
|
4352
4376
|
<span class="drag-handle" cdkDragHandle>
|
|
4353
|
-
<mat-icon fontIcon="drag_indicator"></mat-icon>
|
|
4377
|
+
<mat-icon aria-hidden="true" fontIcon="drag_indicator"></mat-icon>
|
|
4354
4378
|
</span>
|
|
4355
4379
|
}
|
|
4356
4380
|
@if (entry.link.icon) {
|
|
4357
|
-
<mat-icon class="tab-label-icon" [praxisIcon]="entry.link.icon"></mat-icon>
|
|
4381
|
+
<mat-icon aria-hidden="true" class="tab-label-icon" [praxisIcon]="entry.link.icon"></mat-icon>
|
|
4358
4382
|
}
|
|
4359
4383
|
{{ entry.link.label }}
|
|
4360
4384
|
</a>
|
|
4361
4385
|
}
|
|
4362
4386
|
</nav>
|
|
4363
|
-
<mat-tab-nav-panel
|
|
4364
|
-
|
|
4387
|
+
<mat-tab-nav-panel
|
|
4388
|
+
#tabPanel
|
|
4389
|
+
[class.praxis-tabs-nav-panel--header-only]="!shouldRenderNavBody()"
|
|
4390
|
+
>
|
|
4391
|
+
@if (shouldRenderNavBody() && currentNavIndex() >= 0) {
|
|
4365
4392
|
<div class="praxis-tabnav-content">
|
|
4366
4393
|
@if (config?.nav?.links?.[currentNavIndex()]; as l) {
|
|
4367
4394
|
@if ((l.content?.length || safeWidgetDefinitions(l.widgets).length) && navContentReady(currentNavIndex())) {
|
|
@@ -4396,6 +4423,7 @@ class PraxisTabs {
|
|
|
4396
4423
|
</mat-tab-nav-panel>
|
|
4397
4424
|
} @else {
|
|
4398
4425
|
<mat-tab-group
|
|
4426
|
+
[class.praxis-tabs-group--header-only]="!shouldRenderGroupBody()"
|
|
4399
4427
|
[dynamicHeight]="config?.group?.dynamicHeight"
|
|
4400
4428
|
[disableRipple]="config?.group?.disableRipple"
|
|
4401
4429
|
[disablePagination]="config?.group?.disablePagination"
|
|
@@ -4427,7 +4455,7 @@ class PraxisTabs {
|
|
|
4427
4455
|
>
|
|
4428
4456
|
<ng-template mat-tab-label>
|
|
4429
4457
|
@if (entry.tab.icon) {
|
|
4430
|
-
<mat-icon class="tab-label-icon" [praxisIcon]="entry.tab.icon"></mat-icon>
|
|
4458
|
+
<mat-icon aria-hidden="true" class="tab-label-icon" [praxisIcon]="entry.tab.icon"></mat-icon>
|
|
4431
4459
|
}
|
|
4432
4460
|
<span>{{ entry.tab.textLabel }}</span>
|
|
4433
4461
|
@if (config?.behavior?.closeable) {
|
|
@@ -4439,7 +4467,7 @@ class PraxisTabs {
|
|
|
4439
4467
|
(keydown.space)="$event.stopPropagation()"
|
|
4440
4468
|
[attr.aria-label]="t('chrome.closeTab', 'Fechar aba')"
|
|
4441
4469
|
>
|
|
4442
|
-
<mat-icon fontIcon="close"></mat-icon>
|
|
4470
|
+
<mat-icon aria-hidden="true" fontIcon="close"></mat-icon>
|
|
4443
4471
|
</button>
|
|
4444
4472
|
}
|
|
4445
4473
|
@if (config?.behavior?.reorderable) {
|
|
@@ -4452,7 +4480,7 @@ class PraxisTabs {
|
|
|
4452
4480
|
[disabled]="entry.index===0"
|
|
4453
4481
|
[attr.aria-label]="t('chrome.moveTabLeft', 'Mover aba para esquerda')"
|
|
4454
4482
|
>
|
|
4455
|
-
<mat-icon fontIcon="arrow_back"></mat-icon>
|
|
4483
|
+
<mat-icon aria-hidden="true" fontIcon="arrow_back"></mat-icon>
|
|
4456
4484
|
</button>
|
|
4457
4485
|
<button
|
|
4458
4486
|
mat-icon-button
|
|
@@ -4463,10 +4491,11 @@ class PraxisTabs {
|
|
|
4463
4491
|
[disabled]="entry.index===(config?.tabs?.length||1)-1"
|
|
4464
4492
|
[attr.aria-label]="t('chrome.moveTabRight', 'Mover aba para direita')"
|
|
4465
4493
|
>
|
|
4466
|
-
<mat-icon fontIcon="arrow_forward"></mat-icon>
|
|
4494
|
+
<mat-icon aria-hidden="true" fontIcon="arrow_forward"></mat-icon>
|
|
4467
4495
|
</button>
|
|
4468
4496
|
}
|
|
4469
4497
|
</ng-template>
|
|
4498
|
+
@if (shouldRenderGroupBody()) {
|
|
4470
4499
|
@if ((entry.tab.content?.length || safeWidgetDefinitions(entry.tab.widgets).length) && groupContentReady(entry.index)) {
|
|
4471
4500
|
@if (entry.tab.content) {
|
|
4472
4501
|
<ng-container
|
|
@@ -4493,6 +4522,7 @@ class PraxisTabs {
|
|
|
4493
4522
|
[primaryAction]="{ label: t('emptyState.openEditor', 'Abrir editor'), icon: 'tune', action: openEditor.bind(this) }"
|
|
4494
4523
|
></praxis-empty-state-card>
|
|
4495
4524
|
}
|
|
4525
|
+
}
|
|
4496
4526
|
</mat-tab>
|
|
4497
4527
|
}
|
|
4498
4528
|
</mat-tab-group>
|
|
@@ -4509,7 +4539,7 @@ class PraxisTabs {
|
|
|
4509
4539
|
[attr.aria-label]="t('chrome.editTabs', 'Editar abas')"
|
|
4510
4540
|
(click)="openEditor()"
|
|
4511
4541
|
>
|
|
4512
|
-
<mat-icon fontIcon="edit"></mat-icon>
|
|
4542
|
+
<mat-icon aria-hidden="true" fontIcon="edit"></mat-icon>
|
|
4513
4543
|
</button>
|
|
4514
4544
|
}
|
|
4515
4545
|
@if (enableCustomization && tabsId) {
|
|
@@ -4520,11 +4550,11 @@ class PraxisTabs {
|
|
|
4520
4550
|
(click)="resetPreferences()"
|
|
4521
4551
|
[matTooltip]="t('settings.resetPreferences', 'Redefinir preferencias de abas')"
|
|
4522
4552
|
>
|
|
4523
|
-
<mat-icon [praxisIcon]="'restart_alt'"></mat-icon>
|
|
4553
|
+
<mat-icon aria-hidden="true" [praxisIcon]="'restart_alt'"></mat-icon>
|
|
4524
4554
|
</button>
|
|
4525
4555
|
}
|
|
4526
4556
|
</div>
|
|
4527
|
-
`, isInline: true, styles: [".praxis-tabs-root{position:relative;display:block}.praxis-tabs-group.align-start .mat-mdc-tab-header{justify-content:flex-start}.praxis-tabs-group.align-center .mat-mdc-tab-header{justify-content:center}.praxis-tabs-group.align-end .mat-mdc-tab-header{justify-content:flex-end}.density-compact .mat-mdc-tab-body-content{padding:8px}.density-comfortable .mat-mdc-tab-body-content{padding:16px}.density-spacious .mat-mdc-tab-body-content{padding:24px}.tabs-ai-assistant{position:absolute;right:12px;bottom:72px;z-index:3}.tabs-ai-assistant-trigger{box-shadow:var(--md-sys-elevation-level2)}.edit-fab{position:absolute;right:12px;bottom:12px;z-index:2}.edit-fab-secondary{right:56px}.tab-empty{padding:16px;color:var(--md-sys-color-on-surface-variant);font-style:italic}.high-contrast{filter:contrast(1.2)}.reduce-motion{--mat-animation-duration: 0ms}.drag-handle{display:inline-flex;align-items:center;vertical-align:middle;margin-right:4px;cursor:grab}.tab-label-icon{font-size:18px;width:18px;height:18px;margin-right:6px;vertical-align:middle}:host-context(.pdx-gridster-item) .praxis-tabs-root{display:flex;flex-direction:column;height:100%;min-height:0}:host-context(.pdx-gridster-item) .praxis-tabs-group,:host-context(.pdx-gridster-item) .mat-mdc-tab-group{flex:1 1 auto;min-height:0}:host-context(.pdx-gridster-item) .mat-mdc-tab-body-wrapper,:host-context(.pdx-gridster-item) .mat-mdc-tab-body-content{height:100%;min-height:0}:host-context(.pdx-gridster-item) .mat-mdc-tab-body-content{overflow:auto}:host-context(.pdx-gridster-item) .praxis-tabnav-content{flex:1 1 auto;min-height:0;overflow:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2_1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2_1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "directive", type: i3.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i3.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i3.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: i3.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "color", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i3.MatTabNavPanel, selector: "mat-tab-nav-panel", inputs: ["id"], exportAs: ["matTabNavPanel"] }, { kind: "component", type: i3.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["active", "disabled", "disableRipple", "tabIndex", "id"], exportAs: ["matTabLink"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i6.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i9.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i9.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i9.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: EmptyStateCardComponent, selector: "praxis-empty-state-card", inputs: ["icon", "title", "description", "primaryAction", "secondaryActions", "inline", "tone"] }, { kind: "directive", type: DynamicFieldLoaderDirective, selector: "[dynamicFieldLoader]", inputs: ["fields", "formGroup", "enableExternalControlBinding", "itemTemplate", "debugTrace", "debugTraceLabel", "readonlyMode", "disabledMode", "presentationMode", "visible", "canvasMode"], outputs: ["componentsCreated", "fieldCreated", "fieldDestroyed", "renderError", "canvasMouseEnter", "canvasMouseLeave", "canvasClick", "canvasFocus"] }, { kind: "directive", type: DynamicWidgetLoaderDirective, selector: "[dynamicWidgetLoader]", inputs: ["dynamicWidgetLoader", "ownerWidgetKey", "context", "strictValidation", "autoWireOutputs"], outputs: ["widgetEvent", "widgetDiagnostic"], exportAs: ["dynamicWidgetLoader"] }, { kind: "component", type: PraxisAiAssistantShellComponent, selector: "praxis-ai-assistant-shell", inputs: ["labels", "mode", "state", "contextItems", "attachments", "messages", "quickReplies", "recommendedIntents", "prompt", "statusText", "errorText", "testIdPrefix", "panelTestId", "submitTestId", "applyTestId", "primaryAction", "secondaryActions", "governanceActions", "busy", "canSubmit", "canApply", "submitOnEnter", "showAttachAction", "enablePastedAttachments", "enableFileAttachments", "attachmentAccept", "attachmentMultiple", "voiceInputMode", "voiceLanguage", "draggable", "resizable", "minWidth", "minHeight", "margin", "layout"], outputs: ["promptChange", "submitPrompt", "apply", "retryTurn", "cancelTurn", "shellAction", "close", "attach", "attachmentsPasted", "attachmentsSelected", "removeAttachment", "messageAction", "editMessage", "resendMessage", "quickReply", "recommendedIntent", "layoutChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4557
|
+
`, isInline: true, styles: [".praxis-tabs-root{position:relative;display:block}.praxis-tabs-group.align-start .mat-mdc-tab-header{justify-content:flex-start}.praxis-tabs-group.align-center .mat-mdc-tab-header{justify-content:center}.praxis-tabs-group.align-end .mat-mdc-tab-header{justify-content:flex-end}.praxis-tabs-group--header-only .mat-mdc-tab-body-wrapper,.praxis-tabs-nav-panel--header-only{display:none}.density-compact .mat-mdc-tab-body-content{padding:8px}.density-comfortable .mat-mdc-tab-body-content{padding:16px}.density-spacious .mat-mdc-tab-body-content{padding:24px}.tabs-ai-assistant{position:absolute;right:12px;bottom:72px;z-index:3}.tabs-ai-assistant-trigger{box-shadow:var(--md-sys-elevation-level2)}.edit-fab{position:absolute;right:12px;bottom:12px;z-index:2}.edit-fab-secondary{right:56px}.tab-empty{padding:16px;color:var(--md-sys-color-on-surface-variant);font-style:italic}.high-contrast{filter:contrast(1.2)}.reduce-motion{--mat-animation-duration: 0ms}.drag-handle{display:inline-flex;align-items:center;vertical-align:middle;margin-right:4px;cursor:grab}.tab-label-icon{font-size:18px;width:18px;height:18px;margin-right:6px;vertical-align:middle}:host-context(.pdx-gridster-item) .praxis-tabs-root{display:flex;flex-direction:column;height:100%;min-height:0}:host-context(.pdx-gridster-item) .praxis-tabs-group,:host-context(.pdx-gridster-item) .mat-mdc-tab-group{flex:1 1 auto;min-height:0}:host-context(.pdx-gridster-item) .mat-mdc-tab-body-wrapper,:host-context(.pdx-gridster-item) .mat-mdc-tab-body-content{height:100%;min-height:0}:host-context(.pdx-gridster-item) .mat-mdc-tab-body-content{overflow:auto}:host-context(.pdx-gridster-item) .praxis-tabnav-content{flex:1 1 auto;min-height:0;overflow:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2_1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2_1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "directive", type: i3.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i3.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i3.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: i3.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "color", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i3.MatTabNavPanel, selector: "mat-tab-nav-panel", inputs: ["id"], exportAs: ["matTabNavPanel"] }, { kind: "component", type: i3.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["active", "disabled", "disableRipple", "tabIndex", "id"], exportAs: ["matTabLink"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i6.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i9.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i9.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i9.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: EmptyStateCardComponent, selector: "praxis-empty-state-card", inputs: ["icon", "title", "description", "primaryAction", "secondaryActions", "inline", "tone"] }, { kind: "directive", type: DynamicFieldLoaderDirective, selector: "[dynamicFieldLoader]", inputs: ["fields", "formGroup", "enableExternalControlBinding", "itemTemplate", "debugTrace", "debugTraceLabel", "readonlyMode", "disabledMode", "presentationMode", "visible", "canvasMode"], outputs: ["componentsCreated", "fieldCreated", "fieldDestroyed", "renderError", "canvasMouseEnter", "canvasMouseLeave", "canvasClick", "canvasFocus"] }, { kind: "directive", type: DynamicWidgetLoaderDirective, selector: "[dynamicWidgetLoader]", inputs: ["dynamicWidgetLoader", "ownerWidgetKey", "context", "strictValidation", "autoWireOutputs"], outputs: ["widgetEvent", "widgetDiagnostic"], exportAs: ["dynamicWidgetLoader"] }, { kind: "component", type: PraxisAiAssistantShellComponent, selector: "praxis-ai-assistant-shell", inputs: ["labels", "mode", "state", "contextItems", "attachments", "messages", "quickReplies", "recommendedIntents", "prompt", "statusText", "errorText", "testIdPrefix", "panelTestId", "submitTestId", "applyTestId", "primaryAction", "secondaryActions", "governanceActions", "busy", "canSubmit", "canApply", "submitOnEnter", "showAttachAction", "enablePastedAttachments", "enableFileAttachments", "attachmentAccept", "attachmentMultiple", "voiceInputMode", "voiceLanguage", "draggable", "resizable", "minWidth", "minHeight", "margin", "layout"], outputs: ["promptChange", "submitPrompt", "apply", "retryTurn", "cancelTurn", "shellAction", "close", "attach", "attachmentsPasted", "attachmentsSelected", "removeAttachment", "messageAction", "editMessage", "resendMessage", "quickReply", "recommendedIntent", "layoutChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4528
4558
|
}
|
|
4529
4559
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisTabs, decorators: [{
|
|
4530
4560
|
type: Component,
|
|
@@ -4659,18 +4689,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
4659
4689
|
>
|
|
4660
4690
|
@if (config?.behavior?.reorderable) {
|
|
4661
4691
|
<span class="drag-handle" cdkDragHandle>
|
|
4662
|
-
<mat-icon fontIcon="drag_indicator"></mat-icon>
|
|
4692
|
+
<mat-icon aria-hidden="true" fontIcon="drag_indicator"></mat-icon>
|
|
4663
4693
|
</span>
|
|
4664
4694
|
}
|
|
4665
4695
|
@if (entry.link.icon) {
|
|
4666
|
-
<mat-icon class="tab-label-icon" [praxisIcon]="entry.link.icon"></mat-icon>
|
|
4696
|
+
<mat-icon aria-hidden="true" class="tab-label-icon" [praxisIcon]="entry.link.icon"></mat-icon>
|
|
4667
4697
|
}
|
|
4668
4698
|
{{ entry.link.label }}
|
|
4669
4699
|
</a>
|
|
4670
4700
|
}
|
|
4671
4701
|
</nav>
|
|
4672
|
-
<mat-tab-nav-panel
|
|
4673
|
-
|
|
4702
|
+
<mat-tab-nav-panel
|
|
4703
|
+
#tabPanel
|
|
4704
|
+
[class.praxis-tabs-nav-panel--header-only]="!shouldRenderNavBody()"
|
|
4705
|
+
>
|
|
4706
|
+
@if (shouldRenderNavBody() && currentNavIndex() >= 0) {
|
|
4674
4707
|
<div class="praxis-tabnav-content">
|
|
4675
4708
|
@if (config?.nav?.links?.[currentNavIndex()]; as l) {
|
|
4676
4709
|
@if ((l.content?.length || safeWidgetDefinitions(l.widgets).length) && navContentReady(currentNavIndex())) {
|
|
@@ -4705,6 +4738,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
4705
4738
|
</mat-tab-nav-panel>
|
|
4706
4739
|
} @else {
|
|
4707
4740
|
<mat-tab-group
|
|
4741
|
+
[class.praxis-tabs-group--header-only]="!shouldRenderGroupBody()"
|
|
4708
4742
|
[dynamicHeight]="config?.group?.dynamicHeight"
|
|
4709
4743
|
[disableRipple]="config?.group?.disableRipple"
|
|
4710
4744
|
[disablePagination]="config?.group?.disablePagination"
|
|
@@ -4736,7 +4770,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
4736
4770
|
>
|
|
4737
4771
|
<ng-template mat-tab-label>
|
|
4738
4772
|
@if (entry.tab.icon) {
|
|
4739
|
-
<mat-icon class="tab-label-icon" [praxisIcon]="entry.tab.icon"></mat-icon>
|
|
4773
|
+
<mat-icon aria-hidden="true" class="tab-label-icon" [praxisIcon]="entry.tab.icon"></mat-icon>
|
|
4740
4774
|
}
|
|
4741
4775
|
<span>{{ entry.tab.textLabel }}</span>
|
|
4742
4776
|
@if (config?.behavior?.closeable) {
|
|
@@ -4748,7 +4782,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
4748
4782
|
(keydown.space)="$event.stopPropagation()"
|
|
4749
4783
|
[attr.aria-label]="t('chrome.closeTab', 'Fechar aba')"
|
|
4750
4784
|
>
|
|
4751
|
-
<mat-icon fontIcon="close"></mat-icon>
|
|
4785
|
+
<mat-icon aria-hidden="true" fontIcon="close"></mat-icon>
|
|
4752
4786
|
</button>
|
|
4753
4787
|
}
|
|
4754
4788
|
@if (config?.behavior?.reorderable) {
|
|
@@ -4761,7 +4795,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
4761
4795
|
[disabled]="entry.index===0"
|
|
4762
4796
|
[attr.aria-label]="t('chrome.moveTabLeft', 'Mover aba para esquerda')"
|
|
4763
4797
|
>
|
|
4764
|
-
<mat-icon fontIcon="arrow_back"></mat-icon>
|
|
4798
|
+
<mat-icon aria-hidden="true" fontIcon="arrow_back"></mat-icon>
|
|
4765
4799
|
</button>
|
|
4766
4800
|
<button
|
|
4767
4801
|
mat-icon-button
|
|
@@ -4772,10 +4806,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
4772
4806
|
[disabled]="entry.index===(config?.tabs?.length||1)-1"
|
|
4773
4807
|
[attr.aria-label]="t('chrome.moveTabRight', 'Mover aba para direita')"
|
|
4774
4808
|
>
|
|
4775
|
-
<mat-icon fontIcon="arrow_forward"></mat-icon>
|
|
4809
|
+
<mat-icon aria-hidden="true" fontIcon="arrow_forward"></mat-icon>
|
|
4776
4810
|
</button>
|
|
4777
4811
|
}
|
|
4778
4812
|
</ng-template>
|
|
4813
|
+
@if (shouldRenderGroupBody()) {
|
|
4779
4814
|
@if ((entry.tab.content?.length || safeWidgetDefinitions(entry.tab.widgets).length) && groupContentReady(entry.index)) {
|
|
4780
4815
|
@if (entry.tab.content) {
|
|
4781
4816
|
<ng-container
|
|
@@ -4802,6 +4837,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
4802
4837
|
[primaryAction]="{ label: t('emptyState.openEditor', 'Abrir editor'), icon: 'tune', action: openEditor.bind(this) }"
|
|
4803
4838
|
></praxis-empty-state-card>
|
|
4804
4839
|
}
|
|
4840
|
+
}
|
|
4805
4841
|
</mat-tab>
|
|
4806
4842
|
}
|
|
4807
4843
|
</mat-tab-group>
|
|
@@ -4818,7 +4854,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
4818
4854
|
[attr.aria-label]="t('chrome.editTabs', 'Editar abas')"
|
|
4819
4855
|
(click)="openEditor()"
|
|
4820
4856
|
>
|
|
4821
|
-
<mat-icon fontIcon="edit"></mat-icon>
|
|
4857
|
+
<mat-icon aria-hidden="true" fontIcon="edit"></mat-icon>
|
|
4822
4858
|
</button>
|
|
4823
4859
|
}
|
|
4824
4860
|
@if (enableCustomization && tabsId) {
|
|
@@ -4829,11 +4865,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
4829
4865
|
(click)="resetPreferences()"
|
|
4830
4866
|
[matTooltip]="t('settings.resetPreferences', 'Redefinir preferencias de abas')"
|
|
4831
4867
|
>
|
|
4832
|
-
<mat-icon [praxisIcon]="'restart_alt'"></mat-icon>
|
|
4868
|
+
<mat-icon aria-hidden="true" [praxisIcon]="'restart_alt'"></mat-icon>
|
|
4833
4869
|
</button>
|
|
4834
4870
|
}
|
|
4835
4871
|
</div>
|
|
4836
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".praxis-tabs-root{position:relative;display:block}.praxis-tabs-group.align-start .mat-mdc-tab-header{justify-content:flex-start}.praxis-tabs-group.align-center .mat-mdc-tab-header{justify-content:center}.praxis-tabs-group.align-end .mat-mdc-tab-header{justify-content:flex-end}.density-compact .mat-mdc-tab-body-content{padding:8px}.density-comfortable .mat-mdc-tab-body-content{padding:16px}.density-spacious .mat-mdc-tab-body-content{padding:24px}.tabs-ai-assistant{position:absolute;right:12px;bottom:72px;z-index:3}.tabs-ai-assistant-trigger{box-shadow:var(--md-sys-elevation-level2)}.edit-fab{position:absolute;right:12px;bottom:12px;z-index:2}.edit-fab-secondary{right:56px}.tab-empty{padding:16px;color:var(--md-sys-color-on-surface-variant);font-style:italic}.high-contrast{filter:contrast(1.2)}.reduce-motion{--mat-animation-duration: 0ms}.drag-handle{display:inline-flex;align-items:center;vertical-align:middle;margin-right:4px;cursor:grab}.tab-label-icon{font-size:18px;width:18px;height:18px;margin-right:6px;vertical-align:middle}:host-context(.pdx-gridster-item) .praxis-tabs-root{display:flex;flex-direction:column;height:100%;min-height:0}:host-context(.pdx-gridster-item) .praxis-tabs-group,:host-context(.pdx-gridster-item) .mat-mdc-tab-group{flex:1 1 auto;min-height:0}:host-context(.pdx-gridster-item) .mat-mdc-tab-body-wrapper,:host-context(.pdx-gridster-item) .mat-mdc-tab-body-content{height:100%;min-height:0}:host-context(.pdx-gridster-item) .mat-mdc-tab-body-content{overflow:auto}:host-context(.pdx-gridster-item) .praxis-tabnav-content{flex:1 1 auto;min-height:0;overflow:auto}\n"] }]
|
|
4872
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".praxis-tabs-root{position:relative;display:block}.praxis-tabs-group.align-start .mat-mdc-tab-header{justify-content:flex-start}.praxis-tabs-group.align-center .mat-mdc-tab-header{justify-content:center}.praxis-tabs-group.align-end .mat-mdc-tab-header{justify-content:flex-end}.praxis-tabs-group--header-only .mat-mdc-tab-body-wrapper,.praxis-tabs-nav-panel--header-only{display:none}.density-compact .mat-mdc-tab-body-content{padding:8px}.density-comfortable .mat-mdc-tab-body-content{padding:16px}.density-spacious .mat-mdc-tab-body-content{padding:24px}.tabs-ai-assistant{position:absolute;right:12px;bottom:72px;z-index:3}.tabs-ai-assistant-trigger{box-shadow:var(--md-sys-elevation-level2)}.edit-fab{position:absolute;right:12px;bottom:12px;z-index:2}.edit-fab-secondary{right:56px}.tab-empty{padding:16px;color:var(--md-sys-color-on-surface-variant);font-style:italic}.high-contrast{filter:contrast(1.2)}.reduce-motion{--mat-animation-duration: 0ms}.drag-handle{display:inline-flex;align-items:center;vertical-align:middle;margin-right:4px;cursor:grab}.tab-label-icon{font-size:18px;width:18px;height:18px;margin-right:6px;vertical-align:middle}:host-context(.pdx-gridster-item) .praxis-tabs-root{display:flex;flex-direction:column;height:100%;min-height:0}:host-context(.pdx-gridster-item) .praxis-tabs-group,:host-context(.pdx-gridster-item) .mat-mdc-tab-group{flex:1 1 auto;min-height:0}:host-context(.pdx-gridster-item) .mat-mdc-tab-body-wrapper,:host-context(.pdx-gridster-item) .mat-mdc-tab-body-content{height:100%;min-height:0}:host-context(.pdx-gridster-item) .mat-mdc-tab-body-content{overflow:auto}:host-context(.pdx-gridster-item) .praxis-tabnav-content{flex:1 1 auto;min-height:0;overflow:auto}\n"] }]
|
|
4837
4873
|
}], propDecorators: { config: [{
|
|
4838
4874
|
type: Input
|
|
4839
4875
|
}], tabsId: [{
|
|
@@ -5094,7 +5130,7 @@ const PRAXIS_TABS_COMPONENT_METADATA = {
|
|
|
5094
5130
|
name: 'selectedIndex',
|
|
5095
5131
|
type: 'number',
|
|
5096
5132
|
label: 'Indice selecionado',
|
|
5097
|
-
description: 'Indice ativo de abas/nav controlavel externamente pela composicao',
|
|
5133
|
+
description: 'Indice ativo de abas/nav controlavel externamente pela composicao. Para usar tabs como header de navegacao com conteudo externo, configure group.renderBody=false ou nav.renderBody=false.',
|
|
5098
5134
|
},
|
|
5099
5135
|
{
|
|
5100
5136
|
name: 'enableCustomization',
|
|
@@ -5277,6 +5313,7 @@ const PRAXIS_TABS_AUTHORING_MANIFEST = {
|
|
|
5277
5313
|
{ kind: 'visibility', resolver: 'tab-or-link-by-id', description: 'Runtime visibility flag for a group tab or nav link.' },
|
|
5278
5314
|
{ kind: 'disabledState', resolver: 'tab-or-link-by-id', description: 'Disabled state of a tab or nav link.' },
|
|
5279
5315
|
{ kind: 'layout', resolver: 'tabs-layout-config', description: 'Group/nav mode, header position, density, stretch and behavior settings.' },
|
|
5316
|
+
{ kind: 'renderBody', resolver: 'tabs-render-body-config', description: 'Config paths group.renderBody and nav.renderBody that let the host own external body content.' },
|
|
5280
5317
|
],
|
|
5281
5318
|
operations: [
|
|
5282
5319
|
{
|
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/tabs",
|
|
3
|
-
"version": "9.0.0-beta.
|
|
3
|
+
"version": "9.0.0-beta.21",
|
|
4
4
|
"description": "Configurable tabs (group and nav) for Praxis UI with metadata-driven content and runtime editor.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^21.0.0",
|
|
7
7
|
"@angular/core": "^21.0.0",
|
|
8
8
|
"@angular/material": "^21.0.0",
|
|
9
9
|
"@angular/cdk": "^21.0.0",
|
|
10
|
-
"@praxisui/core": "^9.0.0-beta.
|
|
11
|
-
"@praxisui/dynamic-fields": "^9.0.0-beta.
|
|
12
|
-
"@praxisui/settings-panel": "^9.0.0-beta.
|
|
10
|
+
"@praxisui/core": "^9.0.0-beta.21",
|
|
11
|
+
"@praxisui/dynamic-fields": "^9.0.0-beta.21",
|
|
12
|
+
"@praxisui/settings-panel": "^9.0.0-beta.21",
|
|
13
13
|
"@angular/forms": "^21.0.0",
|
|
14
14
|
"@angular/router": "^21.0.0",
|
|
15
|
-
"@praxisui/ai": "^9.0.0-beta.
|
|
15
|
+
"@praxisui/ai": "^9.0.0-beta.21",
|
|
16
16
|
"rxjs": "~7.8.0"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
@@ -23,17 +23,11 @@
|
|
|
23
23
|
"publishConfig": {
|
|
24
24
|
"access": "public"
|
|
25
25
|
},
|
|
26
|
-
"
|
|
27
|
-
"type": "git",
|
|
28
|
-
"url": "git+https://github.com/codexrodrigues/praxis-ui-angular.git"
|
|
29
|
-
},
|
|
30
|
-
"homepage": "https://praxisui.dev",
|
|
31
|
-
"bugs": {
|
|
32
|
-
"url": "https://github.com/codexrodrigues/praxis-ui-angular/issues"
|
|
33
|
-
},
|
|
26
|
+
"homepage": "https://praxisui.dev/components/tabs",
|
|
34
27
|
"keywords": [
|
|
35
28
|
"angular",
|
|
36
29
|
"praxisui",
|
|
30
|
+
"praxis",
|
|
37
31
|
"tabs",
|
|
38
32
|
"navigation",
|
|
39
33
|
"material",
|
|
@@ -49,7 +43,10 @@
|
|
|
49
43
|
".": {
|
|
50
44
|
"types": "./types/praxisui-tabs.d.ts",
|
|
51
45
|
"default": "./fesm2022/praxisui-tabs.mjs"
|
|
46
|
+
},
|
|
47
|
+
"./ai/component-registry.json": {
|
|
48
|
+
"default": "./ai/component-registry.json"
|
|
52
49
|
}
|
|
53
50
|
},
|
|
54
51
|
"type": "module"
|
|
55
|
-
}
|
|
52
|
+
}
|
|
@@ -22,8 +22,8 @@ source_of_truth:
|
|
|
22
22
|
- "projects/praxis-tabs/src/lib/praxis-tabs.ts"
|
|
23
23
|
- "projects/praxis-tabs/src/lib/quick-setup/tabs-quick-setup.component.ts"
|
|
24
24
|
- "projects/praxis-tabs/src/lib/ai/tabs-ai-capabilities.ts"
|
|
25
|
-
source_of_truth_last_verified: "2026-
|
|
26
|
-
last_updated: "2026-
|
|
25
|
+
source_of_truth_last_verified: "2026-06-24"
|
|
26
|
+
last_updated: "2026-06-24"
|
|
27
27
|
toc: true
|
|
28
28
|
sidebar: true
|
|
29
29
|
tags:
|
|
@@ -90,9 +90,11 @@ Este documento e a referencia canonica da API JSON de praxis-tabs-config-editor.
|
|
|
90
90
|
| `accessibility.highContrast/reduceMotion` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
|
|
91
91
|
| `accessibility.ariaLabels/keyboardNavigation` | not-specified | not-specified | n/a | Declared-only | Preservado no contrato JSON, sem superficie ativa na UI. |
|
|
92
92
|
| `group.*` | not-specified | not-specified | n/a | Partial | Preservado da documentação anterior. |
|
|
93
|
+
| `group.renderBody` | boolean | no | true | Active | Quando `false`, o group mode renderiza apenas o header de abas; o conteudo ativo fica sob controle externo do host. |
|
|
93
94
|
| `tabs[]` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
|
|
94
95
|
| `tabs[].content` | not-specified | not-specified | n/a | Partial | Preservado da documentação anterior. |
|
|
95
96
|
| `nav.*` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
|
|
97
|
+
| `nav.renderBody` | boolean | no | true | Active | Quando `false`, o nav mode renderiza apenas o header de links; o conteudo ativo fica sob controle externo do host. |
|
|
96
98
|
| `nav.links[]` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
|
|
97
99
|
|
|
98
100
|
### Supported legacy paths
|
|
@@ -493,11 +495,13 @@ Risco conhecido:
|
|
|
493
495
|
| `group.disablePagination` | Active | guia Grupo |
|
|
494
496
|
| `group.disableRipple` | Active | guia Grupo |
|
|
495
497
|
| `group.preserveContent` | Active | guia Grupo |
|
|
498
|
+
| `group.renderBody` | Active | guia Grupo |
|
|
496
499
|
| `group.stretchTabs` | Active | guia Grupo |
|
|
497
500
|
| `nav.selectedIndex` | Active | guia Navegacao |
|
|
498
501
|
| `nav.animationDuration` | Active | guia Navegacao |
|
|
499
502
|
| `nav.ariaLabel` | Active | guia Navegacao |
|
|
500
503
|
| `nav.ariaLabelledby` | Active | guia Navegacao |
|
|
504
|
+
| `nav.renderBody` | Active | guia Navegacao |
|
|
501
505
|
| `nav.color` | Active | guia Navegacao |
|
|
502
506
|
| `nav.backgroundColor` | Active | guia Navegacao |
|
|
503
507
|
| `nav.fitInkBarToContent` | Active | guia Navegacao |
|
package/types/praxisui-tabs.d.ts
CHANGED
|
@@ -98,6 +98,8 @@ interface TabGroupMetadata {
|
|
|
98
98
|
fitInkBarToContent?: boolean;
|
|
99
99
|
headerPosition?: 'above' | 'below';
|
|
100
100
|
preserveContent?: boolean;
|
|
101
|
+
/** Quando false, renderiza apenas o header de abas; o conteudo fica sob controle externo do host. */
|
|
102
|
+
renderBody?: boolean;
|
|
101
103
|
selectedIndex?: number;
|
|
102
104
|
stretchTabs?: boolean;
|
|
103
105
|
backgroundColor?: 'primary' | 'accent' | 'warn' | undefined;
|
|
@@ -127,6 +129,8 @@ interface TabNavMetadata {
|
|
|
127
129
|
disablePagination?: boolean;
|
|
128
130
|
disableRipple?: boolean;
|
|
129
131
|
fitInkBarToContent?: boolean;
|
|
132
|
+
/** Quando false, renderiza apenas o header de nav; o conteudo fica sob controle externo do host. */
|
|
133
|
+
renderBody?: boolean;
|
|
130
134
|
selectedIndex?: number;
|
|
131
135
|
stretchTabs?: boolean;
|
|
132
136
|
links: TabLinkMetadata[];
|
|
@@ -276,6 +280,8 @@ declare class PraxisTabs implements OnInit, OnChanges, OnDestroy {
|
|
|
276
280
|
applyConfigFromAdapter(next: TabsMetadata): void;
|
|
277
281
|
private isLazy;
|
|
278
282
|
protected groupContentReady(index: number): boolean;
|
|
283
|
+
protected shouldRenderGroupBody(): boolean;
|
|
284
|
+
protected shouldRenderNavBody(): boolean;
|
|
279
285
|
protected navContentReady(index: number): boolean;
|
|
280
286
|
protected isEmptyGlobal(): boolean;
|
|
281
287
|
protected trackVisibleNavLink(index: number, entry: {
|