ng-primitives 0.114.0 → 0.115.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -36,7 +36,7 @@ interface NgpTooltipConfig {
36
36
  */
37
37
  flip: NgpFlip;
38
38
  /**
39
- * Define the container element or selector in to which the tooltip should be attached.
39
+ * Define the container element or selector into which the tooltip should be attached.
40
40
  * @default 'body'
41
41
  */
42
42
  container: HTMLElement | string | null;
@@ -74,6 +74,11 @@ interface NgpTooltipConfig {
74
74
  * @default 300
75
75
  */
76
76
  cooldown: number;
77
+ /**
78
+ * Whether hovering the tooltip content keeps it open while moving from the trigger.
79
+ * @default false
80
+ */
81
+ hoverableContent: boolean;
77
82
  }
78
83
  /**
79
84
  * Provide the default Tooltip configuration
@@ -122,6 +127,10 @@ type TooltipInput<T> = NgpOverlayContent<T> | string | null | undefined;
122
127
  * Apply the `ngpTooltipTrigger` directive to an element that triggers the tooltip to show.
123
128
  */
124
129
  declare class NgpTooltipTrigger<T = null> implements OnDestroy {
130
+ /**
131
+ * Maximum time allowed to cross from trigger to tooltip without pointer movement.
132
+ */
133
+ private static readonly HOVER_BRIDGE_TIMEOUT_MS;
125
134
  /**
126
135
  * Access the trigger element
127
136
  */
@@ -138,6 +147,10 @@ declare class NgpTooltipTrigger<T = null> implements OnDestroy {
138
147
  * Access the global tooltip configuration.
139
148
  */
140
149
  private readonly config;
150
+ /**
151
+ * Disposables for managing event listeners and timers with automatic teardown.
152
+ */
153
+ private readonly disposables;
141
154
  /**
142
155
  * Access the tooltip template ref.
143
156
  */
@@ -224,6 +237,11 @@ declare class NgpTooltipTrigger<T = null> implements OnDestroy {
224
237
  * @default 300
225
238
  */
226
239
  readonly cooldown: _angular_core.InputSignalWithTransform<number, NumberInput>;
240
+ /**
241
+ * Whether hovering tooltip content keeps the tooltip open.
242
+ * @default false
243
+ */
244
+ readonly hoverableContent: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
227
245
  /**
228
246
  * The overlay that manages the tooltip
229
247
  * @internal
@@ -242,6 +260,26 @@ declare class NgpTooltipTrigger<T = null> implements OnDestroy {
242
260
  * Determine if the trigger element has overflow.
243
261
  */
244
262
  private readonly hasOverflow;
263
+ /**
264
+ * Tracks whether pointer is currently over trigger.
265
+ */
266
+ private triggerHovered;
267
+ /**
268
+ * Tracks whether pointer is currently over tooltip content.
269
+ */
270
+ private contentHovered;
271
+ /**
272
+ * Current pointer grace polygon used while crossing trigger -> tooltip.
273
+ */
274
+ private hoverBridgePolygon;
275
+ /**
276
+ * Cleanup callback for the document pointermove listener.
277
+ */
278
+ private removePointerMoveListener?;
279
+ /**
280
+ * Cleanup callback for the hover bridge timeout.
281
+ */
282
+ private clearHoverBridgeTimeout?;
245
283
  /**
246
284
  * Store the state of the tooltip.
247
285
  * @internal
@@ -271,7 +309,17 @@ declare class NgpTooltipTrigger<T = null> implements OnDestroy {
271
309
  * Hide the tooltip from an interaction (respects disabled state).
272
310
  * @internal
273
311
  */
274
- protected hideFromInteraction(): void;
312
+ protected hideFromInteraction(event?: MouseEvent): void;
313
+ /**
314
+ * Called by tooltip content when pointer enters the tooltip.
315
+ * @internal
316
+ */
317
+ onTooltipHoverStart(): void;
318
+ /**
319
+ * Called by tooltip content when pointer leaves the tooltip.
320
+ * @internal
321
+ */
322
+ onTooltipHoverEnd(): void;
275
323
  /**
276
324
  * Create the overlay that will contain the tooltip
277
325
  */
@@ -280,8 +328,20 @@ declare class NgpTooltipTrigger<T = null> implements OnDestroy {
280
328
  * Set the tooltip id.
281
329
  */
282
330
  setTooltipId(id: string): void;
331
+ /**
332
+ * Register document-level pointer tracking while crossing trigger -> tooltip.
333
+ */
334
+ private registerPointerMoveListener;
335
+ /**
336
+ * Clear hover bridge state and global listeners.
337
+ */
338
+ private clearHoverBridge;
339
+ /**
340
+ * Close if pointer leaves trigger and does not move into tooltip soon enough.
341
+ */
342
+ private scheduleHoverBridgeCloseFallback;
283
343
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgpTooltipTrigger<any>, never>;
284
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgpTooltipTrigger<any>, "[ngpTooltipTrigger]", ["ngpTooltipTrigger"], { "tooltip": { "alias": "ngpTooltipTrigger"; "required": false; "isSignal": true; }; "disabled": { "alias": "ngpTooltipTriggerDisabled"; "required": false; "isSignal": true; }; "placement": { "alias": "ngpTooltipTriggerPlacement"; "required": false; "isSignal": true; }; "offset": { "alias": "ngpTooltipTriggerOffset"; "required": false; "isSignal": true; }; "showDelay": { "alias": "ngpTooltipTriggerShowDelay"; "required": false; "isSignal": true; }; "hideDelay": { "alias": "ngpTooltipTriggerHideDelay"; "required": false; "isSignal": true; }; "flip": { "alias": "ngpTooltipTriggerFlip"; "required": false; "isSignal": true; }; "shift": { "alias": "ngpTooltipTriggerShift"; "required": false; "isSignal": true; }; "container": { "alias": "ngpTooltipTriggerContainer"; "required": false; "isSignal": true; }; "showOnOverflow": { "alias": "ngpTooltipTriggerShowOnOverflow"; "required": false; "isSignal": true; }; "context": { "alias": "ngpTooltipTriggerContext"; "required": false; "isSignal": true; }; "useTextContent": { "alias": "ngpTooltipTriggerUseTextContent"; "required": false; "isSignal": true; }; "trackPosition": { "alias": "ngpTooltipTriggerTrackPosition"; "required": false; "isSignal": true; }; "position": { "alias": "ngpTooltipTriggerPosition"; "required": false; "isSignal": true; }; "scrollBehavior": { "alias": "ngpTooltipTriggerScrollBehavior"; "required": false; "isSignal": true; }; "cooldown": { "alias": "ngpTooltipTriggerCooldown"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
344
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgpTooltipTrigger<any>, "[ngpTooltipTrigger]", ["ngpTooltipTrigger"], { "tooltip": { "alias": "ngpTooltipTrigger"; "required": false; "isSignal": true; }; "disabled": { "alias": "ngpTooltipTriggerDisabled"; "required": false; "isSignal": true; }; "placement": { "alias": "ngpTooltipTriggerPlacement"; "required": false; "isSignal": true; }; "offset": { "alias": "ngpTooltipTriggerOffset"; "required": false; "isSignal": true; }; "showDelay": { "alias": "ngpTooltipTriggerShowDelay"; "required": false; "isSignal": true; }; "hideDelay": { "alias": "ngpTooltipTriggerHideDelay"; "required": false; "isSignal": true; }; "flip": { "alias": "ngpTooltipTriggerFlip"; "required": false; "isSignal": true; }; "shift": { "alias": "ngpTooltipTriggerShift"; "required": false; "isSignal": true; }; "container": { "alias": "ngpTooltipTriggerContainer"; "required": false; "isSignal": true; }; "showOnOverflow": { "alias": "ngpTooltipTriggerShowOnOverflow"; "required": false; "isSignal": true; }; "context": { "alias": "ngpTooltipTriggerContext"; "required": false; "isSignal": true; }; "useTextContent": { "alias": "ngpTooltipTriggerUseTextContent"; "required": false; "isSignal": true; }; "trackPosition": { "alias": "ngpTooltipTriggerTrackPosition"; "required": false; "isSignal": true; }; "position": { "alias": "ngpTooltipTriggerPosition"; "required": false; "isSignal": true; }; "scrollBehavior": { "alias": "ngpTooltipTriggerScrollBehavior"; "required": false; "isSignal": true; }; "cooldown": { "alias": "ngpTooltipTriggerCooldown"; "required": false; "isSignal": true; }; "hoverableContent": { "alias": "ngpTooltipTriggerHoverableContent"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
285
345
  }
286
346
  type NgpTooltipPlacement = 'top' | 'right' | 'bottom' | 'left' | 'top-start' | 'top-end' | 'right-start' | 'right-end' | 'bottom-start' | 'bottom-end' | 'left-start' | 'left-end';
287
347