@shival99/z-ui 2.4.2 → 2.4.4
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/assets/css/base.css +2 -1
- package/assets/css/global.css +23 -2
- package/assets/css/tailwind.css +7 -4
- package/fesm2022/shival99-z-ui-components-z-accordion.mjs +6 -6
- package/fesm2022/shival99-z-ui-components-z-accordion.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-audio-player.mjs +3 -3
- package/fesm2022/shival99-z-ui-components-z-audio-player.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs +27 -12
- package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-avatar.mjs +6 -6
- package/fesm2022/shival99-z-ui-components-z-avatar.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-breadcrumb.mjs +3 -3
- package/fesm2022/shival99-z-ui-components-z-breadcrumb.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-button-group.mjs +11 -11
- package/fesm2022/shival99-z-ui-components-z-button-group.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-button.mjs +3 -3
- package/fesm2022/shival99-z-ui-components-z-button.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-calendar.mjs +40 -40
- package/fesm2022/shival99-z-ui-components-z-calendar.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-card.mjs +7 -7
- package/fesm2022/shival99-z-ui-components-z-card.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-chat.mjs +4 -4
- package/fesm2022/shival99-z-ui-components-z-chat.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-checkbox.mjs +3 -3
- package/fesm2022/shival99-z-ui-components-z-checkbox.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-code.mjs +58 -19
- package/fesm2022/shival99-z-ui-components-z-code.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-command.mjs +6 -5
- package/fesm2022/shival99-z-ui-components-z-command.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-drawer.mjs +17 -17
- package/fesm2022/shival99-z-ui-components-z-drawer.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs +12 -4
- package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-editor.mjs +6 -6
- package/fesm2022/shival99-z-ui-components-z-editor.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-empty.mjs +3 -3
- package/fesm2022/shival99-z-ui-components-z-empty.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-filter.mjs +27 -27
- package/fesm2022/shival99-z-ui-components-z-filter.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-gallery.mjs +42 -34
- package/fesm2022/shival99-z-ui-components-z-gallery.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-hover-glide.mjs +221 -0
- package/fesm2022/shival99-z-ui-components-z-hover-glide.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-icon.mjs +3 -3
- package/fesm2022/shival99-z-ui-components-z-icon.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-input.mjs +5 -5
- package/fesm2022/shival99-z-ui-components-z-input.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-kanban.mjs +4 -4
- package/fesm2022/shival99-z-ui-components-z-kanban.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-loading.mjs +18 -4
- package/fesm2022/shival99-z-ui-components-z-loading.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-marquee.mjs +3 -3
- package/fesm2022/shival99-z-ui-components-z-marquee.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-media-player.mjs +346 -956
- package/fesm2022/shival99-z-ui-components-z-media-player.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-menu.mjs +8 -8
- package/fesm2022/shival99-z-ui-components-z-menu.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-metric-card.mjs +5 -5
- package/fesm2022/shival99-z-ui-components-z-metric-card.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-modal.mjs +17 -17
- package/fesm2022/shival99-z-ui-components-z-modal.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-number-ticker.mjs +352 -0
- package/fesm2022/shival99-z-ui-components-z-number-ticker.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-overlay.mjs +9 -9
- package/fesm2022/shival99-z-ui-components-z-overlay.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-pagination.mjs +4 -4
- package/fesm2022/shival99-z-ui-components-z-pagination.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-popover.mjs +14 -14
- package/fesm2022/shival99-z-ui-components-z-popover.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-qrcode.mjs +32 -8
- package/fesm2022/shival99-z-ui-components-z-qrcode.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-radio.mjs +3 -3
- package/fesm2022/shival99-z-ui-components-z-radio.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-scrollarea.mjs +3 -3
- package/fesm2022/shival99-z-ui-components-z-scrollarea.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-select.mjs +181 -26
- package/fesm2022/shival99-z-ui-components-z-select.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-show-more.mjs +3 -3
- package/fesm2022/shival99-z-ui-components-z-show-more.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-skeleton-auto.mjs +4 -4
- package/fesm2022/shival99-z-ui-components-z-skeleton-auto.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-skeleton.mjs +5 -5
- package/fesm2022/shival99-z-ui-components-z-skeleton.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-steps.mjs +4 -4
- package/fesm2022/shival99-z-ui-components-z-steps.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-switch.mjs +5 -5
- package/fesm2022/shival99-z-ui-components-z-switch.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-table.mjs +107 -105
- package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-tabs.mjs +327 -31
- package/fesm2022/shival99-z-ui-components-z-tabs.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-tags.mjs +15 -15
- package/fesm2022/shival99-z-ui-components-z-tags.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-timeline.mjs +4 -4
- package/fesm2022/shival99-z-ui-components-z-timeline.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-toast.mjs +10 -9
- package/fesm2022/shival99-z-ui-components-z-toast.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-tooltip.mjs +11 -11
- package/fesm2022/shival99-z-ui-components-z-tooltip.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-upload.mjs +3 -3
- package/fesm2022/shival99-z-ui-components-z-upload.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-i18n.mjs +6 -26
- package/fesm2022/shival99-z-ui-i18n.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-pipes.mjs +18 -18
- package/fesm2022/shival99-z-ui-pipes.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-services.mjs +31 -31
- package/fesm2022/shival99-z-ui-services.mjs.map +1 -1
- package/package.json +21 -1
- package/types/shival99-z-ui-components-z-autocomplete.d.ts +6 -2
- package/types/shival99-z-ui-components-z-calendar.d.ts +4 -4
- package/types/shival99-z-ui-components-z-card.d.ts +21 -21
- package/types/shival99-z-ui-components-z-code.d.ts +16 -3
- package/types/shival99-z-ui-components-z-drawer.d.ts +1 -1
- package/types/shival99-z-ui-components-z-editor.d.ts +8 -8
- package/types/shival99-z-ui-components-z-gallery.d.ts +8 -5
- package/types/shival99-z-ui-components-z-hover-glide.d.ts +48 -0
- package/types/shival99-z-ui-components-z-loading.d.ts +9 -2
- package/types/shival99-z-ui-components-z-media-player.d.ts +102 -172
- package/types/shival99-z-ui-components-z-metric-card.d.ts +19 -19
- package/types/shival99-z-ui-components-z-modal.d.ts +1 -1
- package/types/shival99-z-ui-components-z-number-ticker.d.ts +110 -0
- package/types/shival99-z-ui-components-z-overlay.d.ts +3 -3
- package/types/shival99-z-ui-components-z-popover.d.ts +11 -8
- package/types/shival99-z-ui-components-z-qrcode.d.ts +4 -1
- package/types/shival99-z-ui-components-z-select.d.ts +45 -7
- package/types/shival99-z-ui-components-z-switch.d.ts +22 -21
- package/types/shival99-z-ui-components-z-table.d.ts +1 -1
- package/types/shival99-z-ui-components-z-tabs.d.ts +59 -7
- package/types/shival99-z-ui-components-z-toast.d.ts +1 -1
- package/types/shival99-z-ui-components-z-tooltip.d.ts +2 -2
- package/types/shival99-z-ui-components-z-upload.d.ts +3 -3
- package/types/shival99-z-ui-services.d.ts +10 -10
|
@@ -15,10 +15,10 @@ class ZTabPanelDirective {
|
|
|
15
15
|
zTabPanel = input.required(/* @ts-ignore */
|
|
16
16
|
...(ngDevMode ? [{ debugName: "zTabPanel" }] : /* istanbul ignore next */ []));
|
|
17
17
|
template = inject((TemplateRef));
|
|
18
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
19
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.
|
|
18
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZTabPanelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
19
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.6", 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
20
|
}
|
|
21
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
21
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZTabPanelDirective, decorators: [{
|
|
22
22
|
type: Directive,
|
|
23
23
|
args: [{
|
|
24
24
|
selector: '[z-tab-panel], [zTabPanel]',
|
|
@@ -31,9 +31,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
|
|
|
31
31
|
const Z_TABS_SCROLL_TOLERANCE = 4;
|
|
32
32
|
/**
|
|
33
33
|
* Types that render a shared pill behind the active tab and glide it into place instead of
|
|
34
|
-
* swapping each item's own background.
|
|
34
|
+
* swapping each item's own background. These predate the vertical glide, so they keep their
|
|
35
|
+
* static per-item active background when laid out vertically.
|
|
35
36
|
*/
|
|
36
|
-
const Z_TABS_GLIDE_TYPES = ['segment', 'segment-solid', 'pill-solid', 'pill-blur'];
|
|
37
|
+
const Z_TABS_GLIDE_TYPES = ['segment', 'segment-solid', 'pill-solid', 'pill-blur', 'pill-float'];
|
|
38
|
+
/** Glide types whose indicator is measured and animated in either orientation. */
|
|
39
|
+
const Z_TABS_OMNI_GLIDE_TYPES = ['pill-primary', 'underline-hover', 'bar'];
|
|
40
|
+
/**
|
|
41
|
+
* Types that glide the shared indicator only when laid out vertically. `assistant` collapses its
|
|
42
|
+
* labels horizontally, so there the active tab is resizing and the surface has to live on the tab
|
|
43
|
+
* itself; a vertical rail keeps every label at a fixed width, which removes that constraint and lets
|
|
44
|
+
* the indicator simply slide between rows.
|
|
45
|
+
*/
|
|
46
|
+
const Z_TABS_VERTICAL_GLIDE_TYPES = ['assistant'];
|
|
47
|
+
/**
|
|
48
|
+
* Types that collapse an inactive tab down to its icon and expand the active one to icon + label,
|
|
49
|
+
* which only applies to a horizontal strip. These paint the active surface on the tab itself rather
|
|
50
|
+
* than on a shared indicator, so the surface grows with the label instead of chasing a box whose
|
|
51
|
+
* width is still animating.
|
|
52
|
+
*/
|
|
53
|
+
const Z_TABS_COLLAPSING_LABEL_TYPES = ['assistant'];
|
|
54
|
+
/** Types that also glide a muted highlight behind the hovered tab. */
|
|
55
|
+
const Z_TABS_HOVER_GLIDE_TYPES = ['underline-hover'];
|
|
37
56
|
|
|
38
57
|
/** Hands out a fresh, monotonically increasing id for scoping each `z-tabs` instance's cache key. */
|
|
39
58
|
const zTabsInstanceIds = (() => {
|
|
@@ -73,16 +92,86 @@ function zTabsCancelIdle(handle) {
|
|
|
73
92
|
}
|
|
74
93
|
window.clearTimeout(handle);
|
|
75
94
|
}
|
|
95
|
+
function zTabsMeasure(button) {
|
|
96
|
+
const container = button.offsetParent ?? button.parentElement;
|
|
97
|
+
if (!container) {
|
|
98
|
+
return { x: button.offsetLeft, y: button.offsetTop, w: button.offsetWidth, h: button.offsetHeight };
|
|
99
|
+
}
|
|
100
|
+
const buttonRect = button.getBoundingClientRect();
|
|
101
|
+
const containerRect = container.getBoundingClientRect();
|
|
102
|
+
return {
|
|
103
|
+
x: buttonRect.left - containerRect.left,
|
|
104
|
+
y: buttonRect.top - containerRect.top,
|
|
105
|
+
w: buttonRect.width,
|
|
106
|
+
h: buttonRect.height,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function zTabsBoxEquals(a, b) {
|
|
110
|
+
if (!a) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
return a.x === b.x && a.y === b.y && a.w === b.w && a.h === b.h;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Keyframes for the entering panel, per `zContentAnimation`. `slide` and `blur` travel along the tab
|
|
117
|
+
* strip's own axis so the content appears to come from the tab that was clicked; `direction` is 1 when
|
|
118
|
+
* moving further down the list and -1 when moving back.
|
|
119
|
+
*
|
|
120
|
+
* Only `blur` animates a filter — it repaints the panel each frame, which is why the distance and
|
|
121
|
+
* duration are kept small.
|
|
122
|
+
*/
|
|
123
|
+
function zTabsContentKeyframes(animation, direction, vertical) {
|
|
124
|
+
const offset = 16 * (direction >= 0 ? 1 : -1);
|
|
125
|
+
const from = vertical ? `translateY(${offset}px)` : `translateX(${offset}px)`;
|
|
126
|
+
if (animation === 'slide') {
|
|
127
|
+
return {
|
|
128
|
+
keyframes: [
|
|
129
|
+
{ opacity: 0, transform: from },
|
|
130
|
+
{ opacity: 1, transform: 'none' },
|
|
131
|
+
],
|
|
132
|
+
options: { duration: 260, easing: 'cubic-bezier(0.22, 1, 0.36, 1)', fill: 'both' },
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
if (animation === 'blur') {
|
|
136
|
+
return {
|
|
137
|
+
keyframes: [
|
|
138
|
+
{ opacity: 0, filter: 'blur(0.25rem)', transform: from },
|
|
139
|
+
{ opacity: 1, filter: 'none', transform: 'none' },
|
|
140
|
+
],
|
|
141
|
+
options: { duration: 240, easing: 'ease-out', fill: 'both' },
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
if (animation === 'scale') {
|
|
145
|
+
return {
|
|
146
|
+
keyframes: [
|
|
147
|
+
{ opacity: 0, transform: 'scale(0.97)' },
|
|
148
|
+
{ opacity: 1, transform: 'none' },
|
|
149
|
+
],
|
|
150
|
+
options: { duration: 220, easing: 'cubic-bezier(0.22, 1, 0.36, 1)', fill: 'both' },
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
keyframes: [{ opacity: 0 }, { opacity: 1 }],
|
|
155
|
+
options: { duration: 180, easing: 'ease-out', fill: 'both' },
|
|
156
|
+
};
|
|
157
|
+
}
|
|
76
158
|
|
|
159
|
+
const zBarePillTabs = 'relative gap-0.5 rounded-full bg-transparent p-0 dark:bg-transparent';
|
|
160
|
+
const zBarePillTabItem = 'z-10 shrink-0 rounded-full border-0 text-muted-foreground hover:text-foreground data-[active=true]:text-primary-foreground';
|
|
77
161
|
const zTabsVariants = cva('z-tabs flex min-w-0', {
|
|
78
162
|
variants: {
|
|
79
163
|
zType: {
|
|
80
164
|
line: 'gap-0',
|
|
81
165
|
soft: 'gap-1 bg-background p-0 dark:bg-transparent',
|
|
82
|
-
segment: 'relative gap-1 rounded-
|
|
83
|
-
'segment-solid': 'relative gap-1 rounded-
|
|
166
|
+
segment: 'relative gap-1 rounded-sm bg-muted/60 p-1 dark:bg-muted/35',
|
|
167
|
+
'segment-solid': 'relative gap-1 rounded-sm bg-muted/60 p-1 dark:bg-muted/35',
|
|
84
168
|
'pill-solid': 'relative gap-1 rounded-full bg-muted/60 p-1 dark:bg-muted/35',
|
|
85
169
|
'pill-blur': 'relative gap-1 rounded-full bg-muted/40 p-1 backdrop-blur-md dark:bg-muted/20',
|
|
170
|
+
'pill-float': zBarePillTabs,
|
|
171
|
+
'pill-primary': zBarePillTabs,
|
|
172
|
+
assistant: 'relative w-full gap-1 rounded-(--radius-pill) bg-muted p-1 dark:bg-muted/40',
|
|
173
|
+
'underline-hover': 'relative gap-0 rounded-none bg-transparent p-0 dark:bg-transparent',
|
|
174
|
+
bar: 'relative gap-1 rounded-none bg-transparent p-0 dark:bg-transparent',
|
|
86
175
|
folder: 'isolate gap-0 bg-background p-0 dark:bg-transparent',
|
|
87
176
|
'folder-soft': 'isolate gap-0 bg-background p-0 dark:bg-transparent',
|
|
88
177
|
'folder-solid': 'isolate gap-0 bg-background p-0 dark:bg-transparent',
|
|
@@ -106,6 +195,16 @@ const zTabsVariants = cva('z-tabs flex min-w-0', {
|
|
|
106
195
|
zOrientation: 'horizontal',
|
|
107
196
|
},
|
|
108
197
|
compoundVariants: [
|
|
198
|
+
{
|
|
199
|
+
zType: 'assistant',
|
|
200
|
+
zOrientation: 'vertical',
|
|
201
|
+
class: 'rounded-sm bg-muted/40 p-1 dark:bg-muted/25',
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
zType: 'bar',
|
|
205
|
+
zOrientation: 'vertical',
|
|
206
|
+
class: 'gap-2 border-border border-e pe-4',
|
|
207
|
+
},
|
|
109
208
|
{
|
|
110
209
|
zType: 'vertical-sharp',
|
|
111
210
|
zOrientation: 'vertical',
|
|
@@ -127,14 +226,19 @@ const zTabItemVariants = cva('z-tab-item relative inline-flex min-h-10 select-no
|
|
|
127
226
|
variants: {
|
|
128
227
|
zType: {
|
|
129
228
|
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',
|
|
130
|
-
soft: 'rounded-
|
|
131
|
-
segment: 'z-10 rounded-
|
|
132
|
-
'segment-solid': 'z-10 rounded-
|
|
229
|
+
soft: 'rounded-sm 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',
|
|
230
|
+
segment: 'z-10 rounded-sm border-0 text-muted-foreground hover:text-foreground data-[active=true]:text-primary',
|
|
231
|
+
'segment-solid': 'z-10 rounded-sm border-0 text-muted-foreground hover:text-foreground data-[active=true]:text-primary-foreground',
|
|
133
232
|
'pill-solid': 'z-10 rounded-full border-0 text-muted-foreground hover:text-foreground data-[active=true]:text-primary',
|
|
134
233
|
'pill-blur': 'z-10 rounded-full border-0 text-muted-foreground hover:text-foreground data-[active=true]:text-primary',
|
|
135
|
-
|
|
136
|
-
'
|
|
137
|
-
|
|
234
|
+
'pill-float': zBarePillTabItem,
|
|
235
|
+
'pill-primary': zBarePillTabItem,
|
|
236
|
+
assistant: 'z-10 flex-1 justify-center gap-1.5 rounded-(--radius-pill) border-0 text-muted-foreground hover:text-foreground data-[active=true]:text-primary-foreground',
|
|
237
|
+
'underline-hover': 'z-10 shrink-0 rounded-none border-0 bg-transparent text-muted-foreground hover:text-foreground data-[active=true]:text-foreground',
|
|
238
|
+
bar: 'z-10 gap-3 rounded-sm border-0 bg-transparent text-muted-foreground hover:text-foreground data-[active=true]:text-primary',
|
|
239
|
+
folder: 'rounded-t-sm 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)]',
|
|
240
|
+
'folder-soft': 'rounded-t-sm 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',
|
|
241
|
+
'folder-solid': 'rounded-t-sm 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)]',
|
|
138
242
|
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',
|
|
139
243
|
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!',
|
|
140
244
|
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',
|
|
@@ -165,17 +269,17 @@ const zTabItemVariants = cva('z-tab-item relative inline-flex min-h-10 select-no
|
|
|
165
269
|
{
|
|
166
270
|
zType: 'soft',
|
|
167
271
|
zOrientation: 'vertical',
|
|
168
|
-
class: 'w-full justify-start rounded-
|
|
272
|
+
class: 'w-full justify-start rounded-sm data-[active=true]:bg-primary/10 data-[active=true]:shadow-xs dark:data-[active=true]:bg-primary/15',
|
|
169
273
|
},
|
|
170
274
|
{
|
|
171
275
|
zType: 'segment',
|
|
172
276
|
zOrientation: 'vertical',
|
|
173
|
-
class: 'w-full justify-start rounded-
|
|
277
|
+
class: 'w-full justify-start rounded-sm data-[active=true]:bg-background data-[active=true]:shadow-xs dark:data-[active=true]:border-border!',
|
|
174
278
|
},
|
|
175
279
|
{
|
|
176
280
|
zType: 'segment-solid',
|
|
177
281
|
zOrientation: 'vertical',
|
|
178
|
-
class: 'w-full justify-start rounded-
|
|
282
|
+
class: 'w-full justify-start rounded-sm data-[active=true]:bg-primary data-[active=true]:text-primary-foreground data-[active=true]:shadow-xs',
|
|
179
283
|
},
|
|
180
284
|
{
|
|
181
285
|
zType: 'pill-solid',
|
|
@@ -187,6 +291,31 @@ const zTabItemVariants = cva('z-tab-item relative inline-flex min-h-10 select-no
|
|
|
187
291
|
zOrientation: 'vertical',
|
|
188
292
|
class: 'w-full justify-start rounded-full backdrop-blur-md data-[active=true]:bg-background/70 data-[active=true]:shadow-sm',
|
|
189
293
|
},
|
|
294
|
+
{
|
|
295
|
+
zType: 'pill-float',
|
|
296
|
+
zOrientation: 'vertical',
|
|
297
|
+
class: 'w-full justify-start rounded-full data-[active=true]:bg-primary data-[active=true]:text-primary-foreground data-[active=true]:shadow-sm',
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
zType: 'pill-primary',
|
|
301
|
+
zOrientation: 'vertical',
|
|
302
|
+
class: 'w-full justify-start rounded-full',
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
zType: 'assistant',
|
|
306
|
+
zOrientation: 'vertical',
|
|
307
|
+
class: 'w-full justify-start rounded-sm',
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
zType: 'underline-hover',
|
|
311
|
+
zOrientation: 'vertical',
|
|
312
|
+
class: 'w-full justify-start rounded-none px-4 py-2.5',
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
zType: 'bar',
|
|
316
|
+
zOrientation: 'vertical',
|
|
317
|
+
class: 'w-full justify-start rounded-sm px-4 py-2.5',
|
|
318
|
+
},
|
|
190
319
|
{
|
|
191
320
|
zType: 'folder',
|
|
192
321
|
zOrientation: 'vertical',
|
|
@@ -288,6 +417,12 @@ class ZTabsComponent {
|
|
|
288
417
|
...(ngDevMode ? [{ debugName: "tabButtons" }] : /* istanbul ignore next */ []));
|
|
289
418
|
glideIndicator = viewChild('glideIndicator', /* @ts-ignore */
|
|
290
419
|
...(ngDevMode ? [{ debugName: "glideIndicator" }] : /* istanbul ignore next */ []));
|
|
420
|
+
hoverIndicator = viewChild('hoverIndicator', /* @ts-ignore */
|
|
421
|
+
...(ngDevMode ? [{ debugName: "hoverIndicator" }] : /* istanbul ignore next */ []));
|
|
422
|
+
tabsList = viewChild('tabsList', /* @ts-ignore */
|
|
423
|
+
...(ngDevMode ? [{ debugName: "tabsList" }] : /* istanbul ignore next */ []));
|
|
424
|
+
panelsHost = viewChild('panelsHost', /* @ts-ignore */
|
|
425
|
+
...(ngDevMode ? [{ debugName: "panelsHost" }] : /* istanbul ignore next */ []));
|
|
291
426
|
panelHost = viewChild('panelHost', { ...(ngDevMode ? { debugName: "panelHost" } : /* istanbul ignore next */ {}), read: ViewContainerRef });
|
|
292
427
|
class = input('', /* @ts-ignore */
|
|
293
428
|
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
@@ -301,6 +436,8 @@ class ZTabsComponent {
|
|
|
301
436
|
...(ngDevMode ? [{ debugName: "zOrientation" }] : /* istanbul ignore next */ []));
|
|
302
437
|
zContentFit = input('none', /* @ts-ignore */
|
|
303
438
|
...(ngDevMode ? [{ debugName: "zContentFit" }] : /* istanbul ignore next */ []));
|
|
439
|
+
zContentAnimation = input('fade', /* @ts-ignore */
|
|
440
|
+
...(ngDevMode ? [{ debugName: "zContentAnimation" }] : /* istanbul ignore next */ []));
|
|
304
441
|
zLazy = input(false, /* @ts-ignore */
|
|
305
442
|
...(ngDevMode ? [{ debugName: "zLazy" }] : /* istanbul ignore next */ []));
|
|
306
443
|
zTabsOnly = input(false, /* @ts-ignore */
|
|
@@ -332,8 +469,29 @@ class ZTabsComponent {
|
|
|
332
469
|
...(ngDevMode ? [{ debugName: "canScrollRight" }] : /* istanbul ignore next */ []));
|
|
333
470
|
bouncingTab = signal(null, /* @ts-ignore */
|
|
334
471
|
...(ngDevMode ? [{ debugName: "bouncingTab" }] : /* istanbul ignore next */ []));
|
|
335
|
-
|
|
472
|
+
hoveredTab = signal(null, /* @ts-ignore */
|
|
473
|
+
...(ngDevMode ? [{ debugName: "hoveredTab" }] : /* istanbul ignore next */ []));
|
|
474
|
+
isGlideType = computed(() => {
|
|
475
|
+
const type = this.zType();
|
|
476
|
+
if (Z_TABS_OMNI_GLIDE_TYPES.includes(type)) {
|
|
477
|
+
return true;
|
|
478
|
+
}
|
|
479
|
+
if (Z_TABS_VERTICAL_GLIDE_TYPES.includes(type)) {
|
|
480
|
+
return this.zOrientation() === 'vertical';
|
|
481
|
+
}
|
|
482
|
+
return Z_TABS_GLIDE_TYPES.includes(type) && this.zOrientation() === 'horizontal';
|
|
483
|
+
}, /* @ts-ignore */
|
|
336
484
|
...(ngDevMode ? [{ debugName: "isGlideType" }] : /* istanbul ignore next */ []));
|
|
485
|
+
isHoverGlideType = computed(() => Z_TABS_HOVER_GLIDE_TYPES.includes(this.zType()), /* @ts-ignore */
|
|
486
|
+
...(ngDevMode ? [{ debugName: "isHoverGlideType" }] : /* istanbul ignore next */ []));
|
|
487
|
+
_hasCollapsingLabel = computed(() => Z_TABS_COLLAPSING_LABEL_TYPES.includes(this.zType()) && this.zOrientation() === 'horizontal', /* @ts-ignore */
|
|
488
|
+
...(ngDevMode ? [{ debugName: "_hasCollapsingLabel" }] : /* istanbul ignore next */ []));
|
|
489
|
+
/**
|
|
490
|
+
* A vertical rail truncates long labels, so it gets a tooltip. `assistant` never does: it collapses
|
|
491
|
+
* inactive labels by design, and a tooltip on every icon turns browsing the strip into a popup storm.
|
|
492
|
+
*/
|
|
493
|
+
showsTabTooltip = computed(() => this.zOrientation() === 'vertical' && this.zType() !== 'assistant', /* @ts-ignore */
|
|
494
|
+
...(ngDevMode ? [{ debugName: "showsTabTooltip" }] : /* istanbul ignore next */ []));
|
|
337
495
|
_resizeObserver;
|
|
338
496
|
_scrollFrame;
|
|
339
497
|
_zone = inject(NgZone);
|
|
@@ -342,8 +500,12 @@ class ZTabsComponent {
|
|
|
342
500
|
_retiredViews = [];
|
|
343
501
|
_teardownHandle;
|
|
344
502
|
_glideBox;
|
|
503
|
+
_hoverBox;
|
|
345
504
|
_glidePending = false;
|
|
346
505
|
_glideAnimations = [];
|
|
506
|
+
_contentAnimation;
|
|
507
|
+
_lastActiveIndex = -1;
|
|
508
|
+
_contentDirection = 1;
|
|
347
509
|
_viewReady = false;
|
|
348
510
|
_cacheInstanceId = zTabsInstanceIds.next();
|
|
349
511
|
constructor() {
|
|
@@ -358,6 +520,23 @@ class ZTabsComponent {
|
|
|
358
520
|
this._glidePending = true;
|
|
359
521
|
this._outsideFrame(() => this._updateGlideIndicator());
|
|
360
522
|
});
|
|
523
|
+
effect(() => {
|
|
524
|
+
this.hoveredTab();
|
|
525
|
+
this.isHoverGlideType();
|
|
526
|
+
this._outsideFrame(() => this._updateHoverIndicator());
|
|
527
|
+
});
|
|
528
|
+
effect(() => {
|
|
529
|
+
this.activeTab();
|
|
530
|
+
this.zTabs();
|
|
531
|
+
this._hasCollapsingLabel();
|
|
532
|
+
this.zOrientation();
|
|
533
|
+
this._outsideFrame(() => this._updateCollapsingLabels());
|
|
534
|
+
});
|
|
535
|
+
effect(() => {
|
|
536
|
+
const active = this.activeTab();
|
|
537
|
+
this.zContentAnimation();
|
|
538
|
+
untracked(() => this._trackContentDirection(active));
|
|
539
|
+
});
|
|
361
540
|
effect(() => {
|
|
362
541
|
const active = this.activeTab();
|
|
363
542
|
this.zLazy();
|
|
@@ -389,6 +568,7 @@ class ZTabsComponent {
|
|
|
389
568
|
for (const animation of this._glideAnimations) {
|
|
390
569
|
animation.cancel();
|
|
391
570
|
}
|
|
571
|
+
this._contentAnimation?.cancel();
|
|
392
572
|
if (this._scrollFrame !== undefined) {
|
|
393
573
|
cancelAnimationFrame(this._scrollFrame);
|
|
394
574
|
}
|
|
@@ -428,6 +608,11 @@ class ZTabsComponent {
|
|
|
428
608
|
type !== 'segment-solid' &&
|
|
429
609
|
type !== 'pill-solid' &&
|
|
430
610
|
type !== 'pill-blur' &&
|
|
611
|
+
type !== 'pill-float' &&
|
|
612
|
+
type !== 'pill-primary' &&
|
|
613
|
+
type !== 'assistant' &&
|
|
614
|
+
type !== 'underline-hover' &&
|
|
615
|
+
type !== 'bar' &&
|
|
431
616
|
type !== 'sharp' &&
|
|
432
617
|
type !== 'sharp-line' &&
|
|
433
618
|
type !== 'sharp-line-filled' &&
|
|
@@ -532,6 +717,22 @@ class ZTabsComponent {
|
|
|
532
717
|
this.selectTab(tabs[tabs.length - 1]);
|
|
533
718
|
}
|
|
534
719
|
}
|
|
720
|
+
/**
|
|
721
|
+
* Keyboard focus moves the highlight too, so tabbing through the strip reads the same as hovering.
|
|
722
|
+
* Every type pays the listener, but only the hover-glide types get past the guard into a signal write.
|
|
723
|
+
*/
|
|
724
|
+
onTabHover(tab) {
|
|
725
|
+
if (!this.isHoverGlideType() || tab.disabled || this.hoveredTab() === tab.value) {
|
|
726
|
+
return;
|
|
727
|
+
}
|
|
728
|
+
this.hoveredTab.set(tab.value);
|
|
729
|
+
}
|
|
730
|
+
onTabHoverEnd() {
|
|
731
|
+
if (!this.isHoverGlideType() || this.hoveredTab() === null) {
|
|
732
|
+
return;
|
|
733
|
+
}
|
|
734
|
+
this.hoveredTab.set(null);
|
|
735
|
+
}
|
|
535
736
|
checkScroll() {
|
|
536
737
|
const container = this.tabsListContainer()?.nativeElement;
|
|
537
738
|
if (!container || this.zOrientation() !== 'horizontal') {
|
|
@@ -616,9 +817,9 @@ class ZTabsComponent {
|
|
|
616
817
|
if (!button) {
|
|
617
818
|
return;
|
|
618
819
|
}
|
|
619
|
-
const next =
|
|
820
|
+
const next = zTabsMeasure(button);
|
|
620
821
|
const previous = this._glideBox;
|
|
621
|
-
const moved = !previous
|
|
822
|
+
const moved = !zTabsBoxEquals(previous, next);
|
|
622
823
|
// A tab change arms the glide; whichever call observes the new geometry first plays it, and later
|
|
623
824
|
// calls for the same geometry leave the running animation alone.
|
|
624
825
|
const shouldGlide = this._glidePending && Boolean(previous) && !this._prefersReducedMotion();
|
|
@@ -679,7 +880,9 @@ class ZTabsComponent {
|
|
|
679
880
|
this._panelView = view;
|
|
680
881
|
this._mountedPanel = value;
|
|
681
882
|
this._scheduleTeardown();
|
|
682
|
-
|
|
883
|
+
// The lazy path knows the exact moment the panel lands, so it plays the enter animation itself
|
|
884
|
+
// instead of waiting for the frame the eager path has to.
|
|
885
|
+
this._animateContent();
|
|
683
886
|
}
|
|
684
887
|
_scheduleTeardown() {
|
|
685
888
|
if (this._retiredViews.length === 0 || this._teardownHandle !== undefined) {
|
|
@@ -694,13 +897,105 @@ class ZTabsComponent {
|
|
|
694
897
|
}
|
|
695
898
|
});
|
|
696
899
|
}
|
|
697
|
-
/**
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
900
|
+
/**
|
|
901
|
+
* Records which way the strip travelled so `slide`/`blur` can enter from the side the user clicked
|
|
902
|
+
* towards. Effects run after the active-panel binding has updated, so the eager path can animate
|
|
903
|
+
* immediately and avoid painting one unanimated frame before the enter state is applied.
|
|
904
|
+
*/
|
|
905
|
+
_trackContentDirection(active) {
|
|
906
|
+
const index = this.zTabs().findIndex(tab => tab.value === active);
|
|
907
|
+
if (index === -1) {
|
|
908
|
+
return;
|
|
909
|
+
}
|
|
910
|
+
const hadActiveTab = this._lastActiveIndex !== -1;
|
|
911
|
+
if (hadActiveTab) {
|
|
912
|
+
this._contentDirection = index >= this._lastActiveIndex ? 1 : -1;
|
|
913
|
+
}
|
|
914
|
+
this._lastActiveIndex = index;
|
|
915
|
+
if (!this.zLazy() && hadActiveTab) {
|
|
916
|
+
// Let Angular finish the active-panel binding, then start before the browser paints. Waiting
|
|
917
|
+
// for another RAF lets one unanimated frame flash through, which reads as a small jump.
|
|
918
|
+
queueMicrotask(() => this._animateContent());
|
|
919
|
+
}
|
|
920
|
+
}
|
|
921
|
+
/**
|
|
922
|
+
* Animates the entering panel. Everything but `blur` is transform/opacity only, so the animation
|
|
923
|
+
* ticks on the compositor and a heavy panel mounting in the same frame cannot stall it.
|
|
924
|
+
*/
|
|
925
|
+
_animateContent() {
|
|
926
|
+
const animation = this.zContentAnimation();
|
|
927
|
+
this._contentAnimation?.cancel();
|
|
928
|
+
this._contentAnimation = undefined;
|
|
929
|
+
if (animation === 'none' || this.zTabsOnly() || this._prefersReducedMotion()) {
|
|
930
|
+
return;
|
|
931
|
+
}
|
|
932
|
+
const panel = this.panelsHost()?.nativeElement?.querySelector('[role="tabpanel"][data-state="active"]');
|
|
933
|
+
if (!panel || typeof panel.animate !== 'function') {
|
|
934
|
+
return;
|
|
935
|
+
}
|
|
936
|
+
const { keyframes, options } = zTabsContentKeyframes(animation, this._contentDirection, this.zOrientation() === 'vertical');
|
|
937
|
+
this._contentAnimation = panel.animate(keyframes, options);
|
|
938
|
+
}
|
|
939
|
+
/**
|
|
940
|
+
* `width: auto` cannot be interpolated, so the label's own content width is measured and written as
|
|
941
|
+
* an explicit pixel width for the stylesheet to transition from zero. `scrollWidth` reports that
|
|
942
|
+
* content width even while the element is clamped to zero and hidden, so no reflow-forcing dance is
|
|
943
|
+
* needed. The active surface lives on the tab itself for these types, which is what lets the pill
|
|
944
|
+
* grow in step with the label rather than chase a box that is still resizing.
|
|
945
|
+
*/
|
|
946
|
+
_updateCollapsingLabels() {
|
|
947
|
+
if (!this._hasCollapsingLabel()) {
|
|
948
|
+
return;
|
|
949
|
+
}
|
|
950
|
+
for (const button of this.tabButtons()) {
|
|
951
|
+
const label = button.nativeElement.querySelector('.z-tab-item-label');
|
|
952
|
+
if (!label) {
|
|
953
|
+
continue;
|
|
954
|
+
}
|
|
955
|
+
const isActive = button.nativeElement.dataset['active'] === 'true';
|
|
956
|
+
label.style.width = isActive ? `${label.scrollWidth}px` : '0px';
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
/**
|
|
960
|
+
* Moves the muted highlight onto the hovered tab. The first placement jumps into position and only
|
|
961
|
+
* fades in — gliding it in from a stale box would read as a stray rectangle crossing the strip.
|
|
962
|
+
*/
|
|
963
|
+
_updateHoverIndicator() {
|
|
964
|
+
const element = this.hoverIndicator()?.nativeElement;
|
|
965
|
+
if (!this.isHoverGlideType() || !element) {
|
|
966
|
+
this._hoverBox = undefined;
|
|
967
|
+
return;
|
|
968
|
+
}
|
|
969
|
+
const hovered = this.hoveredTab();
|
|
970
|
+
if (!hovered) {
|
|
971
|
+
element.style.opacity = '0';
|
|
972
|
+
this._hoverBox = undefined;
|
|
973
|
+
return;
|
|
974
|
+
}
|
|
975
|
+
const index = this.zTabs().findIndex(tab => tab.value === hovered);
|
|
976
|
+
const button = this.tabButtons()[index]?.nativeElement;
|
|
977
|
+
if (!button) {
|
|
978
|
+
return;
|
|
979
|
+
}
|
|
980
|
+
const next = zTabsMeasure(button);
|
|
981
|
+
if (zTabsBoxEquals(this._hoverBox, next)) {
|
|
701
982
|
return;
|
|
702
983
|
}
|
|
703
|
-
|
|
984
|
+
const isFirstPlacement = !this._hoverBox;
|
|
985
|
+
this._hoverBox = next;
|
|
986
|
+
if (isFirstPlacement) {
|
|
987
|
+
element.style.transition = 'opacity 150ms ease-out';
|
|
988
|
+
}
|
|
989
|
+
element.style.width = `${next.w}px`;
|
|
990
|
+
element.style.height = `${next.h}px`;
|
|
991
|
+
element.style.transform = `translate(${next.x}px, ${next.y}px)`;
|
|
992
|
+
element.style.opacity = '1';
|
|
993
|
+
if (isFirstPlacement) {
|
|
994
|
+
// Hand the transition back to the stylesheet so the next hover glides instead of jumping.
|
|
995
|
+
this._outsideFrame(() => {
|
|
996
|
+
element.style.transition = '';
|
|
997
|
+
});
|
|
998
|
+
}
|
|
704
999
|
}
|
|
705
1000
|
/**
|
|
706
1001
|
* Measurement and imperative DOM work never needs a change-detection tick of its own. With zone.js a
|
|
@@ -714,13 +1009,14 @@ class ZTabsComponent {
|
|
|
714
1009
|
return typeof window !== 'undefined' && Boolean(window.matchMedia?.('(prefers-reduced-motion: reduce)').matches);
|
|
715
1010
|
}
|
|
716
1011
|
_setupResizeObserver() {
|
|
717
|
-
const container = this.tabsListContainer()?.nativeElement;
|
|
1012
|
+
const container = this.tabsListContainer()?.nativeElement ?? this.tabsList()?.nativeElement;
|
|
718
1013
|
if (!container) {
|
|
719
1014
|
return;
|
|
720
1015
|
}
|
|
721
1016
|
this._resizeObserver = new ResizeObserver(() => {
|
|
722
1017
|
this.checkScroll();
|
|
723
1018
|
this._updateGlideIndicator();
|
|
1019
|
+
this._updateHoverIndicator();
|
|
724
1020
|
});
|
|
725
1021
|
this._resizeObserver.observe(container);
|
|
726
1022
|
}
|
|
@@ -776,10 +1072,10 @@ class ZTabsComponent {
|
|
|
776
1072
|
}
|
|
777
1073
|
}, 150);
|
|
778
1074
|
}
|
|
779
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
780
|
-
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 }, zTabsOnly: { classPropertyName: "zTabsOnly", publicName: "zTabsOnly", isSignal: true, isRequired: false, transformFunction: null }, zShowNavWrapper: { classPropertyName: "zShowNavWrapper", publicName: "zShowNavWrapper", isSignal: true, isRequired: false, transformFunction: null }, zNavFullWidth: { classPropertyName: "zNavFullWidth", publicName: "zNavFullWidth", isSignal: true, isRequired: false, transformFunction: null }, zClassContent: { classPropertyName: "zClassContent", publicName: "zClassContent", 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 }, { propertyName: "glideIndicator", first: true, predicate: ["glideIndicator"], descendants: true, isSignal: true }, { propertyName: "panelHost", first: true, predicate: ["panelHost"], descendants: true, read: ViewContainerRef, 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]=\"navClasses()\"\n [class.z-tabs-nav-surface]=\"zShowNavWrapper() && isGlideType()\"\n [class.w-full]=\"zOrientation() === 'horizontal' && (!zShowNavWrapper() || zNavFullWidth())\"\n [class.w-fit]=\"zOrientation() === 'horizontal' && zShowNavWrapper() && !zNavFullWidth()\"\n [class.max-w-full]=\"zOrientation() === 'horizontal' && zShowNavWrapper() && !zNavFullWidth()\"\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\n class=\"z-tabs-scroll-container relative min-w-0 flex-1\"\n [class.z-tabs-scroll-container-surface]=\"canScrollLeft() || canScrollRight()\"\n [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 [class.z-tabs-scroll-wrapper-fade-left]=\"canScrollLeft()\"\n [class.z-tabs-scroll-wrapper-fade-right]=\"canScrollRight()\"\n (scroll)=\"onTabsScroll()\">\n <ng-container *ngTemplateOutlet=\"tabsListTpl\" />\n </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 @if (isGlideType()) {\n <div\n #glideIndicator\n class=\"z-tabs-glide-indicator pointer-events-none absolute top-0 left-0 z-[6]\"\n [attr.data-type]=\"zType()\"\n aria-hidden=\"true\"></div>\n }\n @for (item of tabItems(); track item.tab.value; let idx = $index; let last = $last) {\n <button\n #tabButton\n type=\"button\"\n role=\"tab\"\n [class]=\"item.classes\"\n [attr.data-active]=\"item.isActive\"\n [attr.data-state]=\"item.isActive ? 'active' : 'inactive'\"\n [attr.data-type]=\"zType()\"\n [attr.data-orientation]=\"zOrientation()\"\n [attr.data-last]=\"last\"\n [attr.aria-selected]=\"item.isActive\"\n [attr.aria-controls]=\"'panel-' + item.tab.value\"\n [disabled]=\"item.tab.disabled\"\n [tabindex]=\"item.isActive ? 0 : -1\"\n z-tooltip\n [zContent]=\"zOrientation() === 'vertical' ? (item.tab.label | translate) : ''\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n (click)=\"selectTab(item.tab)\"\n (keydown)=\"onTabKeydown($event, idx)\">\n @if (item.tab.icon) {\n <z-icon\n [zType]=\"item.tab.icon\"\n zSize=\"16\"\n class=\"shrink-0\"\n [class.z-tab-icon-bounce]=\"isGlideType() && bouncingTab() === item.tab.value\" />\n }\n <span\n class=\"z-tab-item-label min-w-0 flex-1 truncate text-left\"\n [class.z-tab-icon-bounce]=\"isGlideType() && bouncingTab() === item.tab.value\">\n {{ item.tab.label | translate }}\n </span>\n @if (item.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 {{ item.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 @if (!zLazy()) {\n @for (panel of tabPanels(); track panel.zTabPanel()) {\n <div\n role=\"tabpanel\"\n [id]=\"'panel-' + panel.zTabPanel()\"\n [attr.aria-labelledby]=\"panel.zTabPanel()\"\n [attr.data-state]=\"activeTab() === panel.zTabPanel() ? 'active' : 'inactive'\"\n [attr.inert]=\"activeTab() === panel.zTabPanel() ? null : ''\">\n <ng-container *ngTemplateOutlet=\"panel.template\" />\n </div>\n }\n } @else if (renderedTab()) {\n <div role=\"tabpanel\" [id]=\"'panel-' + renderedTab()\" [attr.aria-labelledby]=\"renderedTab()\" data-state=\"active\">\n <ng-container #panelHost />\n </div>\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 (item of tabItems(); track item.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]=\"!item.isActive\"\n [class.focus:bg-primary/10]=\"!item.isActive\"\n [class.bg-primary/15]=\"item.isActive\"\n [class.text-primary]=\"item.isActive\"\n [disabled]=\"item.tab.disabled\"\n (click)=\"selectTab(item.tab, true); close()\">\n @if (item.tab.icon) {\n <z-icon [zType]=\"item.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]=\"item.tab.label | translate\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n [zTriggerElement]=\"dropdownItem\">\n {{ item.tab.label | translate }}\n </span>\n @if (item.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 {{ item.tab.badge }}\n </span>\n }\n @if (item.isActive) {\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-scroll-wrapper.z-tabs-scroll-wrapper-fade-left{mask-image:linear-gradient(to right,transparent 0,black var(--z-tabs-fade-width),black 100%);-webkit-mask-image:linear-gradient(to right,transparent 0,black var(--z-tabs-fade-width),black 100%)}.z-tabs-scroll-wrapper.z-tabs-scroll-wrapper-fade-right{mask-image:linear-gradient(to left,transparent 0,black var(--z-tabs-fade-width),black 100%);-webkit-mask-image:linear-gradient(to left,transparent 0,black var(--z-tabs-fade-width),black 100%)}.z-tabs-scroll-wrapper.z-tabs-scroll-wrapper-fade-left.z-tabs-scroll-wrapper-fade-right{mask-image:linear-gradient(to right,transparent 0,black var(--z-tabs-fade-width),black calc(100% - var(--z-tabs-fade-width)),transparent 100%);-webkit-mask-image:linear-gradient(to right,transparent 0,black var(--z-tabs-fade-width),black calc(100% - var(--z-tabs-fade-width)),transparent 100%)}.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-container:is([data-type=segment],[data-type=segment-solid],[data-type=pill-solid],[data-type=pill-blur]) .z-tabs-scroll-container-surface{background:color-mix(in oklab,var(--background) 72%,var(--muted));border:.0625rem solid color-mix(in oklab,var(--background) 88%,var(--border));box-shadow:0 .0625rem .1875rem #0000000f,0 .125rem .5rem #00000014;backdrop-filter:blur(.75rem) saturate(140%);-webkit-backdrop-filter:blur(.75rem) saturate(140%)}.z-tabs-container:is([data-type=segment],[data-type=segment-solid],[data-type=pill-solid],[data-type=pill-blur]) .z-tabs-scroll-container-surface .z-tabs{background:transparent}.z-tabs-container:is([data-type=segment],[data-type=segment-solid]) .z-tabs-scroll-container-surface{border-radius:.5rem;overflow:hidden}.z-tabs-container:is([data-type=pill-solid],[data-type=pill-blur]) .z-tabs-scroll-container-surface{border-radius:9999px;overflow:hidden}.dark .z-tabs-container:is([data-type=segment],[data-type=segment-solid],[data-type=pill-solid],[data-type=pill-blur]) .z-tabs-scroll-container-surface{background:color-mix(in oklab,var(--muted) 35%,transparent);border-color:color-mix(in oklab,var(--border) 65%,transparent);box-shadow:0 .0625rem .1875rem #0000002e,0 .125rem .5rem #0000003d}.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-tabs-nav-surface{background:color-mix(in oklab,var(--background) 72%,var(--muted));border:.0625rem solid color-mix(in oklab,oklch(95% 0 0deg) 88%,var(--border));border-radius:.5rem;padding:.125rem;box-shadow:0 .0625rem .1875rem #0000000f,0 .125rem .5rem #00000014;backdrop-filter:blur(.75rem) saturate(140%);-webkit-backdrop-filter:blur(.75rem) saturate(140%)}.z-tabs-nav-surface .z-tabs{background:transparent}.z-tabs-container:is([data-type=pill-solid],[data-type=pill-blur]) .z-tabs-nav-surface{border-radius:9999px}.dark .z-tabs-nav-surface{background:color-mix(in oklab,var(--muted) 35%,transparent);border-color:color-mix(in oklab,var(--border) 65%,transparent);box-shadow:0 .0625rem .1875rem #0000002e,0 .125rem .5rem #0000003d}.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][data-state=active]{animation:z-tabs-fade-in .18s ease-out}.z-tabs-panels [role=tabpanel][data-state=inactive]{content-visibility:hidden}@supports not (content-visibility: hidden){.z-tabs-panels [role=tabpanel][data-state=inactive]{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{isolation:isolate;position:relative}.z-tabs-container[data-type=line][data-orientation=horizontal] .z-tabs .z-tab-item[data-active=true]{z-index:1}.z-tabs-container[data-type=line][data-orientation=horizontal] .z-tabs .z-tab-item[data-active=true]:after{z-index:1}.z-tabs-container[data-type=line][data-orientation=horizontal] .z-tabs: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=square],[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=square],[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=square],[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],[data-type=pill-solid],[data-type=pill-blur]) .z-tabs{align-items:center}.z-tabs-glide-indicator{transition:none;transform-origin:0 0;opacity:0;will-change:transform}.z-tabs-glide-indicator[data-type=segment],.z-tabs-glide-indicator[data-type=segment-solid]{border-radius:.3125rem;overflow:hidden;background:var(--background);box-shadow:0 .0625rem .1875rem #00000014,0 .0625rem .125rem #0000000f}.z-tabs-glide-indicator[data-type=pill-solid],.z-tabs-glide-indicator[data-type=pill-blur]{border-radius:9999px;overflow:hidden}.z-tabs-glide-indicator[data-type=pill-solid]{background:var(--background);box-shadow:0 .0625rem .1875rem #00000014,0 .0625rem .125rem #0000000f}.z-tabs-glide-indicator[data-type=segment-solid]{background:var(--primary)}.z-tabs-glide-indicator[data-type=pill-blur]{background:linear-gradient(to bottom,color-mix(in oklab,white 22%,transparent) 0%,color-mix(in oklab,white 6%,transparent) 45%,transparent 100%),color-mix(in oklab,var(--background) 55%,transparent);box-shadow:inset 0 0 0 1px color-mix(in oklab,white 25%,transparent),inset 0 .0625rem color-mix(in oklab,white 45%,transparent),0 .125rem .5rem #0000001a,0 .0625rem .125rem #0000000f;backdrop-filter:blur(.75rem) saturate(180%);-webkit-backdrop-filter:blur(.75rem) saturate(180%)}.dark .z-tabs-glide-indicator[data-type=pill-blur]{background:linear-gradient(to bottom,color-mix(in oklab,white 12%,transparent) 0%,color-mix(in oklab,white 3%,transparent) 45%,transparent 100%),color-mix(in oklab,var(--background) 45%,transparent);box-shadow:inset 0 0 0 1px color-mix(in oklab,white 10%,transparent),inset 0 .0625rem color-mix(in oklab,white 16%,transparent),0 .125rem .5rem #00000059,0 .0625rem .125rem #0003}@keyframes z-tab-icon-bounce{0%{transform:scale(1)}35%{transform:scale(.97)}to{transform:scale(1)}}.z-tab-icon-bounce{animation:z-tab-icon-bounce .32s cubic-bezier(.34,1.56,.64,1)}.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][data-state=active],.z-tab-icon-bounce{animation:none!important}}@keyframes z-tabs-fade-in{0%{opacity:0}to{opacity:1}}\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 });
|
|
1075
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1076
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", 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 }, zContentAnimation: { classPropertyName: "zContentAnimation", publicName: "zContentAnimation", isSignal: true, isRequired: false, transformFunction: null }, zLazy: { classPropertyName: "zLazy", publicName: "zLazy", isSignal: true, isRequired: false, transformFunction: null }, zTabsOnly: { classPropertyName: "zTabsOnly", publicName: "zTabsOnly", isSignal: true, isRequired: false, transformFunction: null }, zShowNavWrapper: { classPropertyName: "zShowNavWrapper", publicName: "zShowNavWrapper", isSignal: true, isRequired: false, transformFunction: null }, zNavFullWidth: { classPropertyName: "zNavFullWidth", publicName: "zNavFullWidth", isSignal: true, isRequired: false, transformFunction: null }, zClassContent: { classPropertyName: "zClassContent", publicName: "zClassContent", 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 }, { propertyName: "glideIndicator", first: true, predicate: ["glideIndicator"], descendants: true, isSignal: true }, { propertyName: "hoverIndicator", first: true, predicate: ["hoverIndicator"], descendants: true, isSignal: true }, { propertyName: "tabsList", first: true, predicate: ["tabsList"], descendants: true, isSignal: true }, { propertyName: "panelsHost", first: true, predicate: ["panelsHost"], descendants: true, isSignal: true }, { propertyName: "panelHost", first: true, predicate: ["panelHost"], descendants: true, read: ViewContainerRef, 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]=\"navClasses()\"\n [class.z-tabs-nav-surface]=\"zShowNavWrapper() && isGlideType()\"\n [class.w-full]=\"zOrientation() === 'horizontal' && (!zShowNavWrapper() || zNavFullWidth())\"\n [class.w-fit]=\"zOrientation() === 'horizontal' && zShowNavWrapper() && !zNavFullWidth()\"\n [class.max-w-full]=\"zOrientation() === 'horizontal' && zShowNavWrapper() && !zNavFullWidth()\"\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 z-tabs-nav-prev 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\n class=\"z-tabs-scroll-container relative min-w-0 flex-1\"\n [class.z-tabs-scroll-container-surface]=\"(canScrollLeft() || canScrollRight()) && !zShowNavWrapper()\"\n [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 [class.z-tabs-scroll-wrapper-fade-left]=\"canScrollLeft()\"\n [class.z-tabs-scroll-wrapper-fade-right]=\"canScrollRight()\"\n (scroll)=\"onTabsScroll()\">\n <ng-container *ngTemplateOutlet=\"tabsListTpl\" />\n </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 z-tabs-nav-next 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 z-tabs-nav-menu 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 #tabsList\n [class]=\"tabsClasses()\"\n [class.pb-0.5]=\"tabsListHasBottomPadding()\"\n role=\"tablist\"\n [attr.aria-orientation]=\"zOrientation()\"\n [attr.data-type]=\"zType()\">\n @if (isHoverGlideType()) {\n <div\n #hoverIndicator\n class=\"z-tabs-hover-indicator pointer-events-none absolute top-0 left-0 z-[5]\"\n [attr.data-type]=\"zType()\"\n aria-hidden=\"true\"></div>\n }\n @if (isGlideType()) {\n <div\n #glideIndicator\n class=\"z-tabs-glide-indicator pointer-events-none absolute top-0 left-0 z-[6]\"\n [attr.data-type]=\"zType()\"\n aria-hidden=\"true\"></div>\n }\n @for (item of tabItems(); track item.tab.value; let idx = $index; let last = $last) {\n <button\n #tabButton\n type=\"button\"\n role=\"tab\"\n [class]=\"item.classes\"\n [class.z-tab-item-has-icon]=\"!!item.tab.icon || !!item.tab.iconTemplate\"\n [attr.data-active]=\"item.isActive\"\n [attr.data-state]=\"item.isActive ? 'active' : 'inactive'\"\n [attr.data-type]=\"zType()\"\n [attr.data-orientation]=\"zOrientation()\"\n [attr.data-last]=\"last\"\n [attr.aria-selected]=\"item.isActive\"\n [attr.aria-controls]=\"'panel-' + item.tab.value\"\n [disabled]=\"item.tab.disabled\"\n [tabindex]=\"item.isActive ? 0 : -1\"\n z-tooltip\n [zContent]=\"showsTabTooltip() ? (item.tab.label | translate) : ''\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n (click)=\"selectTab(item.tab)\"\n (keydown)=\"onTabKeydown($event, idx)\"\n (mouseenter)=\"onTabHover(item.tab)\"\n (mouseleave)=\"onTabHoverEnd()\"\n (focus)=\"onTabHover(item.tab)\"\n (blur)=\"onTabHoverEnd()\">\n @if (item.tab.iconTemplate) {\n <span class=\"shrink-0\" [class.z-tab-icon-bounce]=\"isGlideType() && bouncingTab() === item.tab.value\">\n <ng-container *ngTemplateOutlet=\"item.tab.iconTemplate; context: { $implicit: item.tab }\" />\n </span>\n } @else if (item.tab.icon) {\n <z-icon\n [zType]=\"item.tab.icon\"\n zSize=\"16\"\n class=\"shrink-0\"\n [class.z-tab-icon-bounce]=\"isGlideType() && bouncingTab() === item.tab.value\" />\n }\n <span\n class=\"z-tab-item-label min-w-0 flex-1 truncate text-left\"\n [class.z-tab-icon-bounce]=\"isGlideType() && bouncingTab() === item.tab.value\">\n {{ item.tab.label | translate }}\n </span>\n @if (item.tab.badge) {\n <span\n class=\"ring-background ml-1.5 inline-flex h-5 min-w-5 items-center justify-center rounded-(--radius-pill) 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 {{ item.tab.badge }}\n </span>\n }\n </button>\n }\n </div>\n </ng-template>\n\n <!-- Tab Panels -->\n @if (!zTabsOnly()) {\n <div\n #panelsHost\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 @if (!zLazy()) {\n @for (panel of tabPanels(); track panel.zTabPanel()) {\n <div\n role=\"tabpanel\"\n [id]=\"'panel-' + panel.zTabPanel()\"\n [attr.aria-labelledby]=\"panel.zTabPanel()\"\n [attr.data-state]=\"activeTab() === panel.zTabPanel() ? 'active' : 'inactive'\"\n [attr.inert]=\"activeTab() === panel.zTabPanel() ? null : ''\">\n <ng-container *ngTemplateOutlet=\"panel.template\" />\n </div>\n }\n } @else if (renderedTab()) {\n <div role=\"tabpanel\" [id]=\"'panel-' + renderedTab()\" [attr.aria-labelledby]=\"renderedTab()\" data-state=\"active\">\n <ng-container #panelHost />\n </div>\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 (item of tabItems(); track item.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]=\"!item.isActive\"\n [class.focus:bg-primary/10]=\"!item.isActive\"\n [class.bg-primary/15]=\"item.isActive\"\n [class.text-primary]=\"item.isActive\"\n [disabled]=\"item.tab.disabled\"\n (click)=\"selectTab(item.tab, true); close()\">\n @if (item.tab.icon) {\n <z-icon [zType]=\"item.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]=\"item.tab.label | translate\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n [zTriggerElement]=\"dropdownItem\">\n {{ item.tab.label | translate }}\n </span>\n @if (item.tab.badge) {\n <span\n class=\"bg-primary text-primary-foreground inline-flex h-5 min-w-5 items-center justify-center rounded-(--radius-pill) px-1.5 text-xs font-semibold\">\n {{ item.tab.badge }}\n </span>\n }\n @if (item.isActive) {\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:visible;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{overflow:visible}.z-tabs-scroll-wrapper.vertical.z-tabs-scroll-wrapper-limited{height:var(--z-tabs-vertical-max-height, min(22rem, 60vh));max-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-scroll-wrapper.z-tabs-scroll-wrapper-fade-left{mask-image:linear-gradient(to right,transparent 0,black var(--z-tabs-fade-width),black 100%);-webkit-mask-image:linear-gradient(to right,transparent 0,black var(--z-tabs-fade-width),black 100%)}.z-tabs-scroll-wrapper.z-tabs-scroll-wrapper-fade-right{mask-image:linear-gradient(to left,transparent 0,black var(--z-tabs-fade-width),black 100%);-webkit-mask-image:linear-gradient(to left,transparent 0,black var(--z-tabs-fade-width),black 100%)}.z-tabs-scroll-wrapper.z-tabs-scroll-wrapper-fade-left.z-tabs-scroll-wrapper-fade-right{mask-image:linear-gradient(to right,transparent 0,black var(--z-tabs-fade-width),black calc(100% - var(--z-tabs-fade-width)),transparent 100%);-webkit-mask-image:linear-gradient(to right,transparent 0,black var(--z-tabs-fade-width),black calc(100% - var(--z-tabs-fade-width)),transparent 100%)}.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-container:is([data-type=segment],[data-type=segment-solid],[data-type=pill-solid],[data-type=pill-blur])>.z-tabs-nav>.z-tabs-scroll-container-surface{background:color-mix(in oklab,var(--background) 72%,var(--muted));border:.0625rem solid color-mix(in oklab,var(--background) 88%,var(--border));box-shadow:0 .0625rem .1875rem #0000000f,0 .125rem .5rem #00000014;backdrop-filter:blur(.75rem) saturate(140%);-webkit-backdrop-filter:blur(.75rem) saturate(140%)}.z-tabs-container:is([data-type=segment],[data-type=segment-solid],[data-type=pill-solid],[data-type=pill-blur])>.z-tabs-nav>.z-tabs-scroll-container-surface .z-tabs{background:transparent}.z-tabs-container:is([data-type=segment],[data-type=segment-solid])>.z-tabs-nav>.z-tabs-scroll-container-surface{border-radius:var(--radius-sm);overflow:hidden}.z-tabs-container:is([data-type=pill-solid],[data-type=pill-blur])>.z-tabs-nav>.z-tabs-scroll-container-surface{border-radius:9999px;overflow:hidden}.dark .z-tabs-container:is([data-type=segment],[data-type=segment-solid],[data-type=pill-solid],[data-type=pill-blur])>.z-tabs-nav>.z-tabs-scroll-container-surface{background:color-mix(in oklab,var(--muted) 35%,transparent);border-color:color-mix(in oklab,var(--border) 65%,transparent);box-shadow:0 .0625rem .1875rem #0000002e,0 .125rem .5rem #0000003d}.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-tabs-nav-surface{border:0;border-radius:var(--radius-sm);padding:0;box-shadow:0 0 0 .0625rem color-mix(in oklab,oklch(95% 0 0deg) 88%,var(--border)),0 .0625rem .1875rem #0000000f,0 .125rem .5rem #00000014}.z-tabs-container:is([data-type=pill-solid],[data-type=pill-blur],[data-type=pill-float],[data-type=pill-primary],[data-type=assistant]) .z-tabs-nav-surface{border-radius:9999px}.z-tabs-container:is([data-type=pill-float],[data-type=pill-primary])[data-orientation=horizontal]>.z-tabs-nav-surface{padding-inline:.125rem}.dark .z-tabs-nav-surface{box-shadow:0 0 0 .0625rem color-mix(in oklab,var(--border) 65%,transparent),0 .0625rem .1875rem #0000002e,0 .125rem .5rem #0000003d}.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][data-state=inactive]{content-visibility:hidden}@supports not (content-visibility: hidden){.z-tabs-panels [role=tabpanel][data-state=inactive]{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{isolation:isolate;position:relative}.z-tabs-container[data-type=line][data-orientation=horizontal] .z-tabs .z-tab-item[data-active=true]{z-index:1}.z-tabs-container[data-type=line][data-orientation=horizontal] .z-tabs .z-tab-item[data-active=true]:after{z-index:1}.z-tabs-container[data-type=line][data-orientation=horizontal] .z-tabs: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=square],[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=square],[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=square],[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],[data-type=pill-solid],[data-type=pill-blur],[data-type=pill-float]) .z-tabs{align-items:center}.z-tabs-container:is([data-type=pill-primary],[data-type=assistant],[data-type=bar])[data-orientation=horizontal] .z-tabs{align-items:center}.z-tabs-container[data-type=pill-float][data-orientation=horizontal] .z-tabs-nav{position:relative;gap:0}.z-tabs-container[data-type=pill-float][data-orientation=horizontal] .z-tabs-scroll-container{--z-tabs-fade-width: 2.75rem}.z-tabs-container[data-type=pill-float][data-orientation=horizontal] .z-tabs-nav-control{position:absolute;top:50%;z-index:2;width:1.5rem;min-width:1.5rem;height:1.5rem;min-height:1.5rem;padding:0;border-radius:9999px;transform:translateY(-50%);background:color-mix(in oklab,var(--muted) 90%,var(--background));color:var(--foreground)}.z-tabs-container[data-type=pill-float][data-orientation=horizontal] .z-tabs-nav-control:hover{background:color-mix(in oklab,var(--muted) 70%,var(--foreground) 12%)}.z-tabs-container[data-type=pill-float][data-orientation=horizontal] .z-tabs-nav-prev{left:0}.z-tabs-container[data-type=pill-float][data-orientation=horizontal] .z-tabs-nav-next{right:0}.z-tabs-container[data-type=pill-float][data-orientation=horizontal] .z-tabs-nav-menu{display:none}.z-tabs-glide-indicator{transition:none;transform-origin:0 0;opacity:0;will-change:transform}.z-tabs-glide-indicator[data-type=segment],.z-tabs-glide-indicator[data-type=segment-solid]{border-radius:var(--radius-sm);overflow:hidden;background:var(--background);box-shadow:0 .0625rem .1875rem #00000014,0 .0625rem .125rem #0000000f}.z-tabs-glide-indicator[data-type=pill-solid],.z-tabs-glide-indicator[data-type=pill-blur],.z-tabs-glide-indicator[data-type=pill-float],.z-tabs-glide-indicator[data-type=pill-primary]{border-radius:9999px;overflow:hidden}.z-tabs-glide-indicator:is([data-type=pill-float],[data-type=pill-primary]){background:var(--primary);box-shadow:0 .0625rem .1875rem #0000001a,0 .0625rem .125rem #00000014}.z-tabs-glide-indicator[data-type=assistant]{border-radius:var(--radius-sm);background:var(--primary);box-shadow:0 .0625rem .125rem #0000000d}.z-tabs-glide-indicator[data-type=bar]{border-radius:var(--radius-sm);background:color-mix(in oklab,var(--primary) 10%,transparent);box-shadow:inset 0 0 0 .0625rem var(--background),0 .0625rem .1875rem #0000001a,0 .0625rem .125rem -.0625rem #0000001a}.dark .z-tabs-glide-indicator[data-type=bar]{box-shadow:inset 0 0 0 .0625rem color-mix(in oklab,white 12%,transparent),0 .125rem .5rem #00000059,0 .0625rem .125rem #0003}.z-tabs-glide-indicator[data-type=underline-hover]{background:transparent}.z-tabs-glide-indicator:is([data-type=bar],[data-type=underline-hover]):before{content:\"\";position:absolute;background:var(--primary);border-radius:9999px}.z-tabs-glide-indicator[data-type=pill-solid]{background:var(--background);box-shadow:0 .0625rem .1875rem #00000014,0 .0625rem .125rem #0000000f}.z-tabs-glide-indicator[data-type=segment-solid]{background:var(--primary)}.z-tabs-glide-indicator[data-type=pill-blur]{background:linear-gradient(to bottom,color-mix(in oklab,white 22%,transparent) 0%,color-mix(in oklab,white 6%,transparent) 45%,transparent 100%),color-mix(in oklab,var(--background) 55%,transparent);box-shadow:inset 0 0 0 1px color-mix(in oklab,white 25%,transparent),inset 0 .0625rem color-mix(in oklab,white 45%,transparent),0 .125rem .5rem #0000001a,0 .0625rem .125rem #0000000f;backdrop-filter:blur(.75rem) saturate(180%);-webkit-backdrop-filter:blur(.75rem) saturate(180%)}.dark .z-tabs-glide-indicator[data-type=pill-blur]{background:linear-gradient(to bottom,color-mix(in oklab,white 12%,transparent) 0%,color-mix(in oklab,white 3%,transparent) 45%,transparent 100%),color-mix(in oklab,var(--background) 45%,transparent);box-shadow:inset 0 0 0 1px color-mix(in oklab,white 10%,transparent),inset 0 .0625rem color-mix(in oklab,white 16%,transparent),0 .125rem .5rem #00000059,0 .0625rem .125rem #0003}.z-tabs-container[data-orientation=horizontal] .z-tabs-glide-indicator[data-type=bar]:before{right:25%;bottom:0;left:25%;height:.25rem;border-radius:9999px 9999px 0 0}.z-tabs-container[data-orientation=horizontal] .z-tabs-glide-indicator[data-type=underline-hover]:before{right:0;bottom:0;left:0;height:.125rem;border-radius:0}.z-tabs-container[data-orientation=vertical] .z-tabs-glide-indicator[data-type=bar]:before{inset:25% auto auto 0;width:.25rem;height:50%;border-radius:0 9999px 9999px 0}.z-tabs-container[data-orientation=vertical] .z-tabs-glide-indicator[data-type=underline-hover]:before{inset:0 0 auto auto;width:.125rem;height:100%;border-radius:0}.z-tabs-container:is([data-type=pill-primary],[data-type=assistant],[data-type=bar]) .z-tab-item:hover:not([data-active=true]):not(:disabled){background:color-mix(in oklab,var(--muted) 50%,transparent)}.z-tabs-container:is([data-type=pill-primary],[data-type=assistant],[data-type=underline-hover],[data-type=bar]) .z-tab-item:focus-visible{box-shadow:0 0 0 .1875rem color-mix(in oklab,var(--ring) 50%,transparent)!important}.z-tabs-hover-indicator{transform-origin:0 0;opacity:0;border-radius:var(--radius-sm);background:color-mix(in oklab,var(--muted) 70%,transparent);transition:transform .18s cubic-bezier(.22,1,.36,1),width .18s cubic-bezier(.22,1,.36,1),height .18s cubic-bezier(.22,1,.36,1),opacity .15s ease-out}.z-tabs-container[data-type=underline-hover] .z-tabs:after{content:\"\";position:absolute;background:color-mix(in oklab,var(--border) 80%,transparent);pointer-events:none;z-index:0}.z-tabs-container[data-type=underline-hover][data-orientation=horizontal] .z-tabs:after{right:0;bottom:0;left:0;height:.0625rem}.z-tabs-container[data-type=underline-hover][data-orientation=vertical] .z-tabs:after{top:0;right:0;bottom:0;width:.0625rem}.z-tabs-container[data-type=assistant][data-orientation=horizontal] .z-tab-item{transition:background-color .3s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),color .2s ease}.z-tabs-container[data-type=assistant][data-orientation=horizontal] .z-tab-item[data-active=true]{background:var(--primary);box-shadow:0 .0625rem .125rem #0000000d}.z-tabs-container[data-type=assistant][data-orientation=horizontal] .z-tab-item{gap:0}.z-tabs-container[data-type=assistant][data-orientation=horizontal] .z-tab-item.z-tab-item-has-icon .z-tab-item-label{flex:none;overflow:hidden;text-overflow:clip;margin-inline-start:.375rem;opacity:1;transition:width .3s cubic-bezier(.4,0,.2,1),margin-inline-start .3s cubic-bezier(.4,0,.2,1),opacity .2s ease-out}.z-tabs-container[data-type=assistant][data-orientation=horizontal] .z-tab-item.z-tab-item-has-icon[data-active=false] .z-tab-item-label{margin-inline-start:0;opacity:0}@keyframes z-tab-icon-bounce{0%{transform:scale(1)}35%{transform:scale(.97)}to{transform:scale(1)}}.z-tab-icon-bounce{animation:z-tab-icon-bounce .32s cubic-bezier(.34,1.56,.64,1)}.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,.z-tabs-hover-indicator,.z-tabs-container[data-type=assistant] .z-tab-item,.z-tabs-container[data-type=assistant] .z-tab-item-label{transition:none!important}.z-tabs-scroll-wrapper{scroll-behavior:auto}.z-tab-icon-bounce{animation:none!important}}\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 });
|
|
781
1077
|
}
|
|
782
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
1078
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZTabsComponent, decorators: [{
|
|
783
1079
|
type: Component,
|
|
784
1080
|
args: [{ selector: 'z-tabs', imports: [
|
|
785
1081
|
ZIconComponent,
|
|
@@ -791,8 +1087,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
|
|
|
791
1087
|
NgScrollbar,
|
|
792
1088
|
], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
793
1089
|
class: 'z-tabs-wrapper block',
|
|
794
|
-
}, 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]=\"navClasses()\"\n [class.z-tabs-nav-surface]=\"zShowNavWrapper() && isGlideType()\"\n [class.w-full]=\"zOrientation() === 'horizontal' && (!zShowNavWrapper() || zNavFullWidth())\"\n [class.w-fit]=\"zOrientation() === 'horizontal' && zShowNavWrapper() && !zNavFullWidth()\"\n [class.max-w-full]=\"zOrientation() === 'horizontal' && zShowNavWrapper() && !zNavFullWidth()\"\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\n class=\"z-tabs-scroll-container relative min-w-0 flex-1\"\n [class.z-tabs-scroll-container-surface]=\"canScrollLeft() || canScrollRight()\"\n [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 [class.z-tabs-scroll-wrapper-fade-left]=\"canScrollLeft()\"\n [class.z-tabs-scroll-wrapper-fade-right]=\"canScrollRight()\"\n (scroll)=\"onTabsScroll()\">\n <ng-container *ngTemplateOutlet=\"tabsListTpl\" />\n </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 @if (isGlideType()) {\n <div\n #glideIndicator\n class=\"z-tabs-glide-indicator pointer-events-none absolute top-0 left-0 z-[6]\"\n [attr.data-type]=\"zType()\"\n aria-hidden=\"true\"></div>\n }\n @for (item of tabItems(); track item.tab.value; let idx = $index; let last = $last) {\n <button\n #tabButton\n type=\"button\"\n role=\"tab\"\n [class]=\"item.classes\"\n [attr.data-active]=\"item.isActive\"\n [attr.data-state]=\"item.isActive ? 'active' : 'inactive'\"\n [attr.data-type]=\"zType()\"\n [attr.data-orientation]=\"zOrientation()\"\n [attr.data-last]=\"last\"\n [attr.aria-selected]=\"item.isActive\"\n [attr.aria-controls]=\"'panel-' + item.tab.value\"\n [disabled]=\"item.tab.disabled\"\n [tabindex]=\"item.isActive ? 0 : -1\"\n z-tooltip\n [zContent]=\"zOrientation() === 'vertical' ? (item.tab.label | translate) : ''\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n (click)=\"selectTab(item.tab)\"\n (keydown)=\"onTabKeydown($event, idx)\">\n @if (item.tab.icon) {\n <z-icon\n [zType]=\"item.tab.icon\"\n zSize=\"16\"\n class=\"shrink-0\"\n [class.z-tab-icon-bounce]=\"isGlideType() && bouncingTab() === item.tab.value\" />\n }\n <span\n class=\"z-tab-item-label min-w-0 flex-1 truncate text-left\"\n [class.z-tab-icon-bounce]=\"isGlideType() && bouncingTab() === item.tab.value\">\n {{ item.tab.label | translate }}\n </span>\n @if (item.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 {{ item.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 @if (!zLazy()) {\n @for (panel of tabPanels(); track panel.zTabPanel()) {\n <div\n role=\"tabpanel\"\n [id]=\"'panel-' + panel.zTabPanel()\"\n [attr.aria-labelledby]=\"panel.zTabPanel()\"\n [attr.data-state]=\"activeTab() === panel.zTabPanel() ? 'active' : 'inactive'\"\n [attr.inert]=\"activeTab() === panel.zTabPanel() ? null : ''\">\n <ng-container *ngTemplateOutlet=\"panel.template\" />\n </div>\n }\n } @else if (renderedTab()) {\n <div role=\"tabpanel\" [id]=\"'panel-' + renderedTab()\" [attr.aria-labelledby]=\"renderedTab()\" data-state=\"active\">\n <ng-container #panelHost />\n </div>\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 (item of tabItems(); track item.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]=\"!item.isActive\"\n [class.focus:bg-primary/10]=\"!item.isActive\"\n [class.bg-primary/15]=\"item.isActive\"\n [class.text-primary]=\"item.isActive\"\n [disabled]=\"item.tab.disabled\"\n (click)=\"selectTab(item.tab, true); close()\">\n @if (item.tab.icon) {\n <z-icon [zType]=\"item.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]=\"item.tab.label | translate\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n [zTriggerElement]=\"dropdownItem\">\n {{ item.tab.label | translate }}\n </span>\n @if (item.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 {{ item.tab.badge }}\n </span>\n }\n @if (item.isActive) {\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-scroll-wrapper.z-tabs-scroll-wrapper-fade-left{mask-image:linear-gradient(to right,transparent 0,black var(--z-tabs-fade-width),black 100%);-webkit-mask-image:linear-gradient(to right,transparent 0,black var(--z-tabs-fade-width),black 100%)}.z-tabs-scroll-wrapper.z-tabs-scroll-wrapper-fade-right{mask-image:linear-gradient(to left,transparent 0,black var(--z-tabs-fade-width),black 100%);-webkit-mask-image:linear-gradient(to left,transparent 0,black var(--z-tabs-fade-width),black 100%)}.z-tabs-scroll-wrapper.z-tabs-scroll-wrapper-fade-left.z-tabs-scroll-wrapper-fade-right{mask-image:linear-gradient(to right,transparent 0,black var(--z-tabs-fade-width),black calc(100% - var(--z-tabs-fade-width)),transparent 100%);-webkit-mask-image:linear-gradient(to right,transparent 0,black var(--z-tabs-fade-width),black calc(100% - var(--z-tabs-fade-width)),transparent 100%)}.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-container:is([data-type=segment],[data-type=segment-solid],[data-type=pill-solid],[data-type=pill-blur]) .z-tabs-scroll-container-surface{background:color-mix(in oklab,var(--background) 72%,var(--muted));border:.0625rem solid color-mix(in oklab,var(--background) 88%,var(--border));box-shadow:0 .0625rem .1875rem #0000000f,0 .125rem .5rem #00000014;backdrop-filter:blur(.75rem) saturate(140%);-webkit-backdrop-filter:blur(.75rem) saturate(140%)}.z-tabs-container:is([data-type=segment],[data-type=segment-solid],[data-type=pill-solid],[data-type=pill-blur]) .z-tabs-scroll-container-surface .z-tabs{background:transparent}.z-tabs-container:is([data-type=segment],[data-type=segment-solid]) .z-tabs-scroll-container-surface{border-radius:.5rem;overflow:hidden}.z-tabs-container:is([data-type=pill-solid],[data-type=pill-blur]) .z-tabs-scroll-container-surface{border-radius:9999px;overflow:hidden}.dark .z-tabs-container:is([data-type=segment],[data-type=segment-solid],[data-type=pill-solid],[data-type=pill-blur]) .z-tabs-scroll-container-surface{background:color-mix(in oklab,var(--muted) 35%,transparent);border-color:color-mix(in oklab,var(--border) 65%,transparent);box-shadow:0 .0625rem .1875rem #0000002e,0 .125rem .5rem #0000003d}.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-tabs-nav-surface{background:color-mix(in oklab,var(--background) 72%,var(--muted));border:.0625rem solid color-mix(in oklab,oklch(95% 0 0deg) 88%,var(--border));border-radius:.5rem;padding:.125rem;box-shadow:0 .0625rem .1875rem #0000000f,0 .125rem .5rem #00000014;backdrop-filter:blur(.75rem) saturate(140%);-webkit-backdrop-filter:blur(.75rem) saturate(140%)}.z-tabs-nav-surface .z-tabs{background:transparent}.z-tabs-container:is([data-type=pill-solid],[data-type=pill-blur]) .z-tabs-nav-surface{border-radius:9999px}.dark .z-tabs-nav-surface{background:color-mix(in oklab,var(--muted) 35%,transparent);border-color:color-mix(in oklab,var(--border) 65%,transparent);box-shadow:0 .0625rem .1875rem #0000002e,0 .125rem .5rem #0000003d}.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][data-state=active]{animation:z-tabs-fade-in .18s ease-out}.z-tabs-panels [role=tabpanel][data-state=inactive]{content-visibility:hidden}@supports not (content-visibility: hidden){.z-tabs-panels [role=tabpanel][data-state=inactive]{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{isolation:isolate;position:relative}.z-tabs-container[data-type=line][data-orientation=horizontal] .z-tabs .z-tab-item[data-active=true]{z-index:1}.z-tabs-container[data-type=line][data-orientation=horizontal] .z-tabs .z-tab-item[data-active=true]:after{z-index:1}.z-tabs-container[data-type=line][data-orientation=horizontal] .z-tabs: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=square],[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=square],[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=square],[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],[data-type=pill-solid],[data-type=pill-blur]) .z-tabs{align-items:center}.z-tabs-glide-indicator{transition:none;transform-origin:0 0;opacity:0;will-change:transform}.z-tabs-glide-indicator[data-type=segment],.z-tabs-glide-indicator[data-type=segment-solid]{border-radius:.3125rem;overflow:hidden;background:var(--background);box-shadow:0 .0625rem .1875rem #00000014,0 .0625rem .125rem #0000000f}.z-tabs-glide-indicator[data-type=pill-solid],.z-tabs-glide-indicator[data-type=pill-blur]{border-radius:9999px;overflow:hidden}.z-tabs-glide-indicator[data-type=pill-solid]{background:var(--background);box-shadow:0 .0625rem .1875rem #00000014,0 .0625rem .125rem #0000000f}.z-tabs-glide-indicator[data-type=segment-solid]{background:var(--primary)}.z-tabs-glide-indicator[data-type=pill-blur]{background:linear-gradient(to bottom,color-mix(in oklab,white 22%,transparent) 0%,color-mix(in oklab,white 6%,transparent) 45%,transparent 100%),color-mix(in oklab,var(--background) 55%,transparent);box-shadow:inset 0 0 0 1px color-mix(in oklab,white 25%,transparent),inset 0 .0625rem color-mix(in oklab,white 45%,transparent),0 .125rem .5rem #0000001a,0 .0625rem .125rem #0000000f;backdrop-filter:blur(.75rem) saturate(180%);-webkit-backdrop-filter:blur(.75rem) saturate(180%)}.dark .z-tabs-glide-indicator[data-type=pill-blur]{background:linear-gradient(to bottom,color-mix(in oklab,white 12%,transparent) 0%,color-mix(in oklab,white 3%,transparent) 45%,transparent 100%),color-mix(in oklab,var(--background) 45%,transparent);box-shadow:inset 0 0 0 1px color-mix(in oklab,white 10%,transparent),inset 0 .0625rem color-mix(in oklab,white 16%,transparent),0 .125rem .5rem #00000059,0 .0625rem .125rem #0003}@keyframes z-tab-icon-bounce{0%{transform:scale(1)}35%{transform:scale(.97)}to{transform:scale(1)}}.z-tab-icon-bounce{animation:z-tab-icon-bounce .32s cubic-bezier(.34,1.56,.64,1)}.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][data-state=active],.z-tab-icon-bounce{animation:none!important}}@keyframes z-tabs-fade-in{0%{opacity:0}to{opacity:1}}\n"] }]
|
|
795
|
-
}], 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 }] }], glideIndicator: [{ type: i0.ViewChild, args: ['glideIndicator', { isSignal: true }] }], panelHost: [{ type: i0.ViewChild, args: ['panelHost', { ...{ read: ViewContainerRef }, 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 }] }], zTabsOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "zTabsOnly", required: false }] }], zShowNavWrapper: [{ type: i0.Input, args: [{ isSignal: true, alias: "zShowNavWrapper", required: false }] }], zNavFullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "zNavFullWidth", required: false }] }], zClassContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "zClassContent", 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"] }] } });
|
|
1090
|
+
}, 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]=\"navClasses()\"\n [class.z-tabs-nav-surface]=\"zShowNavWrapper() && isGlideType()\"\n [class.w-full]=\"zOrientation() === 'horizontal' && (!zShowNavWrapper() || zNavFullWidth())\"\n [class.w-fit]=\"zOrientation() === 'horizontal' && zShowNavWrapper() && !zNavFullWidth()\"\n [class.max-w-full]=\"zOrientation() === 'horizontal' && zShowNavWrapper() && !zNavFullWidth()\"\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 z-tabs-nav-prev 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\n class=\"z-tabs-scroll-container relative min-w-0 flex-1\"\n [class.z-tabs-scroll-container-surface]=\"(canScrollLeft() || canScrollRight()) && !zShowNavWrapper()\"\n [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 [class.z-tabs-scroll-wrapper-fade-left]=\"canScrollLeft()\"\n [class.z-tabs-scroll-wrapper-fade-right]=\"canScrollRight()\"\n (scroll)=\"onTabsScroll()\">\n <ng-container *ngTemplateOutlet=\"tabsListTpl\" />\n </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 z-tabs-nav-next 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 z-tabs-nav-menu 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 #tabsList\n [class]=\"tabsClasses()\"\n [class.pb-0.5]=\"tabsListHasBottomPadding()\"\n role=\"tablist\"\n [attr.aria-orientation]=\"zOrientation()\"\n [attr.data-type]=\"zType()\">\n @if (isHoverGlideType()) {\n <div\n #hoverIndicator\n class=\"z-tabs-hover-indicator pointer-events-none absolute top-0 left-0 z-[5]\"\n [attr.data-type]=\"zType()\"\n aria-hidden=\"true\"></div>\n }\n @if (isGlideType()) {\n <div\n #glideIndicator\n class=\"z-tabs-glide-indicator pointer-events-none absolute top-0 left-0 z-[6]\"\n [attr.data-type]=\"zType()\"\n aria-hidden=\"true\"></div>\n }\n @for (item of tabItems(); track item.tab.value; let idx = $index; let last = $last) {\n <button\n #tabButton\n type=\"button\"\n role=\"tab\"\n [class]=\"item.classes\"\n [class.z-tab-item-has-icon]=\"!!item.tab.icon || !!item.tab.iconTemplate\"\n [attr.data-active]=\"item.isActive\"\n [attr.data-state]=\"item.isActive ? 'active' : 'inactive'\"\n [attr.data-type]=\"zType()\"\n [attr.data-orientation]=\"zOrientation()\"\n [attr.data-last]=\"last\"\n [attr.aria-selected]=\"item.isActive\"\n [attr.aria-controls]=\"'panel-' + item.tab.value\"\n [disabled]=\"item.tab.disabled\"\n [tabindex]=\"item.isActive ? 0 : -1\"\n z-tooltip\n [zContent]=\"showsTabTooltip() ? (item.tab.label | translate) : ''\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n (click)=\"selectTab(item.tab)\"\n (keydown)=\"onTabKeydown($event, idx)\"\n (mouseenter)=\"onTabHover(item.tab)\"\n (mouseleave)=\"onTabHoverEnd()\"\n (focus)=\"onTabHover(item.tab)\"\n (blur)=\"onTabHoverEnd()\">\n @if (item.tab.iconTemplate) {\n <span class=\"shrink-0\" [class.z-tab-icon-bounce]=\"isGlideType() && bouncingTab() === item.tab.value\">\n <ng-container *ngTemplateOutlet=\"item.tab.iconTemplate; context: { $implicit: item.tab }\" />\n </span>\n } @else if (item.tab.icon) {\n <z-icon\n [zType]=\"item.tab.icon\"\n zSize=\"16\"\n class=\"shrink-0\"\n [class.z-tab-icon-bounce]=\"isGlideType() && bouncingTab() === item.tab.value\" />\n }\n <span\n class=\"z-tab-item-label min-w-0 flex-1 truncate text-left\"\n [class.z-tab-icon-bounce]=\"isGlideType() && bouncingTab() === item.tab.value\">\n {{ item.tab.label | translate }}\n </span>\n @if (item.tab.badge) {\n <span\n class=\"ring-background ml-1.5 inline-flex h-5 min-w-5 items-center justify-center rounded-(--radius-pill) 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 {{ item.tab.badge }}\n </span>\n }\n </button>\n }\n </div>\n </ng-template>\n\n <!-- Tab Panels -->\n @if (!zTabsOnly()) {\n <div\n #panelsHost\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 @if (!zLazy()) {\n @for (panel of tabPanels(); track panel.zTabPanel()) {\n <div\n role=\"tabpanel\"\n [id]=\"'panel-' + panel.zTabPanel()\"\n [attr.aria-labelledby]=\"panel.zTabPanel()\"\n [attr.data-state]=\"activeTab() === panel.zTabPanel() ? 'active' : 'inactive'\"\n [attr.inert]=\"activeTab() === panel.zTabPanel() ? null : ''\">\n <ng-container *ngTemplateOutlet=\"panel.template\" />\n </div>\n }\n } @else if (renderedTab()) {\n <div role=\"tabpanel\" [id]=\"'panel-' + renderedTab()\" [attr.aria-labelledby]=\"renderedTab()\" data-state=\"active\">\n <ng-container #panelHost />\n </div>\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 (item of tabItems(); track item.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]=\"!item.isActive\"\n [class.focus:bg-primary/10]=\"!item.isActive\"\n [class.bg-primary/15]=\"item.isActive\"\n [class.text-primary]=\"item.isActive\"\n [disabled]=\"item.tab.disabled\"\n (click)=\"selectTab(item.tab, true); close()\">\n @if (item.tab.icon) {\n <z-icon [zType]=\"item.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]=\"item.tab.label | translate\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n [zTriggerElement]=\"dropdownItem\">\n {{ item.tab.label | translate }}\n </span>\n @if (item.tab.badge) {\n <span\n class=\"bg-primary text-primary-foreground inline-flex h-5 min-w-5 items-center justify-center rounded-(--radius-pill) px-1.5 text-xs font-semibold\">\n {{ item.tab.badge }}\n </span>\n }\n @if (item.isActive) {\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:visible;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{overflow:visible}.z-tabs-scroll-wrapper.vertical.z-tabs-scroll-wrapper-limited{height:var(--z-tabs-vertical-max-height, min(22rem, 60vh));max-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-scroll-wrapper.z-tabs-scroll-wrapper-fade-left{mask-image:linear-gradient(to right,transparent 0,black var(--z-tabs-fade-width),black 100%);-webkit-mask-image:linear-gradient(to right,transparent 0,black var(--z-tabs-fade-width),black 100%)}.z-tabs-scroll-wrapper.z-tabs-scroll-wrapper-fade-right{mask-image:linear-gradient(to left,transparent 0,black var(--z-tabs-fade-width),black 100%);-webkit-mask-image:linear-gradient(to left,transparent 0,black var(--z-tabs-fade-width),black 100%)}.z-tabs-scroll-wrapper.z-tabs-scroll-wrapper-fade-left.z-tabs-scroll-wrapper-fade-right{mask-image:linear-gradient(to right,transparent 0,black var(--z-tabs-fade-width),black calc(100% - var(--z-tabs-fade-width)),transparent 100%);-webkit-mask-image:linear-gradient(to right,transparent 0,black var(--z-tabs-fade-width),black calc(100% - var(--z-tabs-fade-width)),transparent 100%)}.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-container:is([data-type=segment],[data-type=segment-solid],[data-type=pill-solid],[data-type=pill-blur])>.z-tabs-nav>.z-tabs-scroll-container-surface{background:color-mix(in oklab,var(--background) 72%,var(--muted));border:.0625rem solid color-mix(in oklab,var(--background) 88%,var(--border));box-shadow:0 .0625rem .1875rem #0000000f,0 .125rem .5rem #00000014;backdrop-filter:blur(.75rem) saturate(140%);-webkit-backdrop-filter:blur(.75rem) saturate(140%)}.z-tabs-container:is([data-type=segment],[data-type=segment-solid],[data-type=pill-solid],[data-type=pill-blur])>.z-tabs-nav>.z-tabs-scroll-container-surface .z-tabs{background:transparent}.z-tabs-container:is([data-type=segment],[data-type=segment-solid])>.z-tabs-nav>.z-tabs-scroll-container-surface{border-radius:var(--radius-sm);overflow:hidden}.z-tabs-container:is([data-type=pill-solid],[data-type=pill-blur])>.z-tabs-nav>.z-tabs-scroll-container-surface{border-radius:9999px;overflow:hidden}.dark .z-tabs-container:is([data-type=segment],[data-type=segment-solid],[data-type=pill-solid],[data-type=pill-blur])>.z-tabs-nav>.z-tabs-scroll-container-surface{background:color-mix(in oklab,var(--muted) 35%,transparent);border-color:color-mix(in oklab,var(--border) 65%,transparent);box-shadow:0 .0625rem .1875rem #0000002e,0 .125rem .5rem #0000003d}.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-tabs-nav-surface{border:0;border-radius:var(--radius-sm);padding:0;box-shadow:0 0 0 .0625rem color-mix(in oklab,oklch(95% 0 0deg) 88%,var(--border)),0 .0625rem .1875rem #0000000f,0 .125rem .5rem #00000014}.z-tabs-container:is([data-type=pill-solid],[data-type=pill-blur],[data-type=pill-float],[data-type=pill-primary],[data-type=assistant]) .z-tabs-nav-surface{border-radius:9999px}.z-tabs-container:is([data-type=pill-float],[data-type=pill-primary])[data-orientation=horizontal]>.z-tabs-nav-surface{padding-inline:.125rem}.dark .z-tabs-nav-surface{box-shadow:0 0 0 .0625rem color-mix(in oklab,var(--border) 65%,transparent),0 .0625rem .1875rem #0000002e,0 .125rem .5rem #0000003d}.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][data-state=inactive]{content-visibility:hidden}@supports not (content-visibility: hidden){.z-tabs-panels [role=tabpanel][data-state=inactive]{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{isolation:isolate;position:relative}.z-tabs-container[data-type=line][data-orientation=horizontal] .z-tabs .z-tab-item[data-active=true]{z-index:1}.z-tabs-container[data-type=line][data-orientation=horizontal] .z-tabs .z-tab-item[data-active=true]:after{z-index:1}.z-tabs-container[data-type=line][data-orientation=horizontal] .z-tabs: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=square],[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=square],[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=square],[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],[data-type=pill-solid],[data-type=pill-blur],[data-type=pill-float]) .z-tabs{align-items:center}.z-tabs-container:is([data-type=pill-primary],[data-type=assistant],[data-type=bar])[data-orientation=horizontal] .z-tabs{align-items:center}.z-tabs-container[data-type=pill-float][data-orientation=horizontal] .z-tabs-nav{position:relative;gap:0}.z-tabs-container[data-type=pill-float][data-orientation=horizontal] .z-tabs-scroll-container{--z-tabs-fade-width: 2.75rem}.z-tabs-container[data-type=pill-float][data-orientation=horizontal] .z-tabs-nav-control{position:absolute;top:50%;z-index:2;width:1.5rem;min-width:1.5rem;height:1.5rem;min-height:1.5rem;padding:0;border-radius:9999px;transform:translateY(-50%);background:color-mix(in oklab,var(--muted) 90%,var(--background));color:var(--foreground)}.z-tabs-container[data-type=pill-float][data-orientation=horizontal] .z-tabs-nav-control:hover{background:color-mix(in oklab,var(--muted) 70%,var(--foreground) 12%)}.z-tabs-container[data-type=pill-float][data-orientation=horizontal] .z-tabs-nav-prev{left:0}.z-tabs-container[data-type=pill-float][data-orientation=horizontal] .z-tabs-nav-next{right:0}.z-tabs-container[data-type=pill-float][data-orientation=horizontal] .z-tabs-nav-menu{display:none}.z-tabs-glide-indicator{transition:none;transform-origin:0 0;opacity:0;will-change:transform}.z-tabs-glide-indicator[data-type=segment],.z-tabs-glide-indicator[data-type=segment-solid]{border-radius:var(--radius-sm);overflow:hidden;background:var(--background);box-shadow:0 .0625rem .1875rem #00000014,0 .0625rem .125rem #0000000f}.z-tabs-glide-indicator[data-type=pill-solid],.z-tabs-glide-indicator[data-type=pill-blur],.z-tabs-glide-indicator[data-type=pill-float],.z-tabs-glide-indicator[data-type=pill-primary]{border-radius:9999px;overflow:hidden}.z-tabs-glide-indicator:is([data-type=pill-float],[data-type=pill-primary]){background:var(--primary);box-shadow:0 .0625rem .1875rem #0000001a,0 .0625rem .125rem #00000014}.z-tabs-glide-indicator[data-type=assistant]{border-radius:var(--radius-sm);background:var(--primary);box-shadow:0 .0625rem .125rem #0000000d}.z-tabs-glide-indicator[data-type=bar]{border-radius:var(--radius-sm);background:color-mix(in oklab,var(--primary) 10%,transparent);box-shadow:inset 0 0 0 .0625rem var(--background),0 .0625rem .1875rem #0000001a,0 .0625rem .125rem -.0625rem #0000001a}.dark .z-tabs-glide-indicator[data-type=bar]{box-shadow:inset 0 0 0 .0625rem color-mix(in oklab,white 12%,transparent),0 .125rem .5rem #00000059,0 .0625rem .125rem #0003}.z-tabs-glide-indicator[data-type=underline-hover]{background:transparent}.z-tabs-glide-indicator:is([data-type=bar],[data-type=underline-hover]):before{content:\"\";position:absolute;background:var(--primary);border-radius:9999px}.z-tabs-glide-indicator[data-type=pill-solid]{background:var(--background);box-shadow:0 .0625rem .1875rem #00000014,0 .0625rem .125rem #0000000f}.z-tabs-glide-indicator[data-type=segment-solid]{background:var(--primary)}.z-tabs-glide-indicator[data-type=pill-blur]{background:linear-gradient(to bottom,color-mix(in oklab,white 22%,transparent) 0%,color-mix(in oklab,white 6%,transparent) 45%,transparent 100%),color-mix(in oklab,var(--background) 55%,transparent);box-shadow:inset 0 0 0 1px color-mix(in oklab,white 25%,transparent),inset 0 .0625rem color-mix(in oklab,white 45%,transparent),0 .125rem .5rem #0000001a,0 .0625rem .125rem #0000000f;backdrop-filter:blur(.75rem) saturate(180%);-webkit-backdrop-filter:blur(.75rem) saturate(180%)}.dark .z-tabs-glide-indicator[data-type=pill-blur]{background:linear-gradient(to bottom,color-mix(in oklab,white 12%,transparent) 0%,color-mix(in oklab,white 3%,transparent) 45%,transparent 100%),color-mix(in oklab,var(--background) 45%,transparent);box-shadow:inset 0 0 0 1px color-mix(in oklab,white 10%,transparent),inset 0 .0625rem color-mix(in oklab,white 16%,transparent),0 .125rem .5rem #00000059,0 .0625rem .125rem #0003}.z-tabs-container[data-orientation=horizontal] .z-tabs-glide-indicator[data-type=bar]:before{right:25%;bottom:0;left:25%;height:.25rem;border-radius:9999px 9999px 0 0}.z-tabs-container[data-orientation=horizontal] .z-tabs-glide-indicator[data-type=underline-hover]:before{right:0;bottom:0;left:0;height:.125rem;border-radius:0}.z-tabs-container[data-orientation=vertical] .z-tabs-glide-indicator[data-type=bar]:before{inset:25% auto auto 0;width:.25rem;height:50%;border-radius:0 9999px 9999px 0}.z-tabs-container[data-orientation=vertical] .z-tabs-glide-indicator[data-type=underline-hover]:before{inset:0 0 auto auto;width:.125rem;height:100%;border-radius:0}.z-tabs-container:is([data-type=pill-primary],[data-type=assistant],[data-type=bar]) .z-tab-item:hover:not([data-active=true]):not(:disabled){background:color-mix(in oklab,var(--muted) 50%,transparent)}.z-tabs-container:is([data-type=pill-primary],[data-type=assistant],[data-type=underline-hover],[data-type=bar]) .z-tab-item:focus-visible{box-shadow:0 0 0 .1875rem color-mix(in oklab,var(--ring) 50%,transparent)!important}.z-tabs-hover-indicator{transform-origin:0 0;opacity:0;border-radius:var(--radius-sm);background:color-mix(in oklab,var(--muted) 70%,transparent);transition:transform .18s cubic-bezier(.22,1,.36,1),width .18s cubic-bezier(.22,1,.36,1),height .18s cubic-bezier(.22,1,.36,1),opacity .15s ease-out}.z-tabs-container[data-type=underline-hover] .z-tabs:after{content:\"\";position:absolute;background:color-mix(in oklab,var(--border) 80%,transparent);pointer-events:none;z-index:0}.z-tabs-container[data-type=underline-hover][data-orientation=horizontal] .z-tabs:after{right:0;bottom:0;left:0;height:.0625rem}.z-tabs-container[data-type=underline-hover][data-orientation=vertical] .z-tabs:after{top:0;right:0;bottom:0;width:.0625rem}.z-tabs-container[data-type=assistant][data-orientation=horizontal] .z-tab-item{transition:background-color .3s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),color .2s ease}.z-tabs-container[data-type=assistant][data-orientation=horizontal] .z-tab-item[data-active=true]{background:var(--primary);box-shadow:0 .0625rem .125rem #0000000d}.z-tabs-container[data-type=assistant][data-orientation=horizontal] .z-tab-item{gap:0}.z-tabs-container[data-type=assistant][data-orientation=horizontal] .z-tab-item.z-tab-item-has-icon .z-tab-item-label{flex:none;overflow:hidden;text-overflow:clip;margin-inline-start:.375rem;opacity:1;transition:width .3s cubic-bezier(.4,0,.2,1),margin-inline-start .3s cubic-bezier(.4,0,.2,1),opacity .2s ease-out}.z-tabs-container[data-type=assistant][data-orientation=horizontal] .z-tab-item.z-tab-item-has-icon[data-active=false] .z-tab-item-label{margin-inline-start:0;opacity:0}@keyframes z-tab-icon-bounce{0%{transform:scale(1)}35%{transform:scale(.97)}to{transform:scale(1)}}.z-tab-icon-bounce{animation:z-tab-icon-bounce .32s cubic-bezier(.34,1.56,.64,1)}.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,.z-tabs-hover-indicator,.z-tabs-container[data-type=assistant] .z-tab-item,.z-tabs-container[data-type=assistant] .z-tab-item-label{transition:none!important}.z-tabs-scroll-wrapper{scroll-behavior:auto}.z-tab-icon-bounce{animation:none!important}}\n"] }]
|
|
1091
|
+
}], 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 }] }], glideIndicator: [{ type: i0.ViewChild, args: ['glideIndicator', { isSignal: true }] }], hoverIndicator: [{ type: i0.ViewChild, args: ['hoverIndicator', { isSignal: true }] }], tabsList: [{ type: i0.ViewChild, args: ['tabsList', { isSignal: true }] }], panelsHost: [{ type: i0.ViewChild, args: ['panelsHost', { isSignal: true }] }], panelHost: [{ type: i0.ViewChild, args: ['panelHost', { ...{ read: ViewContainerRef }, 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 }] }], zContentAnimation: [{ type: i0.Input, args: [{ isSignal: true, alias: "zContentAnimation", required: false }] }], zLazy: [{ type: i0.Input, args: [{ isSignal: true, alias: "zLazy", required: false }] }], zTabsOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "zTabsOnly", required: false }] }], zShowNavWrapper: [{ type: i0.Input, args: [{ isSignal: true, alias: "zShowNavWrapper", required: false }] }], zNavFullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "zNavFullWidth", required: false }] }], zClassContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "zClassContent", 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"] }] } });
|
|
796
1092
|
|
|
797
1093
|
/**
|
|
798
1094
|
* Generated bundle index. Do not edit.
|