ng-primitives 0.121.0 → 0.123.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.
Files changed (37) hide show
  1. package/fesm2022/ng-primitives-combobox.mjs +23 -4
  2. package/fesm2022/ng-primitives-combobox.mjs.map +1 -1
  3. package/fesm2022/ng-primitives-context-menu.mjs +9 -3
  4. package/fesm2022/ng-primitives-context-menu.mjs.map +1 -1
  5. package/fesm2022/ng-primitives-date-picker.mjs +1 -1
  6. package/fesm2022/ng-primitives-date-picker.mjs.map +1 -1
  7. package/fesm2022/ng-primitives-internal.mjs +184 -3
  8. package/fesm2022/ng-primitives-internal.mjs.map +1 -1
  9. package/fesm2022/ng-primitives-menu.mjs +139 -21
  10. package/fesm2022/ng-primitives-menu.mjs.map +1 -1
  11. package/fesm2022/ng-primitives-navigation-menu.mjs +6 -2
  12. package/fesm2022/ng-primitives-navigation-menu.mjs.map +1 -1
  13. package/fesm2022/ng-primitives-popover.mjs +8 -3
  14. package/fesm2022/ng-primitives-popover.mjs.map +1 -1
  15. package/fesm2022/ng-primitives-portal.mjs +74 -12
  16. package/fesm2022/ng-primitives-portal.mjs.map +1 -1
  17. package/fesm2022/ng-primitives-select.mjs +17 -3
  18. package/fesm2022/ng-primitives-select.mjs.map +1 -1
  19. package/fesm2022/ng-primitives-toast.mjs +15 -12
  20. package/fesm2022/ng-primitives-toast.mjs.map +1 -1
  21. package/fesm2022/ng-primitives-tooltip.mjs +28 -123
  22. package/fesm2022/ng-primitives-tooltip.mjs.map +1 -1
  23. package/fesm2022/ng-primitives-utils.mjs +40 -23
  24. package/fesm2022/ng-primitives-utils.mjs.map +1 -1
  25. package/package.json +1 -1
  26. package/schematics/ng-generate/templates/toggle-group/toggle-group.__fileSuffix@dasherize__.ts.template +2 -2
  27. package/types/ng-primitives-combobox.d.ts +11 -1
  28. package/types/ng-primitives-context-menu.d.ts +16 -3
  29. package/types/ng-primitives-internal.d.ts +95 -3
  30. package/types/ng-primitives-menu.d.ts +58 -11
  31. package/types/ng-primitives-navigation-menu.d.ts +22 -9
  32. package/types/ng-primitives-popover.d.ts +9 -2
  33. package/types/ng-primitives-portal.d.ts +31 -1
  34. package/types/ng-primitives-select.d.ts +9 -2
  35. package/types/ng-primitives-toast.d.ts +4 -3
  36. package/types/ng-primitives-tooltip.d.ts +24 -17
  37. package/types/ng-primitives-utils.d.ts +12 -9
@@ -7,6 +7,8 @@ import { Placement } from '@floating-ui/dom';
7
7
  import { NumberInput, BooleanInput } from '@angular/cdk/coercion';
8
8
  import * as ng_primitives_state from 'ng-primitives/state';
9
9
  import { StateInjectionOptions } from 'ng-primitives/state';
10
+ import * as ng_primitives_internal from 'ng-primitives/internal';
11
+ import { HoverBridgePoint } from 'ng-primitives/internal';
10
12
 
