@shival99/z-ui 2.1.32 → 2.2.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/fesm2022/shival99-z-ui-components-z-accordion.mjs +41 -25
- package/fesm2022/shival99-z-ui-components-z-accordion.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs +176 -97
- package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-avatar.mjs +71 -40
- package/fesm2022/shival99-z-ui-components-z-avatar.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-breadcrumb.mjs +26 -15
- package/fesm2022/shival99-z-ui-components-z-breadcrumb.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-button-group.mjs +33 -21
- package/fesm2022/shival99-z-ui-components-z-button-group.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-button.mjs +32 -19
- package/fesm2022/shival99-z-ui-components-z-button.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-calendar.mjs +289 -172
- package/fesm2022/shival99-z-ui-components-z-calendar.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-card.mjs +34 -24
- package/fesm2022/shival99-z-ui-components-z-card.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-chat.mjs +85 -47
- package/fesm2022/shival99-z-ui-components-z-chat.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-checkbox.mjs +56 -31
- package/fesm2022/shival99-z-ui-components-z-checkbox.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-code.mjs +29 -16
- package/fesm2022/shival99-z-ui-components-z-code.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-command.mjs +34 -19
- package/fesm2022/shival99-z-ui-components-z-command.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-drawer.mjs +310 -88
- package/fesm2022/shival99-z-ui-components-z-drawer.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs +32 -18
- package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-editor.mjs +118 -62
- package/fesm2022/shival99-z-ui-components-z-editor.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-empty.mjs +31 -17
- package/fesm2022/shival99-z-ui-components-z-empty.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-filter.mjs +81 -54
- package/fesm2022/shival99-z-ui-components-z-filter.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-gallery.mjs +240 -132
- package/fesm2022/shival99-z-ui-components-z-gallery.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-icon.mjs +39 -21
- package/fesm2022/shival99-z-ui-components-z-icon.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-input.mjs +173 -95
- package/fesm2022/shival99-z-ui-components-z-input.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-kanban.mjs +88 -47
- package/fesm2022/shival99-z-ui-components-z-kanban.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-loading.mjs +31 -19
- package/fesm2022/shival99-z-ui-components-z-loading.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-marquee.mjs +42 -23
- package/fesm2022/shival99-z-ui-components-z-marquee.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-media-player.mjs +87 -45
- package/fesm2022/shival99-z-ui-components-z-media-player.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-menu.mjs +126 -67
- package/fesm2022/shival99-z-ui-components-z-menu.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-metric-card.mjs +42 -23
- package/fesm2022/shival99-z-ui-components-z-metric-card.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-modal.mjs +144 -80
- package/fesm2022/shival99-z-ui-components-z-modal.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-pagination.mjs +45 -24
- package/fesm2022/shival99-z-ui-components-z-pagination.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-popover.mjs +90 -57
- package/fesm2022/shival99-z-ui-components-z-popover.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-qrcode.mjs +51 -29
- package/fesm2022/shival99-z-ui-components-z-qrcode.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-radio.mjs +36 -20
- package/fesm2022/shival99-z-ui-components-z-radio.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-scrollarea.mjs +27 -15
- package/fesm2022/shival99-z-ui-components-z-scrollarea.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-select.mjs +239 -138
- package/fesm2022/shival99-z-ui-components-z-select.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-show-more.mjs +38 -21
- package/fesm2022/shival99-z-ui-components-z-show-more.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-skeleton-auto.mjs +42 -23
- package/fesm2022/shival99-z-ui-components-z-skeleton-auto.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-skeleton.mjs +35 -19
- package/fesm2022/shival99-z-ui-components-z-skeleton.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-steps.mjs +55 -31
- package/fesm2022/shival99-z-ui-components-z-steps.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-switch.mjs +60 -33
- package/fesm2022/shival99-z-ui-components-z-switch.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-table.mjs +10875 -0
- package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-tabs.mjs +534 -0
- package/fesm2022/shival99-z-ui-components-z-tabs.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-tags.mjs +72 -46
- package/fesm2022/shival99-z-ui-components-z-tags.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-timeline.mjs +254 -0
- package/fesm2022/shival99-z-ui-components-z-timeline.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-toast.mjs +53 -31
- package/fesm2022/shival99-z-ui-components-z-toast.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-tooltip.mjs +133 -56
- package/fesm2022/shival99-z-ui-components-z-tooltip.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-upload.mjs +63 -36
- package/fesm2022/shival99-z-ui-components-z-upload.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-i18n.mjs +2 -0
- package/fesm2022/shival99-z-ui-i18n.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-pipes.mjs +18 -18
- package/fesm2022/shival99-z-ui-services.mjs +35 -31
- package/fesm2022/shival99-z-ui-services.mjs.map +1 -1
- package/package.json +16 -16
- package/types/shival99-z-ui-components-z-autocomplete.d.ts +2 -2
- package/types/shival99-z-ui-components-z-card.d.ts +1 -2
- package/types/shival99-z-ui-components-z-drawer.d.ts +20 -2
- package/types/shival99-z-ui-components-z-gallery.d.ts +1 -2
- package/types/shival99-z-ui-components-z-select.d.ts +2 -2
- package/types/shival99-z-ui-components-z-table.d.ts +2293 -0
- package/types/shival99-z-ui-components-z-tabs.d.ts +92 -0
- package/types/shival99-z-ui-components-z-timeline.d.ts +71 -0
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { input, inject, TemplateRef, Directive, contentChildren, viewChild, viewChildren, model, output, signal, computed, effect, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
4
|
+
import { TranslatePipe } from '@ngx-translate/core';
|
|
5
|
+
import { ZButtonComponent } from '@shival99/z-ui/components/z-button';
|
|
6
|
+
import { ZIconComponent } from '@shival99/z-ui/components/z-icon';
|
|
7
|
+
import { ZPopoverDirective } from '@shival99/z-ui/components/z-popover';
|
|
8
|
+
import { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';
|
|
9
|
+
import { ZCacheService } from '@shival99/z-ui/services';
|
|
10
|
+
import { zMergeClasses } from '@shival99/z-ui/utils';
|
|
11
|
+
import { NgScrollbar } from 'ngx-scrollbar';
|
|
12
|
+
import { cva } from 'class-variance-authority';
|
|
13
|
+
|
|
14
|
+
class ZTabPanelDirective {
|
|
15
|
+
zTabPanel = input.required(/* @ts-ignore */
|
|
16
|
+
...(ngDevMode ? [{ debugName: "zTabPanel" }] : /* istanbul ignore next */ []));
|
|
17
|
+
template = inject((TemplateRef));
|
|
18
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: ZTabPanelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
19
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.2", type: ZTabPanelDirective, isStandalone: true, selector: "[z-tab-panel], [zTabPanel]", inputs: { zTabPanel: { classPropertyName: "zTabPanel", publicName: "zTabPanel", isSignal: true, isRequired: true, transformFunction: null } }, exportAs: ["zTabPanel"], ngImport: i0 });
|
|
20
|
+
}
|
|
21
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: ZTabPanelDirective, decorators: [{
|
|
22
|
+
type: Directive,
|
|
23
|
+
args: [{
|
|
24
|
+
selector: '[z-tab-panel], [zTabPanel]',
|
|
25
|
+
standalone: true,
|
|
26
|
+
exportAs: 'zTabPanel',
|
|
27
|
+
}]
|
|
28
|
+
}], propDecorators: { zTabPanel: [{ type: i0.Input, args: [{ isSignal: true, alias: "zTabPanel", required: true }] }] } });
|
|
29
|
+
|
|
30
|
+
const zTabsVariants = cva('z-tabs flex min-w-0', {
|
|
31
|
+
variants: {
|
|
32
|
+
zType: {
|
|
33
|
+
line: 'gap-0',
|
|
34
|
+
soft: 'gap-1 bg-background p-0 dark:bg-transparent',
|
|
35
|
+
segment: 'gap-1 rounded-lg bg-muted/60 p-1 dark:bg-muted/35',
|
|
36
|
+
'segment-solid': 'gap-1 rounded-lg bg-muted/60 p-1 dark:bg-muted/35',
|
|
37
|
+
folder: 'isolate gap-0 bg-background p-0 dark:bg-transparent',
|
|
38
|
+
'folder-soft': 'isolate gap-0 bg-background p-0 dark:bg-transparent',
|
|
39
|
+
'folder-solid': 'isolate gap-0 bg-background p-0 dark:bg-transparent',
|
|
40
|
+
underline: 'gap-0',
|
|
41
|
+
underlined: 'gap-0 rounded-none bg-background p-0 dark:bg-transparent',
|
|
42
|
+
badge: 'gap-0 rounded-none bg-background p-0 dark:bg-transparent',
|
|
43
|
+
sharp: 'gap-1 rounded-none bg-background p-0 dark:bg-transparent',
|
|
44
|
+
'sharp-line': 'gap-0 rounded-none bg-background p-0 dark:bg-transparent',
|
|
45
|
+
'sharp-line-filled': 'gap-0 rounded-none bg-background p-0 dark:bg-transparent',
|
|
46
|
+
'vertical-sharp': 'gap-1 rounded-none bg-background p-0 dark:bg-transparent',
|
|
47
|
+
'code-line': 'h-10 w-full justify-start gap-0 rounded-none bg-background p-0 dark:bg-transparent',
|
|
48
|
+
},
|
|
49
|
+
zOrientation: {
|
|
50
|
+
horizontal: 'w-max flex-row items-center',
|
|
51
|
+
vertical: 'w-full flex-col items-stretch gap-1 border-b-0',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
defaultVariants: {
|
|
55
|
+
zType: 'line',
|
|
56
|
+
zOrientation: 'horizontal',
|
|
57
|
+
},
|
|
58
|
+
compoundVariants: [
|
|
59
|
+
{
|
|
60
|
+
zType: 'vertical-sharp',
|
|
61
|
+
zOrientation: 'vertical',
|
|
62
|
+
class: 'border-r-0 pr-0',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
zType: 'sharp-line',
|
|
66
|
+
zOrientation: 'vertical',
|
|
67
|
+
class: 'gap-0',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
zType: 'sharp-line-filled',
|
|
71
|
+
zOrientation: 'vertical',
|
|
72
|
+
class: 'gap-0',
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
});
|
|
76
|
+
const zTabItemVariants = cva('z-tab-item relative inline-flex min-h-10 select-none items-center justify-center gap-2 whitespace-nowrap font-medium text-sm leading-none text-muted-foreground transition-[color,background-color,border-color,box-shadow,transform] duration-200 outline-none focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0 cursor-pointer disabled:opacity-45 disabled:cursor-not-allowed', {
|
|
77
|
+
variants: {
|
|
78
|
+
zType: {
|
|
79
|
+
line: 'rounded-none border-0 hover:text-foreground data-[active=true]:text-primary after:pointer-events-none after:absolute after:inset-x-0 after:bottom-[-1px] after:h-1 after:bg-primary after:origin-center after:scale-x-0 after:transition-transform after:duration-200 data-[active=true]:after:scale-x-100',
|
|
80
|
+
soft: 'rounded-md border-0 text-muted-foreground hover:text-foreground data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:shadow-xs! dark:data-[active=true]:bg-primary/15',
|
|
81
|
+
segment: 'rounded-md border border-transparent! text-muted-foreground hover:text-foreground data-[active=true]:bg-background data-[active=true]:text-primary data-[active=true]:shadow-sm dark:data-[active=true]:border-border!',
|
|
82
|
+
'segment-solid': 'rounded-md border-0 text-muted-foreground hover:text-foreground data-[active=true]:bg-primary data-[active=true]:text-primary-foreground data-[active=true]:shadow-sm',
|
|
83
|
+
folder: 'rounded-t-md border-0 bg-transparent text-muted-foreground shadow-[inset_0_-1px_0_var(--border)] hover:text-foreground focus-visible:ring-0 focus-visible:ring-offset-0 data-[active=true]:z-[2] data-[active=true]:bg-background data-[active=true]:text-primary data-[active=true]:shadow-[inset_1px_0_0_var(--border),inset_-1px_0_0_var(--border),inset_0_1px_0_var(--border)]',
|
|
84
|
+
'folder-soft': 'rounded-t-md border-0 bg-transparent text-muted-foreground shadow-[inset_0_-1px_0_var(--border)] hover:text-foreground focus-visible:ring-0 focus-visible:ring-offset-0 data-[active=true]:z-[2] data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:shadow-[inset_1px_0_0_var(--border),inset_-1px_0_0_var(--border),inset_0_1px_0_var(--border)] dark:data-[active=true]:bg-primary/15',
|
|
85
|
+
'folder-solid': 'rounded-t-md border-0 bg-transparent text-muted-foreground shadow-[inset_0_-1px_0_var(--border)] hover:text-foreground focus-visible:ring-0 focus-visible:ring-offset-0 data-[active=true]:z-[2] data-[active=true]:bg-primary data-[active=true]:text-primary-foreground data-[active=true]:shadow-[inset_1px_0_0_var(--primary),inset_-1px_0_0_var(--primary),inset_0_1px_0_var(--primary)]',
|
|
86
|
+
underline: 'hover:text-foreground data-[active=true]:text-primary after:pointer-events-none after:absolute after:inset-x-1 after:bottom-[-1px] after:h-[0.1875rem] after:bg-primary after:origin-center after:scale-x-0 after:transition-transform after:duration-200 data-[active=true]:after:scale-x-100',
|
|
87
|
+
underlined: 'rounded-none border-0 border-b-2 border-b-transparent! bg-background text-foreground/60 hover:text-foreground data-[active=true]:border-b-primary! data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:shadow-sm!',
|
|
88
|
+
badge: 'rounded-none border-0 border-b-2 border-b-transparent! bg-background text-foreground/60 hover:text-foreground data-[active=true]:border-b-primary! data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:shadow-none',
|
|
89
|
+
sharp: 'rounded-none border border-border/45 border-b-[3px] bg-background text-foreground/60 hover:text-foreground data-[active=true]:border-primary! data-[active=true]:border-b-primary! data-[active=true]:text-primary',
|
|
90
|
+
'sharp-line': 'rounded-none border border-border/45 border-b-[3px] bg-background text-foreground/60 hover:text-foreground data-[active=true]:border-primary! data-[active=true]:border-b-primary! data-[active=true]:text-primary',
|
|
91
|
+
'sharp-line-filled': 'rounded-none border border-border/45 border-b-[3px] bg-background text-foreground/60 hover:text-foreground data-[active=true]:border-primary! data-[active=true]:border-b-primary! data-[active=true]:bg-primary/30 data-[active=true]:text-primary',
|
|
92
|
+
'vertical-sharp': 'rounded-none border border-transparent border-b-[3px] bg-background text-foreground/60 hover:text-foreground data-[active=true]:border-primary data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:shadow-none',
|
|
93
|
+
'code-line': 'relative inline-flex h-full min-h-8 flex-1 items-center justify-center gap-1.5 whitespace-nowrap rounded-none border border-border/45 border-b-2 bg-background px-4 py-1.5 font-medium text-foreground/60 transition-all hover:text-foreground data-[active=true]:relative data-[active=true]:z-[1] data-[active=true]:-mb-px data-[active=true]:border-x-primary/70! data-[active=true]:border-t-primary/70! data-[active=true]:border-b-primary! data-[active=true]:bg-primary/30 data-[active=true]:text-primary data-[active=true]:shadow-none [&_span.z-tab-item-label]:font-mono [&_span.z-tab-item-label]:text-[13px]',
|
|
94
|
+
},
|
|
95
|
+
zSize: {
|
|
96
|
+
xs: 'min-h-8 px-2.5 py-1 text-xs',
|
|
97
|
+
sm: 'min-h-9 px-3 py-1.5 text-sm',
|
|
98
|
+
default: 'min-h-10 px-4 py-2 text-sm',
|
|
99
|
+
lg: 'min-h-[2.625rem] px-4.5 py-2.25 text-sm',
|
|
100
|
+
},
|
|
101
|
+
zOrientation: {
|
|
102
|
+
horizontal: '',
|
|
103
|
+
vertical: 'justify-start px-3 py-2',
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
compoundVariants: [
|
|
107
|
+
{
|
|
108
|
+
zType: 'line',
|
|
109
|
+
zOrientation: 'vertical',
|
|
110
|
+
class: 'w-full justify-start rounded-sm data-[active=true]:shadow-xs',
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
zType: 'soft',
|
|
114
|
+
zOrientation: 'vertical',
|
|
115
|
+
class: 'w-full justify-start rounded-md data-[active=true]:bg-primary/10 data-[active=true]:shadow-xs dark:data-[active=true]:bg-primary/15',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
zType: 'segment',
|
|
119
|
+
zOrientation: 'vertical',
|
|
120
|
+
class: 'w-full justify-start rounded-md data-[active=true]:bg-background data-[active=true]:shadow-xs dark:data-[active=true]:border-border!',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
zType: 'segment-solid',
|
|
124
|
+
zOrientation: 'vertical',
|
|
125
|
+
class: 'w-full justify-start rounded-md data-[active=true]:bg-primary data-[active=true]:text-primary-foreground data-[active=true]:shadow-xs',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
zType: 'folder',
|
|
129
|
+
zOrientation: 'vertical',
|
|
130
|
+
class: 'w-full justify-start rounded-sm data-[active=true]:shadow-xs',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
zType: 'folder-soft',
|
|
134
|
+
zOrientation: 'vertical',
|
|
135
|
+
class: 'w-full justify-start rounded-sm data-[active=true]:shadow-xs',
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
zType: 'folder-solid',
|
|
139
|
+
zOrientation: 'vertical',
|
|
140
|
+
class: 'w-full justify-start rounded-sm data-[active=true]:shadow-xs',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
zType: 'underline',
|
|
144
|
+
zOrientation: 'vertical',
|
|
145
|
+
class: 'w-full justify-start rounded-sm data-[active=true]:shadow-xs',
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
zType: 'underlined',
|
|
149
|
+
zOrientation: 'vertical',
|
|
150
|
+
class: 'w-full justify-start rounded-none data-[active=true]:shadow-xs',
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
zType: 'badge',
|
|
154
|
+
zOrientation: 'vertical',
|
|
155
|
+
class: 'w-full justify-start rounded-none data-[active=true]:shadow-xs',
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
zType: 'sharp',
|
|
159
|
+
zOrientation: 'vertical',
|
|
160
|
+
class: 'w-full justify-start rounded-none data-[active=true]:shadow-xs',
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
zType: 'sharp-line',
|
|
164
|
+
zOrientation: 'vertical',
|
|
165
|
+
class: 'w-full justify-start rounded-none data-[active=true]:shadow-xs',
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
zType: 'sharp-line-filled',
|
|
169
|
+
zOrientation: 'vertical',
|
|
170
|
+
class: 'w-full justify-start rounded-none data-[active=true]:shadow-xs',
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
zType: 'vertical-sharp',
|
|
174
|
+
zOrientation: 'vertical',
|
|
175
|
+
class: 'w-full justify-start rounded-none border border-transparent border-b-[3px] px-3 py-1.5 data-[active=true]:border-primary data-[active=true]:shadow-xs',
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
zType: 'code-line',
|
|
179
|
+
zSize: 'xs',
|
|
180
|
+
zOrientation: 'horizontal',
|
|
181
|
+
class: 'min-h-7 px-3 py-1 text-xs [&_span.z-tab-item-label]:text-xs',
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
zType: 'code-line',
|
|
185
|
+
zSize: 'sm',
|
|
186
|
+
zOrientation: 'horizontal',
|
|
187
|
+
class: 'min-h-8 px-3.5 py-1.5 text-sm',
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
zType: 'code-line',
|
|
191
|
+
zSize: 'default',
|
|
192
|
+
zOrientation: 'horizontal',
|
|
193
|
+
class: 'min-h-8 px-4 py-1.5 text-sm',
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
zType: 'code-line',
|
|
197
|
+
zSize: 'lg',
|
|
198
|
+
zOrientation: 'horizontal',
|
|
199
|
+
class: 'min-h-9 px-4.5 py-2 text-sm',
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
zType: 'code-line',
|
|
203
|
+
zOrientation: 'vertical',
|
|
204
|
+
class: 'h-auto w-full flex-none justify-start rounded-none px-3 py-2 data-[active=true]:shadow-xs',
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
defaultVariants: {
|
|
208
|
+
zType: 'line',
|
|
209
|
+
zSize: 'default',
|
|
210
|
+
zOrientation: 'horizontal',
|
|
211
|
+
},
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
let zTabsInstanceId = 0;
|
|
215
|
+
const Z_TABS_SCROLL_TOLERANCE = 4;
|
|
216
|
+
class ZTabsComponent {
|
|
217
|
+
tabPanels = contentChildren(ZTabPanelDirective, /* @ts-ignore */
|
|
218
|
+
...(ngDevMode ? [{ debugName: "tabPanels" }] : /* istanbul ignore next */ []));
|
|
219
|
+
tabsListContainer = viewChild('tabsListContainer', /* @ts-ignore */
|
|
220
|
+
...(ngDevMode ? [{ debugName: "tabsListContainer" }] : /* istanbul ignore next */ []));
|
|
221
|
+
tabButtons = viewChildren('tabButton', /* @ts-ignore */
|
|
222
|
+
...(ngDevMode ? [{ debugName: "tabButtons" }] : /* istanbul ignore next */ []));
|
|
223
|
+
class = input('', /* @ts-ignore */
|
|
224
|
+
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
225
|
+
zTabs = input.required(/* @ts-ignore */
|
|
226
|
+
...(ngDevMode ? [{ debugName: "zTabs" }] : /* istanbul ignore next */ []));
|
|
227
|
+
zType = input('line', /* @ts-ignore */
|
|
228
|
+
...(ngDevMode ? [{ debugName: "zType" }] : /* istanbul ignore next */ []));
|
|
229
|
+
zSize = input('default', /* @ts-ignore */
|
|
230
|
+
...(ngDevMode ? [{ debugName: "zSize" }] : /* istanbul ignore next */ []));
|
|
231
|
+
zOrientation = input('horizontal', /* @ts-ignore */
|
|
232
|
+
...(ngDevMode ? [{ debugName: "zOrientation" }] : /* istanbul ignore next */ []));
|
|
233
|
+
zContentFit = input('none', /* @ts-ignore */
|
|
234
|
+
...(ngDevMode ? [{ debugName: "zContentFit" }] : /* istanbul ignore next */ []));
|
|
235
|
+
zLazy = input(false, /* @ts-ignore */
|
|
236
|
+
...(ngDevMode ? [{ debugName: "zLazy" }] : /* istanbul ignore next */ []));
|
|
237
|
+
zDestroyInactive = input(false, /* @ts-ignore */
|
|
238
|
+
...(ngDevMode ? [{ debugName: "zDestroyInactive" }] : /* istanbul ignore next */ []));
|
|
239
|
+
zTabsOnly = input(false, /* @ts-ignore */
|
|
240
|
+
...(ngDevMode ? [{ debugName: "zTabsOnly" }] : /* istanbul ignore next */ []));
|
|
241
|
+
zShowContentWrapper = input(true, /* @ts-ignore */
|
|
242
|
+
...(ngDevMode ? [{ debugName: "zShowContentWrapper" }] : /* istanbul ignore next */ []));
|
|
243
|
+
zReloadable = input(true, /* @ts-ignore */
|
|
244
|
+
...(ngDevMode ? [{ debugName: "zReloadable" }] : /* istanbul ignore next */ []));
|
|
245
|
+
zEmitOnActiveClick = input(true, /* @ts-ignore */
|
|
246
|
+
...(ngDevMode ? [{ debugName: "zEmitOnActiveClick" }] : /* istanbul ignore next */ []));
|
|
247
|
+
zCache = input(true, /* @ts-ignore */
|
|
248
|
+
...(ngDevMode ? [{ debugName: "zCache" }] : /* istanbul ignore next */ []));
|
|
249
|
+
zCacheKey = input('', /* @ts-ignore */
|
|
250
|
+
...(ngDevMode ? [{ debugName: "zCacheKey" }] : /* istanbul ignore next */ []));
|
|
251
|
+
activeTab = model('', /* @ts-ignore */
|
|
252
|
+
...(ngDevMode ? [{ debugName: "activeTab" }] : /* istanbul ignore next */ []));
|
|
253
|
+
zTabChange = output();
|
|
254
|
+
loadedTabs = signal(new Set(), /* @ts-ignore */
|
|
255
|
+
...(ngDevMode ? [{ debugName: "loadedTabs" }] : /* istanbul ignore next */ []));
|
|
256
|
+
canScrollLeft = signal(false, /* @ts-ignore */
|
|
257
|
+
...(ngDevMode ? [{ debugName: "canScrollLeft" }] : /* istanbul ignore next */ []));
|
|
258
|
+
canScrollRight = signal(false, /* @ts-ignore */
|
|
259
|
+
...(ngDevMode ? [{ debugName: "canScrollRight" }] : /* istanbul ignore next */ []));
|
|
260
|
+
panelRenderStates = computed(() => new Map(this.tabPanels().map(panel => {
|
|
261
|
+
const tabValue = panel.zTabPanel();
|
|
262
|
+
if (this.zDestroyInactive()) {
|
|
263
|
+
return [tabValue, this.activeTab() === tabValue];
|
|
264
|
+
}
|
|
265
|
+
if (!this.zLazy()) {
|
|
266
|
+
return [tabValue, true];
|
|
267
|
+
}
|
|
268
|
+
return [tabValue, this.loadedTabs().has(tabValue) || this.activeTab() === tabValue];
|
|
269
|
+
})), /* @ts-ignore */
|
|
270
|
+
...(ngDevMode ? [{ debugName: "panelRenderStates" }] : /* istanbul ignore next */ []));
|
|
271
|
+
_resizeObserver;
|
|
272
|
+
_cacheInstanceId = ++zTabsInstanceId;
|
|
273
|
+
constructor() {
|
|
274
|
+
effect(() => {
|
|
275
|
+
this.zTabs();
|
|
276
|
+
requestAnimationFrame(() => this.checkScroll());
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
ngOnInit() {
|
|
280
|
+
this._restoreActiveTabFromCache();
|
|
281
|
+
}
|
|
282
|
+
ngAfterViewInit() {
|
|
283
|
+
this.checkScroll();
|
|
284
|
+
this._setupResizeObserver();
|
|
285
|
+
}
|
|
286
|
+
ngOnDestroy() {
|
|
287
|
+
this._resizeObserver?.disconnect();
|
|
288
|
+
}
|
|
289
|
+
tabsClasses = computed(() => zMergeClasses(zTabsVariants({
|
|
290
|
+
zType: this.zType(),
|
|
291
|
+
zOrientation: this.zOrientation(),
|
|
292
|
+
}), this.class()), /* @ts-ignore */
|
|
293
|
+
...(ngDevMode ? [{ debugName: "tabsClasses" }] : /* istanbul ignore next */ []));
|
|
294
|
+
contentWrapperFramed = computed(() => {
|
|
295
|
+
if (!this.zShowContentWrapper()) {
|
|
296
|
+
return false;
|
|
297
|
+
}
|
|
298
|
+
if (this.zOrientation() === 'vertical') {
|
|
299
|
+
return false;
|
|
300
|
+
}
|
|
301
|
+
const type = this.zType();
|
|
302
|
+
return (type === 'folder' ||
|
|
303
|
+
type === 'folder-soft' ||
|
|
304
|
+
type === 'folder-solid' ||
|
|
305
|
+
type === 'sharp' ||
|
|
306
|
+
type === 'sharp-line' ||
|
|
307
|
+
type === 'sharp-line-filled' ||
|
|
308
|
+
type === 'code-line');
|
|
309
|
+
}, /* @ts-ignore */
|
|
310
|
+
...(ngDevMode ? [{ debugName: "contentWrapperFramed" }] : /* istanbul ignore next */ []));
|
|
311
|
+
tabsListHasBottomPadding = computed(() => {
|
|
312
|
+
if (this.zOrientation() !== 'horizontal') {
|
|
313
|
+
return false;
|
|
314
|
+
}
|
|
315
|
+
const type = this.zType();
|
|
316
|
+
return (type !== 'folder' &&
|
|
317
|
+
type !== 'folder-soft' &&
|
|
318
|
+
type !== 'folder-solid' &&
|
|
319
|
+
type !== 'segment' &&
|
|
320
|
+
type !== 'segment-solid' &&
|
|
321
|
+
type !== 'sharp' &&
|
|
322
|
+
type !== 'sharp-line' &&
|
|
323
|
+
type !== 'sharp-line-filled' &&
|
|
324
|
+
type !== 'code-line');
|
|
325
|
+
}, /* @ts-ignore */
|
|
326
|
+
...(ngDevMode ? [{ debugName: "tabsListHasBottomPadding" }] : /* istanbul ignore next */ []));
|
|
327
|
+
verticalTabsScrollable = computed(() => this.zOrientation() === 'vertical' && this.zTabs().length > 8, /* @ts-ignore */
|
|
328
|
+
...(ngDevMode ? [{ debugName: "verticalTabsScrollable" }] : /* istanbul ignore next */ []));
|
|
329
|
+
getTabItemClasses(_tab) {
|
|
330
|
+
return zMergeClasses(zTabItemVariants({
|
|
331
|
+
zType: this.zType(),
|
|
332
|
+
zSize: this.zSize(),
|
|
333
|
+
zOrientation: this.zOrientation(),
|
|
334
|
+
}));
|
|
335
|
+
}
|
|
336
|
+
selectTab(tab, scrollToView = false) {
|
|
337
|
+
if (tab.disabled) {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
const isAlreadyActive = this.activeTab() === tab.value;
|
|
341
|
+
if (isAlreadyActive && !this.zReloadable()) {
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
this.activeTab.set(tab.value);
|
|
345
|
+
this._saveActiveTabToCache(tab.value);
|
|
346
|
+
if (!isAlreadyActive || this.zEmitOnActiveClick()) {
|
|
347
|
+
this.zTabChange.emit(tab.value);
|
|
348
|
+
}
|
|
349
|
+
if (this.zLazy()) {
|
|
350
|
+
this.loadedTabs.update(tabs => {
|
|
351
|
+
const newTabs = new Set(tabs);
|
|
352
|
+
newTabs.add(tab.value);
|
|
353
|
+
return newTabs;
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
if (scrollToView && this.zOrientation() === 'horizontal') {
|
|
357
|
+
requestAnimationFrame(() => {
|
|
358
|
+
const tabIndex = this.zTabs().findIndex(t => t.value === tab.value);
|
|
359
|
+
const tabButtonsList = this.tabButtons();
|
|
360
|
+
const tabButton = tabButtonsList[tabIndex];
|
|
361
|
+
if (tabButton) {
|
|
362
|
+
tabButton.nativeElement.scrollIntoView({
|
|
363
|
+
behavior: 'smooth',
|
|
364
|
+
block: 'nearest',
|
|
365
|
+
inline: 'center',
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
isTabActive(tab) {
|
|
372
|
+
return this.activeTab() === tab.value;
|
|
373
|
+
}
|
|
374
|
+
onTabKeydown(event, currentIndex) {
|
|
375
|
+
const tabs = this.zTabs().filter(t => !t.disabled);
|
|
376
|
+
const currentTab = tabs[currentIndex];
|
|
377
|
+
if (!currentTab) {
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
const isHorizontal = this.zOrientation() === 'horizontal';
|
|
381
|
+
const nextKey = isHorizontal ? 'ArrowRight' : 'ArrowDown';
|
|
382
|
+
const prevKey = isHorizontal ? 'ArrowLeft' : 'ArrowUp';
|
|
383
|
+
if (event.key === nextKey) {
|
|
384
|
+
event.preventDefault();
|
|
385
|
+
const nextIndex = (currentIndex + 1) % tabs.length;
|
|
386
|
+
this.selectTab(tabs[nextIndex]);
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
if (event.key === prevKey) {
|
|
390
|
+
event.preventDefault();
|
|
391
|
+
const prevIndex = (currentIndex - 1 + tabs.length) % tabs.length;
|
|
392
|
+
this.selectTab(tabs[prevIndex]);
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
if (event.key === 'Home') {
|
|
396
|
+
event.preventDefault();
|
|
397
|
+
this.selectTab(tabs[0]);
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
400
|
+
if (event.key === 'End') {
|
|
401
|
+
event.preventDefault();
|
|
402
|
+
this.selectTab(tabs[tabs.length - 1]);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
checkScroll() {
|
|
406
|
+
const container = this.tabsListContainer()?.nativeElement;
|
|
407
|
+
if (!container || this.zOrientation() !== 'horizontal') {
|
|
408
|
+
this.canScrollLeft.set(false);
|
|
409
|
+
this.canScrollRight.set(false);
|
|
410
|
+
return;
|
|
411
|
+
}
|
|
412
|
+
const { scrollLeft, scrollWidth, clientWidth } = container;
|
|
413
|
+
const maxScrollLeft = scrollWidth - clientWidth;
|
|
414
|
+
if (maxScrollLeft <= Z_TABS_SCROLL_TOLERANCE) {
|
|
415
|
+
container.scrollLeft = 0;
|
|
416
|
+
this.canScrollLeft.set(false);
|
|
417
|
+
this.canScrollRight.set(false);
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
this.canScrollLeft.set(scrollLeft > Z_TABS_SCROLL_TOLERANCE);
|
|
421
|
+
this.canScrollRight.set(maxScrollLeft - scrollLeft > Z_TABS_SCROLL_TOLERANCE);
|
|
422
|
+
}
|
|
423
|
+
scrollLeft() {
|
|
424
|
+
const container = this.tabsListContainer()?.nativeElement;
|
|
425
|
+
if (!container) {
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
container.scrollBy({ left: -200, behavior: 'smooth' });
|
|
429
|
+
setTimeout(() => this.checkScroll(), 300);
|
|
430
|
+
}
|
|
431
|
+
scrollRight() {
|
|
432
|
+
const container = this.tabsListContainer()?.nativeElement;
|
|
433
|
+
if (!container) {
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
container.scrollBy({ left: 200, behavior: 'smooth' });
|
|
437
|
+
setTimeout(() => this.checkScroll(), 300);
|
|
438
|
+
}
|
|
439
|
+
onTabsScroll() {
|
|
440
|
+
this.checkScroll();
|
|
441
|
+
}
|
|
442
|
+
_setupResizeObserver() {
|
|
443
|
+
const container = this.tabsListContainer()?.nativeElement;
|
|
444
|
+
if (!container) {
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
this._resizeObserver = new ResizeObserver(() => {
|
|
448
|
+
this.checkScroll();
|
|
449
|
+
});
|
|
450
|
+
this._resizeObserver.observe(container);
|
|
451
|
+
}
|
|
452
|
+
_restoreActiveTabFromCache() {
|
|
453
|
+
if (!this.zCache()) {
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
const cacheKey = this._getCacheKey();
|
|
457
|
+
const cachedTab = ZCacheService.get(cacheKey);
|
|
458
|
+
if (!cachedTab) {
|
|
459
|
+
return;
|
|
460
|
+
}
|
|
461
|
+
const tab = this.zTabs().find(item => item.value === cachedTab && !item.disabled);
|
|
462
|
+
if (!tab) {
|
|
463
|
+
return;
|
|
464
|
+
}
|
|
465
|
+
this.activeTab.set(tab.value);
|
|
466
|
+
if (this.zLazy()) {
|
|
467
|
+
this.loadedTabs.update(tabs => {
|
|
468
|
+
const newTabs = new Set(tabs);
|
|
469
|
+
newTabs.add(tab.value);
|
|
470
|
+
return newTabs;
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
_saveActiveTabToCache(value) {
|
|
475
|
+
if (!this.zCache()) {
|
|
476
|
+
return;
|
|
477
|
+
}
|
|
478
|
+
ZCacheService.set(this._getCacheKey(), value);
|
|
479
|
+
}
|
|
480
|
+
_getCacheKey() {
|
|
481
|
+
const customKey = this.zCacheKey().trim();
|
|
482
|
+
if (customKey) {
|
|
483
|
+
return customKey;
|
|
484
|
+
}
|
|
485
|
+
const path = typeof window === 'undefined' ? 'ssr' : window.location.pathname;
|
|
486
|
+
return `z-tabs:${path}:${this._cacheInstanceId}`;
|
|
487
|
+
}
|
|
488
|
+
scrollToActiveDropdownItem() {
|
|
489
|
+
setTimeout(() => {
|
|
490
|
+
const activeIndex = this.zTabs().findIndex(tab => tab.value === this.activeTab());
|
|
491
|
+
if (activeIndex === -1) {
|
|
492
|
+
return;
|
|
493
|
+
}
|
|
494
|
+
const dropdownMenu = document.querySelector('.z-tabs-dropdown-menu');
|
|
495
|
+
if (!dropdownMenu) {
|
|
496
|
+
return;
|
|
497
|
+
}
|
|
498
|
+
const dropdownItems = Array.from(dropdownMenu.querySelectorAll('button'));
|
|
499
|
+
const activeItem = dropdownItems[activeIndex];
|
|
500
|
+
if (activeItem && dropdownMenu) {
|
|
501
|
+
const menuRect = dropdownMenu.getBoundingClientRect();
|
|
502
|
+
const itemRect = activeItem.getBoundingClientRect();
|
|
503
|
+
const scrollTop = activeItem.offsetTop - menuRect.height / 2 + itemRect.height / 2;
|
|
504
|
+
dropdownMenu.scrollTo({
|
|
505
|
+
top: scrollTop,
|
|
506
|
+
behavior: 'smooth',
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
}, 150);
|
|
510
|
+
}
|
|
511
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: ZTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
512
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: ZTabsComponent, isStandalone: true, selector: "z-tabs", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, zTabs: { classPropertyName: "zTabs", publicName: "zTabs", isSignal: true, isRequired: true, transformFunction: null }, zType: { classPropertyName: "zType", publicName: "zType", isSignal: true, isRequired: false, transformFunction: null }, zSize: { classPropertyName: "zSize", publicName: "zSize", isSignal: true, isRequired: false, transformFunction: null }, zOrientation: { classPropertyName: "zOrientation", publicName: "zOrientation", isSignal: true, isRequired: false, transformFunction: null }, zContentFit: { classPropertyName: "zContentFit", publicName: "zContentFit", isSignal: true, isRequired: false, transformFunction: null }, zLazy: { classPropertyName: "zLazy", publicName: "zLazy", isSignal: true, isRequired: false, transformFunction: null }, zDestroyInactive: { classPropertyName: "zDestroyInactive", publicName: "zDestroyInactive", isSignal: true, isRequired: false, transformFunction: null }, zTabsOnly: { classPropertyName: "zTabsOnly", publicName: "zTabsOnly", isSignal: true, isRequired: false, transformFunction: null }, zShowContentWrapper: { classPropertyName: "zShowContentWrapper", publicName: "zShowContentWrapper", isSignal: true, isRequired: false, transformFunction: null }, zReloadable: { classPropertyName: "zReloadable", publicName: "zReloadable", isSignal: true, isRequired: false, transformFunction: null }, zEmitOnActiveClick: { classPropertyName: "zEmitOnActiveClick", publicName: "zEmitOnActiveClick", isSignal: true, isRequired: false, transformFunction: null }, zCache: { classPropertyName: "zCache", publicName: "zCache", isSignal: true, isRequired: false, transformFunction: null }, zCacheKey: { classPropertyName: "zCacheKey", publicName: "zCacheKey", isSignal: true, isRequired: false, transformFunction: null }, activeTab: { classPropertyName: "activeTab", publicName: "activeTab", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeTab: "activeTabChange", zTabChange: "zTabChange" }, host: { classAttribute: "z-tabs-wrapper block" }, queries: [{ propertyName: "tabPanels", predicate: ZTabPanelDirective, isSignal: true }], viewQueries: [{ propertyName: "tabsListContainer", first: true, predicate: ["tabsListContainer"], descendants: true, isSignal: true }, { propertyName: "tabButtons", predicate: ["tabButton"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"z-tabs-container flex gap-1\"\n [attr.data-type]=\"zType()\"\n [attr.data-orientation]=\"zOrientation()\"\n [attr.data-content-fit]=\"zContentFit()\"\n [class.flex-col]=\"!zTabsOnly()\"\n [class.flex-row]=\"zOrientation() === 'vertical'\"\n [class.gap-4]=\"zOrientation() === 'vertical'\">\n <!-- Tabs Navigation (Left/Scroll/Tabs/Right/Dropdown) -->\n <div\n class=\"z-tabs-nav flex items-center gap-1.5\"\n [class.w-full]=\"zOrientation() === 'horizontal'\"\n [class.w-auto]=\"zOrientation() === 'vertical'\"\n [class.shrink-0]=\"zOrientation() === 'vertical'\">\n <!-- Scroll Left Button -->\n @if (canScrollLeft() && zOrientation() === 'horizontal') {\n <z-button\n zType=\"ghost\"\n zSize=\"sm\"\n zIconOnly=\"true\"\n [zWave]=\"false\"\n class=\"z-tabs-nav-control shrink-0\"\n (click)=\"scrollLeft()\"\n aria-label=\"Scroll left\">\n <z-icon zType=\"lucideChevronLeft\" zSize=\"16\" />\n </z-button>\n }\n\n <!-- Tabs List Container with Scroll + Fade -->\n <div class=\"z-tabs-scroll-container relative min-w-0 flex-1\" [attr.data-type]=\"zType()\">\n @if (zOrientation() === 'vertical') {\n <ng-scrollbar\n class=\"z-tabs-scroll-wrapper z-tabs-scrollbar vertical\"\n [class.z-tabs-scroll-wrapper-limited]=\"verticalTabsScrollable()\"\n track=\"vertical\"\n orientation=\"vertical\"\n appearance=\"compact\"\n visibility=\"hover\">\n <ng-container *ngTemplateOutlet=\"tabsListTpl\" />\n </ng-scrollbar>\n } @else {\n <div\n #tabsListContainer\n class=\"z-tabs-scroll-wrapper\"\n [class.z-tabs-scroll-wrapper-scrollable]=\"canScrollLeft() || canScrollRight()\"\n (scroll)=\"onTabsScroll()\">\n <ng-container *ngTemplateOutlet=\"tabsListTpl\" />\n </div>\n }\n\n <!-- Fade overlays (outside scroll container) -->\n @if (canScrollLeft() && zOrientation() === 'horizontal') {\n <div class=\"z-tabs-fade-left\"></div>\n }\n @if (canScrollRight() && zOrientation() === 'horizontal') {\n <div class=\"z-tabs-fade-right\"></div>\n }\n </div>\n\n <!-- Scroll Right Button -->\n @if (canScrollRight() && zOrientation() === 'horizontal') {\n <z-button\n zType=\"ghost\"\n zSize=\"sm\"\n zIconOnly=\"true\"\n class=\"z-tabs-nav-control shrink-0\"\n (click)=\"scrollRight()\"\n [zWave]=\"false\"\n aria-label=\"Scroll right\">\n <z-icon zType=\"lucideChevronRight\" zSize=\"16\" />\n </z-button>\n }\n\n <!-- Dropdown Button (Mobile or Overflow) -->\n @if (zOrientation() === 'horizontal' && (canScrollLeft() || canScrollRight())) {\n <z-button\n zType=\"ghost\"\n zSize=\"sm\"\n zIconOnly=\"true\"\n class=\"z-tabs-nav-control shrink-0\"\n z-popover\n [zPopoverContent]=\"dropdownTpl\"\n zPosition=\"bottom-right\"\n [zWave]=\"false\"\n zClass=\"min-w-[6.25rem] max-w-[12.5rem]\"\n (zShow)=\"scrollToActiveDropdownItem()\"\n aria-label=\"Select tab\">\n <z-icon zType=\"lucideChevronDown\" zSize=\"16\" />\n </z-button>\n }\n </div>\n\n <ng-template #tabsListTpl>\n <!-- Tab List -->\n <div\n [class]=\"tabsClasses()\"\n [class.pb-0.5]=\"tabsListHasBottomPadding()\"\n role=\"tablist\"\n [attr.aria-orientation]=\"zOrientation()\"\n [attr.data-type]=\"zType()\">\n @for (tab of zTabs(); track tab.value; let idx = $index; let last = $last) {\n <button\n #tabButton\n type=\"button\"\n role=\"tab\"\n [class]=\"getTabItemClasses(tab)\"\n [attr.data-active]=\"isTabActive(tab)\"\n [attr.data-state]=\"isTabActive(tab) ? 'active' : 'inactive'\"\n [attr.data-type]=\"zType()\"\n [attr.data-orientation]=\"zOrientation()\"\n [attr.data-last]=\"last\"\n [attr.aria-selected]=\"isTabActive(tab)\"\n [attr.aria-controls]=\"'panel-' + tab.value\"\n [disabled]=\"tab.disabled\"\n [tabindex]=\"isTabActive(tab) ? 0 : -1\"\n z-tooltip\n [zContent]=\"zOrientation() === 'vertical' ? (tab.label | translate) : ''\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n (click)=\"selectTab(tab)\"\n (keydown)=\"onTabKeydown($event, idx)\">\n @if (tab.icon) {\n <z-icon [zType]=\"tab.icon\" zSize=\"16\" class=\"shrink-0\" />\n }\n <span class=\"z-tab-item-label min-w-0 flex-1 truncate text-left\">{{ tab.label | translate }}</span>\n @if (tab.badge) {\n <span\n class=\"ring-background ml-1.5 inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-xs font-semibold ring-2\"\n [class.bg-primary]=\"zType() !== 'badge'\"\n [class.text-primary-foreground]=\"zType() !== 'badge'\"\n [class.bg-primary!]=\"zType() === 'badge'\"\n [class.text-primary-foreground!]=\"zType() === 'badge'\">\n {{ tab.badge }}\n </span>\n }\n </button>\n }\n </div>\n </ng-template>\n\n <!-- Tab Panels -->\n @if (!zTabsOnly()) {\n <div\n class=\"z-tabs-panels min-h-0\"\n [class.flex-1]=\"zOrientation() === 'vertical'\"\n [class.shadow-xs]=\"contentWrapperFramed()\"\n [class.z-tabs-panels-unwrapped]=\"!contentWrapperFramed()\">\n @for (panel of tabPanels(); track panel.zTabPanel()) {\n @if (panelRenderStates().get(panel.zTabPanel())) {\n <div\n role=\"tabpanel\"\n [id]=\"'panel-' + panel.zTabPanel()\"\n [attr.aria-labelledby]=\"panel.zTabPanel()\"\n [hidden]=\"activeTab() !== panel.zTabPanel()\">\n <ng-container *ngTemplateOutlet=\"panel.template\" />\n </div>\n }\n }\n </div>\n }\n</div>\n\n<!-- Dropdown Menu Template -->\n<ng-template #dropdownTpl let-close=\"close\">\n <div\n class=\"z-tabs-dropdown-menu flex max-h-[18.75rem] max-w-[12.5rem] min-w-[6.25rem] flex-col gap-0.5 overflow-y-auto p-1\">\n @for (tab of zTabs(); track tab.value) {\n <button\n #dropdownItem\n type=\"button\"\n class=\"flex w-full cursor-pointer items-center justify-start gap-2 rounded-sm px-2 py-1.5 text-left text-sm font-medium transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n [class.hover:text-foreground]=\"!isTabActive(tab)\"\n [class.focus:bg-primary/10]=\"!isTabActive(tab)\"\n [class.bg-primary/15]=\"isTabActive(tab)\"\n [class.text-primary]=\"isTabActive(tab)\"\n [disabled]=\"tab.disabled\"\n (click)=\"selectTab(tab, true); close()\">\n @if (tab.icon) {\n <z-icon [zType]=\"tab.icon\" zSize=\"16\" class=\"text-muted-foreground shrink-0\" />\n }\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"tab.label | translate\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n [zTriggerElement]=\"dropdownItem\">\n {{ tab.label | translate }}\n </span>\n @if (tab.badge) {\n <span\n class=\"bg-primary text-primary-foreground inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-xs font-semibold\">\n {{ tab.badge }}\n </span>\n }\n @if (isTabActive(tab)) {\n <z-icon zType=\"lucideCheck\" zSize=\"16\" class=\"text-primary shink-0\" />\n }\n </button>\n }\n </div>\n</ng-template>\n", styles: [".z-tabs-scroll-wrapper{overflow-x:clip;overflow-y:visible;scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth}.z-tabs-scroll-wrapper::-webkit-scrollbar{display:none}.z-tabs-scroll-wrapper.vertical{max-height:var(--z-tabs-vertical-max-height, min(22rem, 60vh));overflow:hidden auto}.z-tabs-scroll-wrapper.vertical.z-tabs-scroll-wrapper-limited{height:var(--z-tabs-vertical-max-height, min(22rem, 60vh));overflow:hidden auto}.z-tabs-scroll-wrapper.z-tabs-scroll-wrapper-scrollable{overflow-x:auto}.z-tabs-scrollbar{--scrollbar-padding: .125rem;--z-tabs-scrollbar-gutter: .75rem;--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in oklab, var(--muted-foreground) 35%, transparent);--scrollbar-thumb-hover-color: color-mix(in oklab, var(--muted-foreground) 55%, transparent);--scrollbar-size: .375rem;display:block}.z-tabs-scrollbar .ng-scroll-viewport,.z-tabs-scrollbar .ng-scroll-content{max-width:100%}.z-tabs-scrollbar.z-tabs-scroll-wrapper-limited .ng-scroll-viewport{height:100%;max-height:100%}.z-tabs-scrollbar .ng-scroll-content{box-sizing:border-box;padding-right:var(--z-tabs-scrollbar-gutter)}.z-tabs-scroll-container{isolation:isolate;--z-tabs-fade-width: 2rem}.z-tabs-fade-left{content:\"\";position:absolute;left:0;top:.0625rem;bottom:.0625rem;width:var(--z-tabs-fade-width);background:linear-gradient(to right,var(--background) 0%,oklch(from var(--background) l c h/.86) 28%,oklch(from var(--background) l c h/.48) 60%,oklch(from var(--background) l c h/0) 100%);pointer-events:none;z-index:5}.z-tabs-fade-right{content:\"\";position:absolute;right:0;top:.0625rem;bottom:.0625rem;width:var(--z-tabs-fade-width);background:linear-gradient(to left,var(--background) 0%,oklch(from var(--background) l c h/.86) 28%,oklch(from var(--background) l c h/.48) 60%,oklch(from var(--background) l c h/0) 100%);pointer-events:none;z-index:5}.z-tabs{align-items:stretch;min-height:2.5rem}.z-tabs.flex-col{width:100%}.z-tabs.flex-col.border-r{border-right:.0625rem solid hsl(var(--border));padding-right:.5rem}.z-tabs-nav-control{transition:color .2s ease,background-color .2s ease,border-color .2s ease}.z-tab-item{-webkit-tap-highlight-color:transparent;position:relative}.z-tab-item[data-active=true]{position:relative}.z-tab-item:disabled{pointer-events:none}.z-tabs-panels{border:.0625rem solid var(--border);border-radius:var(--radius-xs);padding:1rem}.z-tabs-panels [role=tabpanel]{animation:z-tabs-fade-in .2s ease-in-out}.z-tabs-panels [role=tabpanel][hidden]{display:none}.z-tabs-panels-unwrapped{border:0;border-radius:0;padding:0}.z-tabs-wrapper .z-tabs.flex-row+.z-tabs-panels{margin-top:.875rem}.z-tabs-wrapper .z-tabs.flex-col+.z-tabs-panels{margin-top:0;margin-left:0}.z-tabs-container[data-orientation=horizontal]{gap:0}.z-tabs-container[data-orientation=horizontal] .z-tabs-scroll-container{z-index:1}.z-tabs-container[data-orientation=horizontal] .z-tabs-panels{margin-top:0}.z-tabs-container[data-content-fit=screen]{height:var(--z-tabs-screen-height, calc(100dvh - var(--z-tabs-screen-offset, 0rem)));max-height:var(--z-tabs-screen-height, calc(100dvh - var(--z-tabs-screen-offset, 0rem)));min-height:0;overflow:hidden}.z-tabs-container[data-content-fit=screen] .z-tabs-nav{flex:none;min-height:0}.z-tabs-container[data-content-fit=screen] .z-tabs-panels{flex:1 1 auto;min-height:0;overflow:auto}.z-tabs-container[data-content-fit=screen] [role=tabpanel]{min-height:0}.z-tabs-container[data-type=line][data-orientation=horizontal] .z-tabs-nav{position:relative}.z-tabs-container[data-type=line][data-orientation=horizontal] .z-tabs-nav:after{content:\"\";position:absolute;right:0;bottom:0;left:0;height:.0625rem;background:color-mix(in oklab,var(--border) 80%,transparent);pointer-events:none;z-index:0}.z-tabs-container:is([data-type=outline],[data-type=soft],[data-type=segment],[data-type=folder],[data-type=folder-soft],[data-type=folder-solid],[data-type=underline],[data-type=underlined],[data-type=badge],[data-type=sharp],[data-type=sharp-line],[data-type=sharp-line-filled],[data-type=code-line])[data-orientation=horizontal] .z-tabs-scroll-wrapper{padding-inline:0}.z-tabs-container:is([data-type=outline],[data-type=soft],[data-type=segment],[data-type=folder],[data-type=folder-soft],[data-type=folder-solid],[data-type=underline],[data-type=underlined],[data-type=badge],[data-type=sharp],[data-type=sharp-line],[data-type=sharp-line-filled],[data-type=code-line])[data-orientation=horizontal] .z-tabs-panels{border-radius:0 0 var(--radius-xs) var(--radius-xs)}.z-tabs-container:is([data-type=outline],[data-type=soft],[data-type=segment],[data-type=folder],[data-type=folder-soft],[data-type=folder-solid],[data-type=underline],[data-type=underlined],[data-type=badge],[data-type=sharp],[data-type=sharp-line],[data-type=sharp-line-filled],[data-type=code-line])[data-orientation=horizontal] .z-tabs-panels-unwrapped{border:0;border-radius:0}.z-tabs-container:is([data-type=folder],[data-type=folder-soft],[data-type=folder-solid])[data-orientation=horizontal] .z-tabs-nav{position:relative}.z-tabs-container:is([data-type=folder],[data-type=folder-soft],[data-type=folder-solid])[data-orientation=horizontal] .z-tabs-nav:after{content:\"\";position:absolute;right:0;bottom:0;left:0;height:.0625rem;background:var(--border);pointer-events:none;z-index:0}.z-tabs-container:is([data-type=folder],[data-type=folder-soft],[data-type=folder-solid])[data-orientation=horizontal] .z-tabs-panels{border-top:0}.z-tabs-container[data-type=folder-solid][data-orientation=horizontal] .z-tab-item[data-active=true][data-last=true]{box-shadow:inset .0625rem 0 0 var(--primary),inset -.0625rem 0 0 var(--border),inset 0 .0625rem 0 var(--primary)}.z-tabs-container:is([data-type=segment],[data-type=segment-solid]) .z-tabs{align-items:center}.z-tabs-container[data-orientation=vertical] .z-tabs-nav{align-items:stretch}.z-tabs-container[data-orientation=vertical] .z-tabs-scroll-container{width:min(12rem,40vw);flex:none}.z-tabs-container[data-orientation=vertical] .z-tabs-panels,.z-tabs-container[data-orientation=vertical] .z-tab-item{min-width:0}@media(prefers-reduced-motion:reduce){.z-tab-item,.z-tabs-nav-control{transition:none!important}.z-tabs-scroll-wrapper{scroll-behavior:auto}.z-tabs-panels [role=tabpanel]{animation:none!important}}@keyframes z-tabs-fade-in{0%{opacity:0;transform:translateY(-.2rem)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "component", type: ZIconComponent, selector: "z-icon, [z-icon]", inputs: ["class", "zType", "zAnimatedType", "zAnimate", "zAnimationTrigger", "zSize", "zStrokeWidth", "zSvg"] }, { kind: "component", type: ZButtonComponent, selector: "z-button, button[z-button], a[z-button]", inputs: ["class", "zType", "zSize", "zShape", "zLabel", "zLoading", "zDisabled", "zTypeIcon", "zAnimatedTypeIcon", "zAnimateIcon", "zAnimationTriggerIcon", "zSizeIcon", "zStrokeWidthIcon", "zWave"], exportAs: ["zButton"] }, { kind: "directive", type: ZTooltipDirective, selector: "[z-tooltip], [zTooltip]", inputs: ["zContent", "zPosition", "zTooltipPosition", "zTrigger", "zTooltipTrigger", "zTooltipType", "zTooltipSize", "zClass", "zTooltipClass", "zShowDelay", "zTooltipShowDelay", "zHideDelay", "zTooltipHideDelay", "zArrow", "zTooltipArrow", "zDisabled", "zTooltipDisabled", "zOffset", "zTooltipOffset", "zAutoDetect", "zTriggerElement", "zAlwaysShow", "zMaxWidth"], outputs: ["zShow", "zHide"], exportAs: ["zTooltip"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ZPopoverDirective, selector: "[z-popover]", inputs: ["zPopoverContent", "zPosition", "zTrigger", "zPopoverTrigger", "zClass", "zShowDelay", "zHideDelay", "zDisabled", "zOffset", "zPopoverWidth", "zTriggerRef", "zManualClose", "zOutsideClickClose", "zScrollClose", "zSticky", "zShowArrow", "zKeyboardSafe"], outputs: ["zShow", "zHide", "zHideStart", "zControl", "zPositionChange", "zOutsideClick"], exportAs: ["zPopover"] }, { kind: "component", type: NgScrollbar, selector: "ng-scrollbar:not([externalViewport]), [ngScrollbar]", exportAs: ["ngScrollbar"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
513
|
+
}
|
|
514
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: ZTabsComponent, decorators: [{
|
|
515
|
+
type: Component,
|
|
516
|
+
args: [{ selector: 'z-tabs', imports: [
|
|
517
|
+
ZIconComponent,
|
|
518
|
+
ZButtonComponent,
|
|
519
|
+
ZTooltipDirective,
|
|
520
|
+
NgTemplateOutlet,
|
|
521
|
+
ZPopoverDirective,
|
|
522
|
+
TranslatePipe,
|
|
523
|
+
NgScrollbar,
|
|
524
|
+
], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
525
|
+
class: 'z-tabs-wrapper block',
|
|
526
|
+
}, template: "<div\n class=\"z-tabs-container flex gap-1\"\n [attr.data-type]=\"zType()\"\n [attr.data-orientation]=\"zOrientation()\"\n [attr.data-content-fit]=\"zContentFit()\"\n [class.flex-col]=\"!zTabsOnly()\"\n [class.flex-row]=\"zOrientation() === 'vertical'\"\n [class.gap-4]=\"zOrientation() === 'vertical'\">\n <!-- Tabs Navigation (Left/Scroll/Tabs/Right/Dropdown) -->\n <div\n class=\"z-tabs-nav flex items-center gap-1.5\"\n [class.w-full]=\"zOrientation() === 'horizontal'\"\n [class.w-auto]=\"zOrientation() === 'vertical'\"\n [class.shrink-0]=\"zOrientation() === 'vertical'\">\n <!-- Scroll Left Button -->\n @if (canScrollLeft() && zOrientation() === 'horizontal') {\n <z-button\n zType=\"ghost\"\n zSize=\"sm\"\n zIconOnly=\"true\"\n [zWave]=\"false\"\n class=\"z-tabs-nav-control shrink-0\"\n (click)=\"scrollLeft()\"\n aria-label=\"Scroll left\">\n <z-icon zType=\"lucideChevronLeft\" zSize=\"16\" />\n </z-button>\n }\n\n <!-- Tabs List Container with Scroll + Fade -->\n <div class=\"z-tabs-scroll-container relative min-w-0 flex-1\" [attr.data-type]=\"zType()\">\n @if (zOrientation() === 'vertical') {\n <ng-scrollbar\n class=\"z-tabs-scroll-wrapper z-tabs-scrollbar vertical\"\n [class.z-tabs-scroll-wrapper-limited]=\"verticalTabsScrollable()\"\n track=\"vertical\"\n orientation=\"vertical\"\n appearance=\"compact\"\n visibility=\"hover\">\n <ng-container *ngTemplateOutlet=\"tabsListTpl\" />\n </ng-scrollbar>\n } @else {\n <div\n #tabsListContainer\n class=\"z-tabs-scroll-wrapper\"\n [class.z-tabs-scroll-wrapper-scrollable]=\"canScrollLeft() || canScrollRight()\"\n (scroll)=\"onTabsScroll()\">\n <ng-container *ngTemplateOutlet=\"tabsListTpl\" />\n </div>\n }\n\n <!-- Fade overlays (outside scroll container) -->\n @if (canScrollLeft() && zOrientation() === 'horizontal') {\n <div class=\"z-tabs-fade-left\"></div>\n }\n @if (canScrollRight() && zOrientation() === 'horizontal') {\n <div class=\"z-tabs-fade-right\"></div>\n }\n </div>\n\n <!-- Scroll Right Button -->\n @if (canScrollRight() && zOrientation() === 'horizontal') {\n <z-button\n zType=\"ghost\"\n zSize=\"sm\"\n zIconOnly=\"true\"\n class=\"z-tabs-nav-control shrink-0\"\n (click)=\"scrollRight()\"\n [zWave]=\"false\"\n aria-label=\"Scroll right\">\n <z-icon zType=\"lucideChevronRight\" zSize=\"16\" />\n </z-button>\n }\n\n <!-- Dropdown Button (Mobile or Overflow) -->\n @if (zOrientation() === 'horizontal' && (canScrollLeft() || canScrollRight())) {\n <z-button\n zType=\"ghost\"\n zSize=\"sm\"\n zIconOnly=\"true\"\n class=\"z-tabs-nav-control shrink-0\"\n z-popover\n [zPopoverContent]=\"dropdownTpl\"\n zPosition=\"bottom-right\"\n [zWave]=\"false\"\n zClass=\"min-w-[6.25rem] max-w-[12.5rem]\"\n (zShow)=\"scrollToActiveDropdownItem()\"\n aria-label=\"Select tab\">\n <z-icon zType=\"lucideChevronDown\" zSize=\"16\" />\n </z-button>\n }\n </div>\n\n <ng-template #tabsListTpl>\n <!-- Tab List -->\n <div\n [class]=\"tabsClasses()\"\n [class.pb-0.5]=\"tabsListHasBottomPadding()\"\n role=\"tablist\"\n [attr.aria-orientation]=\"zOrientation()\"\n [attr.data-type]=\"zType()\">\n @for (tab of zTabs(); track tab.value; let idx = $index; let last = $last) {\n <button\n #tabButton\n type=\"button\"\n role=\"tab\"\n [class]=\"getTabItemClasses(tab)\"\n [attr.data-active]=\"isTabActive(tab)\"\n [attr.data-state]=\"isTabActive(tab) ? 'active' : 'inactive'\"\n [attr.data-type]=\"zType()\"\n [attr.data-orientation]=\"zOrientation()\"\n [attr.data-last]=\"last\"\n [attr.aria-selected]=\"isTabActive(tab)\"\n [attr.aria-controls]=\"'panel-' + tab.value\"\n [disabled]=\"tab.disabled\"\n [tabindex]=\"isTabActive(tab) ? 0 : -1\"\n z-tooltip\n [zContent]=\"zOrientation() === 'vertical' ? (tab.label | translate) : ''\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n (click)=\"selectTab(tab)\"\n (keydown)=\"onTabKeydown($event, idx)\">\n @if (tab.icon) {\n <z-icon [zType]=\"tab.icon\" zSize=\"16\" class=\"shrink-0\" />\n }\n <span class=\"z-tab-item-label min-w-0 flex-1 truncate text-left\">{{ tab.label | translate }}</span>\n @if (tab.badge) {\n <span\n class=\"ring-background ml-1.5 inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-xs font-semibold ring-2\"\n [class.bg-primary]=\"zType() !== 'badge'\"\n [class.text-primary-foreground]=\"zType() !== 'badge'\"\n [class.bg-primary!]=\"zType() === 'badge'\"\n [class.text-primary-foreground!]=\"zType() === 'badge'\">\n {{ tab.badge }}\n </span>\n }\n </button>\n }\n </div>\n </ng-template>\n\n <!-- Tab Panels -->\n @if (!zTabsOnly()) {\n <div\n class=\"z-tabs-panels min-h-0\"\n [class.flex-1]=\"zOrientation() === 'vertical'\"\n [class.shadow-xs]=\"contentWrapperFramed()\"\n [class.z-tabs-panels-unwrapped]=\"!contentWrapperFramed()\">\n @for (panel of tabPanels(); track panel.zTabPanel()) {\n @if (panelRenderStates().get(panel.zTabPanel())) {\n <div\n role=\"tabpanel\"\n [id]=\"'panel-' + panel.zTabPanel()\"\n [attr.aria-labelledby]=\"panel.zTabPanel()\"\n [hidden]=\"activeTab() !== panel.zTabPanel()\">\n <ng-container *ngTemplateOutlet=\"panel.template\" />\n </div>\n }\n }\n </div>\n }\n</div>\n\n<!-- Dropdown Menu Template -->\n<ng-template #dropdownTpl let-close=\"close\">\n <div\n class=\"z-tabs-dropdown-menu flex max-h-[18.75rem] max-w-[12.5rem] min-w-[6.25rem] flex-col gap-0.5 overflow-y-auto p-1\">\n @for (tab of zTabs(); track tab.value) {\n <button\n #dropdownItem\n type=\"button\"\n class=\"flex w-full cursor-pointer items-center justify-start gap-2 rounded-sm px-2 py-1.5 text-left text-sm font-medium transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n [class.hover:text-foreground]=\"!isTabActive(tab)\"\n [class.focus:bg-primary/10]=\"!isTabActive(tab)\"\n [class.bg-primary/15]=\"isTabActive(tab)\"\n [class.text-primary]=\"isTabActive(tab)\"\n [disabled]=\"tab.disabled\"\n (click)=\"selectTab(tab, true); close()\">\n @if (tab.icon) {\n <z-icon [zType]=\"tab.icon\" zSize=\"16\" class=\"text-muted-foreground shrink-0\" />\n }\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"tab.label | translate\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n [zTriggerElement]=\"dropdownItem\">\n {{ tab.label | translate }}\n </span>\n @if (tab.badge) {\n <span\n class=\"bg-primary text-primary-foreground inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-xs font-semibold\">\n {{ tab.badge }}\n </span>\n }\n @if (isTabActive(tab)) {\n <z-icon zType=\"lucideCheck\" zSize=\"16\" class=\"text-primary shink-0\" />\n }\n </button>\n }\n </div>\n</ng-template>\n", styles: [".z-tabs-scroll-wrapper{overflow-x:clip;overflow-y:visible;scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth}.z-tabs-scroll-wrapper::-webkit-scrollbar{display:none}.z-tabs-scroll-wrapper.vertical{max-height:var(--z-tabs-vertical-max-height, min(22rem, 60vh));overflow:hidden auto}.z-tabs-scroll-wrapper.vertical.z-tabs-scroll-wrapper-limited{height:var(--z-tabs-vertical-max-height, min(22rem, 60vh));overflow:hidden auto}.z-tabs-scroll-wrapper.z-tabs-scroll-wrapper-scrollable{overflow-x:auto}.z-tabs-scrollbar{--scrollbar-padding: .125rem;--z-tabs-scrollbar-gutter: .75rem;--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in oklab, var(--muted-foreground) 35%, transparent);--scrollbar-thumb-hover-color: color-mix(in oklab, var(--muted-foreground) 55%, transparent);--scrollbar-size: .375rem;display:block}.z-tabs-scrollbar .ng-scroll-viewport,.z-tabs-scrollbar .ng-scroll-content{max-width:100%}.z-tabs-scrollbar.z-tabs-scroll-wrapper-limited .ng-scroll-viewport{height:100%;max-height:100%}.z-tabs-scrollbar .ng-scroll-content{box-sizing:border-box;padding-right:var(--z-tabs-scrollbar-gutter)}.z-tabs-scroll-container{isolation:isolate;--z-tabs-fade-width: 2rem}.z-tabs-fade-left{content:\"\";position:absolute;left:0;top:.0625rem;bottom:.0625rem;width:var(--z-tabs-fade-width);background:linear-gradient(to right,var(--background) 0%,oklch(from var(--background) l c h/.86) 28%,oklch(from var(--background) l c h/.48) 60%,oklch(from var(--background) l c h/0) 100%);pointer-events:none;z-index:5}.z-tabs-fade-right{content:\"\";position:absolute;right:0;top:.0625rem;bottom:.0625rem;width:var(--z-tabs-fade-width);background:linear-gradient(to left,var(--background) 0%,oklch(from var(--background) l c h/.86) 28%,oklch(from var(--background) l c h/.48) 60%,oklch(from var(--background) l c h/0) 100%);pointer-events:none;z-index:5}.z-tabs{align-items:stretch;min-height:2.5rem}.z-tabs.flex-col{width:100%}.z-tabs.flex-col.border-r{border-right:.0625rem solid hsl(var(--border));padding-right:.5rem}.z-tabs-nav-control{transition:color .2s ease,background-color .2s ease,border-color .2s ease}.z-tab-item{-webkit-tap-highlight-color:transparent;position:relative}.z-tab-item[data-active=true]{position:relative}.z-tab-item:disabled{pointer-events:none}.z-tabs-panels{border:.0625rem solid var(--border);border-radius:var(--radius-xs);padding:1rem}.z-tabs-panels [role=tabpanel]{animation:z-tabs-fade-in .2s ease-in-out}.z-tabs-panels [role=tabpanel][hidden]{display:none}.z-tabs-panels-unwrapped{border:0;border-radius:0;padding:0}.z-tabs-wrapper .z-tabs.flex-row+.z-tabs-panels{margin-top:.875rem}.z-tabs-wrapper .z-tabs.flex-col+.z-tabs-panels{margin-top:0;margin-left:0}.z-tabs-container[data-orientation=horizontal]{gap:0}.z-tabs-container[data-orientation=horizontal] .z-tabs-scroll-container{z-index:1}.z-tabs-container[data-orientation=horizontal] .z-tabs-panels{margin-top:0}.z-tabs-container[data-content-fit=screen]{height:var(--z-tabs-screen-height, calc(100dvh - var(--z-tabs-screen-offset, 0rem)));max-height:var(--z-tabs-screen-height, calc(100dvh - var(--z-tabs-screen-offset, 0rem)));min-height:0;overflow:hidden}.z-tabs-container[data-content-fit=screen] .z-tabs-nav{flex:none;min-height:0}.z-tabs-container[data-content-fit=screen] .z-tabs-panels{flex:1 1 auto;min-height:0;overflow:auto}.z-tabs-container[data-content-fit=screen] [role=tabpanel]{min-height:0}.z-tabs-container[data-type=line][data-orientation=horizontal] .z-tabs-nav{position:relative}.z-tabs-container[data-type=line][data-orientation=horizontal] .z-tabs-nav:after{content:\"\";position:absolute;right:0;bottom:0;left:0;height:.0625rem;background:color-mix(in oklab,var(--border) 80%,transparent);pointer-events:none;z-index:0}.z-tabs-container:is([data-type=outline],[data-type=soft],[data-type=segment],[data-type=folder],[data-type=folder-soft],[data-type=folder-solid],[data-type=underline],[data-type=underlined],[data-type=badge],[data-type=sharp],[data-type=sharp-line],[data-type=sharp-line-filled],[data-type=code-line])[data-orientation=horizontal] .z-tabs-scroll-wrapper{padding-inline:0}.z-tabs-container:is([data-type=outline],[data-type=soft],[data-type=segment],[data-type=folder],[data-type=folder-soft],[data-type=folder-solid],[data-type=underline],[data-type=underlined],[data-type=badge],[data-type=sharp],[data-type=sharp-line],[data-type=sharp-line-filled],[data-type=code-line])[data-orientation=horizontal] .z-tabs-panels{border-radius:0 0 var(--radius-xs) var(--radius-xs)}.z-tabs-container:is([data-type=outline],[data-type=soft],[data-type=segment],[data-type=folder],[data-type=folder-soft],[data-type=folder-solid],[data-type=underline],[data-type=underlined],[data-type=badge],[data-type=sharp],[data-type=sharp-line],[data-type=sharp-line-filled],[data-type=code-line])[data-orientation=horizontal] .z-tabs-panels-unwrapped{border:0;border-radius:0}.z-tabs-container:is([data-type=folder],[data-type=folder-soft],[data-type=folder-solid])[data-orientation=horizontal] .z-tabs-nav{position:relative}.z-tabs-container:is([data-type=folder],[data-type=folder-soft],[data-type=folder-solid])[data-orientation=horizontal] .z-tabs-nav:after{content:\"\";position:absolute;right:0;bottom:0;left:0;height:.0625rem;background:var(--border);pointer-events:none;z-index:0}.z-tabs-container:is([data-type=folder],[data-type=folder-soft],[data-type=folder-solid])[data-orientation=horizontal] .z-tabs-panels{border-top:0}.z-tabs-container[data-type=folder-solid][data-orientation=horizontal] .z-tab-item[data-active=true][data-last=true]{box-shadow:inset .0625rem 0 0 var(--primary),inset -.0625rem 0 0 var(--border),inset 0 .0625rem 0 var(--primary)}.z-tabs-container:is([data-type=segment],[data-type=segment-solid]) .z-tabs{align-items:center}.z-tabs-container[data-orientation=vertical] .z-tabs-nav{align-items:stretch}.z-tabs-container[data-orientation=vertical] .z-tabs-scroll-container{width:min(12rem,40vw);flex:none}.z-tabs-container[data-orientation=vertical] .z-tabs-panels,.z-tabs-container[data-orientation=vertical] .z-tab-item{min-width:0}@media(prefers-reduced-motion:reduce){.z-tab-item,.z-tabs-nav-control{transition:none!important}.z-tabs-scroll-wrapper{scroll-behavior:auto}.z-tabs-panels [role=tabpanel]{animation:none!important}}@keyframes z-tabs-fade-in{0%{opacity:0;transform:translateY(-.2rem)}to{opacity:1;transform:translateY(0)}}\n"] }]
|
|
527
|
+
}], ctorParameters: () => [], propDecorators: { tabPanels: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => ZTabPanelDirective), { isSignal: true }] }], tabsListContainer: [{ type: i0.ViewChild, args: ['tabsListContainer', { isSignal: true }] }], tabButtons: [{ type: i0.ViewChildren, args: ['tabButton', { isSignal: true }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], zTabs: [{ type: i0.Input, args: [{ isSignal: true, alias: "zTabs", required: true }] }], zType: [{ type: i0.Input, args: [{ isSignal: true, alias: "zType", required: false }] }], zSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "zSize", required: false }] }], zOrientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "zOrientation", required: false }] }], zContentFit: [{ type: i0.Input, args: [{ isSignal: true, alias: "zContentFit", required: false }] }], zLazy: [{ type: i0.Input, args: [{ isSignal: true, alias: "zLazy", required: false }] }], zDestroyInactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "zDestroyInactive", required: false }] }], zTabsOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "zTabsOnly", required: false }] }], zShowContentWrapper: [{ type: i0.Input, args: [{ isSignal: true, alias: "zShowContentWrapper", required: false }] }], zReloadable: [{ type: i0.Input, args: [{ isSignal: true, alias: "zReloadable", required: false }] }], zEmitOnActiveClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "zEmitOnActiveClick", required: false }] }], zCache: [{ type: i0.Input, args: [{ isSignal: true, alias: "zCache", required: false }] }], zCacheKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "zCacheKey", required: false }] }], activeTab: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeTab", required: false }] }, { type: i0.Output, args: ["activeTabChange"] }], zTabChange: [{ type: i0.Output, args: ["zTabChange"] }] } });
|
|
528
|
+
|
|
529
|
+
/**
|
|
530
|
+
* Generated bundle index. Do not edit.
|
|
531
|
+
*/
|
|
532
|
+
|
|
533
|
+
export { ZTabPanelDirective, ZTabsComponent, zTabItemVariants, zTabsVariants };
|
|
534
|
+
//# sourceMappingURL=shival99-z-ui-components-z-tabs.mjs.map
|