@shival99/z-ui 2.3.6 → 2.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/shival99-z-ui-components-z-tabs.mjs +176 -90
- package/fesm2022/shival99-z-ui-components-z-tabs.mjs.map +1 -1
- package/package.json +1 -1
- package/types/shival99-z-ui-components-z-calendar.d.ts +4 -4
- package/types/shival99-z-ui-components-z-table.d.ts +2 -2
- package/types/shival99-z-ui-components-z-tabs.d.ts +42 -27
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NgTemplateOutlet } from '@angular/common';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { input, inject, TemplateRef, Directive, contentChildren, viewChild, viewChildren, model, output, signal, computed, effect, untracked, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { input, inject, TemplateRef, Directive, contentChildren, viewChild, viewChildren, ViewContainerRef, model, output, signal, computed, NgZone, effect, untracked, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
4
4
|
import { TranslatePipe } from '@ngx-translate/core';
|
|
5
5
|
import { ZButtonComponent } from '@shival99/z-ui/components/z-button';
|
|
6
6
|
import { ZIconComponent } from '@shival99/z-ui/components/z-icon';
|
|
@@ -40,7 +40,20 @@ const zTabsInstanceIds = (() => {
|
|
|
40
40
|
let counter = 0;
|
|
41
41
|
return { next: () => ++counter };
|
|
42
42
|
})();
|
|
43
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
* Counter-scales the indicator's corner radius across the glide so a box that is being scaled still
|
|
45
|
+
* renders the radius its design calls for, instead of stretched oval caps.
|
|
46
|
+
*/
|
|
47
|
+
function zTabsRadiusKeyframes(radius, scaleX, scaleY) {
|
|
48
|
+
const steps = 16;
|
|
49
|
+
return Array.from({ length: steps }, (_, index) => {
|
|
50
|
+
const progress = index / (steps - 1);
|
|
51
|
+
const x = scaleX + (1 - scaleX) * progress;
|
|
52
|
+
const y = scaleY + (1 - scaleY) * progress;
|
|
53
|
+
return { borderRadius: `${radius / x}px / ${radius / y}px` };
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/** Queues low-priority work on idle time, falling back to a timer where `requestIdleCallback` is missing. */
|
|
44
57
|
function zTabsRequestIdle(task, timeout = 200) {
|
|
45
58
|
if (typeof window === 'undefined') {
|
|
46
59
|
return 0;
|
|
@@ -273,6 +286,9 @@ class ZTabsComponent {
|
|
|
273
286
|
...(ngDevMode ? [{ debugName: "tabsListContainer" }] : /* istanbul ignore next */ []));
|
|
274
287
|
tabButtons = viewChildren('tabButton', /* @ts-ignore */
|
|
275
288
|
...(ngDevMode ? [{ debugName: "tabButtons" }] : /* istanbul ignore next */ []));
|
|
289
|
+
glideIndicator = viewChild('glideIndicator', /* @ts-ignore */
|
|
290
|
+
...(ngDevMode ? [{ debugName: "glideIndicator" }] : /* istanbul ignore next */ []));
|
|
291
|
+
panelHost = viewChild('panelHost', { ...(ngDevMode ? { debugName: "panelHost" } : /* istanbul ignore next */ {}), read: ViewContainerRef });
|
|
276
292
|
class = input('', /* @ts-ignore */
|
|
277
293
|
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
278
294
|
zTabs = input.required(/* @ts-ignore */
|
|
@@ -287,10 +303,6 @@ class ZTabsComponent {
|
|
|
287
303
|
...(ngDevMode ? [{ debugName: "zContentFit" }] : /* istanbul ignore next */ []));
|
|
288
304
|
zLazy = input(false, /* @ts-ignore */
|
|
289
305
|
...(ngDevMode ? [{ debugName: "zLazy" }] : /* istanbul ignore next */ []));
|
|
290
|
-
zPreload = input('hover', /* @ts-ignore */
|
|
291
|
-
...(ngDevMode ? [{ debugName: "zPreload" }] : /* istanbul ignore next */ []));
|
|
292
|
-
zDestroyInactive = input(false, /* @ts-ignore */
|
|
293
|
-
...(ngDevMode ? [{ debugName: "zDestroyInactive" }] : /* istanbul ignore next */ []));
|
|
294
306
|
zTabsOnly = input(false, /* @ts-ignore */
|
|
295
307
|
...(ngDevMode ? [{ debugName: "zTabsOnly" }] : /* istanbul ignore next */ []));
|
|
296
308
|
zShowNavWrapper = input(false, /* @ts-ignore */
|
|
@@ -312,8 +324,6 @@ class ZTabsComponent {
|
|
|
312
324
|
activeTab = model('', /* @ts-ignore */
|
|
313
325
|
...(ngDevMode ? [{ debugName: "activeTab" }] : /* istanbul ignore next */ []));
|
|
314
326
|
zTabChange = output();
|
|
315
|
-
mountedTabs = signal(new Set(), /* @ts-ignore */
|
|
316
|
-
...(ngDevMode ? [{ debugName: "mountedTabs" }] : /* istanbul ignore next */ []));
|
|
317
327
|
renderedTab = signal('', /* @ts-ignore */
|
|
318
328
|
...(ngDevMode ? [{ debugName: "renderedTab" }] : /* istanbul ignore next */ []));
|
|
319
329
|
canScrollLeft = signal(false, /* @ts-ignore */
|
|
@@ -324,44 +334,42 @@ class ZTabsComponent {
|
|
|
324
334
|
...(ngDevMode ? [{ debugName: "bouncingTab" }] : /* istanbul ignore next */ []));
|
|
325
335
|
isGlideType = computed(() => Z_TABS_GLIDE_TYPES.includes(this.zType()) && this.zOrientation() === 'horizontal', /* @ts-ignore */
|
|
326
336
|
...(ngDevMode ? [{ debugName: "isGlideType" }] : /* istanbul ignore next */ []));
|
|
327
|
-
glideStyle = signal(null, /* @ts-ignore */
|
|
328
|
-
...(ngDevMode ? [{ debugName: "glideStyle" }] : /* istanbul ignore next */ []));
|
|
329
|
-
glideReady = signal(false, /* @ts-ignore */
|
|
330
|
-
...(ngDevMode ? [{ debugName: "glideReady" }] : /* istanbul ignore next */ []));
|
|
331
|
-
/** With `zDestroyInactive` the single rendered panel is the visible one, so it never collapses mid-swap. */
|
|
332
|
-
visiblePanel = computed(() => (this.zDestroyInactive() ? this.renderedTab() : this.activeTab()), /* @ts-ignore */
|
|
333
|
-
...(ngDevMode ? [{ debugName: "visiblePanel" }] : /* istanbul ignore next */ []));
|
|
334
|
-
panelRenderStates = computed(() => new Map(this.tabPanels().map(panel => {
|
|
335
|
-
const tabValue = panel.zTabPanel();
|
|
336
|
-
if (this.zDestroyInactive()) {
|
|
337
|
-
return [tabValue, this.renderedTab() === tabValue];
|
|
338
|
-
}
|
|
339
|
-
if (!this.zLazy()) {
|
|
340
|
-
return [tabValue, true];
|
|
341
|
-
}
|
|
342
|
-
return [tabValue, this.mountedTabs().has(tabValue)];
|
|
343
|
-
})), /* @ts-ignore */
|
|
344
|
-
...(ngDevMode ? [{ debugName: "panelRenderStates" }] : /* istanbul ignore next */ []));
|
|
345
337
|
_resizeObserver;
|
|
346
|
-
|
|
347
|
-
|
|
338
|
+
_commitTimer;
|
|
339
|
+
_scrollFrame;
|
|
340
|
+
_zone = inject(NgZone);
|
|
341
|
+
_mountedPanel = '';
|
|
342
|
+
_panelView;
|
|
343
|
+
_retiredViews = [];
|
|
344
|
+
_teardownHandle;
|
|
345
|
+
_glideBox;
|
|
346
|
+
_glidePending = false;
|
|
347
|
+
_glideAnimations = [];
|
|
348
348
|
_viewReady = false;
|
|
349
349
|
_cacheInstanceId = zTabsInstanceIds.next();
|
|
350
350
|
constructor() {
|
|
351
351
|
effect(() => {
|
|
352
352
|
this.zTabs();
|
|
353
|
-
|
|
353
|
+
this._outsideFrame(() => this.checkScroll());
|
|
354
354
|
});
|
|
355
355
|
effect(() => {
|
|
356
356
|
this.activeTab();
|
|
357
357
|
this.zTabs();
|
|
358
358
|
this.isGlideType();
|
|
359
|
-
|
|
359
|
+
this._glidePending = true;
|
|
360
|
+
this._outsideFrame(() => this._updateGlideIndicator());
|
|
360
361
|
});
|
|
361
362
|
effect(() => {
|
|
362
363
|
const active = this.activeTab();
|
|
364
|
+
this.zLazy();
|
|
363
365
|
untracked(() => this._scheduleCommit(active));
|
|
364
366
|
});
|
|
367
|
+
effect(() => {
|
|
368
|
+
const host = this.panelHost();
|
|
369
|
+
const rendered = this.renderedTab();
|
|
370
|
+
const panels = this.tabPanels();
|
|
371
|
+
untracked(() => this._swapPanelView(host, rendered, panels));
|
|
372
|
+
});
|
|
365
373
|
}
|
|
366
374
|
ngOnInit() {
|
|
367
375
|
this._restoreActiveTabFromCache();
|
|
@@ -370,14 +378,21 @@ class ZTabsComponent {
|
|
|
370
378
|
this._viewReady = true;
|
|
371
379
|
this.checkScroll();
|
|
372
380
|
this._setupResizeObserver();
|
|
373
|
-
|
|
374
|
-
this._preloadNextIdlePanel();
|
|
381
|
+
this._outsideFrame(() => this._updateGlideIndicator());
|
|
375
382
|
}
|
|
376
383
|
ngOnDestroy() {
|
|
384
|
+
zTabsCancelIdle(this._teardownHandle);
|
|
385
|
+
for (const view of [...this._retiredViews, this._panelView]) {
|
|
386
|
+
view?.destroy();
|
|
387
|
+
}
|
|
388
|
+
this._retiredViews = [];
|
|
377
389
|
this._resizeObserver?.disconnect();
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
390
|
+
for (const animation of this._glideAnimations) {
|
|
391
|
+
animation.cancel();
|
|
392
|
+
}
|
|
393
|
+
clearTimeout(this._commitTimer);
|
|
394
|
+
if (this._scrollFrame !== undefined) {
|
|
395
|
+
cancelAnimationFrame(this._scrollFrame);
|
|
381
396
|
}
|
|
382
397
|
}
|
|
383
398
|
tabsClasses = computed(() => zMergeClasses(zTabsVariants({
|
|
@@ -443,9 +458,6 @@ class ZTabsComponent {
|
|
|
443
458
|
}
|
|
444
459
|
this.activeTab.set(tab.value);
|
|
445
460
|
this._saveActiveTabToCache(tab.value);
|
|
446
|
-
if (this.isGlideType()) {
|
|
447
|
-
requestAnimationFrame(() => this._updateGlideIndicator());
|
|
448
|
-
}
|
|
449
461
|
if (this.isGlideType()) {
|
|
450
462
|
this.bouncingTab.set(tab.value);
|
|
451
463
|
setTimeout(() => {
|
|
@@ -458,7 +470,7 @@ class ZTabsComponent {
|
|
|
458
470
|
this.zTabChange.emit(tab.value);
|
|
459
471
|
}
|
|
460
472
|
if (scrollToView && this.zOrientation() === 'horizontal') {
|
|
461
|
-
|
|
473
|
+
this._outsideFrame(() => {
|
|
462
474
|
const tabIndex = this.zTabs().findIndex(t => t.value === tab.value);
|
|
463
475
|
const tabButtonsList = this.tabButtons();
|
|
464
476
|
const tabButton = tabButtonsList[tabIndex];
|
|
@@ -478,20 +490,10 @@ class ZTabsComponent {
|
|
|
478
490
|
});
|
|
479
491
|
};
|
|
480
492
|
alignTabInViewport();
|
|
481
|
-
setTimeout(() => {
|
|
482
|
-
alignTabInViewport();
|
|
483
|
-
}, 320);
|
|
484
493
|
}
|
|
485
494
|
});
|
|
486
495
|
}
|
|
487
496
|
}
|
|
488
|
-
/** Mounts a panel ahead of its click so the tab transition never pays for the first render. */
|
|
489
|
-
preloadTab(tab) {
|
|
490
|
-
if (this.zPreload() === 'none' || tab.disabled) {
|
|
491
|
-
return;
|
|
492
|
-
}
|
|
493
|
-
zTabsRequestIdle(() => this._mountPanel(tab.value));
|
|
494
|
-
}
|
|
495
497
|
isTabActive(tab) {
|
|
496
498
|
return this.activeTab() === tab.value;
|
|
497
499
|
}
|
|
@@ -561,74 +563,158 @@ class ZTabsComponent {
|
|
|
561
563
|
setTimeout(() => this.checkScroll(), 300);
|
|
562
564
|
}
|
|
563
565
|
onTabsScroll() {
|
|
564
|
-
this.
|
|
566
|
+
if (this._scrollFrame !== undefined) {
|
|
567
|
+
return;
|
|
568
|
+
}
|
|
569
|
+
// Smooth-scrolling the strip fires this every frame; measuring once per frame keeps the forced
|
|
570
|
+
// layout from piling up while the glide animation runs.
|
|
571
|
+
this._scrollFrame = this._outsideFrame(() => {
|
|
572
|
+
this._scrollFrame = undefined;
|
|
573
|
+
this.checkScroll();
|
|
574
|
+
});
|
|
565
575
|
}
|
|
566
576
|
/**
|
|
567
|
-
*
|
|
568
|
-
*
|
|
577
|
+
* Holds the outgoing panel on screen until the tab-strip animation has finished, then swaps in the
|
|
578
|
+
* new one. A heavy mount therefore lands after the animation instead of stealing its frames.
|
|
569
579
|
*/
|
|
570
580
|
_scheduleCommit(value) {
|
|
571
581
|
if (!value) {
|
|
572
582
|
return;
|
|
573
583
|
}
|
|
574
|
-
if (!this._viewReady || typeof
|
|
584
|
+
if (!this.zLazy() || !this._viewReady || typeof window === 'undefined') {
|
|
575
585
|
this._commitPanel(value);
|
|
576
586
|
return;
|
|
577
587
|
}
|
|
578
|
-
this.
|
|
579
|
-
|
|
580
|
-
|
|
588
|
+
clearTimeout(this._commitTimer);
|
|
589
|
+
this._commitTimer = window.setTimeout(() => requestAnimationFrame(() => this._commitPanel(value)), this._panelCommitDelay());
|
|
590
|
+
}
|
|
591
|
+
/** Waits out the layout-driven part of the tab animation; the transform-only tail is immune to it. */
|
|
592
|
+
_panelCommitDelay() {
|
|
593
|
+
if (this._prefersReducedMotion()) {
|
|
594
|
+
return 0;
|
|
595
|
+
}
|
|
596
|
+
// The tab-item transition runs 200ms; the extra margin keeps the swap off its final frame.
|
|
597
|
+
return 280;
|
|
581
598
|
}
|
|
582
599
|
_commitPanel(value) {
|
|
583
600
|
if (this.activeTab() !== value) {
|
|
584
601
|
return;
|
|
585
602
|
}
|
|
586
603
|
this.renderedTab.set(value);
|
|
587
|
-
this._mountPanel(value);
|
|
588
|
-
this._preloadNextIdlePanel();
|
|
589
604
|
}
|
|
590
|
-
|
|
591
|
-
|
|
605
|
+
/**
|
|
606
|
+
* Sizes the indicator once, then moves it with a transform-only animation. Transform is the one
|
|
607
|
+
* property the compositor can tick by itself, so a busy main thread — a heavy panel mounting, the
|
|
608
|
+
* host's own work — cannot drop frames from the glide. A second animation counter-scales the corner
|
|
609
|
+
* radius; that one only repaints a small element and degrades to a late radius, never a stalled pill.
|
|
610
|
+
*/
|
|
611
|
+
_updateGlideIndicator() {
|
|
612
|
+
const element = this.glideIndicator()?.nativeElement;
|
|
613
|
+
if (!this.isGlideType() || !element) {
|
|
614
|
+
this._glideBox = undefined;
|
|
592
615
|
return;
|
|
593
616
|
}
|
|
594
|
-
this.
|
|
595
|
-
this.
|
|
596
|
-
|
|
597
|
-
/** Tracked even while `zDestroyInactive` is on, so flipping that input back keeps the visited panels. */
|
|
598
|
-
_canMount(value) {
|
|
599
|
-
return Boolean(value) && this.zLazy() && !this.mountedTabs().has(value);
|
|
600
|
-
}
|
|
601
|
-
/** Warms remaining panels one idle slot at a time so preloading never stalls a single frame. */
|
|
602
|
-
_preloadNextIdlePanel() {
|
|
603
|
-
if (this.zPreload() !== 'idle' || !this.zLazy() || this.zDestroyInactive()) {
|
|
617
|
+
const activeIndex = this.zTabs().findIndex(tab => tab.value === this.activeTab());
|
|
618
|
+
const button = this.tabButtons()[activeIndex]?.nativeElement;
|
|
619
|
+
if (!button) {
|
|
604
620
|
return;
|
|
605
621
|
}
|
|
606
|
-
const next =
|
|
607
|
-
|
|
622
|
+
const next = { x: button.offsetLeft, y: button.offsetTop, w: button.offsetWidth, h: button.offsetHeight };
|
|
623
|
+
const previous = this._glideBox;
|
|
624
|
+
const moved = !previous || previous.x !== next.x || previous.y !== next.y || previous.w !== next.w || previous.h !== next.h;
|
|
625
|
+
// A tab change arms the glide; whichever call observes the new geometry first plays it, and later
|
|
626
|
+
// calls for the same geometry leave the running animation alone.
|
|
627
|
+
const shouldGlide = this._glidePending && Boolean(previous) && !this._prefersReducedMotion();
|
|
628
|
+
if (!moved) {
|
|
608
629
|
return;
|
|
609
630
|
}
|
|
610
|
-
|
|
611
|
-
this.
|
|
631
|
+
this._glidePending = false;
|
|
632
|
+
this._glideBox = next;
|
|
633
|
+
for (const animation of this._glideAnimations) {
|
|
634
|
+
animation.cancel();
|
|
635
|
+
}
|
|
636
|
+
this._glideAnimations = [];
|
|
637
|
+
element.style.width = `${next.w}px`;
|
|
638
|
+
element.style.height = `${next.h}px`;
|
|
639
|
+
element.style.transform = `translate(${next.x}px, ${next.y}px)`;
|
|
640
|
+
element.style.borderRadius = '';
|
|
641
|
+
element.style.opacity = '1';
|
|
642
|
+
// jsdom and older SSR shims ship no Web Animations API; the indicator simply snaps there.
|
|
643
|
+
if (!shouldGlide || !previous || typeof element.animate !== 'function') {
|
|
644
|
+
return;
|
|
645
|
+
}
|
|
646
|
+
const scaleX = previous.w / next.w;
|
|
647
|
+
const scaleY = previous.h / next.h;
|
|
648
|
+
// Both animations share one timing so the radius correction tracks the transform's progress exactly.
|
|
649
|
+
const options = { duration: 480, easing: 'cubic-bezier(0.22, 1, 0.36, 1)' };
|
|
650
|
+
this._glideAnimations.push(element.animate([
|
|
651
|
+
{ transform: `translate(${previous.x}px, ${previous.y}px) scale(${scaleX}, ${scaleY})` },
|
|
652
|
+
{ transform: `translate(${next.x}px, ${next.y}px)` },
|
|
653
|
+
], options));
|
|
654
|
+
const radius = Math.min(parseFloat(getComputedStyle(element).borderTopLeftRadius) || 0, next.w / 2, next.h / 2);
|
|
655
|
+
if (radius > 0) {
|
|
656
|
+
this._glideAnimations.push(element.animate(zTabsRadiusKeyframes(radius, scaleX, scaleY), options));
|
|
657
|
+
}
|
|
612
658
|
}
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
659
|
+
/**
|
|
660
|
+
* Swaps the visible panel. The incoming view is built and bound while it is still off-document, so
|
|
661
|
+
* none of that work triggers style, layout or paint; only the final insert does. The outgoing view is
|
|
662
|
+
* detached immediately — it leaves the DOM at once — and destroyed off the critical path, keeping
|
|
663
|
+
* teardown out of the frame the user clicked in. It is still destroyed, so panels re-initialise.
|
|
664
|
+
*/
|
|
665
|
+
_swapPanelView(host, value, panels) {
|
|
666
|
+
if (!host || !this.zLazy() || !value || this._mountedPanel === value) {
|
|
617
667
|
return;
|
|
618
668
|
}
|
|
619
|
-
const
|
|
620
|
-
|
|
621
|
-
if (!button) {
|
|
669
|
+
const panel = panels.find(item => item.zTabPanel() === value);
|
|
670
|
+
if (!panel) {
|
|
622
671
|
return;
|
|
623
672
|
}
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
673
|
+
if (host.length > 0) {
|
|
674
|
+
host.detach(0);
|
|
675
|
+
}
|
|
676
|
+
if (this._panelView) {
|
|
677
|
+
this._retiredViews.push(this._panelView);
|
|
678
|
+
}
|
|
679
|
+
const view = panel.template.createEmbeddedView({});
|
|
680
|
+
view.detectChanges();
|
|
681
|
+
host.insert(view);
|
|
682
|
+
this._panelView = view;
|
|
683
|
+
this._mountedPanel = value;
|
|
684
|
+
this._scheduleTeardown();
|
|
685
|
+
this._fadePanel(host);
|
|
686
|
+
}
|
|
687
|
+
_scheduleTeardown() {
|
|
688
|
+
if (this._retiredViews.length === 0 || this._teardownHandle !== undefined) {
|
|
689
|
+
return;
|
|
690
|
+
}
|
|
691
|
+
this._teardownHandle = zTabsRequestIdle(() => {
|
|
692
|
+
this._teardownHandle = undefined;
|
|
693
|
+
const retired = this._retiredViews;
|
|
694
|
+
this._retiredViews = [];
|
|
695
|
+
for (const view of retired) {
|
|
696
|
+
view.destroy();
|
|
697
|
+
}
|
|
628
698
|
});
|
|
629
|
-
|
|
630
|
-
|
|
699
|
+
}
|
|
700
|
+
/** Re-runs the enter fade on a wrapper that is reused across swaps, without forcing a reflow. */
|
|
701
|
+
_fadePanel(host) {
|
|
702
|
+
const wrapper = host.element.nativeElement.parentElement;
|
|
703
|
+
if (!wrapper || this._prefersReducedMotion() || typeof wrapper.animate !== 'function') {
|
|
704
|
+
return;
|
|
631
705
|
}
|
|
706
|
+
wrapper.animate([{ opacity: 0 }, { opacity: 1 }], { duration: 180, easing: 'ease-out' });
|
|
707
|
+
}
|
|
708
|
+
/**
|
|
709
|
+
* Measurement and imperative DOM work never needs a change-detection tick of its own. With zone.js a
|
|
710
|
+
* plain `requestAnimationFrame` schedules one per callback — wasteful during a smooth scroll, which
|
|
711
|
+
* fires every frame. Signal writes made inside still schedule change detection on their own.
|
|
712
|
+
*/
|
|
713
|
+
_outsideFrame(task) {
|
|
714
|
+
return this._zone.runOutsideAngular(() => requestAnimationFrame(task));
|
|
715
|
+
}
|
|
716
|
+
_prefersReducedMotion() {
|
|
717
|
+
return typeof window !== 'undefined' && Boolean(window.matchMedia?.('(prefers-reduced-motion: reduce)').matches);
|
|
632
718
|
}
|
|
633
719
|
_setupResizeObserver() {
|
|
634
720
|
const container = this.tabsListContainer()?.nativeElement;
|
|
@@ -694,7 +780,7 @@ class ZTabsComponent {
|
|
|
694
780
|
}, 150);
|
|
695
781
|
}
|
|
696
782
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: ZTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
697
|
-
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 }, zPreload: { classPropertyName: "zPreload", publicName: "zPreload", isSignal: true, isRequired: false, transformFunction: null }, zDestroyInactive: { classPropertyName: "zDestroyInactive", publicName: "zDestroyInactive", isSignal: true, isRequired: false, transformFunction: null }, zTabsOnly: { classPropertyName: "zTabsOnly", publicName: "zTabsOnly", isSignal: true, isRequired: false, transformFunction: null }, 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 }], 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() && glideStyle(); as style) {\n <div\n class=\"z-tabs-glide-indicator pointer-events-none absolute top-0 left-0 z-[6]\"\n [class.z-tabs-glide-indicator-ready]=\"glideReady()\"\n [attr.data-type]=\"zType()\"\n [style.transform]=\"style.transform\"\n [style.width]=\"style.width\"\n [style.height]=\"style.height\"\n aria-hidden=\"true\"></div>\n }\n @for (tab of zTabs(); track tab.value; let idx = $index; let last = $last) {\n <button\n #tabButton\n type=\"button\"\n role=\"tab\"\n [class]=\"getTabItemClasses(tab)\"\n [attr.data-active]=\"isTabActive(tab)\"\n [attr.data-state]=\"isTabActive(tab) ? 'active' : 'inactive'\"\n [attr.data-type]=\"zType()\"\n [attr.data-orientation]=\"zOrientation()\"\n [attr.data-last]=\"last\"\n [attr.aria-selected]=\"isTabActive(tab)\"\n [attr.aria-controls]=\"'panel-' + tab.value\"\n [disabled]=\"tab.disabled\"\n [tabindex]=\"isTabActive(tab) ? 0 : -1\"\n z-tooltip\n [zContent]=\"zOrientation() === 'vertical' ? (tab.label | translate) : ''\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n (click)=\"selectTab(tab)\"\n (pointerenter)=\"preloadTab(tab)\"\n (focus)=\"preloadTab(tab)\"\n (keydown)=\"onTabKeydown($event, idx)\">\n @if (tab.icon) {\n <z-icon\n [zType]=\"tab.icon\"\n zSize=\"16\"\n class=\"shrink-0\"\n [class.z-tab-icon-bounce]=\"isGlideType() && bouncingTab() === 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() === tab.value\">\n {{ tab.label | translate }}\n </span>\n @if (tab.badge) {\n <span\n class=\"ring-background ml-1.5 inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-xs font-semibold ring-2\"\n [class.bg-primary]=\"zType() !== 'badge'\"\n [class.text-primary-foreground]=\"zType() !== 'badge'\"\n [class.bg-primary!]=\"zType() === 'badge'\"\n [class.text-primary-foreground!]=\"zType() === 'badge'\">\n {{ tab.badge }}\n </span>\n }\n </button>\n }\n </div>\n </ng-template>\n\n <!-- Tab Panels -->\n @if (!zTabsOnly()) {\n <div\n class=\"z-tabs-panels min-h-0\"\n [class.flex-1]=\"zOrientation() === 'vertical'\"\n [class.shadow-xs]=\"contentWrapperFramed()\"\n [class.z-tabs-panels-unwrapped]=\"!contentWrapperFramed()\">\n @for (panel of tabPanels(); track panel.zTabPanel()) {\n @if (panelRenderStates().get(panel.zTabPanel())) {\n <div\n role=\"tabpanel\"\n [id]=\"'panel-' + panel.zTabPanel()\"\n [attr.aria-labelledby]=\"panel.zTabPanel()\"\n [attr.data-state]=\"visiblePanel() === panel.zTabPanel() ? 'active' : 'inactive'\"\n [attr.inert]=\"visiblePanel() === panel.zTabPanel() ? null : ''\">\n <ng-container *ngTemplateOutlet=\"panel.template\" />\n </div>\n }\n }\n </div>\n }\n</div>\n\n<!-- Dropdown Menu Template -->\n<ng-template #dropdownTpl let-close=\"close\">\n <div\n class=\"z-tabs-dropdown-menu flex max-h-[18.75rem] max-w-[12.5rem] min-w-[6.25rem] flex-col gap-0.5 overflow-y-auto p-1\">\n @for (tab of zTabs(); track tab.value) {\n <button\n #dropdownItem\n type=\"button\"\n class=\"flex w-full cursor-pointer items-center justify-start gap-2 rounded-sm px-2 py-1.5 text-left text-sm font-medium transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n [class.hover:text-foreground]=\"!isTabActive(tab)\"\n [class.focus:bg-primary/10]=\"!isTabActive(tab)\"\n [class.bg-primary/15]=\"isTabActive(tab)\"\n [class.text-primary]=\"isTabActive(tab)\"\n [disabled]=\"tab.disabled\"\n (pointerenter)=\"preloadTab(tab)\"\n (click)=\"selectTab(tab, true); close()\">\n @if (tab.icon) {\n <z-icon [zType]=\"tab.icon\" zSize=\"16\" class=\"text-muted-foreground shrink-0\" />\n }\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"tab.label | translate\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n [zTriggerElement]=\"dropdownItem\">\n {{ tab.label | translate }}\n </span>\n @if (tab.badge) {\n <span\n class=\"bg-primary text-primary-foreground inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-xs font-semibold\">\n {{ tab.badge }}\n </span>\n }\n @if (isTabActive(tab)) {\n <z-icon zType=\"lucideCheck\" zSize=\"16\" class=\"text-primary shink-0\" />\n }\n </button>\n }\n </div>\n</ng-template>\n", styles: [".z-tabs-scroll-wrapper{overflow-x:clip;overflow-y:visible;scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth}.z-tabs-scroll-wrapper::-webkit-scrollbar{display:none}.z-tabs-scroll-wrapper.vertical{max-height:var(--z-tabs-vertical-max-height, min(22rem, 60vh));overflow:hidden auto}.z-tabs-scroll-wrapper.vertical.z-tabs-scroll-wrapper-limited{height:var(--z-tabs-vertical-max-height, min(22rem, 60vh));overflow:hidden auto}.z-tabs-scroll-wrapper.z-tabs-scroll-wrapper-scrollable{overflow-x:auto}.z-tabs-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 .2s ease-in-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;will-change:transform,width,height}.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.z-tabs-glide-indicator-ready{transition:transform .48s cubic-bezier(.22,1,.36,1),width .48s cubic-bezier(.22,1,.36,1),height .48s cubic-bezier(.22,1,.36,1)}.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]{animation:none!important}.z-tabs-glide-indicator.z-tabs-glide-indicator-ready{transition:none!important}.z-tab-icon-bounce{animation:none!important}}@keyframes z-tabs-fade-in{0%{opacity:0;transform:translateY(-.2rem)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "component", type: ZIconComponent, selector: "z-icon, [z-icon]", inputs: ["class", "zType", "zAnimatedType", "zAnimate", "zAnimationTrigger", "zSize", "zStrokeWidth", "zSvg"] }, { kind: "component", type: ZButtonComponent, selector: "z-button, button[z-button], a[z-button]", inputs: ["class", "zType", "zSize", "zShape", "zLabel", "zLoading", "zDisabled", "zTypeIcon", "zAnimatedTypeIcon", "zAnimateIcon", "zAnimationTriggerIcon", "zSizeIcon", "zStrokeWidthIcon", "zWave"], exportAs: ["zButton"] }, { kind: "directive", type: ZTooltipDirective, selector: "[z-tooltip], [zTooltip]", inputs: ["zContent", "zPosition", "zTooltipPosition", "zTrigger", "zTooltipTrigger", "zTooltipType", "zTooltipSize", "zClass", "zTooltipClass", "zShowDelay", "zTooltipShowDelay", "zHideDelay", "zTooltipHideDelay", "zArrow", "zTooltipArrow", "zDisabled", "zTooltipDisabled", "zOffset", "zTooltipOffset", "zAutoDetect", "zTriggerElement", "zAlwaysShow", "zMaxWidth"], outputs: ["zShow", "zHide"], exportAs: ["zTooltip"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ZPopoverDirective, selector: "[z-popover]", inputs: ["zPopoverContent", "zPosition", "zTrigger", "zPopoverTrigger", "zClass", "zShowDelay", "zHideDelay", "zDisabled", "zOffset", "zPopoverWidth", "zTriggerRef", "zManualClose", "zOutsideClickClose", "zScrollClose", "zSticky", "zShowArrow", "zKeyboardSafe"], outputs: ["zShow", "zHide", "zHideStart", "zControl", "zPositionChange", "zOutsideClick"], exportAs: ["zPopover"] }, { kind: "component", type: NgScrollbar, selector: "ng-scrollbar:not([externalViewport]), [ngScrollbar]", exportAs: ["ngScrollbar"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
783
|
+
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 (tab of zTabs(); track tab.value; let idx = $index; let last = $last) {\n <button\n #tabButton\n type=\"button\"\n role=\"tab\"\n [class]=\"getTabItemClasses(tab)\"\n [attr.data-active]=\"isTabActive(tab)\"\n [attr.data-state]=\"isTabActive(tab) ? 'active' : 'inactive'\"\n [attr.data-type]=\"zType()\"\n [attr.data-orientation]=\"zOrientation()\"\n [attr.data-last]=\"last\"\n [attr.aria-selected]=\"isTabActive(tab)\"\n [attr.aria-controls]=\"'panel-' + tab.value\"\n [disabled]=\"tab.disabled\"\n [tabindex]=\"isTabActive(tab) ? 0 : -1\"\n z-tooltip\n [zContent]=\"zOrientation() === 'vertical' ? (tab.label | translate) : ''\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n (click)=\"selectTab(tab)\"\n (keydown)=\"onTabKeydown($event, idx)\">\n @if (tab.icon) {\n <z-icon\n [zType]=\"tab.icon\"\n zSize=\"16\"\n class=\"shrink-0\"\n [class.z-tab-icon-bounce]=\"isGlideType() && bouncingTab() === 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() === tab.value\">\n {{ tab.label | translate }}\n </span>\n @if (tab.badge) {\n <span\n class=\"ring-background ml-1.5 inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-xs font-semibold ring-2\"\n [class.bg-primary]=\"zType() !== 'badge'\"\n [class.text-primary-foreground]=\"zType() !== 'badge'\"\n [class.bg-primary!]=\"zType() === 'badge'\"\n [class.text-primary-foreground!]=\"zType() === 'badge'\">\n {{ tab.badge }}\n </span>\n }\n </button>\n }\n </div>\n </ng-template>\n\n <!-- Tab Panels -->\n @if (!zTabsOnly()) {\n <div\n class=\"z-tabs-panels min-h-0\"\n [class.flex-1]=\"zOrientation() === 'vertical'\"\n [class.shadow-xs]=\"contentWrapperFramed()\"\n [class.z-tabs-panels-unwrapped]=\"!contentWrapperFramed()\">\n @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 (tab of zTabs(); track tab.value) {\n <button\n #dropdownItem\n type=\"button\"\n class=\"flex w-full cursor-pointer items-center justify-start gap-2 rounded-sm px-2 py-1.5 text-left text-sm font-medium transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n [class.hover:text-foreground]=\"!isTabActive(tab)\"\n [class.focus:bg-primary/10]=\"!isTabActive(tab)\"\n [class.bg-primary/15]=\"isTabActive(tab)\"\n [class.text-primary]=\"isTabActive(tab)\"\n [disabled]=\"tab.disabled\"\n (click)=\"selectTab(tab, true); close()\">\n @if (tab.icon) {\n <z-icon [zType]=\"tab.icon\" zSize=\"16\" class=\"text-muted-foreground shrink-0\" />\n }\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"tab.label | translate\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n [zTriggerElement]=\"dropdownItem\">\n {{ tab.label | translate }}\n </span>\n @if (tab.badge) {\n <span\n class=\"bg-primary text-primary-foreground inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-xs font-semibold\">\n {{ tab.badge }}\n </span>\n }\n @if (isTabActive(tab)) {\n <z-icon zType=\"lucideCheck\" zSize=\"16\" class=\"text-primary shink-0\" />\n }\n </button>\n }\n </div>\n</ng-template>\n", styles: [".z-tabs-scroll-wrapper{overflow-x:clip;overflow-y:visible;scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth}.z-tabs-scroll-wrapper::-webkit-scrollbar{display:none}.z-tabs-scroll-wrapper.vertical{max-height:var(--z-tabs-vertical-max-height, min(22rem, 60vh));overflow:hidden auto}.z-tabs-scroll-wrapper.vertical.z-tabs-scroll-wrapper-limited{height:var(--z-tabs-vertical-max-height, min(22rem, 60vh));overflow:hidden auto}.z-tabs-scroll-wrapper.z-tabs-scroll-wrapper-scrollable{overflow-x:auto}.z-tabs-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 });
|
|
698
784
|
}
|
|
699
785
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: ZTabsComponent, decorators: [{
|
|
700
786
|
type: Component,
|
|
@@ -708,8 +794,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
|
|
|
708
794
|
NgScrollbar,
|
|
709
795
|
], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
710
796
|
class: 'z-tabs-wrapper block',
|
|
711
|
-
}, 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() && glideStyle(); as style) {\n <div\n class=\"z-tabs-glide-indicator pointer-events-none absolute top-0 left-0 z-[6]\"\n [class.z-tabs-glide-indicator-ready]=\"glideReady()\"\n [attr.data-type]=\"zType()\"\n [style.transform]=\"style.transform\"\n [style.width]=\"style.width\"\n [style.height]=\"style.height\"\n aria-hidden=\"true\"></div>\n }\n @for (tab of zTabs(); track tab.value; let idx = $index; let last = $last) {\n <button\n #tabButton\n type=\"button\"\n role=\"tab\"\n [class]=\"getTabItemClasses(tab)\"\n [attr.data-active]=\"isTabActive(tab)\"\n [attr.data-state]=\"isTabActive(tab) ? 'active' : 'inactive'\"\n [attr.data-type]=\"zType()\"\n [attr.data-orientation]=\"zOrientation()\"\n [attr.data-last]=\"last\"\n [attr.aria-selected]=\"isTabActive(tab)\"\n [attr.aria-controls]=\"'panel-' + tab.value\"\n [disabled]=\"tab.disabled\"\n [tabindex]=\"isTabActive(tab) ? 0 : -1\"\n z-tooltip\n [zContent]=\"zOrientation() === 'vertical' ? (tab.label | translate) : ''\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n (click)=\"selectTab(tab)\"\n (pointerenter)=\"preloadTab(tab)\"\n (focus)=\"preloadTab(tab)\"\n (keydown)=\"onTabKeydown($event, idx)\">\n @if (tab.icon) {\n <z-icon\n [zType]=\"tab.icon\"\n zSize=\"16\"\n class=\"shrink-0\"\n [class.z-tab-icon-bounce]=\"isGlideType() && bouncingTab() === 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() === tab.value\">\n {{ tab.label | translate }}\n </span>\n @if (tab.badge) {\n <span\n class=\"ring-background ml-1.5 inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-xs font-semibold ring-2\"\n [class.bg-primary]=\"zType() !== 'badge'\"\n [class.text-primary-foreground]=\"zType() !== 'badge'\"\n [class.bg-primary!]=\"zType() === 'badge'\"\n [class.text-primary-foreground!]=\"zType() === 'badge'\">\n {{ tab.badge }}\n </span>\n }\n </button>\n }\n </div>\n </ng-template>\n\n <!-- Tab Panels -->\n @if (!zTabsOnly()) {\n <div\n class=\"z-tabs-panels min-h-0\"\n [class.flex-1]=\"zOrientation() === 'vertical'\"\n [class.shadow-xs]=\"contentWrapperFramed()\"\n [class.z-tabs-panels-unwrapped]=\"!contentWrapperFramed()\">\n @for (panel of tabPanels(); track panel.zTabPanel()) {\n @if (panelRenderStates().get(panel.zTabPanel())) {\n <div\n role=\"tabpanel\"\n [id]=\"'panel-' + panel.zTabPanel()\"\n [attr.aria-labelledby]=\"panel.zTabPanel()\"\n [attr.data-state]=\"visiblePanel() === panel.zTabPanel() ? 'active' : 'inactive'\"\n [attr.inert]=\"visiblePanel() === panel.zTabPanel() ? null : ''\">\n <ng-container *ngTemplateOutlet=\"panel.template\" />\n </div>\n }\n }\n </div>\n }\n</div>\n\n<!-- Dropdown Menu Template -->\n<ng-template #dropdownTpl let-close=\"close\">\n <div\n class=\"z-tabs-dropdown-menu flex max-h-[18.75rem] max-w-[12.5rem] min-w-[6.25rem] flex-col gap-0.5 overflow-y-auto p-1\">\n @for (tab of zTabs(); track tab.value) {\n <button\n #dropdownItem\n type=\"button\"\n class=\"flex w-full cursor-pointer items-center justify-start gap-2 rounded-sm px-2 py-1.5 text-left text-sm font-medium transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n [class.hover:text-foreground]=\"!isTabActive(tab)\"\n [class.focus:bg-primary/10]=\"!isTabActive(tab)\"\n [class.bg-primary/15]=\"isTabActive(tab)\"\n [class.text-primary]=\"isTabActive(tab)\"\n [disabled]=\"tab.disabled\"\n (pointerenter)=\"preloadTab(tab)\"\n (click)=\"selectTab(tab, true); close()\">\n @if (tab.icon) {\n <z-icon [zType]=\"tab.icon\" zSize=\"16\" class=\"text-muted-foreground shrink-0\" />\n }\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"tab.label | translate\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n [zTriggerElement]=\"dropdownItem\">\n {{ tab.label | translate }}\n </span>\n @if (tab.badge) {\n <span\n class=\"bg-primary text-primary-foreground inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-xs font-semibold\">\n {{ tab.badge }}\n </span>\n }\n @if (isTabActive(tab)) {\n <z-icon zType=\"lucideCheck\" zSize=\"16\" class=\"text-primary shink-0\" />\n }\n </button>\n }\n </div>\n</ng-template>\n", styles: [".z-tabs-scroll-wrapper{overflow-x:clip;overflow-y:visible;scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth}.z-tabs-scroll-wrapper::-webkit-scrollbar{display:none}.z-tabs-scroll-wrapper.vertical{max-height:var(--z-tabs-vertical-max-height, min(22rem, 60vh));overflow:hidden auto}.z-tabs-scroll-wrapper.vertical.z-tabs-scroll-wrapper-limited{height:var(--z-tabs-vertical-max-height, min(22rem, 60vh));overflow:hidden auto}.z-tabs-scroll-wrapper.z-tabs-scroll-wrapper-scrollable{overflow-x:auto}.z-tabs-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 .2s ease-in-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;will-change:transform,width,height}.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.z-tabs-glide-indicator-ready{transition:transform .48s cubic-bezier(.22,1,.36,1),width .48s cubic-bezier(.22,1,.36,1),height .48s cubic-bezier(.22,1,.36,1)}.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]{animation:none!important}.z-tabs-glide-indicator.z-tabs-glide-indicator-ready{transition:none!important}.z-tab-icon-bounce{animation:none!important}}@keyframes z-tabs-fade-in{0%{opacity:0;transform:translateY(-.2rem)}to{opacity:1;transform:translateY(0)}}\n"] }]
|
|
712
|
-
}], 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 }] }],
|
|
797
|
+
}, 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 (tab of zTabs(); track tab.value; let idx = $index; let last = $last) {\n <button\n #tabButton\n type=\"button\"\n role=\"tab\"\n [class]=\"getTabItemClasses(tab)\"\n [attr.data-active]=\"isTabActive(tab)\"\n [attr.data-state]=\"isTabActive(tab) ? 'active' : 'inactive'\"\n [attr.data-type]=\"zType()\"\n [attr.data-orientation]=\"zOrientation()\"\n [attr.data-last]=\"last\"\n [attr.aria-selected]=\"isTabActive(tab)\"\n [attr.aria-controls]=\"'panel-' + tab.value\"\n [disabled]=\"tab.disabled\"\n [tabindex]=\"isTabActive(tab) ? 0 : -1\"\n z-tooltip\n [zContent]=\"zOrientation() === 'vertical' ? (tab.label | translate) : ''\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n (click)=\"selectTab(tab)\"\n (keydown)=\"onTabKeydown($event, idx)\">\n @if (tab.icon) {\n <z-icon\n [zType]=\"tab.icon\"\n zSize=\"16\"\n class=\"shrink-0\"\n [class.z-tab-icon-bounce]=\"isGlideType() && bouncingTab() === 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() === tab.value\">\n {{ tab.label | translate }}\n </span>\n @if (tab.badge) {\n <span\n class=\"ring-background ml-1.5 inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-xs font-semibold ring-2\"\n [class.bg-primary]=\"zType() !== 'badge'\"\n [class.text-primary-foreground]=\"zType() !== 'badge'\"\n [class.bg-primary!]=\"zType() === 'badge'\"\n [class.text-primary-foreground!]=\"zType() === 'badge'\">\n {{ tab.badge }}\n </span>\n }\n </button>\n }\n </div>\n </ng-template>\n\n <!-- Tab Panels -->\n @if (!zTabsOnly()) {\n <div\n class=\"z-tabs-panels min-h-0\"\n [class.flex-1]=\"zOrientation() === 'vertical'\"\n [class.shadow-xs]=\"contentWrapperFramed()\"\n [class.z-tabs-panels-unwrapped]=\"!contentWrapperFramed()\">\n @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 (tab of zTabs(); track tab.value) {\n <button\n #dropdownItem\n type=\"button\"\n class=\"flex w-full cursor-pointer items-center justify-start gap-2 rounded-sm px-2 py-1.5 text-left text-sm font-medium transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n [class.hover:text-foreground]=\"!isTabActive(tab)\"\n [class.focus:bg-primary/10]=\"!isTabActive(tab)\"\n [class.bg-primary/15]=\"isTabActive(tab)\"\n [class.text-primary]=\"isTabActive(tab)\"\n [disabled]=\"tab.disabled\"\n (click)=\"selectTab(tab, true); close()\">\n @if (tab.icon) {\n <z-icon [zType]=\"tab.icon\" zSize=\"16\" class=\"text-muted-foreground shrink-0\" />\n }\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"tab.label | translate\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n [zTriggerElement]=\"dropdownItem\">\n {{ tab.label | translate }}\n </span>\n @if (tab.badge) {\n <span\n class=\"bg-primary text-primary-foreground inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-xs font-semibold\">\n {{ tab.badge }}\n </span>\n }\n @if (isTabActive(tab)) {\n <z-icon zType=\"lucideCheck\" zSize=\"16\" class=\"text-primary shink-0\" />\n }\n </button>\n }\n </div>\n</ng-template>\n", styles: [".z-tabs-scroll-wrapper{overflow-x:clip;overflow-y:visible;scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth}.z-tabs-scroll-wrapper::-webkit-scrollbar{display:none}.z-tabs-scroll-wrapper.vertical{max-height:var(--z-tabs-vertical-max-height, min(22rem, 60vh));overflow:hidden auto}.z-tabs-scroll-wrapper.vertical.z-tabs-scroll-wrapper-limited{height:var(--z-tabs-vertical-max-height, min(22rem, 60vh));overflow:hidden auto}.z-tabs-scroll-wrapper.z-tabs-scroll-wrapper-scrollable{overflow-x:auto}.z-tabs-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"] }]
|
|
798
|
+
}], 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"] }] } });
|
|
713
799
|
|
|
714
800
|
/**
|
|
715
801
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shival99-z-ui-components-z-tabs.mjs","sources":["../../../../libs/core-ui/components/z-tabs/directives/z-tab-panel.directive.ts","../../../../libs/core-ui/components/z-tabs/z-tabs.define.ts","../../../../libs/core-ui/components/z-tabs/z-tabs.util.ts","../../../../libs/core-ui/components/z-tabs/z-tabs.variants.ts","../../../../libs/core-ui/components/z-tabs/z-tabs.component.ts","../../../../libs/core-ui/components/z-tabs/z-tabs.component.html","../../../../libs/core-ui/components/z-tabs/shival99-z-ui-components-z-tabs.ts"],"sourcesContent":["import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[z-tab-panel], [zTabPanel]',\n standalone: true,\n exportAs: 'zTabPanel',\n})\nexport class ZTabPanelDirective {\n public readonly zTabPanel = input.required<string>();\n public readonly template = inject(TemplateRef<unknown>);\n}\n","import type { ZTabsType } from './z-tabs.types';\n\n/** Minimum scroll-position delta (px) before the fade/scroll-button state is toggled. */\nexport const Z_TABS_SCROLL_TOLERANCE = 4;\n\n/**\n * Types that render a shared pill behind the active tab and glide it into place instead of\n * swapping each item's own background.\n */\nexport const Z_TABS_GLIDE_TYPES: ZTabsType[] = ['segment', 'segment-solid', 'pill-solid', 'pill-blur'];\n","/** Hands out a fresh, monotonically increasing id for scoping each `z-tabs` instance's cache key. */\nexport const zTabsInstanceIds = (() => {\n let counter = 0;\n return { next: (): number => ++counter };\n})();\n\n/** Queues low-priority panel work on idle time, falling back to a timer where `requestIdleCallback` is missing. */\nexport function zTabsRequestIdle(task: () => void, timeout = 200): number {\n if (typeof window === 'undefined') {\n return 0;\n }\n\n const idle = window.requestIdleCallback;\n return idle ? idle(() => task(), { timeout }) : window.setTimeout(task, 0);\n}\n\n/** Cancels a handle returned by `zTabsRequestIdle`, regardless of which scheduler produced it. */\nexport function zTabsCancelIdle(handle: number | undefined): void {\n if (!handle || typeof window === 'undefined') {\n return;\n }\n\n const cancel = window.cancelIdleCallback;\n if (cancel) {\n cancel(handle);\n return;\n }\n\n window.clearTimeout(handle);\n}\n","import { cva } from 'class-variance-authority';\n\nexport const zTabsVariants = cva('z-tabs flex min-w-0', {\n variants: {\n zType: {\n line: 'gap-0',\n soft: 'gap-1 bg-background p-0 dark:bg-transparent',\n segment: 'relative gap-1 rounded-lg bg-muted/60 p-1 dark:bg-muted/35',\n 'segment-solid': 'relative gap-1 rounded-lg bg-muted/60 p-1 dark:bg-muted/35',\n 'pill-solid': 'relative gap-1 rounded-full bg-muted/60 p-1 dark:bg-muted/35',\n 'pill-blur': 'relative gap-1 rounded-full bg-muted/40 p-1 backdrop-blur-md dark:bg-muted/20',\n folder: 'isolate gap-0 bg-background p-0 dark:bg-transparent',\n 'folder-soft': 'isolate gap-0 bg-background p-0 dark:bg-transparent',\n 'folder-solid': 'isolate gap-0 bg-background p-0 dark:bg-transparent',\n underline: 'gap-0',\n underlined: 'gap-0 rounded-none bg-background p-0 dark:bg-transparent',\n badge: 'gap-0 rounded-none bg-background p-0 dark:bg-transparent',\n sharp: 'gap-1 rounded-none bg-background p-0 dark:bg-transparent',\n 'sharp-line': 'gap-0 rounded-none bg-background p-0 dark:bg-transparent',\n 'sharp-line-filled': 'gap-0 rounded-none bg-background p-0 dark:bg-transparent',\n square: 'gap-0 rounded-none bg-background p-0 dark:bg-transparent',\n 'vertical-sharp': 'gap-1 rounded-none bg-background p-0 dark:bg-transparent',\n 'code-line': 'h-10 w-full justify-start gap-0 rounded-none bg-background p-0 dark:bg-transparent',\n },\n zOrientation: {\n horizontal: 'w-max flex-row items-center',\n vertical: 'w-full flex-col items-stretch gap-1 border-b-0',\n },\n },\n defaultVariants: {\n zType: 'line',\n zOrientation: 'horizontal',\n },\n compoundVariants: [\n {\n zType: 'vertical-sharp',\n zOrientation: 'vertical',\n class: 'border-r-0 pr-0',\n },\n {\n zType: 'sharp-line',\n zOrientation: 'vertical',\n class: 'gap-0',\n },\n {\n zType: 'sharp-line-filled',\n zOrientation: 'vertical',\n class: 'gap-0',\n },\n ],\n});\n\nexport const zTabItemVariants = cva(\n 'z-tab-item relative inline-flex min-h-10 select-none items-center justify-center gap-2 whitespace-nowrap font-medium text-sm leading-none text-muted-foreground transition-[color,background-color,border-color,box-shadow,transform] duration-200 outline-none focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0 cursor-pointer disabled:opacity-45 disabled:cursor-not-allowed',\n {\n variants: {\n zType: {\n 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',\n soft: 'rounded-md border-0 text-muted-foreground hover:text-foreground data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:shadow-xs! dark:data-[active=true]:bg-primary/15',\n segment: 'z-10 rounded-md border-0 text-muted-foreground hover:text-foreground data-[active=true]:text-primary',\n 'segment-solid':\n 'z-10 rounded-md border-0 text-muted-foreground hover:text-foreground data-[active=true]:text-primary-foreground',\n 'pill-solid':\n 'z-10 rounded-full border-0 text-muted-foreground hover:text-foreground data-[active=true]:text-primary',\n 'pill-blur':\n 'z-10 rounded-full border-0 text-muted-foreground hover:text-foreground data-[active=true]:text-primary',\n folder:\n 'rounded-t-md border-0 bg-transparent text-muted-foreground shadow-[inset_0_-1px_0_var(--border)] hover:text-foreground focus-visible:ring-0 focus-visible:ring-offset-0 data-[active=true]:z-[2] data-[active=true]:bg-background data-[active=true]:text-primary data-[active=true]:shadow-[inset_1px_0_0_var(--border),inset_-1px_0_0_var(--border),inset_0_1px_0_var(--border)]',\n 'folder-soft':\n 'rounded-t-md border-0 bg-transparent text-muted-foreground shadow-[inset_0_-1px_0_var(--border)] hover:text-foreground focus-visible:ring-0 focus-visible:ring-offset-0 data-[active=true]:z-[2] data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:shadow-[inset_1px_0_0_var(--border),inset_-1px_0_0_var(--border),inset_0_1px_0_var(--border)] dark:data-[active=true]:bg-primary/15',\n 'folder-solid':\n 'rounded-t-md border-0 bg-transparent text-muted-foreground shadow-[inset_0_-1px_0_var(--border)] hover:text-foreground focus-visible:ring-0 focus-visible:ring-offset-0 data-[active=true]:z-[2] data-[active=true]:bg-primary data-[active=true]:text-primary-foreground data-[active=true]:shadow-[inset_1px_0_0_var(--primary),inset_-1px_0_0_var(--primary),inset_0_1px_0_var(--primary)]',\n underline:\n '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',\n underlined:\n '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!',\n badge:\n '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',\n sharp:\n 'rounded-none border border-border/45 border-b-[3px] bg-background text-foreground/60 hover:text-foreground data-[active=true]:border-primary! data-[active=true]:border-b-primary! data-[active=true]:text-primary',\n 'sharp-line':\n 'rounded-none first:rounded-l-sm last:rounded-r-sm border border-border/45 border-b-[3px] bg-background text-foreground/60 hover:text-foreground data-[active=true]:border-primary! data-[active=true]:border-b-primary! data-[active=true]:text-primary',\n 'sharp-line-filled':\n 'rounded-none first:rounded-l-sm last:rounded-r-sm border border-border/45 border-b-[3px] bg-background text-foreground/60 hover:text-foreground data-[active=true]:border-primary! data-[active=true]:border-b-primary! data-[active=true]:bg-primary/30 data-[active=true]:text-primary',\n square:\n 'rounded-none border border-border/45 border-b-[3px] bg-background text-foreground/60 hover:text-foreground data-[active=true]:border-primary! data-[active=true]:border-b-primary! data-[active=true]:bg-primary/15 data-[active=true]:text-primary',\n 'vertical-sharp':\n 'rounded-none border border-transparent border-b-[3px] bg-background text-foreground/60 hover:text-foreground data-[active=true]:border-primary data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:shadow-none',\n 'code-line':\n 'relative inline-flex h-full min-h-8 flex-1 items-center justify-center gap-1.5 whitespace-nowrap rounded-none first:rounded-l-sm last:rounded-r-sm border border-border/45 border-b-2 bg-background px-4 py-1.5 font-medium text-foreground/60 transition-all hover:text-foreground data-[active=true]:relative data-[active=true]:z-[1] data-[active=true]:-mb-px data-[active=true]:border-x-primary/70! data-[active=true]:border-t-primary/70! data-[active=true]:border-b-primary! data-[active=true]:bg-primary/30 data-[active=true]:text-primary data-[active=true]:shadow-none [&_span.z-tab-item-label]:font-mono [&_span.z-tab-item-label]:text-[13px]',\n },\n zSize: {\n xs: 'min-h-8 px-2.5 py-1 text-xs',\n sm: 'min-h-9 px-3 py-1.5 text-sm',\n default: 'min-h-10 px-4 py-2 text-sm',\n lg: 'min-h-[2.625rem] px-4.5 py-2.25 text-sm',\n },\n zOrientation: {\n horizontal: '',\n vertical: 'justify-start px-3 py-2',\n },\n },\n compoundVariants: [\n {\n zType: 'line',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-sm data-[active=true]:shadow-xs',\n },\n {\n zType: 'soft',\n zOrientation: 'vertical',\n class:\n 'w-full justify-start rounded-md data-[active=true]:bg-primary/10 data-[active=true]:shadow-xs dark:data-[active=true]:bg-primary/15',\n },\n {\n zType: 'segment',\n zOrientation: 'vertical',\n class:\n 'w-full justify-start rounded-md data-[active=true]:bg-background data-[active=true]:shadow-xs dark:data-[active=true]:border-border!',\n },\n {\n zType: 'segment-solid',\n zOrientation: 'vertical',\n class:\n 'w-full justify-start rounded-md data-[active=true]:bg-primary data-[active=true]:text-primary-foreground data-[active=true]:shadow-xs',\n },\n {\n zType: 'pill-solid',\n zOrientation: 'vertical',\n class:\n 'w-full justify-start rounded-full data-[active=true]:bg-background data-[active=true]:shadow-sm dark:data-[active=true]:border-border!',\n },\n {\n zType: 'pill-blur',\n zOrientation: 'vertical',\n class:\n 'w-full justify-start rounded-full backdrop-blur-md data-[active=true]:bg-background/70 data-[active=true]:shadow-sm',\n },\n {\n zType: 'folder',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-sm data-[active=true]:shadow-xs',\n },\n {\n zType: 'folder-soft',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-sm data-[active=true]:shadow-xs',\n },\n {\n zType: 'folder-solid',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-sm data-[active=true]:shadow-xs',\n },\n {\n zType: 'underline',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-sm data-[active=true]:shadow-xs',\n },\n\n {\n zType: 'underlined',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-none data-[active=true]:shadow-xs',\n },\n {\n zType: 'badge',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-none data-[active=true]:shadow-xs',\n },\n {\n zType: 'sharp',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-none data-[active=true]:shadow-xs',\n },\n {\n zType: 'sharp-line',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-none data-[active=true]:shadow-xs',\n },\n {\n zType: 'sharp-line-filled',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-none data-[active=true]:shadow-xs',\n },\n {\n zType: 'square',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-none data-[active=true]:shadow-xs',\n },\n {\n zType: 'vertical-sharp',\n zOrientation: 'vertical',\n class:\n 'w-full justify-start rounded-none border border-transparent border-b-[3px] px-3 py-1.5 data-[active=true]:border-primary data-[active=true]:shadow-xs',\n },\n {\n zType: 'code-line',\n zSize: 'xs',\n zOrientation: 'horizontal',\n class: 'min-h-7 px-3 py-1 text-xs [&_span.z-tab-item-label]:text-xs',\n },\n {\n zType: 'code-line',\n zSize: 'sm',\n zOrientation: 'horizontal',\n class: 'min-h-8 px-3.5 py-1.5 text-sm',\n },\n {\n zType: 'code-line',\n zSize: 'default',\n zOrientation: 'horizontal',\n class: 'min-h-8 px-4 py-1.5 text-sm',\n },\n {\n zType: 'code-line',\n zSize: 'lg',\n zOrientation: 'horizontal',\n class: 'min-h-9 px-4.5 py-2 text-sm',\n },\n {\n zType: 'code-line',\n zOrientation: 'vertical',\n class: 'h-auto w-full flex-none justify-start rounded-none px-3 py-2 data-[active=true]:shadow-xs',\n },\n ],\n defaultVariants: {\n zType: 'line',\n zSize: 'default',\n zOrientation: 'horizontal',\n },\n }\n);\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n effect,\n ElementRef,\n input,\n model,\n output,\n signal,\n viewChild,\n untracked,\n viewChildren,\n ViewEncapsulation,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { ZPopoverDirective } from '@shival99/z-ui/components/z-popover';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZCacheService } from '@shival99/z-ui/services';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { NgScrollbar } from 'ngx-scrollbar';\nimport { ZTabPanelDirective } from './directives/z-tab-panel.directive';\nimport { Z_TABS_GLIDE_TYPES, Z_TABS_SCROLL_TOLERANCE } from './z-tabs.define';\nimport type { ZTab, ZTabsContentFit, ZTabsOrientation, ZTabsPreload, ZTabsSize, ZTabsType } from './z-tabs.types';\nimport { zTabsCancelIdle, zTabsInstanceIds, zTabsRequestIdle } from './z-tabs.util';\nimport { zTabsVariants, zTabItemVariants } from './z-tabs.variants';\n\n@Component({\n selector: 'z-tabs',\n imports: [\n ZIconComponent,\n ZButtonComponent,\n ZTooltipDirective,\n NgTemplateOutlet,\n ZPopoverDirective,\n TranslatePipe,\n NgScrollbar,\n ],\n standalone: true,\n templateUrl: './z-tabs.component.html',\n styleUrl: './z-tabs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'z-tabs-wrapper block',\n },\n})\nexport class ZTabsComponent implements OnInit, AfterViewInit, OnDestroy {\n public readonly tabPanels = contentChildren(ZTabPanelDirective);\n public readonly tabsListContainer = viewChild<ElementRef<HTMLDivElement>>('tabsListContainer');\n public readonly tabButtons = viewChildren<ElementRef<HTMLButtonElement>>('tabButton');\n\n public readonly class = input<ClassValue>('');\n public readonly zTabs = input.required<ZTab[]>();\n public readonly zType = input<ZTabsType>('line');\n public readonly zSize = input<ZTabsSize>('default');\n public readonly zOrientation = input<ZTabsOrientation>('horizontal');\n public readonly zContentFit = input<ZTabsContentFit>('none');\n public readonly zLazy = input(false);\n public readonly zPreload = input<ZTabsPreload>('hover');\n public readonly zDestroyInactive = input(false);\n public readonly zTabsOnly = input(false);\n public readonly zShowNavWrapper = input(false);\n public readonly zNavFullWidth = input(false);\n public readonly zClassContent = input<ClassValue>('');\n public readonly zShowContentWrapper = input(true);\n public readonly zReloadable = input(true);\n public readonly zEmitOnActiveClick = input(true);\n public readonly zCache = input(true);\n public readonly zCacheKey = input('');\n\n public readonly activeTab = model<string>('');\n public readonly zTabChange = output<string>();\n\n protected readonly mountedTabs = signal<Set<string>>(new Set());\n protected readonly renderedTab = signal<string>('');\n protected readonly canScrollLeft = signal(false);\n protected readonly canScrollRight = signal(false);\n protected readonly bouncingTab = signal<string | null>(null);\n\n protected readonly isGlideType = computed(\n () => Z_TABS_GLIDE_TYPES.includes(this.zType()) && this.zOrientation() === 'horizontal'\n );\n\n protected readonly glideStyle = signal<{ transform: string; width: string; height: string } | null>(null);\n protected readonly glideReady = signal(false);\n\n /** With `zDestroyInactive` the single rendered panel is the visible one, so it never collapses mid-swap. */\n protected readonly visiblePanel = computed(() => (this.zDestroyInactive() ? this.renderedTab() : this.activeTab()));\n\n protected readonly panelRenderStates = computed(\n () =>\n new Map(\n this.tabPanels().map(panel => {\n const tabValue = panel.zTabPanel();\n\n if (this.zDestroyInactive()) {\n return [tabValue, this.renderedTab() === tabValue] as const;\n }\n\n if (!this.zLazy()) {\n return [tabValue, true] as const;\n }\n\n return [tabValue, this.mountedTabs().has(tabValue)] as const;\n })\n )\n );\n\n private _resizeObserver?: ResizeObserver;\n private _mountFrame?: number;\n private _idleHandle?: number;\n private _viewReady = false;\n private readonly _cacheInstanceId = zTabsInstanceIds.next();\n\n constructor() {\n effect(() => {\n this.zTabs();\n requestAnimationFrame(() => this.checkScroll());\n });\n\n effect(() => {\n this.activeTab();\n this.zTabs();\n this.isGlideType();\n requestAnimationFrame(() => this._updateGlideIndicator());\n });\n\n effect(() => {\n const active = this.activeTab();\n untracked(() => this._scheduleCommit(active));\n });\n }\n\n ngOnInit(): void {\n this._restoreActiveTabFromCache();\n }\n\n ngAfterViewInit(): void {\n this._viewReady = true;\n this.checkScroll();\n this._setupResizeObserver();\n requestAnimationFrame(() => this._updateGlideIndicator());\n this._preloadNextIdlePanel();\n }\n\n ngOnDestroy(): void {\n this._resizeObserver?.disconnect();\n zTabsCancelIdle(this._idleHandle);\n if (this._mountFrame !== undefined) {\n cancelAnimationFrame(this._mountFrame);\n }\n }\n\n protected readonly tabsClasses = computed(() =>\n zMergeClasses(\n zTabsVariants({\n zType: this.zType(),\n zOrientation: this.zOrientation(),\n }),\n this.zNavFullWidth() ? 'w-full' : '',\n this.class()\n )\n );\n\n protected readonly contentWrapperFramed = computed(() => {\n if (!this.zShowContentWrapper()) {\n return false;\n }\n\n if (this.zOrientation() === 'vertical') {\n return false;\n }\n\n const type = this.zType();\n return (\n type === 'folder' ||\n type === 'folder-soft' ||\n type === 'folder-solid' ||\n type === 'sharp' ||\n type === 'sharp-line' ||\n type === 'sharp-line-filled' ||\n type === 'square' ||\n type === 'code-line'\n );\n });\n\n protected readonly tabsListHasBottomPadding = computed(() => {\n if (this.zOrientation() !== 'horizontal') {\n return false;\n }\n\n const type = this.zType();\n return (\n type !== 'folder' &&\n type !== 'folder-soft' &&\n type !== 'folder-solid' &&\n type !== 'segment' &&\n type !== 'segment-solid' &&\n type !== 'pill-solid' &&\n type !== 'pill-blur' &&\n type !== 'sharp' &&\n type !== 'sharp-line' &&\n type !== 'sharp-line-filled' &&\n type !== 'square' &&\n type !== 'code-line'\n );\n });\n\n protected readonly verticalTabsScrollable = computed(\n () => this.zOrientation() === 'vertical' && this.zTabs().length > 8\n );\n\n protected readonly navClasses = computed(() =>\n zMergeClasses('z-tabs-nav flex items-center gap-1.5', this.zClassContent())\n );\n\n protected getTabItemClasses(_tab: ZTab): string {\n return zMergeClasses(\n zTabItemVariants({\n zType: this.zType(),\n zSize: this.zSize(),\n zOrientation: this.zOrientation(),\n })\n );\n }\n\n protected selectTab(tab: ZTab, scrollToView = true): void {\n if (tab.disabled) {\n return;\n }\n\n const isAlreadyActive = this.activeTab() === tab.value;\n if (isAlreadyActive && !this.zReloadable()) {\n return;\n }\n\n this.activeTab.set(tab.value);\n this._saveActiveTabToCache(tab.value);\n\n if (this.isGlideType()) {\n requestAnimationFrame(() => this._updateGlideIndicator());\n }\n\n if (this.isGlideType()) {\n this.bouncingTab.set(tab.value);\n setTimeout(() => {\n if (this.bouncingTab() === tab.value) {\n this.bouncingTab.set(null);\n }\n }, 320);\n }\n\n if (!isAlreadyActive || this.zEmitOnActiveClick()) {\n this.zTabChange.emit(tab.value);\n }\n\n if (scrollToView && this.zOrientation() === 'horizontal') {\n requestAnimationFrame(() => {\n const tabIndex = this.zTabs().findIndex(t => t.value === tab.value);\n const tabButtonsList = this.tabButtons();\n const tabButton = tabButtonsList[tabIndex];\n if (tabButton) {\n const alignTabInViewport = () => {\n const container = this.tabsListContainer()?.nativeElement;\n if (!container) {\n return;\n }\n\n const containerRect = container.getBoundingClientRect();\n const tabRect = tabButton.nativeElement.getBoundingClientRect();\n const centeredScrollLeft =\n container.scrollLeft + tabRect.left - containerRect.left - (container.clientWidth - tabRect.width) / 2;\n const maxScrollLeft = container.scrollWidth - container.clientWidth;\n\n container.scrollTo({\n left: Math.max(0, Math.min(centeredScrollLeft, maxScrollLeft)),\n behavior: 'smooth',\n });\n };\n\n alignTabInViewport();\n setTimeout(() => {\n alignTabInViewport();\n }, 320);\n }\n });\n }\n }\n\n /** Mounts a panel ahead of its click so the tab transition never pays for the first render. */\n protected preloadTab(tab: ZTab): void {\n if (this.zPreload() === 'none' || tab.disabled) {\n return;\n }\n\n zTabsRequestIdle(() => this._mountPanel(tab.value));\n }\n\n protected isTabActive(tab: ZTab): boolean {\n return this.activeTab() === tab.value;\n }\n\n protected onTabKeydown(event: KeyboardEvent, currentIndex: number): void {\n const tabs = this.zTabs().filter(t => !t.disabled);\n const currentTab = tabs[currentIndex];\n\n if (!currentTab) {\n return;\n }\n\n const isHorizontal = this.zOrientation() === 'horizontal';\n const nextKey = isHorizontal ? 'ArrowRight' : 'ArrowDown';\n const prevKey = isHorizontal ? 'ArrowLeft' : 'ArrowUp';\n\n if (event.key === nextKey) {\n event.preventDefault();\n const nextIndex = (currentIndex + 1) % tabs.length;\n this.selectTab(tabs[nextIndex]);\n return;\n }\n\n if (event.key === prevKey) {\n event.preventDefault();\n const prevIndex = (currentIndex - 1 + tabs.length) % tabs.length;\n this.selectTab(tabs[prevIndex]);\n return;\n }\n\n if (event.key === 'Home') {\n event.preventDefault();\n this.selectTab(tabs[0]);\n return;\n }\n\n if (event.key === 'End') {\n event.preventDefault();\n this.selectTab(tabs[tabs.length - 1]);\n }\n }\n\n protected checkScroll(): void {\n const container = this.tabsListContainer()?.nativeElement;\n if (!container || this.zOrientation() !== 'horizontal') {\n this.canScrollLeft.set(false);\n this.canScrollRight.set(false);\n return;\n }\n\n const { scrollLeft, scrollWidth, clientWidth } = container;\n const maxScrollLeft = scrollWidth - clientWidth;\n\n if (maxScrollLeft <= Z_TABS_SCROLL_TOLERANCE) {\n container.scrollLeft = 0;\n this.canScrollLeft.set(false);\n this.canScrollRight.set(false);\n return;\n }\n\n this.canScrollLeft.set(scrollLeft > Z_TABS_SCROLL_TOLERANCE);\n this.canScrollRight.set(maxScrollLeft - scrollLeft > Z_TABS_SCROLL_TOLERANCE);\n }\n\n protected scrollLeft(): void {\n const container = this.tabsListContainer()?.nativeElement;\n if (!container) {\n return;\n }\n\n container.scrollBy({ left: -200, behavior: 'smooth' });\n setTimeout(() => this.checkScroll(), 300);\n }\n\n protected scrollRight(): void {\n const container = this.tabsListContainer()?.nativeElement;\n if (!container) {\n return;\n }\n\n container.scrollBy({ left: 200, behavior: 'smooth' });\n setTimeout(() => this.checkScroll(), 300);\n }\n\n protected onTabsScroll(): void {\n this.checkScroll();\n }\n\n /**\n * Lets the browser paint the tab-strip transition before the panel subtree is committed, so the\n * swap lands after the animation has started instead of blocking its opening frames.\n */\n private _scheduleCommit(value: string): void {\n if (!value) {\n return;\n }\n\n if (!this._viewReady || typeof requestAnimationFrame === 'undefined') {\n this._commitPanel(value);\n return;\n }\n\n this._mountFrame = requestAnimationFrame(() => {\n this._mountFrame = requestAnimationFrame(() => this._commitPanel(value));\n });\n }\n\n private _commitPanel(value: string): void {\n if (this.activeTab() !== value) {\n return;\n }\n\n this.renderedTab.set(value);\n this._mountPanel(value);\n this._preloadNextIdlePanel();\n }\n\n private _mountPanel(value: string): void {\n if (!this._canMount(value)) {\n return;\n }\n\n this.mountedTabs.update(tabs => new Set(tabs).add(value));\n this._preloadNextIdlePanel();\n }\n\n /** Tracked even while `zDestroyInactive` is on, so flipping that input back keeps the visited panels. */\n private _canMount(value: string): boolean {\n return Boolean(value) && this.zLazy() && !this.mountedTabs().has(value);\n }\n\n /** Warms remaining panels one idle slot at a time so preloading never stalls a single frame. */\n private _preloadNextIdlePanel(): void {\n if (this.zPreload() !== 'idle' || !this.zLazy() || this.zDestroyInactive()) {\n return;\n }\n\n const next = this.zTabs().find(tab => !tab.disabled && !this.mountedTabs().has(tab.value));\n if (!next) {\n return;\n }\n\n zTabsCancelIdle(this._idleHandle);\n this._idleHandle = zTabsRequestIdle(() => this._mountPanel(next.value));\n }\n\n private _updateGlideIndicator(): void {\n if (!this.isGlideType()) {\n this.glideStyle.set(null);\n this.glideReady.set(false);\n return;\n }\n\n const activeIndex = this.zTabs().findIndex(tab => tab.value === this.activeTab());\n const button = this.tabButtons()[activeIndex]?.nativeElement;\n if (!button) {\n return;\n }\n\n this.glideStyle.set({\n transform: `translate(${button.offsetLeft}px, ${button.offsetTop}px)`,\n width: `${button.offsetWidth}px`,\n height: `${button.offsetHeight}px`,\n });\n\n if (!this.glideReady()) {\n requestAnimationFrame(() => this.glideReady.set(true));\n }\n }\n\n private _setupResizeObserver(): void {\n const container = this.tabsListContainer()?.nativeElement;\n if (!container) {\n return;\n }\n\n this._resizeObserver = new ResizeObserver(() => {\n this.checkScroll();\n this._updateGlideIndicator();\n });\n\n this._resizeObserver.observe(container);\n }\n\n private _restoreActiveTabFromCache(): void {\n if (!this.zCache()) {\n return;\n }\n\n const cacheKey = this._getCacheKey();\n const cachedTab = ZCacheService.get<string>(cacheKey);\n if (!cachedTab) {\n return;\n }\n\n const tab = this.zTabs().find(item => item.value === cachedTab && !item.disabled);\n if (!tab) {\n return;\n }\n\n this.activeTab.set(tab.value);\n }\n\n private _saveActiveTabToCache(value: string): void {\n if (!this.zCache()) {\n return;\n }\n\n ZCacheService.set(this._getCacheKey(), value);\n }\n\n private _getCacheKey(): string {\n const customKey = this.zCacheKey().trim();\n if (customKey) {\n return customKey;\n }\n\n const path = typeof window === 'undefined' ? 'ssr' : window.location.pathname;\n return `z-tabs:${path}:${this._cacheInstanceId}`;\n }\n\n protected scrollToActiveDropdownItem(): void {\n setTimeout(() => {\n const activeIndex = this.zTabs().findIndex(tab => tab.value === this.activeTab());\n if (activeIndex === -1) {\n return;\n }\n\n const dropdownMenu = document.querySelector('.z-tabs-dropdown-menu') as HTMLElement;\n if (!dropdownMenu) {\n return;\n }\n\n const dropdownItems = Array.from(dropdownMenu.querySelectorAll('button'));\n const activeItem = dropdownItems[activeIndex];\n\n if (activeItem && dropdownMenu) {\n const menuRect = dropdownMenu.getBoundingClientRect();\n const itemRect = activeItem.getBoundingClientRect();\n const scrollTop = activeItem.offsetTop - menuRect.height / 2 + itemRect.height / 2;\n\n dropdownMenu.scrollTo({\n top: scrollTop,\n behavior: 'smooth',\n });\n }\n }, 150);\n }\n}\n","<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() && glideStyle(); as style) {\n <div\n class=\"z-tabs-glide-indicator pointer-events-none absolute top-0 left-0 z-[6]\"\n [class.z-tabs-glide-indicator-ready]=\"glideReady()\"\n [attr.data-type]=\"zType()\"\n [style.transform]=\"style.transform\"\n [style.width]=\"style.width\"\n [style.height]=\"style.height\"\n aria-hidden=\"true\"></div>\n }\n @for (tab of zTabs(); track tab.value; let idx = $index; let last = $last) {\n <button\n #tabButton\n type=\"button\"\n role=\"tab\"\n [class]=\"getTabItemClasses(tab)\"\n [attr.data-active]=\"isTabActive(tab)\"\n [attr.data-state]=\"isTabActive(tab) ? 'active' : 'inactive'\"\n [attr.data-type]=\"zType()\"\n [attr.data-orientation]=\"zOrientation()\"\n [attr.data-last]=\"last\"\n [attr.aria-selected]=\"isTabActive(tab)\"\n [attr.aria-controls]=\"'panel-' + tab.value\"\n [disabled]=\"tab.disabled\"\n [tabindex]=\"isTabActive(tab) ? 0 : -1\"\n z-tooltip\n [zContent]=\"zOrientation() === 'vertical' ? (tab.label | translate) : ''\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n (click)=\"selectTab(tab)\"\n (pointerenter)=\"preloadTab(tab)\"\n (focus)=\"preloadTab(tab)\"\n (keydown)=\"onTabKeydown($event, idx)\">\n @if (tab.icon) {\n <z-icon\n [zType]=\"tab.icon\"\n zSize=\"16\"\n class=\"shrink-0\"\n [class.z-tab-icon-bounce]=\"isGlideType() && bouncingTab() === 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() === tab.value\">\n {{ tab.label | translate }}\n </span>\n @if (tab.badge) {\n <span\n class=\"ring-background ml-1.5 inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-xs font-semibold ring-2\"\n [class.bg-primary]=\"zType() !== 'badge'\"\n [class.text-primary-foreground]=\"zType() !== 'badge'\"\n [class.bg-primary!]=\"zType() === 'badge'\"\n [class.text-primary-foreground!]=\"zType() === 'badge'\">\n {{ tab.badge }}\n </span>\n }\n </button>\n }\n </div>\n </ng-template>\n\n <!-- Tab Panels -->\n @if (!zTabsOnly()) {\n <div\n class=\"z-tabs-panels min-h-0\"\n [class.flex-1]=\"zOrientation() === 'vertical'\"\n [class.shadow-xs]=\"contentWrapperFramed()\"\n [class.z-tabs-panels-unwrapped]=\"!contentWrapperFramed()\">\n @for (panel of tabPanels(); track panel.zTabPanel()) {\n @if (panelRenderStates().get(panel.zTabPanel())) {\n <div\n role=\"tabpanel\"\n [id]=\"'panel-' + panel.zTabPanel()\"\n [attr.aria-labelledby]=\"panel.zTabPanel()\"\n [attr.data-state]=\"visiblePanel() === panel.zTabPanel() ? 'active' : 'inactive'\"\n [attr.inert]=\"visiblePanel() === panel.zTabPanel() ? null : ''\">\n <ng-container *ngTemplateOutlet=\"panel.template\" />\n </div>\n }\n }\n </div>\n }\n</div>\n\n<!-- Dropdown Menu Template -->\n<ng-template #dropdownTpl let-close=\"close\">\n <div\n class=\"z-tabs-dropdown-menu flex max-h-[18.75rem] max-w-[12.5rem] min-w-[6.25rem] flex-col gap-0.5 overflow-y-auto p-1\">\n @for (tab of zTabs(); track tab.value) {\n <button\n #dropdownItem\n type=\"button\"\n class=\"flex w-full cursor-pointer items-center justify-start gap-2 rounded-sm px-2 py-1.5 text-left text-sm font-medium transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n [class.hover:text-foreground]=\"!isTabActive(tab)\"\n [class.focus:bg-primary/10]=\"!isTabActive(tab)\"\n [class.bg-primary/15]=\"isTabActive(tab)\"\n [class.text-primary]=\"isTabActive(tab)\"\n [disabled]=\"tab.disabled\"\n (pointerenter)=\"preloadTab(tab)\"\n (click)=\"selectTab(tab, true); close()\">\n @if (tab.icon) {\n <z-icon [zType]=\"tab.icon\" zSize=\"16\" class=\"text-muted-foreground shrink-0\" />\n }\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"tab.label | translate\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n [zTriggerElement]=\"dropdownItem\">\n {{ tab.label | translate }}\n </span>\n @if (tab.badge) {\n <span\n class=\"bg-primary text-primary-foreground inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-xs font-semibold\">\n {{ tab.badge }}\n </span>\n }\n @if (isTabActive(tab)) {\n <z-icon zType=\"lucideCheck\" zSize=\"16\" class=\"text-primary shink-0\" />\n }\n </button>\n }\n </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shival99-z-ui-components-z-tabs.mjs","sources":["../../../../libs/core-ui/components/z-tabs/directives/z-tab-panel.directive.ts","../../../../libs/core-ui/components/z-tabs/z-tabs.define.ts","../../../../libs/core-ui/components/z-tabs/z-tabs.util.ts","../../../../libs/core-ui/components/z-tabs/z-tabs.variants.ts","../../../../libs/core-ui/components/z-tabs/z-tabs.component.ts","../../../../libs/core-ui/components/z-tabs/z-tabs.component.html","../../../../libs/core-ui/components/z-tabs/shival99-z-ui-components-z-tabs.ts"],"sourcesContent":["import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[z-tab-panel], [zTabPanel]',\n standalone: true,\n exportAs: 'zTabPanel',\n})\nexport class ZTabPanelDirective {\n public readonly zTabPanel = input.required<string>();\n public readonly template = inject(TemplateRef<unknown>);\n}\n","import type { ZTabsType } from './z-tabs.types';\n\n/** Minimum scroll-position delta (px) before the fade/scroll-button state is toggled. */\nexport const Z_TABS_SCROLL_TOLERANCE = 4;\n\n/**\n * Types that render a shared pill behind the active tab and glide it into place instead of\n * swapping each item's own background.\n */\nexport const Z_TABS_GLIDE_TYPES: ZTabsType[] = ['segment', 'segment-solid', 'pill-solid', 'pill-blur'];\n","/** Hands out a fresh, monotonically increasing id for scoping each `z-tabs` instance's cache key. */\nexport const zTabsInstanceIds = (() => {\n let counter = 0;\n return { next: (): number => ++counter };\n})();\n\n/**\n * Counter-scales the indicator's corner radius across the glide so a box that is being scaled still\n * renders the radius its design calls for, instead of stretched oval caps.\n */\nexport function zTabsRadiusKeyframes(radius: number, scaleX: number, scaleY: number): Keyframe[] {\n const steps = 16;\n return Array.from({ length: steps }, (_, index) => {\n const progress = index / (steps - 1);\n const x = scaleX + (1 - scaleX) * progress;\n const y = scaleY + (1 - scaleY) * progress;\n return { borderRadius: `${radius / x}px / ${radius / y}px` };\n });\n}\n\n/** Queues low-priority work on idle time, falling back to a timer where `requestIdleCallback` is missing. */\nexport function zTabsRequestIdle(task: () => void, timeout = 200): number {\n if (typeof window === 'undefined') {\n return 0;\n }\n\n const idle = window.requestIdleCallback;\n return idle ? idle(() => task(), { timeout }) : window.setTimeout(task, 0);\n}\n\n/** Cancels a handle returned by `zTabsRequestIdle`, regardless of which scheduler produced it. */\nexport function zTabsCancelIdle(handle: number | undefined): void {\n if (!handle || typeof window === 'undefined') {\n return;\n }\n\n const cancel = window.cancelIdleCallback;\n if (cancel) {\n cancel(handle);\n return;\n }\n\n window.clearTimeout(handle);\n}\n","import { cva } from 'class-variance-authority';\n\nexport const zTabsVariants = cva('z-tabs flex min-w-0', {\n variants: {\n zType: {\n line: 'gap-0',\n soft: 'gap-1 bg-background p-0 dark:bg-transparent',\n segment: 'relative gap-1 rounded-lg bg-muted/60 p-1 dark:bg-muted/35',\n 'segment-solid': 'relative gap-1 rounded-lg bg-muted/60 p-1 dark:bg-muted/35',\n 'pill-solid': 'relative gap-1 rounded-full bg-muted/60 p-1 dark:bg-muted/35',\n 'pill-blur': 'relative gap-1 rounded-full bg-muted/40 p-1 backdrop-blur-md dark:bg-muted/20',\n folder: 'isolate gap-0 bg-background p-0 dark:bg-transparent',\n 'folder-soft': 'isolate gap-0 bg-background p-0 dark:bg-transparent',\n 'folder-solid': 'isolate gap-0 bg-background p-0 dark:bg-transparent',\n underline: 'gap-0',\n underlined: 'gap-0 rounded-none bg-background p-0 dark:bg-transparent',\n badge: 'gap-0 rounded-none bg-background p-0 dark:bg-transparent',\n sharp: 'gap-1 rounded-none bg-background p-0 dark:bg-transparent',\n 'sharp-line': 'gap-0 rounded-none bg-background p-0 dark:bg-transparent',\n 'sharp-line-filled': 'gap-0 rounded-none bg-background p-0 dark:bg-transparent',\n square: 'gap-0 rounded-none bg-background p-0 dark:bg-transparent',\n 'vertical-sharp': 'gap-1 rounded-none bg-background p-0 dark:bg-transparent',\n 'code-line': 'h-10 w-full justify-start gap-0 rounded-none bg-background p-0 dark:bg-transparent',\n },\n zOrientation: {\n horizontal: 'w-max flex-row items-center',\n vertical: 'w-full flex-col items-stretch gap-1 border-b-0',\n },\n },\n defaultVariants: {\n zType: 'line',\n zOrientation: 'horizontal',\n },\n compoundVariants: [\n {\n zType: 'vertical-sharp',\n zOrientation: 'vertical',\n class: 'border-r-0 pr-0',\n },\n {\n zType: 'sharp-line',\n zOrientation: 'vertical',\n class: 'gap-0',\n },\n {\n zType: 'sharp-line-filled',\n zOrientation: 'vertical',\n class: 'gap-0',\n },\n ],\n});\n\nexport const zTabItemVariants = cva(\n 'z-tab-item relative inline-flex min-h-10 select-none items-center justify-center gap-2 whitespace-nowrap font-medium text-sm leading-none text-muted-foreground transition-[color,background-color,border-color,box-shadow,transform] duration-200 outline-none focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0 cursor-pointer disabled:opacity-45 disabled:cursor-not-allowed',\n {\n variants: {\n zType: {\n 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',\n soft: 'rounded-md border-0 text-muted-foreground hover:text-foreground data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:shadow-xs! dark:data-[active=true]:bg-primary/15',\n segment: 'z-10 rounded-md border-0 text-muted-foreground hover:text-foreground data-[active=true]:text-primary',\n 'segment-solid':\n 'z-10 rounded-md border-0 text-muted-foreground hover:text-foreground data-[active=true]:text-primary-foreground',\n 'pill-solid':\n 'z-10 rounded-full border-0 text-muted-foreground hover:text-foreground data-[active=true]:text-primary',\n 'pill-blur':\n 'z-10 rounded-full border-0 text-muted-foreground hover:text-foreground data-[active=true]:text-primary',\n folder:\n 'rounded-t-md border-0 bg-transparent text-muted-foreground shadow-[inset_0_-1px_0_var(--border)] hover:text-foreground focus-visible:ring-0 focus-visible:ring-offset-0 data-[active=true]:z-[2] data-[active=true]:bg-background data-[active=true]:text-primary data-[active=true]:shadow-[inset_1px_0_0_var(--border),inset_-1px_0_0_var(--border),inset_0_1px_0_var(--border)]',\n 'folder-soft':\n 'rounded-t-md border-0 bg-transparent text-muted-foreground shadow-[inset_0_-1px_0_var(--border)] hover:text-foreground focus-visible:ring-0 focus-visible:ring-offset-0 data-[active=true]:z-[2] data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:shadow-[inset_1px_0_0_var(--border),inset_-1px_0_0_var(--border),inset_0_1px_0_var(--border)] dark:data-[active=true]:bg-primary/15',\n 'folder-solid':\n 'rounded-t-md border-0 bg-transparent text-muted-foreground shadow-[inset_0_-1px_0_var(--border)] hover:text-foreground focus-visible:ring-0 focus-visible:ring-offset-0 data-[active=true]:z-[2] data-[active=true]:bg-primary data-[active=true]:text-primary-foreground data-[active=true]:shadow-[inset_1px_0_0_var(--primary),inset_-1px_0_0_var(--primary),inset_0_1px_0_var(--primary)]',\n underline:\n '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',\n underlined:\n '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!',\n badge:\n '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',\n sharp:\n 'rounded-none border border-border/45 border-b-[3px] bg-background text-foreground/60 hover:text-foreground data-[active=true]:border-primary! data-[active=true]:border-b-primary! data-[active=true]:text-primary',\n 'sharp-line':\n 'rounded-none first:rounded-l-sm last:rounded-r-sm border border-border/45 border-b-[3px] bg-background text-foreground/60 hover:text-foreground data-[active=true]:border-primary! data-[active=true]:border-b-primary! data-[active=true]:text-primary',\n 'sharp-line-filled':\n 'rounded-none first:rounded-l-sm last:rounded-r-sm border border-border/45 border-b-[3px] bg-background text-foreground/60 hover:text-foreground data-[active=true]:border-primary! data-[active=true]:border-b-primary! data-[active=true]:bg-primary/30 data-[active=true]:text-primary',\n square:\n 'rounded-none border border-border/45 border-b-[3px] bg-background text-foreground/60 hover:text-foreground data-[active=true]:border-primary! data-[active=true]:border-b-primary! data-[active=true]:bg-primary/15 data-[active=true]:text-primary',\n 'vertical-sharp':\n 'rounded-none border border-transparent border-b-[3px] bg-background text-foreground/60 hover:text-foreground data-[active=true]:border-primary data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:shadow-none',\n 'code-line':\n 'relative inline-flex h-full min-h-8 flex-1 items-center justify-center gap-1.5 whitespace-nowrap rounded-none first:rounded-l-sm last:rounded-r-sm border border-border/45 border-b-2 bg-background px-4 py-1.5 font-medium text-foreground/60 transition-all hover:text-foreground data-[active=true]:relative data-[active=true]:z-[1] data-[active=true]:-mb-px data-[active=true]:border-x-primary/70! data-[active=true]:border-t-primary/70! data-[active=true]:border-b-primary! data-[active=true]:bg-primary/30 data-[active=true]:text-primary data-[active=true]:shadow-none [&_span.z-tab-item-label]:font-mono [&_span.z-tab-item-label]:text-[13px]',\n },\n zSize: {\n xs: 'min-h-8 px-2.5 py-1 text-xs',\n sm: 'min-h-9 px-3 py-1.5 text-sm',\n default: 'min-h-10 px-4 py-2 text-sm',\n lg: 'min-h-[2.625rem] px-4.5 py-2.25 text-sm',\n },\n zOrientation: {\n horizontal: '',\n vertical: 'justify-start px-3 py-2',\n },\n },\n compoundVariants: [\n {\n zType: 'line',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-sm data-[active=true]:shadow-xs',\n },\n {\n zType: 'soft',\n zOrientation: 'vertical',\n class:\n 'w-full justify-start rounded-md data-[active=true]:bg-primary/10 data-[active=true]:shadow-xs dark:data-[active=true]:bg-primary/15',\n },\n {\n zType: 'segment',\n zOrientation: 'vertical',\n class:\n 'w-full justify-start rounded-md data-[active=true]:bg-background data-[active=true]:shadow-xs dark:data-[active=true]:border-border!',\n },\n {\n zType: 'segment-solid',\n zOrientation: 'vertical',\n class:\n 'w-full justify-start rounded-md data-[active=true]:bg-primary data-[active=true]:text-primary-foreground data-[active=true]:shadow-xs',\n },\n {\n zType: 'pill-solid',\n zOrientation: 'vertical',\n class:\n 'w-full justify-start rounded-full data-[active=true]:bg-background data-[active=true]:shadow-sm dark:data-[active=true]:border-border!',\n },\n {\n zType: 'pill-blur',\n zOrientation: 'vertical',\n class:\n 'w-full justify-start rounded-full backdrop-blur-md data-[active=true]:bg-background/70 data-[active=true]:shadow-sm',\n },\n {\n zType: 'folder',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-sm data-[active=true]:shadow-xs',\n },\n {\n zType: 'folder-soft',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-sm data-[active=true]:shadow-xs',\n },\n {\n zType: 'folder-solid',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-sm data-[active=true]:shadow-xs',\n },\n {\n zType: 'underline',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-sm data-[active=true]:shadow-xs',\n },\n\n {\n zType: 'underlined',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-none data-[active=true]:shadow-xs',\n },\n {\n zType: 'badge',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-none data-[active=true]:shadow-xs',\n },\n {\n zType: 'sharp',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-none data-[active=true]:shadow-xs',\n },\n {\n zType: 'sharp-line',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-none data-[active=true]:shadow-xs',\n },\n {\n zType: 'sharp-line-filled',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-none data-[active=true]:shadow-xs',\n },\n {\n zType: 'square',\n zOrientation: 'vertical',\n class: 'w-full justify-start rounded-none data-[active=true]:shadow-xs',\n },\n {\n zType: 'vertical-sharp',\n zOrientation: 'vertical',\n class:\n 'w-full justify-start rounded-none border border-transparent border-b-[3px] px-3 py-1.5 data-[active=true]:border-primary data-[active=true]:shadow-xs',\n },\n {\n zType: 'code-line',\n zSize: 'xs',\n zOrientation: 'horizontal',\n class: 'min-h-7 px-3 py-1 text-xs [&_span.z-tab-item-label]:text-xs',\n },\n {\n zType: 'code-line',\n zSize: 'sm',\n zOrientation: 'horizontal',\n class: 'min-h-8 px-3.5 py-1.5 text-sm',\n },\n {\n zType: 'code-line',\n zSize: 'default',\n zOrientation: 'horizontal',\n class: 'min-h-8 px-4 py-1.5 text-sm',\n },\n {\n zType: 'code-line',\n zSize: 'lg',\n zOrientation: 'horizontal',\n class: 'min-h-9 px-4.5 py-2 text-sm',\n },\n {\n zType: 'code-line',\n zOrientation: 'vertical',\n class: 'h-auto w-full flex-none justify-start rounded-none px-3 py-2 data-[active=true]:shadow-xs',\n },\n ],\n defaultVariants: {\n zType: 'line',\n zSize: 'default',\n zOrientation: 'horizontal',\n },\n }\n);\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n type EmbeddedViewRef,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n effect,\n ElementRef,\n inject,\n input,\n model,\n NgZone,\n output,\n signal,\n viewChild,\n untracked,\n ViewContainerRef,\n viewChildren,\n ViewEncapsulation,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { ZPopoverDirective } from '@shival99/z-ui/components/z-popover';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZCacheService } from '@shival99/z-ui/services';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { NgScrollbar } from 'ngx-scrollbar';\nimport { ZTabPanelDirective } from './directives/z-tab-panel.directive';\nimport { Z_TABS_GLIDE_TYPES, Z_TABS_SCROLL_TOLERANCE } from './z-tabs.define';\nimport type { ZTab, ZTabsContentFit, ZTabsOrientation, ZTabsSize, ZTabsType } from './z-tabs.types';\nimport { zTabsCancelIdle, zTabsInstanceIds, zTabsRadiusKeyframes, zTabsRequestIdle } from './z-tabs.util';\nimport { zTabsVariants, zTabItemVariants } from './z-tabs.variants';\n\n@Component({\n selector: 'z-tabs',\n imports: [\n ZIconComponent,\n ZButtonComponent,\n ZTooltipDirective,\n NgTemplateOutlet,\n ZPopoverDirective,\n TranslatePipe,\n NgScrollbar,\n ],\n standalone: true,\n templateUrl: './z-tabs.component.html',\n styleUrl: './z-tabs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'z-tabs-wrapper block',\n },\n})\nexport class ZTabsComponent implements OnInit, AfterViewInit, OnDestroy {\n public readonly tabPanels = contentChildren(ZTabPanelDirective);\n public readonly tabsListContainer = viewChild<ElementRef<HTMLDivElement>>('tabsListContainer');\n public readonly tabButtons = viewChildren<ElementRef<HTMLButtonElement>>('tabButton');\n public readonly glideIndicator = viewChild<ElementRef<HTMLDivElement>>('glideIndicator');\n public readonly panelHost = viewChild('panelHost', { read: ViewContainerRef });\n\n public readonly class = input<ClassValue>('');\n public readonly zTabs = input.required<ZTab[]>();\n public readonly zType = input<ZTabsType>('line');\n public readonly zSize = input<ZTabsSize>('default');\n public readonly zOrientation = input<ZTabsOrientation>('horizontal');\n public readonly zContentFit = input<ZTabsContentFit>('none');\n public readonly zLazy = input(false);\n public readonly zTabsOnly = input(false);\n public readonly zShowNavWrapper = input(false);\n public readonly zNavFullWidth = input(false);\n public readonly zClassContent = input<ClassValue>('');\n public readonly zShowContentWrapper = input(true);\n public readonly zReloadable = input(true);\n public readonly zEmitOnActiveClick = input(true);\n public readonly zCache = input(true);\n public readonly zCacheKey = input('');\n\n public readonly activeTab = model<string>('');\n public readonly zTabChange = output<string>();\n\n protected readonly renderedTab = signal<string>('');\n protected readonly canScrollLeft = signal(false);\n protected readonly canScrollRight = signal(false);\n protected readonly bouncingTab = signal<string | null>(null);\n\n protected readonly isGlideType = computed(\n () => Z_TABS_GLIDE_TYPES.includes(this.zType()) && this.zOrientation() === 'horizontal'\n );\n\n private _resizeObserver?: ResizeObserver;\n private _commitTimer?: number;\n private _scrollFrame?: number;\n private readonly _zone = inject(NgZone);\n private _mountedPanel = '';\n private _panelView?: EmbeddedViewRef<unknown>;\n private _retiredViews: EmbeddedViewRef<unknown>[] = [];\n private _teardownHandle?: number;\n private _glideBox?: { x: number; y: number; w: number; h: number };\n private _glidePending = false;\n private _glideAnimations: Animation[] = [];\n private _viewReady = false;\n private readonly _cacheInstanceId = zTabsInstanceIds.next();\n\n constructor() {\n effect(() => {\n this.zTabs();\n this._outsideFrame(() => this.checkScroll());\n });\n\n effect(() => {\n this.activeTab();\n this.zTabs();\n this.isGlideType();\n this._glidePending = true;\n this._outsideFrame(() => this._updateGlideIndicator());\n });\n\n effect(() => {\n const active = this.activeTab();\n this.zLazy();\n untracked(() => this._scheduleCommit(active));\n });\n\n effect(() => {\n const host = this.panelHost();\n const rendered = this.renderedTab();\n const panels = this.tabPanels();\n untracked(() => this._swapPanelView(host, rendered, panels));\n });\n }\n\n ngOnInit(): void {\n this._restoreActiveTabFromCache();\n }\n\n ngAfterViewInit(): void {\n this._viewReady = true;\n this.checkScroll();\n this._setupResizeObserver();\n this._outsideFrame(() => this._updateGlideIndicator());\n }\n\n ngOnDestroy(): void {\n zTabsCancelIdle(this._teardownHandle);\n for (const view of [...this._retiredViews, this._panelView]) {\n view?.destroy();\n }\n this._retiredViews = [];\n this._resizeObserver?.disconnect();\n for (const animation of this._glideAnimations) {\n animation.cancel();\n }\n clearTimeout(this._commitTimer);\n if (this._scrollFrame !== undefined) {\n cancelAnimationFrame(this._scrollFrame);\n }\n }\n\n protected readonly tabsClasses = computed(() =>\n zMergeClasses(\n zTabsVariants({\n zType: this.zType(),\n zOrientation: this.zOrientation(),\n }),\n this.zNavFullWidth() ? 'w-full' : '',\n this.class()\n )\n );\n\n protected readonly contentWrapperFramed = computed(() => {\n if (!this.zShowContentWrapper()) {\n return false;\n }\n\n if (this.zOrientation() === 'vertical') {\n return false;\n }\n\n const type = this.zType();\n return (\n type === 'folder' ||\n type === 'folder-soft' ||\n type === 'folder-solid' ||\n type === 'sharp' ||\n type === 'sharp-line' ||\n type === 'sharp-line-filled' ||\n type === 'square' ||\n type === 'code-line'\n );\n });\n\n protected readonly tabsListHasBottomPadding = computed(() => {\n if (this.zOrientation() !== 'horizontal') {\n return false;\n }\n\n const type = this.zType();\n return (\n type !== 'folder' &&\n type !== 'folder-soft' &&\n type !== 'folder-solid' &&\n type !== 'segment' &&\n type !== 'segment-solid' &&\n type !== 'pill-solid' &&\n type !== 'pill-blur' &&\n type !== 'sharp' &&\n type !== 'sharp-line' &&\n type !== 'sharp-line-filled' &&\n type !== 'square' &&\n type !== 'code-line'\n );\n });\n\n protected readonly verticalTabsScrollable = computed(\n () => this.zOrientation() === 'vertical' && this.zTabs().length > 8\n );\n\n protected readonly navClasses = computed(() =>\n zMergeClasses('z-tabs-nav flex items-center gap-1.5', this.zClassContent())\n );\n\n protected getTabItemClasses(_tab: ZTab): string {\n return zMergeClasses(\n zTabItemVariants({\n zType: this.zType(),\n zSize: this.zSize(),\n zOrientation: this.zOrientation(),\n })\n );\n }\n\n protected selectTab(tab: ZTab, scrollToView = true): void {\n if (tab.disabled) {\n return;\n }\n\n const isAlreadyActive = this.activeTab() === tab.value;\n if (isAlreadyActive && !this.zReloadable()) {\n return;\n }\n\n this.activeTab.set(tab.value);\n this._saveActiveTabToCache(tab.value);\n\n if (this.isGlideType()) {\n this.bouncingTab.set(tab.value);\n setTimeout(() => {\n if (this.bouncingTab() === tab.value) {\n this.bouncingTab.set(null);\n }\n }, 320);\n }\n\n if (!isAlreadyActive || this.zEmitOnActiveClick()) {\n this.zTabChange.emit(tab.value);\n }\n\n if (scrollToView && this.zOrientation() === 'horizontal') {\n this._outsideFrame(() => {\n const tabIndex = this.zTabs().findIndex(t => t.value === tab.value);\n const tabButtonsList = this.tabButtons();\n const tabButton = tabButtonsList[tabIndex];\n if (tabButton) {\n const alignTabInViewport = () => {\n const container = this.tabsListContainer()?.nativeElement;\n if (!container) {\n return;\n }\n\n const containerRect = container.getBoundingClientRect();\n const tabRect = tabButton.nativeElement.getBoundingClientRect();\n const centeredScrollLeft =\n container.scrollLeft + tabRect.left - containerRect.left - (container.clientWidth - tabRect.width) / 2;\n const maxScrollLeft = container.scrollWidth - container.clientWidth;\n\n container.scrollTo({\n left: Math.max(0, Math.min(centeredScrollLeft, maxScrollLeft)),\n behavior: 'smooth',\n });\n };\n\n alignTabInViewport();\n }\n });\n }\n }\n\n protected isTabActive(tab: ZTab): boolean {\n return this.activeTab() === tab.value;\n }\n\n protected onTabKeydown(event: KeyboardEvent, currentIndex: number): void {\n const tabs = this.zTabs().filter(t => !t.disabled);\n const currentTab = tabs[currentIndex];\n\n if (!currentTab) {\n return;\n }\n\n const isHorizontal = this.zOrientation() === 'horizontal';\n const nextKey = isHorizontal ? 'ArrowRight' : 'ArrowDown';\n const prevKey = isHorizontal ? 'ArrowLeft' : 'ArrowUp';\n\n if (event.key === nextKey) {\n event.preventDefault();\n const nextIndex = (currentIndex + 1) % tabs.length;\n this.selectTab(tabs[nextIndex]);\n return;\n }\n\n if (event.key === prevKey) {\n event.preventDefault();\n const prevIndex = (currentIndex - 1 + tabs.length) % tabs.length;\n this.selectTab(tabs[prevIndex]);\n return;\n }\n\n if (event.key === 'Home') {\n event.preventDefault();\n this.selectTab(tabs[0]);\n return;\n }\n\n if (event.key === 'End') {\n event.preventDefault();\n this.selectTab(tabs[tabs.length - 1]);\n }\n }\n\n protected checkScroll(): void {\n const container = this.tabsListContainer()?.nativeElement;\n if (!container || this.zOrientation() !== 'horizontal') {\n this.canScrollLeft.set(false);\n this.canScrollRight.set(false);\n return;\n }\n\n const { scrollLeft, scrollWidth, clientWidth } = container;\n const maxScrollLeft = scrollWidth - clientWidth;\n\n if (maxScrollLeft <= Z_TABS_SCROLL_TOLERANCE) {\n container.scrollLeft = 0;\n this.canScrollLeft.set(false);\n this.canScrollRight.set(false);\n return;\n }\n\n this.canScrollLeft.set(scrollLeft > Z_TABS_SCROLL_TOLERANCE);\n this.canScrollRight.set(maxScrollLeft - scrollLeft > Z_TABS_SCROLL_TOLERANCE);\n }\n\n protected scrollLeft(): void {\n const container = this.tabsListContainer()?.nativeElement;\n if (!container) {\n return;\n }\n\n container.scrollBy({ left: -200, behavior: 'smooth' });\n setTimeout(() => this.checkScroll(), 300);\n }\n\n protected scrollRight(): void {\n const container = this.tabsListContainer()?.nativeElement;\n if (!container) {\n return;\n }\n\n container.scrollBy({ left: 200, behavior: 'smooth' });\n setTimeout(() => this.checkScroll(), 300);\n }\n\n protected onTabsScroll(): void {\n if (this._scrollFrame !== undefined) {\n return;\n }\n\n // Smooth-scrolling the strip fires this every frame; measuring once per frame keeps the forced\n // layout from piling up while the glide animation runs.\n this._scrollFrame = this._outsideFrame(() => {\n this._scrollFrame = undefined;\n this.checkScroll();\n });\n }\n\n /**\n * Holds the outgoing panel on screen until the tab-strip animation has finished, then swaps in the\n * new one. A heavy mount therefore lands after the animation instead of stealing its frames.\n */\n private _scheduleCommit(value: string): void {\n if (!value) {\n return;\n }\n\n if (!this.zLazy() || !this._viewReady || typeof window === 'undefined') {\n this._commitPanel(value);\n return;\n }\n\n clearTimeout(this._commitTimer);\n this._commitTimer = window.setTimeout(\n () => requestAnimationFrame(() => this._commitPanel(value)),\n this._panelCommitDelay()\n );\n }\n\n /** Waits out the layout-driven part of the tab animation; the transform-only tail is immune to it. */\n private _panelCommitDelay(): number {\n if (this._prefersReducedMotion()) {\n return 0;\n }\n\n // The tab-item transition runs 200ms; the extra margin keeps the swap off its final frame.\n return 280;\n }\n\n private _commitPanel(value: string): void {\n if (this.activeTab() !== value) {\n return;\n }\n\n this.renderedTab.set(value);\n }\n\n /**\n * Sizes the indicator once, then moves it with a transform-only animation. Transform is the one\n * property the compositor can tick by itself, so a busy main thread — a heavy panel mounting, the\n * host's own work — cannot drop frames from the glide. A second animation counter-scales the corner\n * radius; that one only repaints a small element and degrades to a late radius, never a stalled pill.\n */\n private _updateGlideIndicator(): void {\n const element = this.glideIndicator()?.nativeElement;\n if (!this.isGlideType() || !element) {\n this._glideBox = undefined;\n return;\n }\n\n const activeIndex = this.zTabs().findIndex(tab => tab.value === this.activeTab());\n const button = this.tabButtons()[activeIndex]?.nativeElement;\n if (!button) {\n return;\n }\n\n const next = { x: button.offsetLeft, y: button.offsetTop, w: button.offsetWidth, h: button.offsetHeight };\n const previous = this._glideBox;\n const moved =\n !previous || previous.x !== next.x || previous.y !== next.y || previous.w !== next.w || previous.h !== next.h;\n\n // A tab change arms the glide; whichever call observes the new geometry first plays it, and later\n // calls for the same geometry leave the running animation alone.\n const shouldGlide = this._glidePending && Boolean(previous) && !this._prefersReducedMotion();\n if (!moved) {\n return;\n }\n\n this._glidePending = false;\n this._glideBox = next;\n\n for (const animation of this._glideAnimations) {\n animation.cancel();\n }\n this._glideAnimations = [];\n\n element.style.width = `${next.w}px`;\n element.style.height = `${next.h}px`;\n element.style.transform = `translate(${next.x}px, ${next.y}px)`;\n element.style.borderRadius = '';\n element.style.opacity = '1';\n\n // jsdom and older SSR shims ship no Web Animations API; the indicator simply snaps there.\n if (!shouldGlide || !previous || typeof element.animate !== 'function') {\n return;\n }\n\n const scaleX = previous.w / next.w;\n const scaleY = previous.h / next.h;\n // Both animations share one timing so the radius correction tracks the transform's progress exactly.\n const options: KeyframeAnimationOptions = { duration: 480, easing: 'cubic-bezier(0.22, 1, 0.36, 1)' };\n this._glideAnimations.push(\n element.animate(\n [\n { transform: `translate(${previous.x}px, ${previous.y}px) scale(${scaleX}, ${scaleY})` },\n { transform: `translate(${next.x}px, ${next.y}px)` },\n ],\n options\n )\n );\n\n const radius = Math.min(parseFloat(getComputedStyle(element).borderTopLeftRadius) || 0, next.w / 2, next.h / 2);\n if (radius > 0) {\n this._glideAnimations.push(element.animate(zTabsRadiusKeyframes(radius, scaleX, scaleY), options));\n }\n }\n\n /**\n * Swaps the visible panel. The incoming view is built and bound while it is still off-document, so\n * none of that work triggers style, layout or paint; only the final insert does. The outgoing view is\n * detached immediately — it leaves the DOM at once — and destroyed off the critical path, keeping\n * teardown out of the frame the user clicked in. It is still destroyed, so panels re-initialise.\n */\n private _swapPanelView(\n host: ViewContainerRef | undefined,\n value: string,\n panels: readonly ZTabPanelDirective[]\n ): void {\n if (!host || !this.zLazy() || !value || this._mountedPanel === value) {\n return;\n }\n\n const panel = panels.find(item => item.zTabPanel() === value);\n if (!panel) {\n return;\n }\n\n if (host.length > 0) {\n host.detach(0);\n }\n if (this._panelView) {\n this._retiredViews.push(this._panelView);\n }\n\n const view = panel.template.createEmbeddedView({});\n view.detectChanges();\n host.insert(view);\n\n this._panelView = view;\n this._mountedPanel = value;\n this._scheduleTeardown();\n this._fadePanel(host);\n }\n\n private _scheduleTeardown(): void {\n if (this._retiredViews.length === 0 || this._teardownHandle !== undefined) {\n return;\n }\n\n this._teardownHandle = zTabsRequestIdle(() => {\n this._teardownHandle = undefined;\n const retired = this._retiredViews;\n this._retiredViews = [];\n for (const view of retired) {\n view.destroy();\n }\n });\n }\n\n /** Re-runs the enter fade on a wrapper that is reused across swaps, without forcing a reflow. */\n private _fadePanel(host: ViewContainerRef): void {\n const wrapper = (host.element.nativeElement as Node).parentElement;\n if (!wrapper || this._prefersReducedMotion() || typeof wrapper.animate !== 'function') {\n return;\n }\n\n wrapper.animate([{ opacity: 0 }, { opacity: 1 }], { duration: 180, easing: 'ease-out' });\n }\n\n /**\n * Measurement and imperative DOM work never needs a change-detection tick of its own. With zone.js a\n * plain `requestAnimationFrame` schedules one per callback — wasteful during a smooth scroll, which\n * fires every frame. Signal writes made inside still schedule change detection on their own.\n */\n private _outsideFrame(task: () => void): number {\n return this._zone.runOutsideAngular(() => requestAnimationFrame(task));\n }\n\n private _prefersReducedMotion(): boolean {\n return typeof window !== 'undefined' && Boolean(window.matchMedia?.('(prefers-reduced-motion: reduce)').matches);\n }\n\n private _setupResizeObserver(): void {\n const container = this.tabsListContainer()?.nativeElement;\n if (!container) {\n return;\n }\n\n this._resizeObserver = new ResizeObserver(() => {\n this.checkScroll();\n this._updateGlideIndicator();\n });\n\n this._resizeObserver.observe(container);\n }\n\n private _restoreActiveTabFromCache(): void {\n if (!this.zCache()) {\n return;\n }\n\n const cacheKey = this._getCacheKey();\n const cachedTab = ZCacheService.get<string>(cacheKey);\n if (!cachedTab) {\n return;\n }\n\n const tab = this.zTabs().find(item => item.value === cachedTab && !item.disabled);\n if (!tab) {\n return;\n }\n\n this.activeTab.set(tab.value);\n }\n\n private _saveActiveTabToCache(value: string): void {\n if (!this.zCache()) {\n return;\n }\n\n ZCacheService.set(this._getCacheKey(), value);\n }\n\n private _getCacheKey(): string {\n const customKey = this.zCacheKey().trim();\n if (customKey) {\n return customKey;\n }\n\n const path = typeof window === 'undefined' ? 'ssr' : window.location.pathname;\n return `z-tabs:${path}:${this._cacheInstanceId}`;\n }\n\n protected scrollToActiveDropdownItem(): void {\n setTimeout(() => {\n const activeIndex = this.zTabs().findIndex(tab => tab.value === this.activeTab());\n if (activeIndex === -1) {\n return;\n }\n\n const dropdownMenu = document.querySelector('.z-tabs-dropdown-menu') as HTMLElement;\n if (!dropdownMenu) {\n return;\n }\n\n const dropdownItems = Array.from(dropdownMenu.querySelectorAll('button'));\n const activeItem = dropdownItems[activeIndex];\n\n if (activeItem && dropdownMenu) {\n const menuRect = dropdownMenu.getBoundingClientRect();\n const itemRect = activeItem.getBoundingClientRect();\n const scrollTop = activeItem.offsetTop - menuRect.height / 2 + itemRect.height / 2;\n\n dropdownMenu.scrollTo({\n top: scrollTop,\n behavior: 'smooth',\n });\n }\n }, 150);\n }\n}\n","<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 (tab of zTabs(); track tab.value; let idx = $index; let last = $last) {\n <button\n #tabButton\n type=\"button\"\n role=\"tab\"\n [class]=\"getTabItemClasses(tab)\"\n [attr.data-active]=\"isTabActive(tab)\"\n [attr.data-state]=\"isTabActive(tab) ? 'active' : 'inactive'\"\n [attr.data-type]=\"zType()\"\n [attr.data-orientation]=\"zOrientation()\"\n [attr.data-last]=\"last\"\n [attr.aria-selected]=\"isTabActive(tab)\"\n [attr.aria-controls]=\"'panel-' + tab.value\"\n [disabled]=\"tab.disabled\"\n [tabindex]=\"isTabActive(tab) ? 0 : -1\"\n z-tooltip\n [zContent]=\"zOrientation() === 'vertical' ? (tab.label | translate) : ''\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n (click)=\"selectTab(tab)\"\n (keydown)=\"onTabKeydown($event, idx)\">\n @if (tab.icon) {\n <z-icon\n [zType]=\"tab.icon\"\n zSize=\"16\"\n class=\"shrink-0\"\n [class.z-tab-icon-bounce]=\"isGlideType() && bouncingTab() === 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() === tab.value\">\n {{ tab.label | translate }}\n </span>\n @if (tab.badge) {\n <span\n class=\"ring-background ml-1.5 inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-xs font-semibold ring-2\"\n [class.bg-primary]=\"zType() !== 'badge'\"\n [class.text-primary-foreground]=\"zType() !== 'badge'\"\n [class.bg-primary!]=\"zType() === 'badge'\"\n [class.text-primary-foreground!]=\"zType() === 'badge'\">\n {{ tab.badge }}\n </span>\n }\n </button>\n }\n </div>\n </ng-template>\n\n <!-- Tab Panels -->\n @if (!zTabsOnly()) {\n <div\n class=\"z-tabs-panels min-h-0\"\n [class.flex-1]=\"zOrientation() === 'vertical'\"\n [class.shadow-xs]=\"contentWrapperFramed()\"\n [class.z-tabs-panels-unwrapped]=\"!contentWrapperFramed()\">\n @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 (tab of zTabs(); track tab.value) {\n <button\n #dropdownItem\n type=\"button\"\n class=\"flex w-full cursor-pointer items-center justify-start gap-2 rounded-sm px-2 py-1.5 text-left text-sm font-medium transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n [class.hover:text-foreground]=\"!isTabActive(tab)\"\n [class.focus:bg-primary/10]=\"!isTabActive(tab)\"\n [class.bg-primary/15]=\"isTabActive(tab)\"\n [class.text-primary]=\"isTabActive(tab)\"\n [disabled]=\"tab.disabled\"\n (click)=\"selectTab(tab, true); close()\">\n @if (tab.icon) {\n <z-icon [zType]=\"tab.icon\" zSize=\"16\" class=\"text-muted-foreground shrink-0\" />\n }\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"tab.label | translate\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n [zTriggerElement]=\"dropdownItem\">\n {{ tab.label | translate }}\n </span>\n @if (tab.badge) {\n <span\n class=\"bg-primary text-primary-foreground inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-xs font-semibold\">\n {{ tab.badge }}\n </span>\n }\n @if (isTabActive(tab)) {\n <z-icon zType=\"lucideCheck\" zSize=\"16\" class=\"text-primary shink-0\" />\n }\n </button>\n }\n </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shival99/z-ui",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.8",
|
|
4
4
|
"description": "Z-UI: Modern Angular UI Component Library - A comprehensive, high-performance design system built with Angular 22, featuring 40+ customizable components with dark mode, accessibility, and enterprise-ready features.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"angular",
|
|
@@ -431,16 +431,16 @@ declare class ZCalendarComponent implements OnInit, ControlValueAccessor {
|
|
|
431
431
|
|
|
432
432
|
declare const zCalendarVariants: (props?: ({
|
|
433
433
|
zSize?: "sm" | "default" | "lg" | null | undefined;
|
|
434
|
-
zStatus?: "default" | "disabled" | "
|
|
434
|
+
zStatus?: "default" | "disabled" | "open" | "error" | "readonly" | null | undefined;
|
|
435
435
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
436
436
|
declare const zCalendarDayVariants: (props?: ({
|
|
437
|
-
state?: "default" | "
|
|
437
|
+
state?: "default" | "today" | "selected" | "inRange" | "rangeStart" | "rangeEnd" | "rangeSingle" | "disabled" | "otherMonth" | "hovered" | null | undefined;
|
|
438
438
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
439
439
|
declare const zCalendarMonthVariants: (props?: ({
|
|
440
|
-
state?: "default" | "
|
|
440
|
+
state?: "default" | "selected" | "disabled" | "current" | null | undefined;
|
|
441
441
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
442
442
|
declare const zCalendarYearVariants: (props?: ({
|
|
443
|
-
state?: "default" | "
|
|
443
|
+
state?: "default" | "selected" | "disabled" | "current" | null | undefined;
|
|
444
444
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
445
445
|
|
|
446
446
|
export { ZCalendarComponent, zCalendarDayVariants, zCalendarMonthVariants, zCalendarVariants, zCalendarYearVariants };
|
|
@@ -2167,7 +2167,7 @@ declare class ZTableFilterComponent<T> {
|
|
|
2167
2167
|
protected readonly filterBadgeCount: _angular_core.Signal<number>;
|
|
2168
2168
|
protected readonly hasFilterValue: _angular_core.Signal<boolean>;
|
|
2169
2169
|
protected readonly isActive: _angular_core.Signal<boolean>;
|
|
2170
|
-
protected readonly draftSortValue: _angular_core.Signal<"
|
|
2170
|
+
protected readonly draftSortValue: _angular_core.Signal<"none" | "asc" | "desc">;
|
|
2171
2171
|
protected readonly rangeMinValue: _angular_core.Signal<any>;
|
|
2172
2172
|
protected readonly rangeMaxValue: _angular_core.Signal<any>;
|
|
2173
2173
|
protected readonly dateValue: _angular_core.Signal<Date | null>;
|
|
@@ -2239,7 +2239,7 @@ declare class ZTableActionsComponent<T = unknown> {
|
|
|
2239
2239
|
readonly zConfig: _angular_core.InputSignal<ZTableActionColumnConfig<T>>;
|
|
2240
2240
|
readonly zRow: _angular_core.InputSignal<T>;
|
|
2241
2241
|
readonly zRowId: _angular_core.InputSignal<string>;
|
|
2242
|
-
readonly zDropdownButtonSize: _angular_core.InputSignal<"
|
|
2242
|
+
readonly zDropdownButtonSize: _angular_core.InputSignal<"default" | "sm" | "lg" | "xs" | "xl" | null | undefined>;
|
|
2243
2243
|
readonly zActionClick: _angular_core.OutputEmitterRef<ZTableActionClickEvent<T>>;
|
|
2244
2244
|
protected readonly allActions: _angular_core.Signal<ZTableActionItem<T>[]>;
|
|
2245
2245
|
protected readonly shouldShowAsButtons: _angular_core.Signal<boolean>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { TemplateRef, OnInit, AfterViewInit, OnDestroy, ElementRef } from '@angular/core';
|
|
2
|
+
import { TemplateRef, OnInit, AfterViewInit, OnDestroy, ElementRef, ViewContainerRef } from '@angular/core';
|
|
3
3
|
import { ClassValue } from 'clsx';
|
|
4
4
|
import { ZIcon } from '@shival99/z-ui/components/z-icon';
|
|
5
5
|
import { VariantProps } from 'class-variance-authority';
|
|
@@ -34,7 +34,6 @@ type ZTabsType = 'line' | 'soft' | 'segment' | 'segment-solid' | 'pill-solid' |
|
|
|
34
34
|
type ZTabsSize = 'xs' | 'sm' | 'default' | 'lg';
|
|
35
35
|
type ZTabsOrientation = 'horizontal' | 'vertical';
|
|
36
36
|
type ZTabsContentFit = 'none' | 'screen';
|
|
37
|
-
type ZTabsPreload = 'none' | 'hover' | 'idle';
|
|
38
37
|
type ZTabsVariants = VariantProps<typeof zTabsVariants>;
|
|
39
38
|
type ZTabItemVariants = VariantProps<typeof zTabItemVariants>;
|
|
40
39
|
|
|
@@ -42,6 +41,8 @@ declare class ZTabsComponent implements OnInit, AfterViewInit, OnDestroy {
|
|
|
42
41
|
readonly tabPanels: _angular_core.Signal<readonly ZTabPanelDirective[]>;
|
|
43
42
|
readonly tabsListContainer: _angular_core.Signal<ElementRef<HTMLDivElement> | undefined>;
|
|
44
43
|
readonly tabButtons: _angular_core.Signal<readonly ElementRef<HTMLButtonElement>[]>;
|
|
44
|
+
readonly glideIndicator: _angular_core.Signal<ElementRef<HTMLDivElement> | undefined>;
|
|
45
|
+
readonly panelHost: _angular_core.Signal<ViewContainerRef | undefined>;
|
|
45
46
|
readonly class: _angular_core.InputSignal<ClassValue>;
|
|
46
47
|
readonly zTabs: _angular_core.InputSignal<ZTab[]>;
|
|
47
48
|
readonly zType: _angular_core.InputSignal<ZTabsType>;
|
|
@@ -49,8 +50,6 @@ declare class ZTabsComponent implements OnInit, AfterViewInit, OnDestroy {
|
|
|
49
50
|
readonly zOrientation: _angular_core.InputSignal<ZTabsOrientation>;
|
|
50
51
|
readonly zContentFit: _angular_core.InputSignal<ZTabsContentFit>;
|
|
51
52
|
readonly zLazy: _angular_core.InputSignal<boolean>;
|
|
52
|
-
readonly zPreload: _angular_core.InputSignal<ZTabsPreload>;
|
|
53
|
-
readonly zDestroyInactive: _angular_core.InputSignal<boolean>;
|
|
54
53
|
readonly zTabsOnly: _angular_core.InputSignal<boolean>;
|
|
55
54
|
readonly zShowNavWrapper: _angular_core.InputSignal<boolean>;
|
|
56
55
|
readonly zNavFullWidth: _angular_core.InputSignal<boolean>;
|
|
@@ -62,24 +61,22 @@ declare class ZTabsComponent implements OnInit, AfterViewInit, OnDestroy {
|
|
|
62
61
|
readonly zCacheKey: _angular_core.InputSignal<string>;
|
|
63
62
|
readonly activeTab: _angular_core.ModelSignal<string>;
|
|
64
63
|
readonly zTabChange: _angular_core.OutputEmitterRef<string>;
|
|
65
|
-
protected readonly mountedTabs: _angular_core.WritableSignal<Set<string>>;
|
|
66
64
|
protected readonly renderedTab: _angular_core.WritableSignal<string>;
|
|
67
65
|
protected readonly canScrollLeft: _angular_core.WritableSignal<boolean>;
|
|
68
66
|
protected readonly canScrollRight: _angular_core.WritableSignal<boolean>;
|
|
69
67
|
protected readonly bouncingTab: _angular_core.WritableSignal<string | null>;
|
|
70
68
|
protected readonly isGlideType: _angular_core.Signal<boolean>;
|
|
71
|
-
protected readonly glideStyle: _angular_core.WritableSignal<{
|
|
72
|
-
transform: string;
|
|
73
|
-
width: string;
|
|
74
|
-
height: string;
|
|
75
|
-
} | null>;
|
|
76
|
-
protected readonly glideReady: _angular_core.WritableSignal<boolean>;
|
|
77
|
-
/** With `zDestroyInactive` the single rendered panel is the visible one, so it never collapses mid-swap. */
|
|
78
|
-
protected readonly visiblePanel: _angular_core.Signal<string>;
|
|
79
|
-
protected readonly panelRenderStates: _angular_core.Signal<Map<string, boolean>>;
|
|
80
69
|
private _resizeObserver?;
|
|
81
|
-
private
|
|
82
|
-
private
|
|
70
|
+
private _commitTimer?;
|
|
71
|
+
private _scrollFrame?;
|
|
72
|
+
private readonly _zone;
|
|
73
|
+
private _mountedPanel;
|
|
74
|
+
private _panelView?;
|
|
75
|
+
private _retiredViews;
|
|
76
|
+
private _teardownHandle?;
|
|
77
|
+
private _glideBox?;
|
|
78
|
+
private _glidePending;
|
|
79
|
+
private _glideAnimations;
|
|
83
80
|
private _viewReady;
|
|
84
81
|
private readonly _cacheInstanceId;
|
|
85
82
|
constructor();
|
|
@@ -93,8 +90,6 @@ declare class ZTabsComponent implements OnInit, AfterViewInit, OnDestroy {
|
|
|
93
90
|
protected readonly navClasses: _angular_core.Signal<string>;
|
|
94
91
|
protected getTabItemClasses(_tab: ZTab): string;
|
|
95
92
|
protected selectTab(tab: ZTab, scrollToView?: boolean): void;
|
|
96
|
-
/** Mounts a panel ahead of its click so the tab transition never pays for the first render. */
|
|
97
|
-
protected preloadTab(tab: ZTab): void;
|
|
98
93
|
protected isTabActive(tab: ZTab): boolean;
|
|
99
94
|
protected onTabKeydown(event: KeyboardEvent, currentIndex: number): void;
|
|
100
95
|
protected checkScroll(): void;
|
|
@@ -102,25 +97,45 @@ declare class ZTabsComponent implements OnInit, AfterViewInit, OnDestroy {
|
|
|
102
97
|
protected scrollRight(): void;
|
|
103
98
|
protected onTabsScroll(): void;
|
|
104
99
|
/**
|
|
105
|
-
*
|
|
106
|
-
*
|
|
100
|
+
* Holds the outgoing panel on screen until the tab-strip animation has finished, then swaps in the
|
|
101
|
+
* new one. A heavy mount therefore lands after the animation instead of stealing its frames.
|
|
107
102
|
*/
|
|
108
103
|
private _scheduleCommit;
|
|
104
|
+
/** Waits out the layout-driven part of the tab animation; the transform-only tail is immune to it. */
|
|
105
|
+
private _panelCommitDelay;
|
|
109
106
|
private _commitPanel;
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
107
|
+
/**
|
|
108
|
+
* Sizes the indicator once, then moves it with a transform-only animation. Transform is the one
|
|
109
|
+
* property the compositor can tick by itself, so a busy main thread — a heavy panel mounting, the
|
|
110
|
+
* host's own work — cannot drop frames from the glide. A second animation counter-scales the corner
|
|
111
|
+
* radius; that one only repaints a small element and degrades to a late radius, never a stalled pill.
|
|
112
|
+
*/
|
|
115
113
|
private _updateGlideIndicator;
|
|
114
|
+
/**
|
|
115
|
+
* Swaps the visible panel. The incoming view is built and bound while it is still off-document, so
|
|
116
|
+
* none of that work triggers style, layout or paint; only the final insert does. The outgoing view is
|
|
117
|
+
* detached immediately — it leaves the DOM at once — and destroyed off the critical path, keeping
|
|
118
|
+
* teardown out of the frame the user clicked in. It is still destroyed, so panels re-initialise.
|
|
119
|
+
*/
|
|
120
|
+
private _swapPanelView;
|
|
121
|
+
private _scheduleTeardown;
|
|
122
|
+
/** Re-runs the enter fade on a wrapper that is reused across swaps, without forcing a reflow. */
|
|
123
|
+
private _fadePanel;
|
|
124
|
+
/**
|
|
125
|
+
* Measurement and imperative DOM work never needs a change-detection tick of its own. With zone.js a
|
|
126
|
+
* plain `requestAnimationFrame` schedules one per callback — wasteful during a smooth scroll, which
|
|
127
|
+
* fires every frame. Signal writes made inside still schedule change detection on their own.
|
|
128
|
+
*/
|
|
129
|
+
private _outsideFrame;
|
|
130
|
+
private _prefersReducedMotion;
|
|
116
131
|
private _setupResizeObserver;
|
|
117
132
|
private _restoreActiveTabFromCache;
|
|
118
133
|
private _saveActiveTabToCache;
|
|
119
134
|
private _getCacheKey;
|
|
120
135
|
protected scrollToActiveDropdownItem(): void;
|
|
121
136
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ZTabsComponent, never>;
|
|
122
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZTabsComponent, "z-tabs", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "zTabs": { "alias": "zTabs"; "required": true; "isSignal": true; }; "zType": { "alias": "zType"; "required": false; "isSignal": true; }; "zSize": { "alias": "zSize"; "required": false; "isSignal": true; }; "zOrientation": { "alias": "zOrientation"; "required": false; "isSignal": true; }; "zContentFit": { "alias": "zContentFit"; "required": false; "isSignal": true; }; "zLazy": { "alias": "zLazy"; "required": false; "isSignal": true; }; "
|
|
137
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZTabsComponent, "z-tabs", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "zTabs": { "alias": "zTabs"; "required": true; "isSignal": true; }; "zType": { "alias": "zType"; "required": false; "isSignal": true; }; "zSize": { "alias": "zSize"; "required": false; "isSignal": true; }; "zOrientation": { "alias": "zOrientation"; "required": false; "isSignal": true; }; "zContentFit": { "alias": "zContentFit"; "required": false; "isSignal": true; }; "zLazy": { "alias": "zLazy"; "required": false; "isSignal": true; }; "zTabsOnly": { "alias": "zTabsOnly"; "required": false; "isSignal": true; }; "zShowNavWrapper": { "alias": "zShowNavWrapper"; "required": false; "isSignal": true; }; "zNavFullWidth": { "alias": "zNavFullWidth"; "required": false; "isSignal": true; }; "zClassContent": { "alias": "zClassContent"; "required": false; "isSignal": true; }; "zShowContentWrapper": { "alias": "zShowContentWrapper"; "required": false; "isSignal": true; }; "zReloadable": { "alias": "zReloadable"; "required": false; "isSignal": true; }; "zEmitOnActiveClick": { "alias": "zEmitOnActiveClick"; "required": false; "isSignal": true; }; "zCache": { "alias": "zCache"; "required": false; "isSignal": true; }; "zCacheKey": { "alias": "zCacheKey"; "required": false; "isSignal": true; }; "activeTab": { "alias": "activeTab"; "required": false; "isSignal": true; }; }, { "activeTab": "activeTabChange"; "zTabChange": "zTabChange"; }, ["tabPanels"], never, true, never>;
|
|
123
138
|
}
|
|
124
139
|
|
|
125
140
|
export { ZTabPanelDirective, ZTabsComponent, zTabItemVariants, zTabsVariants };
|
|
126
|
-
export type { ZTab, ZTabItemVariants, ZTabsContentFit, ZTabsOrientation,
|
|
141
|
+
export type { ZTab, ZTabItemVariants, ZTabsContentFit, ZTabsOrientation, ZTabsSize, ZTabsType, ZTabsVariants };
|