11
13
  interface NgpTooltipConfig {
12
14
  /**
@@ -115,16 +117,11 @@ declare const provideTooltipArrowState: (opts?: {
115
117
  inherit?: boolean;
116
118
  }) => _angular_core.FactoryProvider;
117
119
 
118
- interface TooltipHoverBridgePoint {
119
- x: number;
120
- y: number;
121
- }
122
-
123
120
  interface NgpTooltipTriggerState<T> {
124
121
  /** Access the tooltip template ref. */
125
122
  readonly tooltip: WritableSignal<NgpOverlayContent<T> | string | null>;
126
123
  /**
127
- * Define if the trigger should be disabled. This will prevent the tooltip from being shown or hidden from interactions.
124
+ * Whether the tooltip is disabled. This allows the tooltip to be enabled or disabled dynamically.
128
125
  * @default false
129
126
  */
130
127
  readonly disabled: Signal<boolean>;
@@ -165,7 +162,7 @@ interface NgpTooltipTriggerState<T> {
165
162
  * Define the container in which the tooltip should be attached.
166
163
  * @default document.body
167
164
  */
168
- readonly container: Signal<HTMLElement | string | null>;
165
+ readonly container: WritableSignal<HTMLElement | string | null>;
169
166
  /**
170
167
  * Define whether the tooltip should only show when the trigger element overflows.
171
168
  * @default false
@@ -240,7 +237,7 @@ interface NgpTooltipTriggerState<T> {
240
237
  /**
241
238
  * Current pointer grace polygon used while crossing trigger -> tooltip.
242
239
  */
243
- readonly hoverBridgePolygon: Signal<TooltipHoverBridgePoint[] | null>;
240
+ readonly hoverBridgePolygon: Signal<HoverBridgePoint[] | null>;
244
241
  /**
245
242
  * Show the tooltip programmatically (skips cooldown so multiple tooltips can coexist).
246
243
  */
@@ -253,6 +250,13 @@ interface NgpTooltipTriggerState<T> {
253
250
  * Set the tooltip id.
254
251
  */
255
252
  setTooltipId: (id: string) => void;
253
+ /**
254
+ * Set the container in which the tooltip should be attached. Takes effect the
255
+ * next time the tooltip is shown; it does not move a tooltip that is already
256
+ * visible.
257
+ * @param container - The new container
258
+ */
259
+ setContainer: (container: HTMLElement | string | null) => void;
256
260
  /**
257
261
  * Called by tooltip content when pointer enters the tooltip.
258
262
  * @internal
@@ -269,7 +273,7 @@ interface NgpTooltipTriggerProps<T> {
269
273
  /** Access the tooltip template ref. */
270
274
  readonly tooltip?: Signal<NgpOverlayContent<T> | string | null>;
271
275
  /**
272
- * Define if the trigger should be disabled. This will prevent the tooltip from being shown or hidden from interactions.
276
+ * Whether the tooltip is disabled. This allows the tooltip to be enabled or disabled dynamically.
273
277
  * @default false
274
278
  */
275
279
  readonly disabled?: Signal<boolean>;
@@ -370,7 +374,7 @@ declare const NgpTooltipTriggerStateToken: _angular_core.InjectionToken<Writable
370
374
  hideDelay: Signal<number>;
371
375
  flip: Signal<NgpFlip>;
372
376
  shift: Signal<NgpShift>;
373
- container: Signal<string | HTMLElement | null>;
377
+ container: WritableSignal<string | HTMLElement | null>;
374
378
  showOnOverflow: Signal<boolean>;
375
379
  anchor: Signal<HTMLElement | null>;
376
380
  context: Signal<unknown>;
@@ -385,15 +389,16 @@ declare const NgpTooltipTriggerStateToken: _angular_core.InjectionToken<Writable
385
389
  open: Signal<boolean>;
386
390
  hasOverflow: Signal<boolean>;
387
391
  contentHovered: WritableSignal<boolean>;
388
- hoverBridgePolygon: WritableSignal<TooltipHoverBridgePoint[] | null>;
392
+ hoverBridgePolygon: Signal<HoverBridgePoint[] | null>;
389
393
  show: () => void;
390
394
  hide: () => void;
391
395
  setTooltipId: (id: string) => void;
396
+ setContainer: (newContainer: HTMLElement | string | null) => void;
392
397
  onTooltipHoverStart: () => void;
393
398
  onTooltipHoverEnd: () => void;
394
399
  destroy: () => void;
395
400
  }>>;
396
- declare const ngpTooltipTrigger: <T>({ tooltip: _tooltip, disabled, placement, offset, showDelay, hideDelay, flip, shift, container, showOnOverflow, anchor, context, useTextContent, trackPosition, position, scrollBehavior, cooldown, hoverableContent, }: NgpTooltipTriggerProps<T>) => {
401
+ declare const ngpTooltipTrigger: <T>({ tooltip: _tooltip, disabled, placement, offset, showDelay, hideDelay, flip, shift, container: _container, showOnOverflow, anchor, context, useTextContent, trackPosition, position, scrollBehavior, cooldown, hoverableContent, }: NgpTooltipTriggerProps<T>) => {
397
402
  tooltip: WritableSignal<string | NgpOverlayContent<T> | null>;
398
403
  disabled: Signal<boolean>;
399
404
  placement: Signal<NgpTooltipPlacement>;
@@ -402,7 +407,7 @@ declare const ngpTooltipTrigger: <T>({ tooltip: _tooltip, disabled, placement, o
402
407
  hideDelay: Signal<number>;
403
408
  flip: Signal<NgpFlip>;
404
409
  shift: Signal<NgpShift>;
405
- container: Signal<string | HTMLElement | null>;
410
+ container: WritableSignal<string | HTMLElement | null>;
406
411
  showOnOverflow: Signal<boolean>;
407
412
  anchor: Signal<HTMLElement | null>;
408
413
  context: Signal<T | undefined>;
@@ -417,10 +422,11 @@ declare const ngpTooltipTrigger: <T>({ tooltip: _tooltip, disabled, placement, o
417
422
  open: Signal<boolean>;
418
423
  hasOverflow: Signal<boolean>;
419
424
  contentHovered: WritableSignal<boolean>;
420
- hoverBridgePolygon: WritableSignal<TooltipHoverBridgePoint[] | null>;
425
+ hoverBridgePolygon: Signal<HoverBridgePoint[] | null>;
421
426
  show: () => void;
422
427
  hide: () => void;
423
428
  setTooltipId: (id: string) => void;
429
+ setContainer: (newContainer: HTMLElement | string | null) => void;
424
430
  onTooltipHoverStart: () => void;
425
431
  onTooltipHoverEnd: () => void;
426
432
  destroy: () => void;
@@ -445,7 +451,7 @@ declare class NgpTooltipTrigger<T = null> implements OnDestroy {
445
451
  */
446
452
  readonly tooltip: _angular_core.InputSignalWithTransform<string | NgpOverlayContent<T> | null, TooltipInput<T>>;
447
453
  /**
448
- * Define if the trigger should be disabled. This will prevent the tooltip from being shown or hidden from interactions.
454
+ * Whether the tooltip is disabled. This allows the tooltip to be enabled or disabled dynamically.
449
455
  * @default false
450
456
  */
451
457
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
@@ -545,7 +551,7 @@ declare class NgpTooltipTrigger<T = null> implements OnDestroy {
545
551
  hideDelay: _angular_core.Signal<number>;
546
552
  flip: _angular_core.Signal<NgpFlip>;
547
553
  shift: _angular_core.Signal<NgpShift>;
548
- container: _angular_core.Signal<string | HTMLElement | null>;
554
+ container: _angular_core.WritableSignal<string | HTMLElement | null>;
549
555
  showOnOverflow: _angular_core.Signal<boolean>;
550
556
  anchor: _angular_core.Signal<HTMLElement | null>;
551
557
  context: _angular_core.Signal<T | undefined>;
@@ -560,10 +566,11 @@ declare class NgpTooltipTrigger<T = null> implements OnDestroy {
560
566
  open: _angular_core.Signal<boolean>;
561
567
  hasOverflow: _angular_core.Signal<boolean>;
562
568
  contentHovered: _angular_core.WritableSignal<boolean>;
563
- hoverBridgePolygon: _angular_core.WritableSignal<TooltipHoverBridgePoint[] | null>;
569
+ hoverBridgePolygon: _angular_core.Signal<ng_primitives_internal.HoverBridgePoint[] | null>;
564
570
  show: () => void;
565
571
  hide: () => void;
566
572
  setTooltipId: (id: string) => void;
573
+ setContainer: (newContainer: HTMLElement | string | null) => void;
567
574
  onTooltipHoverStart: () => void;
568
575
  onTooltipHoverEnd: () => void;
569
576
  destroy: () => void;
@@ -33,6 +33,11 @@ declare function booleanAttributeBinding(element: HTMLElement, attribute: string
33
33
  * Disposable functions are a way to manage timers, intervals, and event listeners
34
34
  * that should be cleared when a component is destroyed.
35
35
  *
36
+ * Each disposable releases its DestroyRef registration as soon as the resource
37
+ * is gone (the timer fires or the returned cleanup runs), so repeated calls -
38
+ * e.g. rescheduling a timeout on every pointermove - don't accumulate destroy
39
+ * callbacks for the lifetime of the host.
40
+ *
36
41
  * This is heavily inspired by Headless UI disposables:
37
42
  * https://github.com/tailwindlabs/headlessui/blob/main/packages/%40headlessui-react/src/utils/disposables.ts
38
43
  */
@@ -45,20 +50,18 @@ declare function injectDisposables(): {
45
50
  */
46
51
  setTimeout: (callback: () => void, delay: number) => () => void;
47
52
  /**
48
- * Set an interval that will be cleared when the component is destroyed.
49
- * @param callback The callback to execute
50
- * @param delay The delay before the callback is executed
51
- * @param target
52
- * @param type
53
- * @param listener
54
- * @param options
55
- * @returns A function to clear the interval
53
+ * Add an event listener that will be removed when the component is destroyed.
54
+ * @param target The event target
55
+ * @param type The event type
56
+ * @param listener The event listener
57
+ * @param options The event listener options
58
+ * @returns A function to remove the event listener
56
59
  */
57
60
  addEventListener: <K extends keyof HTMLElementEventMap>(target: EventTarget, type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions) => () => void;
58
61
  /**
59
62
  * Set an interval that will be cleared when the component is destroyed.
60
63
  * @param callback The callback to execute
61
- * @param delay The delay before the callback is executed
64
+ * @param delay The delay between executions
62
65
  * @returns A function to clear the interval
63
66
  */
64
67
  setInterval: (callback: () => void, delay: number) => () => void;