@shival99/z-ui 2.4.6 → 2.4.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/css/global.css +0 -11
- package/fesm2022/shival99-z-ui-components-z-drawer.mjs +3 -3
- package/fesm2022/shival99-z-ui-components-z-drawer.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-hover-glide.mjs +57 -41
- package/fesm2022/shival99-z-ui-components-z-hover-glide.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-menu.mjs +4 -4
- package/fesm2022/shival99-z-ui-components-z-menu.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-table.mjs +44 -8
- package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -1
- package/package.json +1 -1
- package/types/shival99-z-ui-components-z-editor.d.ts +1 -1
- package/types/shival99-z-ui-components-z-hover-glide.d.ts +4 -4
|
@@ -2,27 +2,15 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { input, inject, ElementRef, Renderer2, Directive } from '@angular/core';
|
|
3
3
|
import { zTransform } from '@shival99/z-ui/utils';
|
|
4
4
|
|
|
5
|
-
/** Counter-scales border-radius across a non-uniform scale() so corners don't squash into an ellipse mid-glide. */
|
|
6
|
-
function zHoverGlideRadiusKeyframes(radius, scaleX, scaleY) {
|
|
7
|
-
const steps = 12;
|
|
8
|
-
return Array.from({ length: steps }, (_, index) => {
|
|
9
|
-
const progress = index / (steps - 1);
|
|
10
|
-
const x = scaleX + (1 - scaleX) * progress;
|
|
11
|
-
const y = scaleY + (1 - scaleY) * progress;
|
|
12
|
-
return { borderRadius: `${radius / x}px / ${radius / y}px` };
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
|
|
16
5
|
/**
|
|
17
6
|
* Shared sliding hover highlight for item lists (select options, autocomplete options, command
|
|
18
7
|
* items, dropdown-menu items, ...). One absolutely-positioned box glides between hovered items
|
|
19
8
|
* instead of each item toggling its own background — matches the "motion highlight" pattern from
|
|
20
9
|
* animate-ui.
|
|
21
10
|
*
|
|
22
|
-
* The box's
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* between, which is what a CSS `transition` on width/height would otherwise do on every tick.
|
|
11
|
+
* The box's geometry is updated once per move. Pixel-aligned boxes use a compositor animation;
|
|
12
|
+
* fractional geometry (common at browser zoom levels) uses layout-property animation instead, so
|
|
13
|
+
* Chromium never has to rasterize a transformed text layer at a fractional device-pixel offset.
|
|
26
14
|
*
|
|
27
15
|
* Usage: put `[zHoverGlide]` on the scrollable/list container and give each hoverable item a
|
|
28
16
|
* `data-glide-item` attribute (or pass a custom `[zHoverGlideSelector]`). Works with virtualized
|
|
@@ -173,7 +161,9 @@ class ZHoverGlideDirective {
|
|
|
173
161
|
el.style.top = '0';
|
|
174
162
|
el.style.left = '0';
|
|
175
163
|
el.style.margin = '0';
|
|
176
|
-
|
|
164
|
+
// Keep the highlight behind item content without requiring every consumer to add a z-index.
|
|
165
|
+
// The host's isolated stacking context keeps this negative layer above the host background.
|
|
166
|
+
el.style.zIndex = '-1';
|
|
177
167
|
el.style.opacity = '0';
|
|
178
168
|
el.style.pointerEvents = 'none';
|
|
179
169
|
el.style.transition = this._prefersReducedMotion ? 'none' : 'opacity 120ms ease-out';
|
|
@@ -187,29 +177,34 @@ class ZHoverGlideDirective {
|
|
|
187
177
|
const container = this._elementRef.nativeElement;
|
|
188
178
|
const containerRect = container.getBoundingClientRect();
|
|
189
179
|
const targetRect = target.getBoundingClientRect();
|
|
190
|
-
// Whole pixels only — a fractional box makes the browser re-snap subpixel rounding on every
|
|
191
|
-
// frame, which reads as the surrounding content faintly jittering.
|
|
192
180
|
const next = {
|
|
193
|
-
x:
|
|
194
|
-
y:
|
|
195
|
-
w:
|
|
196
|
-
h:
|
|
181
|
+
x: targetRect.left - containerRect.left + container.scrollLeft,
|
|
182
|
+
y: targetRect.top - containerRect.top + container.scrollTop,
|
|
183
|
+
w: targetRect.width,
|
|
184
|
+
h: targetRect.height,
|
|
197
185
|
};
|
|
198
186
|
const previous = this._box;
|
|
199
187
|
this._box = next;
|
|
200
188
|
this._cancelAnimations();
|
|
201
|
-
// Size and final position are a single, un-animated write — identical cost to any other
|
|
202
|
-
// re-render. Only `transform` animates from here, so the glide itself never re-triggers layout.
|
|
203
189
|
el.style.width = `${next.w}px`;
|
|
204
190
|
el.style.height = `${next.h}px`;
|
|
205
|
-
el.style.transform = `translate(${next.x}px, ${next.y}px)`;
|
|
206
191
|
el.style.borderRadius = '';
|
|
207
192
|
el.style.opacity = '1';
|
|
193
|
+
const canUseTransform = previous
|
|
194
|
+
? this._canUseTransformAnimation(previous, next)
|
|
195
|
+
: this._canUseTransformAnimation(next);
|
|
208
196
|
if (!previous || !shouldAnimate || this._prefersReducedMotion || typeof el.animate !== 'function') {
|
|
197
|
+
if (!canUseTransform) {
|
|
198
|
+
el.style.transform = 'none';
|
|
199
|
+
el.style.left = `${next.x}px`;
|
|
200
|
+
el.style.top = `${next.y}px`;
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
el.style.left = '0';
|
|
204
|
+
el.style.top = '0';
|
|
205
|
+
el.style.transform = `translate(${next.x}px, ${next.y}px)`;
|
|
209
206
|
return;
|
|
210
207
|
}
|
|
211
|
-
const scaleX = previous.w / next.w;
|
|
212
|
-
const scaleY = previous.h / next.h;
|
|
213
208
|
const options = { duration: 180, easing: 'cubic-bezier(0.22, 1, 0.36, 1)' };
|
|
214
209
|
const animationGeneration = this._animationGeneration;
|
|
215
210
|
let activeAnimationCount = 0;
|
|
@@ -229,20 +224,41 @@ class ZHoverGlideDirective {
|
|
|
229
224
|
animation.addEventListener('cancel', cleanup, { once: true });
|
|
230
225
|
this._animations.push(animation);
|
|
231
226
|
};
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
227
|
+
if (!canUseTransform) {
|
|
228
|
+
el.style.transform = 'none';
|
|
229
|
+
el.style.left = `${next.x}px`;
|
|
230
|
+
el.style.top = `${next.y}px`;
|
|
231
|
+
trackAnimation(el.animate([
|
|
232
|
+
{
|
|
233
|
+
left: `${previous.x}px`,
|
|
234
|
+
top: `${previous.y}px`,
|
|
235
|
+
width: `${previous.w}px`,
|
|
236
|
+
height: `${previous.h}px`,
|
|
237
|
+
},
|
|
238
|
+
{ left: `${next.x}px`, top: `${next.y}px`, width: `${next.w}px`, height: `${next.h}px` },
|
|
239
|
+
], options));
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
el.style.left = '0';
|
|
243
|
+
el.style.top = '0';
|
|
244
|
+
el.style.transform = `translate(${next.x}px, ${next.y}px)`;
|
|
245
|
+
trackAnimation(el.animate([
|
|
246
|
+
{ transform: `translate(${previous.x}px, ${previous.y}px)` },
|
|
239
247
|
{ transform: `translate(${next.x}px, ${next.y}px)` },
|
|
240
|
-
], options);
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
248
|
+
], options));
|
|
249
|
+
}
|
|
250
|
+
_canUseTransformAnimation(...boxes) {
|
|
251
|
+
const pixelRatio = typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;
|
|
252
|
+
const viewportScale = typeof window !== 'undefined' ? window.visualViewport?.scale || 1 : 1;
|
|
253
|
+
if (Math.abs(pixelRatio - Math.round(pixelRatio)) > 0.001 || Math.abs(viewportScale - 1) > 0.001) {
|
|
254
|
+
return false;
|
|
245
255
|
}
|
|
256
|
+
return boxes
|
|
257
|
+
.flatMap(box => [box.x, box.y, box.w, box.h])
|
|
258
|
+
.every(value => {
|
|
259
|
+
const devicePixels = value * pixelRatio;
|
|
260
|
+
return Math.abs(devicePixels - Math.round(devicePixels)) < 0.001;
|
|
261
|
+
});
|
|
246
262
|
}
|
|
247
263
|
_fadeOut() {
|
|
248
264
|
this._cancelAnimations();
|
|
@@ -288,7 +304,7 @@ class ZHoverGlideDirective {
|
|
|
288
304
|
element.remove();
|
|
289
305
|
}
|
|
290
306
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZHoverGlideDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
291
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.6", type: ZHoverGlideDirective, isStandalone: true, selector: "[zHoverGlide]", inputs: { zHoverGlideSelector: { classPropertyName: "zHoverGlideSelector", publicName: "zHoverGlideSelector", isSignal: true, isRequired: false, transformFunction: null }, zHoverGlideClass: { classPropertyName: "zHoverGlideClass", publicName: "zHoverGlideClass", isSignal: true, isRequired: false, transformFunction: null }, zHoverGlideDisabled: { classPropertyName: "zHoverGlideDisabled", publicName: "zHoverGlideDisabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "pointerover": "_onPointerOver($event)", "pointerout": "_onPointerOut($event)", "pointermove": "_onPointerMove($event)", "pointerleave": "_onPointerLeave()", "scroll": "_onScroll()" }, classAttribute: "relative" }, ngImport: i0 });
|
|
307
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.6", type: ZHoverGlideDirective, isStandalone: true, selector: "[zHoverGlide]", inputs: { zHoverGlideSelector: { classPropertyName: "zHoverGlideSelector", publicName: "zHoverGlideSelector", isSignal: true, isRequired: false, transformFunction: null }, zHoverGlideClass: { classPropertyName: "zHoverGlideClass", publicName: "zHoverGlideClass", isSignal: true, isRequired: false, transformFunction: null }, zHoverGlideDisabled: { classPropertyName: "zHoverGlideDisabled", publicName: "zHoverGlideDisabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "pointerover": "_onPointerOver($event)", "pointerout": "_onPointerOut($event)", "pointermove": "_onPointerMove($event)", "pointerleave": "_onPointerLeave()", "scroll": "_onScroll()" }, classAttribute: "relative isolate" }, ngImport: i0 });
|
|
292
308
|
}
|
|
293
309
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZHoverGlideDirective, decorators: [{
|
|
294
310
|
type: Directive,
|
|
@@ -296,7 +312,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
|
|
|
296
312
|
selector: '[zHoverGlide]',
|
|
297
313
|
standalone: true,
|
|
298
314
|
host: {
|
|
299
|
-
class: 'relative',
|
|
315
|
+
class: 'relative isolate',
|
|
300
316
|
'(pointerover)': '_onPointerOver($event)',
|
|
301
317
|
'(pointerout)': '_onPointerOut($event)',
|
|
302
318
|
'(pointermove)': '_onPointerMove($event)',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shival99-z-ui-components-z-hover-glide.mjs","sources":["../../../../libs/core-ui/components/z-hover-glide/z-hover-glide.util.ts","../../../../libs/core-ui/components/z-hover-glide/z-hover-glide.directive.ts","../../../../libs/core-ui/components/z-hover-glide/shival99-z-ui-components-z-hover-glide.ts"],"sourcesContent":["/** Counter-scales border-radius across a non-uniform scale() so corners don't squash into an ellipse mid-glide. */\nexport function zHoverGlideRadiusKeyframes(radius: number, scaleX: number, scaleY: number): Keyframe[] {\n const steps = 12;\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","import { Directive, ElementRef, inject, input, OnDestroy, Renderer2 } from '@angular/core';\nimport { zTransform } from '@shival99/z-ui/utils';\nimport type { ZHoverGlideBox } from './z-hover-glide.types';\nimport { zHoverGlideRadiusKeyframes } from './z-hover-glide.util';\n\n/**\n * Shared sliding hover highlight for item lists (select options, autocomplete options, command\n * items, dropdown-menu items, ...). One absolutely-positioned box glides between hovered items\n * instead of each item toggling its own background — matches the \"motion highlight\" pattern from\n * animate-ui.\n *\n * The box's width/height are written once per move (a single layout op, same as any re-render) and\n * never transitioned — only `transform` (translate + a briefly non-1 scale) animates via the Web\n * Animations API, so the glide runs on the compositor and never re-triggers layout on the frames in\n * between, which is what a CSS `transition` on width/height would otherwise do on every tick.\n *\n * Usage: put `[zHoverGlide]` on the scrollable/list container and give each hoverable item a\n * `data-glide-item` attribute (or pass a custom `[zHoverGlideSelector]`). Works with virtualized\n * lists out of the box since it delegates from a single `pointerover` listener on the container\n * instead of binding per item.\n */\n@Directive({\n selector: '[zHoverGlide]',\n standalone: true,\n host: {\n class: 'relative',\n '(pointerover)': '_onPointerOver($event)',\n '(pointerout)': '_onPointerOut($event)',\n '(pointermove)': '_onPointerMove($event)',\n '(pointerleave)': '_onPointerLeave()',\n '(scroll)': '_onScroll()',\n },\n})\nexport class ZHoverGlideDirective implements OnDestroy {\n /** CSS selector (relative to the container) matching hoverable items. */\n public readonly zHoverGlideSelector = input<string>('[data-glide-item]');\n\n /** Classes applied to the sliding highlight box. */\n public readonly zHoverGlideClass = input<string>('bg-muted rounded-(--radius-sm)');\n\n public readonly zHoverGlideDisabled = input(false, { transform: zTransform });\n\n private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly _renderer = inject(Renderer2);\n\n private _highlightEl: HTMLElement | null = null;\n private _currentTarget: HTMLElement | null = null;\n private _box: ZHoverGlideBox | null = null;\n private _animations: Animation[] = [];\n private _lastPointerPosition: { x: number; y: number } | null = null;\n private _scrollFrame: number | null = null;\n private _animationGeneration = 0;\n private readonly _prefersReducedMotion =\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n public ngOnDestroy(): void {\n if (this._scrollFrame !== null && typeof cancelAnimationFrame === 'function') {\n cancelAnimationFrame(this._scrollFrame);\n }\n this._cancelAnimations();\n this._removeHighlightElements();\n }\n\n protected _onPointerOver(event: PointerEvent): void {\n if (this.zHoverGlideDisabled() || event.pointerType === 'touch') {\n return;\n }\n\n this._lastPointerPosition = { x: event.clientX, y: event.clientY };\n const source = event.target as HTMLElement | null;\n const target = this._getTarget(source);\n if (!target) {\n if (this._isNestedHostTarget(source)) {\n this._currentTarget = null;\n this._fadeOut();\n }\n return;\n }\n\n if (target === this._currentTarget) {\n return;\n }\n\n if (target.getAttribute('aria-disabled') === 'true' || (target as HTMLButtonElement).disabled) {\n this._currentTarget = null;\n this._fadeOut();\n return;\n }\n\n this._currentTarget = target;\n this._moveTo(target);\n }\n\n protected _onPointerOut(event: PointerEvent): void {\n const relatedTarget = event.relatedTarget as Node | null;\n if (relatedTarget && this._elementRef.nativeElement.contains(relatedTarget)) {\n return;\n }\n\n this._currentTarget = null;\n this._lastPointerPosition = null;\n this._fadeOut();\n }\n\n protected _onPointerMove(event: PointerEvent): void {\n if (!this.zHoverGlideDisabled() && event.pointerType !== 'touch') {\n this._lastPointerPosition = { x: event.clientX, y: event.clientY };\n }\n }\n\n protected _onScroll(): void {\n if (this.zHoverGlideDisabled() || !this._lastPointerPosition) {\n return;\n }\n\n if (typeof requestAnimationFrame !== 'function') {\n this._syncToPointer();\n return;\n }\n\n if (this._scrollFrame !== null) {\n return;\n }\n\n this._scrollFrame = requestAnimationFrame(() => {\n this._scrollFrame = null;\n this._syncToPointer();\n });\n }\n\n protected _onPointerLeave(): void {\n this._currentTarget = null;\n this._lastPointerPosition = null;\n this._fadeOut();\n }\n\n private _syncToPointer(): void {\n const pointer = this._lastPointerPosition;\n if (!pointer) {\n this._currentTarget = null;\n this._fadeOut();\n return;\n }\n\n const target = this._getTarget(document.elementFromPoint(pointer.x, pointer.y));\n if (!target || target.getAttribute('aria-disabled') === 'true' || (target as HTMLButtonElement).disabled) {\n this._currentTarget = null;\n this._fadeOut();\n return;\n }\n\n this._currentTarget = target;\n this._moveTo(target, false);\n }\n\n private _getTarget(source: EventTarget | null): HTMLElement | null {\n const target = (source as HTMLElement | null)?.closest(this.zHoverGlideSelector()) as HTMLElement | null;\n if (!target) {\n return null;\n }\n\n const container = this._elementRef.nativeElement;\n if (!container.contains(target) || target.closest('[zhoverglide]') !== container) {\n return null;\n }\n\n return target;\n }\n\n private _isNestedHostTarget(source: EventTarget | null): boolean {\n const sourceElement = source as HTMLElement | null;\n if (!sourceElement) {\n return false;\n }\n\n const nestedHost = sourceElement.closest('[zhoverglide]');\n return nestedHost !== null && nestedHost !== this._elementRef.nativeElement;\n }\n\n private _ensureHighlightEl(): HTMLElement {\n const container = this._elementRef.nativeElement;\n const highlights = Array.from(container.children).filter(child =>\n child.hasAttribute('data-z-hover-glide-highlight')\n ) as HTMLElement[];\n const current = this._highlightEl?.parentElement === container ? this._highlightEl : null;\n\n for (const highlight of highlights) {\n if (highlight !== current) {\n this._removeHighlightElement(highlight);\n }\n }\n\n if (current) {\n return current;\n }\n\n if (this._highlightEl) {\n this._removeHighlightElement(this._highlightEl);\n }\n\n const el = this._renderer.createElement('div') as HTMLElement;\n el.setAttribute('aria-hidden', 'true');\n el.setAttribute('data-z-hover-glide-highlight', '');\n el.style.position = 'absolute';\n el.style.top = '0';\n el.style.left = '0';\n el.style.margin = '0';\n el.style.zIndex = '0';\n el.style.opacity = '0';\n el.style.pointerEvents = 'none';\n el.style.transition = this._prefersReducedMotion ? 'none' : 'opacity 120ms ease-out';\n el.className = this.zHoverGlideClass();\n\n container.insertBefore(el, container.firstChild);\n this._highlightEl = el;\n\n return el;\n }\n\n private _moveTo(target: HTMLElement, shouldAnimate = true): void {\n const el = this._ensureHighlightEl();\n const container = this._elementRef.nativeElement;\n const containerRect = container.getBoundingClientRect();\n const targetRect = target.getBoundingClientRect();\n\n // Whole pixels only — a fractional box makes the browser re-snap subpixel rounding on every\n // frame, which reads as the surrounding content faintly jittering.\n const next: ZHoverGlideBox = {\n x: Math.round(targetRect.left - containerRect.left + container.scrollLeft),\n y: Math.round(targetRect.top - containerRect.top + container.scrollTop),\n w: Math.round(targetRect.width),\n h: Math.round(targetRect.height),\n };\n\n const previous = this._box;\n this._box = next;\n\n this._cancelAnimations();\n\n // Size and final position are a single, un-animated write — identical cost to any other\n // re-render. Only `transform` animates from here, so the glide itself never re-triggers layout.\n el.style.width = `${next.w}px`;\n el.style.height = `${next.h}px`;\n el.style.transform = `translate(${next.x}px, ${next.y}px)`;\n el.style.borderRadius = '';\n el.style.opacity = '1';\n\n if (!previous || !shouldAnimate || this._prefersReducedMotion || typeof el.animate !== 'function') {\n return;\n }\n\n const scaleX = previous.w / next.w;\n const scaleY = previous.h / next.h;\n const options: KeyframeAnimationOptions = { duration: 180, easing: 'cubic-bezier(0.22, 1, 0.36, 1)' };\n const animationGeneration = this._animationGeneration;\n let activeAnimationCount = 0;\n\n const trackAnimation = (animation: Animation): void => {\n activeAnimationCount += 1;\n const cleanup = (): void => {\n const index = this._animations.indexOf(animation);\n if (index >= 0) {\n this._animations.splice(index, 1);\n }\n activeAnimationCount = Math.max(0, activeAnimationCount - 1);\n if (animationGeneration === this._animationGeneration && activeAnimationCount === 0) {\n el.style.willChange = 'auto';\n }\n };\n animation.addEventListener('finish', cleanup, { once: true });\n animation.addEventListener('cancel', cleanup, { once: true });\n this._animations.push(animation);\n };\n\n // `will-change` only for the animation's own lifetime: pinning it permanently keeps this\n // element on its own compositor layer at rest too, which makes Chromium periodically\n // re-rasterize the item text sitting on top of it at a slightly different subpixel offset —\n // seen as the text flashing blurry-then-sharp even though nothing has actually moved.\n el.style.willChange = 'transform';\n const transformAnimation = el.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 trackAnimation(transformAnimation);\n\n const radius = parseFloat(getComputedStyle(el).borderTopLeftRadius) || 0;\n if (radius > 0 && (scaleX !== 1 || scaleY !== 1)) {\n trackAnimation(el.animate(zHoverGlideRadiusKeyframes(radius, scaleX, scaleY), options));\n }\n }\n\n private _fadeOut(): void {\n this._cancelAnimations();\n this._box = null;\n if (!this._highlightEl) {\n return;\n }\n\n this._highlightEl.style.willChange = 'auto';\n this._highlightEl.style.opacity = '0';\n }\n\n private _cancelAnimations(): void {\n this._animationGeneration += 1;\n const animations = new Set(this._animations);\n const highlight = this._highlightEl;\n\n if (highlight && typeof highlight.getAnimations === 'function') {\n for (const animation of highlight.getAnimations()) {\n animations.add(animation);\n }\n }\n\n for (const animation of animations) {\n animation.cancel();\n }\n\n this._animations = [];\n if (highlight) {\n highlight.style.willChange = 'auto';\n }\n }\n\n private _removeHighlightElements(): void {\n const container = this._elementRef.nativeElement;\n for (const child of Array.from(container.children)) {\n if (child.hasAttribute('data-z-hover-glide-highlight')) {\n this._removeHighlightElement(child as HTMLElement);\n }\n }\n this._highlightEl = null;\n }\n\n private _removeHighlightElement(element: HTMLElement): void {\n if (typeof element.getAnimations === 'function') {\n for (const animation of element.getAnimations()) {\n animation.cancel();\n }\n }\n element.remove();\n }\n}\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-hover-glide.mjs","sources":["../../../../libs/core-ui/components/z-hover-glide/z-hover-glide.directive.ts","../../../../libs/core-ui/components/z-hover-glide/shival99-z-ui-components-z-hover-glide.ts"],"sourcesContent":["import { Directive, ElementRef, inject, input, OnDestroy, Renderer2 } from '@angular/core';\nimport { zTransform } from '@shival99/z-ui/utils';\nimport type { ZHoverGlideBox } from './z-hover-glide.types';\n\n/**\n * Shared sliding hover highlight for item lists (select options, autocomplete options, command\n * items, dropdown-menu items, ...). One absolutely-positioned box glides between hovered items\n * instead of each item toggling its own background — matches the \"motion highlight\" pattern from\n * animate-ui.\n *\n * The box's geometry is updated once per move. Pixel-aligned boxes use a compositor animation;\n * fractional geometry (common at browser zoom levels) uses layout-property animation instead, so\n * Chromium never has to rasterize a transformed text layer at a fractional device-pixel offset.\n *\n * Usage: put `[zHoverGlide]` on the scrollable/list container and give each hoverable item a\n * `data-glide-item` attribute (or pass a custom `[zHoverGlideSelector]`). Works with virtualized\n * lists out of the box since it delegates from a single `pointerover` listener on the container\n * instead of binding per item.\n */\n@Directive({\n selector: '[zHoverGlide]',\n standalone: true,\n host: {\n class: 'relative isolate',\n '(pointerover)': '_onPointerOver($event)',\n '(pointerout)': '_onPointerOut($event)',\n '(pointermove)': '_onPointerMove($event)',\n '(pointerleave)': '_onPointerLeave()',\n '(scroll)': '_onScroll()',\n },\n})\nexport class ZHoverGlideDirective implements OnDestroy {\n /** CSS selector (relative to the container) matching hoverable items. */\n public readonly zHoverGlideSelector = input<string>('[data-glide-item]');\n\n /** Classes applied to the sliding highlight box. */\n public readonly zHoverGlideClass = input<string>('bg-muted rounded-(--radius-sm)');\n\n public readonly zHoverGlideDisabled = input(false, { transform: zTransform });\n\n private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly _renderer = inject(Renderer2);\n\n private _highlightEl: HTMLElement | null = null;\n private _currentTarget: HTMLElement | null = null;\n private _box: ZHoverGlideBox | null = null;\n private _animations: Animation[] = [];\n private _lastPointerPosition: { x: number; y: number } | null = null;\n private _scrollFrame: number | null = null;\n private _animationGeneration = 0;\n private readonly _prefersReducedMotion =\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n public ngOnDestroy(): void {\n if (this._scrollFrame !== null && typeof cancelAnimationFrame === 'function') {\n cancelAnimationFrame(this._scrollFrame);\n }\n this._cancelAnimations();\n this._removeHighlightElements();\n }\n\n protected _onPointerOver(event: PointerEvent): void {\n if (this.zHoverGlideDisabled() || event.pointerType === 'touch') {\n return;\n }\n\n this._lastPointerPosition = { x: event.clientX, y: event.clientY };\n const source = event.target as HTMLElement | null;\n const target = this._getTarget(source);\n if (!target) {\n if (this._isNestedHostTarget(source)) {\n this._currentTarget = null;\n this._fadeOut();\n }\n return;\n }\n\n if (target === this._currentTarget) {\n return;\n }\n\n if (target.getAttribute('aria-disabled') === 'true' || (target as HTMLButtonElement).disabled) {\n this._currentTarget = null;\n this._fadeOut();\n return;\n }\n\n this._currentTarget = target;\n this._moveTo(target);\n }\n\n protected _onPointerOut(event: PointerEvent): void {\n const relatedTarget = event.relatedTarget as Node | null;\n if (relatedTarget && this._elementRef.nativeElement.contains(relatedTarget)) {\n return;\n }\n\n this._currentTarget = null;\n this._lastPointerPosition = null;\n this._fadeOut();\n }\n\n protected _onPointerMove(event: PointerEvent): void {\n if (!this.zHoverGlideDisabled() && event.pointerType !== 'touch') {\n this._lastPointerPosition = { x: event.clientX, y: event.clientY };\n }\n }\n\n protected _onScroll(): void {\n if (this.zHoverGlideDisabled() || !this._lastPointerPosition) {\n return;\n }\n\n if (typeof requestAnimationFrame !== 'function') {\n this._syncToPointer();\n return;\n }\n\n if (this._scrollFrame !== null) {\n return;\n }\n\n this._scrollFrame = requestAnimationFrame(() => {\n this._scrollFrame = null;\n this._syncToPointer();\n });\n }\n\n protected _onPointerLeave(): void {\n this._currentTarget = null;\n this._lastPointerPosition = null;\n this._fadeOut();\n }\n\n private _syncToPointer(): void {\n const pointer = this._lastPointerPosition;\n if (!pointer) {\n this._currentTarget = null;\n this._fadeOut();\n return;\n }\n\n const target = this._getTarget(document.elementFromPoint(pointer.x, pointer.y));\n if (!target || target.getAttribute('aria-disabled') === 'true' || (target as HTMLButtonElement).disabled) {\n this._currentTarget = null;\n this._fadeOut();\n return;\n }\n\n this._currentTarget = target;\n this._moveTo(target, false);\n }\n\n private _getTarget(source: EventTarget | null): HTMLElement | null {\n const target = (source as HTMLElement | null)?.closest(this.zHoverGlideSelector()) as HTMLElement | null;\n if (!target) {\n return null;\n }\n\n const container = this._elementRef.nativeElement;\n if (!container.contains(target) || target.closest('[zhoverglide]') !== container) {\n return null;\n }\n\n return target;\n }\n\n private _isNestedHostTarget(source: EventTarget | null): boolean {\n const sourceElement = source as HTMLElement | null;\n if (!sourceElement) {\n return false;\n }\n\n const nestedHost = sourceElement.closest('[zhoverglide]');\n return nestedHost !== null && nestedHost !== this._elementRef.nativeElement;\n }\n\n private _ensureHighlightEl(): HTMLElement {\n const container = this._elementRef.nativeElement;\n const highlights = Array.from(container.children).filter(child =>\n child.hasAttribute('data-z-hover-glide-highlight')\n ) as HTMLElement[];\n const current = this._highlightEl?.parentElement === container ? this._highlightEl : null;\n\n for (const highlight of highlights) {\n if (highlight !== current) {\n this._removeHighlightElement(highlight);\n }\n }\n\n if (current) {\n return current;\n }\n\n if (this._highlightEl) {\n this._removeHighlightElement(this._highlightEl);\n }\n\n const el = this._renderer.createElement('div') as HTMLElement;\n el.setAttribute('aria-hidden', 'true');\n el.setAttribute('data-z-hover-glide-highlight', '');\n el.style.position = 'absolute';\n el.style.top = '0';\n el.style.left = '0';\n el.style.margin = '0';\n // Keep the highlight behind item content without requiring every consumer to add a z-index.\n // The host's isolated stacking context keeps this negative layer above the host background.\n el.style.zIndex = '-1';\n el.style.opacity = '0';\n el.style.pointerEvents = 'none';\n el.style.transition = this._prefersReducedMotion ? 'none' : 'opacity 120ms ease-out';\n el.className = this.zHoverGlideClass();\n\n container.insertBefore(el, container.firstChild);\n this._highlightEl = el;\n\n return el;\n }\n\n private _moveTo(target: HTMLElement, shouldAnimate = true): void {\n const el = this._ensureHighlightEl();\n const container = this._elementRef.nativeElement;\n const containerRect = container.getBoundingClientRect();\n const targetRect = target.getBoundingClientRect();\n\n const next: ZHoverGlideBox = {\n x: targetRect.left - containerRect.left + container.scrollLeft,\n y: targetRect.top - containerRect.top + container.scrollTop,\n w: targetRect.width,\n h: targetRect.height,\n };\n\n const previous = this._box;\n this._box = next;\n\n this._cancelAnimations();\n\n el.style.width = `${next.w}px`;\n el.style.height = `${next.h}px`;\n el.style.borderRadius = '';\n el.style.opacity = '1';\n\n const canUseTransform = previous\n ? this._canUseTransformAnimation(previous, next)\n : this._canUseTransformAnimation(next);\n if (!previous || !shouldAnimate || this._prefersReducedMotion || typeof el.animate !== 'function') {\n if (!canUseTransform) {\n el.style.transform = 'none';\n el.style.left = `${next.x}px`;\n el.style.top = `${next.y}px`;\n return;\n }\n\n el.style.left = '0';\n el.style.top = '0';\n el.style.transform = `translate(${next.x}px, ${next.y}px)`;\n return;\n }\n\n const options: KeyframeAnimationOptions = { duration: 180, easing: 'cubic-bezier(0.22, 1, 0.36, 1)' };\n const animationGeneration = this._animationGeneration;\n let activeAnimationCount = 0;\n\n const trackAnimation = (animation: Animation): void => {\n activeAnimationCount += 1;\n const cleanup = (): void => {\n const index = this._animations.indexOf(animation);\n if (index >= 0) {\n this._animations.splice(index, 1);\n }\n activeAnimationCount = Math.max(0, activeAnimationCount - 1);\n if (animationGeneration === this._animationGeneration && activeAnimationCount === 0) {\n el.style.willChange = 'auto';\n }\n };\n animation.addEventListener('finish', cleanup, { once: true });\n animation.addEventListener('cancel', cleanup, { once: true });\n this._animations.push(animation);\n };\n\n if (!canUseTransform) {\n el.style.transform = 'none';\n el.style.left = `${next.x}px`;\n el.style.top = `${next.y}px`;\n trackAnimation(\n el.animate(\n [\n {\n left: `${previous.x}px`,\n top: `${previous.y}px`,\n width: `${previous.w}px`,\n height: `${previous.h}px`,\n },\n { left: `${next.x}px`, top: `${next.y}px`, width: `${next.w}px`, height: `${next.h}px` },\n ],\n options\n )\n );\n return;\n }\n\n el.style.left = '0';\n el.style.top = '0';\n el.style.transform = `translate(${next.x}px, ${next.y}px)`;\n trackAnimation(\n el.animate(\n [\n { transform: `translate(${previous.x}px, ${previous.y}px)` },\n { transform: `translate(${next.x}px, ${next.y}px)` },\n ],\n options\n )\n );\n }\n\n private _canUseTransformAnimation(...boxes: ZHoverGlideBox[]): boolean {\n const pixelRatio = typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n const viewportScale = typeof window !== 'undefined' ? window.visualViewport?.scale || 1 : 1;\n if (Math.abs(pixelRatio - Math.round(pixelRatio)) > 0.001 || Math.abs(viewportScale - 1) > 0.001) {\n return false;\n }\n\n return boxes\n .flatMap(box => [box.x, box.y, box.w, box.h])\n .every(value => {\n const devicePixels = value * pixelRatio;\n return Math.abs(devicePixels - Math.round(devicePixels)) < 0.001;\n });\n }\n\n private _fadeOut(): void {\n this._cancelAnimations();\n this._box = null;\n if (!this._highlightEl) {\n return;\n }\n\n this._highlightEl.style.willChange = 'auto';\n this._highlightEl.style.opacity = '0';\n }\n\n private _cancelAnimations(): void {\n this._animationGeneration += 1;\n const animations = new Set(this._animations);\n const highlight = this._highlightEl;\n\n if (highlight && typeof highlight.getAnimations === 'function') {\n for (const animation of highlight.getAnimations()) {\n animations.add(animation);\n }\n }\n\n for (const animation of animations) {\n animation.cancel();\n }\n\n this._animations = [];\n if (highlight) {\n highlight.style.willChange = 'auto';\n }\n }\n\n private _removeHighlightElements(): void {\n const container = this._elementRef.nativeElement;\n for (const child of Array.from(container.children)) {\n if (child.hasAttribute('data-z-hover-glide-highlight')) {\n this._removeHighlightElement(child as HTMLElement);\n }\n }\n this._highlightEl = null;\n }\n\n private _removeHighlightElement(element: HTMLElement): void {\n if (typeof element.getAnimations === 'function') {\n for (const animation of element.getAnimations()) {\n animation.cancel();\n }\n }\n element.remove();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|