ng-primitives 0.120.4 → 0.121.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 (147) hide show
  1. package/example-theme/index.css +9 -0
  2. package/fesm2022/ng-primitives-a11y.mjs +5 -5
  3. package/fesm2022/ng-primitives-a11y.mjs.map +1 -1
  4. package/fesm2022/ng-primitives-accordion.mjs +34 -51
  5. package/fesm2022/ng-primitives-accordion.mjs.map +1 -1
  6. package/fesm2022/ng-primitives-ai.mjs +39 -52
  7. package/fesm2022/ng-primitives-ai.mjs.map +1 -1
  8. package/fesm2022/ng-primitives-autofill.mjs +4 -4
  9. package/fesm2022/ng-primitives-autofill.mjs.map +1 -1
  10. package/fesm2022/ng-primitives-avatar.mjs +14 -17
  11. package/fesm2022/ng-primitives-avatar.mjs.map +1 -1
  12. package/fesm2022/ng-primitives-breadcrumbs.mjs +21 -21
  13. package/fesm2022/ng-primitives-breadcrumbs.mjs.map +1 -1
  14. package/fesm2022/ng-primitives-button.mjs +7 -9
  15. package/fesm2022/ng-primitives-button.mjs.map +1 -1
  16. package/fesm2022/ng-primitives-checkbox.mjs +15 -30
  17. package/fesm2022/ng-primitives-checkbox.mjs.map +1 -1
  18. package/fesm2022/ng-primitives-combobox.mjs +60 -92
  19. package/fesm2022/ng-primitives-combobox.mjs.map +1 -1
  20. package/fesm2022/ng-primitives-common.mjs +4 -4
  21. package/fesm2022/ng-primitives-common.mjs.map +1 -1
  22. package/fesm2022/ng-primitives-context-menu.mjs +68 -121
  23. package/fesm2022/ng-primitives-context-menu.mjs.map +1 -1
  24. package/fesm2022/ng-primitives-date-picker.mjs +91 -115
  25. package/fesm2022/ng-primitives-date-picker.mjs.map +1 -1
  26. package/fesm2022/ng-primitives-dialog.mjs +35 -51
  27. package/fesm2022/ng-primitives-dialog.mjs.map +1 -1
  28. package/fesm2022/ng-primitives-file-upload.mjs +26 -53
  29. package/fesm2022/ng-primitives-file-upload.mjs.map +1 -1
  30. package/fesm2022/ng-primitives-focus-trap.mjs +5 -8
  31. package/fesm2022/ng-primitives-focus-trap.mjs.map +1 -1
  32. package/fesm2022/ng-primitives-form-field.mjs +39 -44
  33. package/fesm2022/ng-primitives-form-field.mjs.map +1 -1
  34. package/fesm2022/ng-primitives-input-otp.mjs +30 -43
  35. package/fesm2022/ng-primitives-input-otp.mjs.map +1 -1
  36. package/fesm2022/ng-primitives-input.mjs +6 -8
  37. package/fesm2022/ng-primitives-input.mjs.map +1 -1
  38. package/fesm2022/ng-primitives-interactions.mjs +31 -48
  39. package/fesm2022/ng-primitives-interactions.mjs.map +1 -1
  40. package/fesm2022/ng-primitives-internal.mjs +39 -35
  41. package/fesm2022/ng-primitives-internal.mjs.map +1 -1
  42. package/fesm2022/ng-primitives-listbox.mjs +34 -48
  43. package/fesm2022/ng-primitives-listbox.mjs.map +1 -1
  44. package/fesm2022/ng-primitives-menu.mjs +85 -151
  45. package/fesm2022/ng-primitives-menu.mjs.map +1 -1
  46. package/fesm2022/ng-primitives-meter.mjs +25 -36
  47. package/fesm2022/ng-primitives-meter.mjs.map +1 -1
  48. package/fesm2022/ng-primitives-navigation-menu.mjs +60 -108
  49. package/fesm2022/ng-primitives-navigation-menu.mjs.map +1 -1
  50. package/fesm2022/ng-primitives-number-field.mjs +35 -59
  51. package/fesm2022/ng-primitives-number-field.mjs.map +1 -1
  52. package/fesm2022/ng-primitives-pagination.mjs +270 -297
  53. package/fesm2022/ng-primitives-pagination.mjs.map +1 -1
  54. package/fesm2022/ng-primitives-popover.mjs +209 -223
  55. package/fesm2022/ng-primitives-popover.mjs.map +1 -1
  56. package/fesm2022/ng-primitives-portal.mjs +88 -59
  57. package/fesm2022/ng-primitives-portal.mjs.map +1 -1
  58. package/fesm2022/ng-primitives-progress.mjs +30 -41
  59. package/fesm2022/ng-primitives-progress.mjs.map +1 -1
  60. package/fesm2022/ng-primitives-radio.mjs +20 -30
  61. package/fesm2022/ng-primitives-radio.mjs.map +1 -1
  62. package/fesm2022/ng-primitives-resize.mjs +3 -3
  63. package/fesm2022/ng-primitives-resize.mjs.map +1 -1
  64. package/fesm2022/ng-primitives-roving-focus.mjs +20 -34
  65. package/fesm2022/ng-primitives-roving-focus.mjs.map +1 -1
  66. package/fesm2022/ng-primitives-search.mjs +9 -9
  67. package/fesm2022/ng-primitives-search.mjs.map +1 -1
  68. package/fesm2022/ng-primitives-select.mjs +720 -620
  69. package/fesm2022/ng-primitives-select.mjs.map +1 -1
  70. package/fesm2022/ng-primitives-separator.mjs +4 -6
  71. package/fesm2022/ng-primitives-separator.mjs.map +1 -1
  72. package/fesm2022/ng-primitives-slider.mjs +63 -100
  73. package/fesm2022/ng-primitives-slider.mjs.map +1 -1
  74. package/fesm2022/ng-primitives-state.mjs +3 -3
  75. package/fesm2022/ng-primitives-state.mjs.map +1 -1
  76. package/fesm2022/ng-primitives-switch.mjs +15 -21
  77. package/fesm2022/ng-primitives-switch.mjs.map +1 -1
  78. package/fesm2022/ng-primitives-tabs.mjs +31 -41
  79. package/fesm2022/ng-primitives-tabs.mjs.map +1 -1
  80. package/fesm2022/ng-primitives-textarea.mjs +5 -7
  81. package/fesm2022/ng-primitives-textarea.mjs.map +1 -1
  82. package/fesm2022/ng-primitives-toast.mjs +30 -23
  83. package/fesm2022/ng-primitives-toast.mjs.map +1 -1
  84. package/fesm2022/ng-primitives-toggle-group.mjs +20 -36
  85. package/fesm2022/ng-primitives-toggle-group.mjs.map +1 -1
  86. package/fesm2022/ng-primitives-toggle.mjs +10 -19
  87. package/fesm2022/ng-primitives-toggle.mjs.map +1 -1
  88. package/fesm2022/ng-primitives-toolbar.mjs +4 -6
  89. package/fesm2022/ng-primitives-toolbar.mjs.map +1 -1
  90. package/fesm2022/ng-primitives-tooltip.mjs +401 -402
  91. package/fesm2022/ng-primitives-tooltip.mjs.map +1 -1
  92. package/fesm2022/ng-primitives-utils.mjs +5 -4
  93. package/fesm2022/ng-primitives-utils.mjs.map +1 -1
  94. package/package.json +56 -55
  95. package/schematics/ng-generate/templates/select/select.__fileSuffix@dasherize__.ts.template +48 -48
  96. package/{a11y/index.d.ts → types/ng-primitives-a11y.d.ts} +18 -24
  97. package/{accordion/index.d.ts → types/ng-primitives-accordion.d.ts} +85 -98
  98. package/{autofill/index.d.ts → types/ng-primitives-autofill.d.ts} +3 -10
  99. package/{avatar/index.d.ts → types/ng-primitives-avatar.d.ts} +7 -30
  100. package/{breadcrumbs/index.d.ts → types/ng-primitives-breadcrumbs.d.ts} +15 -70
  101. package/{button/index.d.ts → types/ng-primitives-button.d.ts} +23 -29
  102. package/{checkbox/index.d.ts → types/ng-primitives-checkbox.d.ts} +68 -74
  103. package/{combobox/index.d.ts → types/ng-primitives-combobox.d.ts} +35 -35
  104. package/{context-menu/index.d.ts → types/ng-primitives-context-menu.d.ts} +2 -1
  105. package/{date-picker/index.d.ts → types/ng-primitives-date-picker.d.ts} +2 -2
  106. package/{dialog/index.d.ts → types/ng-primitives-dialog.d.ts} +7 -2
  107. package/{file-upload/index.d.ts → types/ng-primitives-file-upload.d.ts} +5 -20
  108. package/{focus-trap/index.d.ts → types/ng-primitives-focus-trap.d.ts} +3 -10
  109. package/{form-field/index.d.ts → types/ng-primitives-form-field.d.ts} +9 -40
  110. package/{input/index.d.ts → types/ng-primitives-input.d.ts} +3 -10
  111. package/{menu/index.d.ts → types/ng-primitives-menu.d.ts} +17 -63
  112. package/{navigation-menu/index.d.ts → types/ng-primitives-navigation-menu.d.ts} +15 -70
  113. package/{number-field/index.d.ts → types/ng-primitives-number-field.d.ts} +80 -110
  114. package/types/ng-primitives-pagination.d.ts +502 -0
  115. package/{popover/index.d.ts → types/ng-primitives-popover.d.ts} +244 -57
  116. package/{portal/index.d.ts → types/ng-primitives-portal.d.ts} +22 -13
  117. package/{progress/index.d.ts → types/ng-primitives-progress.d.ts} +3 -10
  118. package/{roving-focus/index.d.ts → types/ng-primitives-roving-focus.d.ts} +65 -79
  119. package/types/ng-primitives-select.d.ts +687 -0
  120. package/{separator/index.d.ts → types/ng-primitives-separator.d.ts} +3 -10
  121. package/{slider/index.d.ts → types/ng-primitives-slider.d.ts} +76 -138
  122. package/{state/index.d.ts → types/ng-primitives-state.d.ts} +26 -21
  123. package/{switch/index.d.ts → types/ng-primitives-switch.d.ts} +50 -64
  124. package/{tabs/index.d.ts → types/ng-primitives-tabs.d.ts} +9 -40
  125. package/{textarea/index.d.ts → types/ng-primitives-textarea.d.ts} +3 -10
  126. package/{toast/index.d.ts → types/ng-primitives-toast.d.ts} +13 -1
  127. package/{toggle-group/index.d.ts → types/ng-primitives-toggle-group.d.ts} +75 -89
  128. package/{toggle/index.d.ts → types/ng-primitives-toggle.d.ts} +50 -56
  129. package/{toolbar/index.d.ts → types/ng-primitives-toolbar.d.ts} +3 -10
  130. package/types/ng-primitives-tooltip.d.ts +691 -0
  131. package/pagination/index.d.ts +0 -211
  132. package/select/index.d.ts +0 -396
  133. package/tooltip/index.d.ts +0 -384
  134. /package/{ai/index.d.ts → types/ng-primitives-ai.d.ts} +0 -0
  135. /package/{common/index.d.ts → types/ng-primitives-common.d.ts} +0 -0
  136. /package/{date-time-luxon/index.d.ts → types/ng-primitives-date-time-luxon.d.ts} +0 -0
  137. /package/{date-time/index.d.ts → types/ng-primitives-date-time.d.ts} +0 -0
  138. /package/{input-otp/index.d.ts → types/ng-primitives-input-otp.d.ts} +0 -0
  139. /package/{interactions/index.d.ts → types/ng-primitives-interactions.d.ts} +0 -0
  140. /package/{internal/index.d.ts → types/ng-primitives-internal.d.ts} +0 -0
  141. /package/{listbox/index.d.ts → types/ng-primitives-listbox.d.ts} +0 -0
  142. /package/{meter/index.d.ts → types/ng-primitives-meter.d.ts} +0 -0
  143. /package/{radio/index.d.ts → types/ng-primitives-radio.d.ts} +0 -0
  144. /package/{resize/index.d.ts → types/ng-primitives-resize.d.ts} +0 -0
  145. /package/{search/index.d.ts → types/ng-primitives-search.d.ts} +0 -0
  146. /package/{utils/index.d.ts → types/ng-primitives-utils.d.ts} +0 -0
  147. /package/{index.d.ts → types/ng-primitives.d.ts} +0 -0
@@ -1,10 +1,10 @@
1
- import { ngpOverlayArrow, injectOverlay, injectOverlayContext, coerceOffset, coerceFlip, coerceShift, createOverlay } from 'ng-primitives/portal';
1
+ import { ngpOverlayArrow, injectOverlay, provideControlContainerIsolation, injectOverlayContext, createOverlay, coerceOffset, coerceFlip, coerceShift } from 'ng-primitives/portal';
2
2
  export { injectOverlayContext as injectTooltipContext } from 'ng-primitives/portal';
3
3
  import * as i0 from '@angular/core';
4
- import { InjectionToken, inject, input, numberAttribute, Directive, Component, ElementRef, Injector, ViewContainerRef, booleanAttribute, signal, computed } from '@angular/core';
5
- import { createPrimitive, createStateToken, createStateProvider, createStateInjector, createState } from 'ng-primitives/state';
6
- import { explicitEffect, setupOverflowListener } from 'ng-primitives/internal';
4
+ import { InjectionToken, inject, input, numberAttribute, Directive, signal, Component, Injector, ViewContainerRef, ElementRef, computed, booleanAttribute } from '@angular/core';
5
+ import { createPrimitive, controlled, attrBinding, dataBinding, styleBinding, listener } from 'ng-primitives/state';
7
6
  import { injectDisposables, isString } from 'ng-primitives/utils';
7
+ import { injectElementRef, explicitEffect, setupOverflowListener } from 'ng-primitives/internal';
8
8
  import { ngpHover } from 'ng-primitives/interactions';
9
9
 
10
10
  const defaultTooltipConfig = {
@@ -54,11 +54,8 @@ class NgpTooltipArrow {
54
54
  * Padding between the arrow and the edges of the tooltip.
55
55
  * This prevents the arrow from overflowing the rounded corners.
56
56
  */
57
- this.padding = input(undefined, ...(ngDevMode ? [{ debugName: "padding", alias: 'ngpTooltipArrowPadding',
58
- transform: numberAttribute }] : [{
59
- alias: 'ngpTooltipArrowPadding',
60
- transform: numberAttribute,
61
- }]));
57
+ this.padding = input(undefined, { ...(ngDevMode ? { debugName: "padding" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipArrowPadding',
58
+ transform: numberAttribute });
62
59
  this.state = ngpTooltipArrow({ padding: this.padding });
63
60
  }
64
61
  /**
@@ -68,10 +65,10 @@ class NgpTooltipArrow {
68
65
  setPadding(value) {
69
66
  this.state.setPadding(value);
70
67
  }
71
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpTooltipArrow, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
72
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpTooltipArrow, isStandalone: true, selector: "[ngpTooltipArrow]", inputs: { padding: { classPropertyName: "padding", publicName: "ngpTooltipArrowPadding", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTooltipArrowState()], exportAs: ["ngpTooltipArrow"], ngImport: i0 }); }
68
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpTooltipArrow, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
69
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: NgpTooltipArrow, isStandalone: true, selector: "[ngpTooltipArrow]", inputs: { padding: { classPropertyName: "padding", publicName: "ngpTooltipArrowPadding", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTooltipArrowState()], exportAs: ["ngpTooltipArrow"], ngImport: i0 }); }
73
70
  }
74
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpTooltipArrow, decorators: [{
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpTooltipArrow, decorators: [{
75
72
  type: Directive,
76
73
  args: [{
77
74
  selector: '[ngpTooltipArrow]',
@@ -80,69 +77,72 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
80
77
  }]
81
78
  }], propDecorators: { padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipArrowPadding", required: false }] }] } });
82
79
 
83
- /**
84
- * The state token for the TooltipTrigger primitive.
85
- */
86
- const NgpTooltipTriggerStateToken = createStateToken('TooltipTrigger');
87
- /**
88
- * Provides the TooltipTrigger state.
89
- */
90
- const provideTooltipTriggerState = createStateProvider(NgpTooltipTriggerStateToken);
91
- /**
92
- * Injects the TooltipTrigger state.
93
- */
94
- const injectTooltipTriggerState = createStateInjector(NgpTooltipTriggerStateToken);
95
- /**
96
- * The TooltipTrigger state registration function.
97
- */
98
- const tooltipTriggerState = createState(NgpTooltipTriggerStateToken);
80
+ const [NgpTooltipStateToken, ngpTooltip, injectTooltipState, provideTooltipState] = createPrimitive('NgpTooltip', ({ id: _id = signal('') }) => {
81
+ const elementRef = injectElementRef();
82
+ const tooltipTriggerState = injectTooltipTriggerState();
83
+ const overlay = injectOverlay();
84
+ const id = controlled(_id);
85
+ // Seed the id with the overlay's generated unique id so the tooltip has a
86
+ // valid id (and the trigger a valid aria-describedby) when none is provided.
87
+ // `controlled` returns a linkedSignal, so this is only a transient default:
88
+ // if a consumer binds `id`, that source change supersedes this seed.
89
+ id.set(overlay.id());
90
+ // Setup interactions
91
+ ngpHover({
92
+ onHoverStart: () => tooltipTriggerState().onTooltipHoverStart(),
93
+ onHoverEnd: () => tooltipTriggerState().onTooltipHoverEnd(),
94
+ });
95
+ // Host binding
96
+ attrBinding(elementRef, 'role', 'tooltip');
97
+ attrBinding(elementRef, 'id', () => id());
98
+ dataBinding(elementRef, 'data-overlay', '');
99
+ dataBinding(elementRef, 'data-placement', () => overlay.finalPlacement()?.toString() ?? null);
100
+ styleBinding(elementRef, 'left.px', () => overlay.position().x ?? null);
101
+ styleBinding(elementRef, 'top.px', () => overlay.position().y ?? null);
102
+ styleBinding(elementRef, '--ngp-tooltip-trigger-width.px', () => overlay.triggerWidth());
103
+ styleBinding(elementRef, '--ngp-tooltip-transform-origin', () => overlay.transformOrigin());
104
+ styleBinding(elementRef, '--ngp-tooltip-available-width.px', () => overlay.availableWidth());
105
+ styleBinding(elementRef, '--ngp-tooltip-available-height.px', () => overlay.availableHeight());
106
+ // Effects
107
+ explicitEffect([id], ([id]) => overlay.id.set(id));
108
+ return {
109
+ elementRef,
110
+ id,
111
+ };
112
+ });
99
113
 
100
114
  /**
101
115
  * Apply the `ngpTooltip` directive to an element that represents the tooltip. This typically would be a `div` inside an `ng-template`.
102
116
  */
103
117
  class NgpTooltip {
104
118
  constructor() {
105
- /**
106
- * Access the overlay.
107
- */
108
- this.overlay = injectOverlay();
109
- /**
110
- * Access the tooltip trigger state.
111
- */
112
- this.tooltipTrigger = injectTooltipTriggerState();
113
119
  /**
114
120
  * The unique id of the tooltip.
115
121
  */
116
- this.id = input(this.overlay.id(), ...(ngDevMode ? [{ debugName: "id" }] : []));
117
- explicitEffect([this.id], ([id]) => this.overlay.id.set(id));
118
- // if the mouse moves over the tooltip, we want to keep it open
119
- ngpHover({
120
- onHoverStart: () => this.tooltipTrigger().onTooltipHoverStart(),
121
- onHoverEnd: () => this.tooltipTrigger().onTooltipHoverEnd(),
122
+ this.id = input('', ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
123
+ this.state = ngpTooltip({
124
+ id: this.id,
122
125
  });
123
126
  }
124
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpTooltip, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
125
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpTooltip, isStandalone: true, selector: "[ngpTooltip]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "tooltip", "data-overlay": "" }, properties: { "id": "id()", "style.left.px": "overlay.position().x", "style.top.px": "overlay.position().y", "style.--ngp-tooltip-trigger-width.px": "overlay.triggerWidth()", "style.--ngp-tooltip-transform-origin": "overlay.transformOrigin()", "style.--ngp-tooltip-available-width.px": "overlay.availableWidth()", "style.--ngp-tooltip-available-height.px": "overlay.availableHeight()", "attr.data-placement": "overlay.finalPlacement()" } }, exportAs: ["ngpTooltip"], ngImport: i0 }); }
127
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpTooltip, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
128
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: NgpTooltip, isStandalone: true, selector: "[ngpTooltip]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideControlContainerIsolation()], exportAs: ["ngpTooltip"], ngImport: i0 }); }
126
129
  }
127
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpTooltip, decorators: [{
130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpTooltip, decorators: [{
128
131
  type: Directive,
129
132
  args: [{
130
133
  selector: '[ngpTooltip]',
131
134
  exportAs: 'ngpTooltip',
132
- host: {
133
- role: 'tooltip',
134
- '[id]': 'id()',
135
- '[style.left.px]': 'overlay.position().x',
136
- '[style.top.px]': 'overlay.position().y',
137
- '[style.--ngp-tooltip-trigger-width.px]': 'overlay.triggerWidth()',
138
- '[style.--ngp-tooltip-transform-origin]': 'overlay.transformOrigin()',
139
- '[style.--ngp-tooltip-available-width.px]': 'overlay.availableWidth()',
140
- '[style.--ngp-tooltip-available-height.px]': 'overlay.availableHeight()',
141
- '[attr.data-placement]': 'overlay.finalPlacement()',
142
- 'data-overlay': '',
143
- },
135
+ providers: [provideControlContainerIsolation()],
144
136
  }]
145
- }], ctorParameters: () => [], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }] } });
137
+ }], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }] } });
138
+
139
+ const [NgpTooltipTextContentStateToken, ngpTooltipTextContent, injectTooltipTextContentState, provideTooltipTextContentState,] = createPrimitive('NgpTooltipTextContent', ({}) => {
140
+ const elementRef = injectElementRef();
141
+ const content = injectOverlayContext();
142
+ // Host bindings
143
+ attrBinding(elementRef, 'ngpTooltip', '');
144
+ return { elementRef, content };
145
+ });
146
146
 
147
147
  /**
148
148
  * Internal component for wrapping string content in tooltip portals
@@ -150,24 +150,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
150
150
  */
151
151
  class NgpTooltipTextContentComponent {
152
152
  constructor() {
153
- /**
154
- * The string content to display
155
- */
156
- this.content = injectOverlayContext();
153
+ this.state = ngpTooltipTextContent({});
157
154
  }
158
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpTooltipTextContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
159
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.9", type: NgpTooltipTextContentComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "ngpTooltip": "" } }, hostDirectives: [{ directive: NgpTooltip }], ngImport: i0, template: '{{ content() }}', isInline: true }); }
155
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpTooltipTextContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
156
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.14", type: NgpTooltipTextContentComponent, isStandalone: true, selector: "ng-component", hostDirectives: [{ directive: NgpTooltip }], ngImport: i0, template: '{{ state.content() }}', isInline: true }); }
160
157
  }
161
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpTooltipTextContentComponent, decorators: [{
158
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpTooltipTextContentComponent, decorators: [{
162
159
  type: Component,
163
160
  args: [{
164
- template: '{{ content() }}',
161
+ template: '{{ state.content() }}',
165
162
  hostDirectives: [NgpTooltip],
166
- host: {
167
- // Used only for styling, since the host directive isn’t added to the DOM.
168
- // This acts as the styling entry point.
169
- ngpTooltip: '',
170
- },
171
163
  }]
172
164
  }] });
173
165
 
@@ -222,465 +214,472 @@ function isPointInHoverBridgePolygon(point, polygon) {
222
214
  return inside;
223
215
  }
224
216
 
217
+ const [NgpTooltipTriggerStateToken, ngpTooltipTrigger, _injectTooltipTriggerState, provideTooltipTriggerState,] = createPrimitive('NgpTooltipTrigger', ({ tooltip: _tooltip = signal(null), disabled = signal(false), placement = signal('top'), offset = signal(0), showDelay = signal(500), hideDelay = signal(0), flip = signal(true), shift = signal(undefined), container = signal('body'), showOnOverflow = signal(false), anchor = signal(null), context = signal(undefined), useTextContent = signal(true), trackPosition = signal(false), position = signal(null), scrollBehavior = signal('reposition'), cooldown = signal(300), hoverableContent = signal(false), }) => {
218
+ const HOVER_BRIDGE_TIMEOUT_MS = 150;
219
+ const elementRef = injectElementRef();
220
+ const injector = inject(Injector);
221
+ const viewContainerRef = inject(ViewContainerRef);
222
+ const trigger = inject((ElementRef));
223
+ const tooltipTriggerState = injectTooltipTriggerState();
224
+ const disposables = injectDisposables();
225
+ const tooltip = controlled(_tooltip);
226
+ const tooltipId = signal(undefined, ...(ngDevMode ? [{ debugName: "tooltipId" }] : /* istanbul ignore next */ []));
227
+ const triggerHovered = signal(false, ...(ngDevMode ? [{ debugName: "triggerHovered" }] : /* istanbul ignore next */ []));
228
+ const contentHovered = signal(false, ...(ngDevMode ? [{ debugName: "contentHovered" }] : /* istanbul ignore next */ []));
229
+ const hoverBridgePolygon = signal(null, ...(ngDevMode ? [{ debugName: "hoverBridgePolygon" }] : /* istanbul ignore next */ []));
230
+ const overlay = signal(null, ...(ngDevMode ? [{ debugName: "overlay" }] : /* istanbul ignore next */ []));
231
+ const hasOverflow = setupOverflowListener(trigger.nativeElement, {
232
+ disabled: computed(() => !showOnOverflow()),
233
+ });
234
+ let removePointerMoveListener = undefined;
235
+ let clearHoverBridgeTimeout = undefined;
236
+ const open = computed(() => overlay()?.isOpen() ?? false, ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
237
+ // Host binding
238
+ attrBinding(elementRef, 'aria-describedby', () => overlay()?.ariaDescribedBy());
239
+ dataBinding(elementRef, 'data-open', () => (open() ? '' : null));
240
+ dataBinding(elementRef, 'data-disabled', () => (disabled() ? '' : null));
241
+ // Listeners
242
+ listener(elementRef, 'mouseenter', showFromInteraction);
243
+ listener(elementRef, 'focus', showFromInteraction);
244
+ listener(elementRef, 'mouseleave', hideFromInteraction);
245
+ listener(elementRef, 'blur', () => hideFromInteraction());
246
+ function destroy() {
247
+ clearHoverBridge();
248
+ overlay()?.destroy();
249
+ }
250
+ function show() {
251
+ performShow(true);
252
+ }
253
+ function hide() {
254
+ clearHoverBridge();
255
+ overlay()?.hide();
256
+ }
257
+ /**
258
+ * Show the tooltip from an interaction (respects disabled state, uses cooldown).
259
+ * @internal
260
+ */
261
+ function showFromInteraction() {
262
+ if (tooltipTriggerState().disabled()) {
263
+ return;
264
+ }
265
+ triggerHovered.set(true);
266
+ clearHoverBridge();
267
+ performShow(false);
268
+ }
269
+ /**
270
+ * Shared show logic.
271
+ * @param skipCooldown When true, skip cooldown registration so multiple tooltips can coexist.
272
+ */
273
+ function performShow(skipCooldown) {
274
+ // If already open, cancel any pending close
275
+ if (open()) {
276
+ overlay()?.cancelPendingClose();
277
+ return;
278
+ }
279
+ // if we should only show when there is overflow, check if the trigger has overflow
280
+ if (tooltipTriggerState().showOnOverflow() && !hasOverflow()) {
281
+ return;
282
+ }
283
+ // Create the overlay if it doesn't exist yet
284
+ if (!overlay()) {
285
+ createOverlayInstance();
286
+ }
287
+ overlay()?.show({ skipCooldown });
288
+ }
289
+ function setTooltipId(id) {
290
+ tooltipId.set(id);
291
+ }
292
+ /**
293
+ * Hide the tooltip from an interaction (respects disabled state).
294
+ * @internal
295
+ */
296
+ function hideFromInteraction(event) {
297
+ if (tooltipTriggerState().disabled()) {
298
+ return;
299
+ }
300
+ triggerHovered.set(false);
301
+ // Blur should close regardless of hover bridge or tooltip hover state.
302
+ if (!event) {
303
+ contentHovered.set(false);
304
+ clearHoverBridge();
305
+ hide();
306
+ return;
307
+ }
308
+ if (!tooltipTriggerState().hoverableContent()) {
309
+ hide();
310
+ return;
311
+ }
312
+ const tooltipElement = overlay()?.getElements()[0];
313
+ if (!tooltipElement) {
314
+ hide();
315
+ return;
316
+ }
317
+ const polygon = createTooltipHoverBridgePolygon({
318
+ triggerRect: trigger.nativeElement.getBoundingClientRect(),
319
+ tooltipRect: tooltipElement.getBoundingClientRect(),
320
+ exitPoint: { x: event.clientX, y: event.clientY },
321
+ });
322
+ if (!polygon) {
323
+ hide();
324
+ return;
325
+ }
326
+ hoverBridgePolygon.set(polygon);
327
+ overlay()?.cancelPendingClose();
328
+ registerPointerMoveListener();
329
+ scheduleHoverBridgeCloseFallback();
330
+ }
331
+ /**
332
+ * Called by tooltip content when pointer enters the tooltip.
333
+ * @internal
334
+ */
335
+ function onTooltipHoverStart() {
336
+ if (tooltipTriggerState().disabled() || !tooltipTriggerState().hoverableContent()) {
337
+ return;
338
+ }
339
+ contentHovered.set(true);
340
+ clearHoverBridge();
341
+ overlay()?.cancelPendingClose();
342
+ }
343
+ /**
344
+ * Called by tooltip content when pointer leaves the tooltip.
345
+ * @internal
346
+ */
347
+ function onTooltipHoverEnd() {
348
+ if (tooltipTriggerState().disabled() || !tooltipTriggerState().hoverableContent()) {
349
+ return;
350
+ }
351
+ contentHovered.set(false);
352
+ if (!triggerHovered()) {
353
+ hide();
354
+ }
355
+ }
356
+ /**
357
+ * Create the overlay that will contain the tooltip
358
+ */
359
+ function createOverlayInstance() {
360
+ // Determine the content and context based on useTextContent setting
361
+ const shouldUseTextContent = tooltipTriggerState().useTextContent();
362
+ let content = tooltip();
363
+ let context = tooltipTriggerState().context;
364
+ if (!content) {
365
+ if (!shouldUseTextContent) {
366
+ if (ngDevMode) {
367
+ console.error('[ngpTooltipTrigger]: Tooltip must be a string, TemplateRef, or ComponentType. Alternatively, set useTextContent to true if none is provided.');
368
+ }
369
+ return;
370
+ }
371
+ const textContent = trigger.nativeElement.textContent?.trim() || '';
372
+ if (ngDevMode && !textContent) {
373
+ console.warn('[ngpTooltipTrigger]: useTextContent is enabled but trigger element has no text content');
374
+ return;
375
+ }
376
+ content = NgpTooltipTextContentComponent;
377
+ context = signal(textContent);
378
+ }
379
+ else if (isString(content)) {
380
+ context = signal(content);
381
+ content = NgpTooltipTextContentComponent;
382
+ }
383
+ // Create config for the overlay
384
+ const config = {
385
+ content,
386
+ triggerElement: trigger.nativeElement,
387
+ anchorElement: anchor(),
388
+ injector: injector,
389
+ context,
390
+ container: container(),
391
+ placement: placement,
392
+ offset: offset(),
393
+ flip: flip(),
394
+ shift: shift(),
395
+ showDelay: showDelay(),
396
+ hideDelay: hideDelay(),
397
+ closeOnEscape: true,
398
+ closeOnOutsideClick: true,
399
+ viewContainerRef: viewContainerRef,
400
+ trackPosition: trackPosition(),
401
+ position: position,
402
+ scrollBehaviour: scrollBehavior(),
403
+ overlayType: 'tooltip',
404
+ cooldown: cooldown(),
405
+ };
406
+ // Create the overlay instance
407
+ overlay.set(createOverlay(config));
408
+ }
409
+ /**
410
+ * Register document-level pointer tracking while crossing trigger -> tooltip.
411
+ * @internal
412
+ */
413
+ function registerPointerMoveListener() {
414
+ if (removePointerMoveListener) {
415
+ return;
416
+ }
417
+ const cleanup = disposables.addEventListener(document, 'pointermove', ((event) => {
418
+ if (triggerHovered() || contentHovered() || !hoverBridgePolygon()) {
419
+ clearHoverBridge();
420
+ return;
421
+ }
422
+ const inBridge = isPointInHoverBridgePolygon({ x: event.clientX, y: event.clientY }, hoverBridgePolygon());
423
+ if (!inBridge) {
424
+ clearHoverBridge();
425
+ hide();
426
+ }
427
+ }), true);
428
+ removePointerMoveListener = () => {
429
+ cleanup();
430
+ removePointerMoveListener = undefined;
431
+ };
432
+ }
433
+ /**
434
+ * Clear hover bridge state and global listeners.
435
+ * @internal
436
+ */
437
+ function clearHoverBridge() {
438
+ hoverBridgePolygon.set(null);
439
+ clearHoverBridgeTimeout?.();
440
+ clearHoverBridgeTimeout = undefined;
441
+ removePointerMoveListener?.();
442
+ }
443
+ /**
444
+ * Close if pointer leaves trigger and does not move into tooltip soon enough.
445
+ * @internal
446
+ */
447
+ function scheduleHoverBridgeCloseFallback() {
448
+ clearHoverBridgeTimeout?.();
449
+ clearHoverBridgeTimeout = disposables.setTimeout(() => {
450
+ clearHoverBridgeTimeout = undefined;
451
+ if (!triggerHovered() && !contentHovered() && hoverBridgePolygon()) {
452
+ clearHoverBridge();
453
+ hide();
454
+ }
455
+ }, HOVER_BRIDGE_TIMEOUT_MS);
456
+ }
457
+ const state = {
458
+ tooltip,
459
+ disabled,
460
+ placement,
461
+ offset,
462
+ showDelay,
463
+ hideDelay,
464
+ flip,
465
+ shift,
466
+ container,
467
+ showOnOverflow,
468
+ anchor,
469
+ context,
470
+ useTextContent,
471
+ trackPosition,
472
+ position,
473
+ scrollBehavior,
474
+ cooldown,
475
+ hoverableContent,
476
+ overlay,
477
+ tooltipId,
478
+ open,
479
+ hasOverflow,
480
+ contentHovered,
481
+ hoverBridgePolygon,
482
+ show,
483
+ hide,
484
+ setTooltipId,
485
+ onTooltipHoverStart,
486
+ onTooltipHoverEnd,
487
+ destroy,
488
+ };
489
+ return state;
490
+ });
491
+ function injectTooltipTriggerState(options) {
492
+ return _injectTooltipTriggerState(options);
493
+ }
494
+
225
495
  /**
226
496
  * Apply the `ngpTooltipTrigger` directive to an element that triggers the tooltip to show.
227
497
  */
228
498
  class NgpTooltipTrigger {
229
- /**
230
- * Maximum time allowed to cross from trigger to tooltip without pointer movement.
231
- */
232
- static { this.HOVER_BRIDGE_TIMEOUT_MS = 150; }
233
499
  constructor() {
234
- /**
235
- * Access the trigger element
236
- */
237
- this.trigger = inject((ElementRef));
238
- /**
239
- * Access the injector.
240
- */
241
- this.injector = inject(Injector);
242
- /**
243
- * Access the view container reference.
244
- */
245
- this.viewContainerRef = inject(ViewContainerRef);
246
500
  /**
247
501
  * Access the global tooltip configuration.
248
502
  */
249
503
  this.config = injectTooltipConfig();
250
- /**
251
- * Disposables for managing event listeners and timers with automatic teardown.
252
- */
253
- this.disposables = injectDisposables();
254
504
  /**
255
505
  * Access the tooltip template ref.
256
506
  */
257
- this.tooltip = input(null, ...(ngDevMode ? [{ debugName: "tooltip", alias: 'ngpTooltipTrigger',
258
- transform: (value) => (value && !isString(value) ? value : null) }] : [{
259
- alias: 'ngpTooltipTrigger',
260
- transform: (value) => (value && !isString(value) ? value : null),
261
- }]));
507
+ this.tooltip = input(null, { ...(ngDevMode ? { debugName: "tooltip" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipTrigger',
508
+ transform: (value) => (value && !isString(value) ? value : null) });
262
509
  /**
263
510
  * Define if the trigger should be disabled. This will prevent the tooltip from being shown or hidden from interactions.
264
511
  * @default false
265
512
  */
266
- this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", alias: 'ngpTooltipTriggerDisabled',
267
- transform: booleanAttribute }] : [{
268
- alias: 'ngpTooltipTriggerDisabled',
269
- transform: booleanAttribute,
270
- }]));
513
+ this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipTriggerDisabled',
514
+ transform: booleanAttribute });
271
515
  /**
272
516
  * Define the placement of the tooltip relative to the trigger.
273
517
  * @default 'top'
274
518
  */
275
- this.placement = input(this.config.placement, ...(ngDevMode ? [{ debugName: "placement", alias: 'ngpTooltipTriggerPlacement' }] : [{
276
- alias: 'ngpTooltipTriggerPlacement',
277
- }]));
519
+ this.placement = input(this.config.placement, { ...(ngDevMode ? { debugName: "placement" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipTriggerPlacement' });
278
520
  /**
279
521
  * Define the offset of the tooltip relative to the trigger.
280
522
  * Can be a number (applies to mainAxis) or an object with mainAxis, crossAxis, and alignmentAxis.
281
523
  * @default 0
282
524
  */
283
- this.offset = input(this.config.offset, ...(ngDevMode ? [{ debugName: "offset", alias: 'ngpTooltipTriggerOffset',
284
- transform: coerceOffset }] : [{
285
- alias: 'ngpTooltipTriggerOffset',
286
- transform: coerceOffset,
287
- }]));
525
+ this.offset = input(this.config.offset, { ...(ngDevMode ? { debugName: "offset" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipTriggerOffset',
526
+ transform: coerceOffset });
288
527
  /**
289
528
  * Define the delay before the tooltip is displayed.
290
529
  * @default 500
291
530
  */
292
- this.showDelay = input(this.config.showDelay, ...(ngDevMode ? [{ debugName: "showDelay", alias: 'ngpTooltipTriggerShowDelay',
293
- transform: numberAttribute }] : [{
294
- alias: 'ngpTooltipTriggerShowDelay',
295
- transform: numberAttribute,
296
- }]));
531
+ this.showDelay = input(this.config.showDelay, { ...(ngDevMode ? { debugName: "showDelay" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipTriggerShowDelay',
532
+ transform: numberAttribute });
297
533
  /**
298
534
  * Define the delay before the tooltip is hidden.
299
535
  * @default 0
300
536
  */
301
- this.hideDelay = input(this.config.hideDelay, ...(ngDevMode ? [{ debugName: "hideDelay", alias: 'ngpTooltipTriggerHideDelay',
302
- transform: numberAttribute }] : [{
303
- alias: 'ngpTooltipTriggerHideDelay',
304
- transform: numberAttribute,
305
- }]));
537
+ this.hideDelay = input(this.config.hideDelay, { ...(ngDevMode ? { debugName: "hideDelay" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipTriggerHideDelay',
538
+ transform: numberAttribute });
306
539
  /**
307
540
  * Define whether the tooltip should flip when there is not enough space for the tooltip.
308
541
  * Can be a boolean to enable/disable, or an object with padding and fallbackPlacements options.
309
542
  * @default true
310
543
  */
311
- this.flip = input(this.config.flip, ...(ngDevMode ? [{ debugName: "flip", alias: 'ngpTooltipTriggerFlip',
312
- transform: coerceFlip }] : [{
313
- alias: 'ngpTooltipTriggerFlip',
314
- transform: coerceFlip,
315
- }]));
544
+ this.flip = input(this.config.flip, { ...(ngDevMode ? { debugName: "flip" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipTriggerFlip',
545
+ transform: coerceFlip });
316
546
  /**
317
547
  * Configure shift behavior to keep the tooltip in view.
318
548
  * Can be a boolean to enable/disable, or an object with padding and limiter options.
319
549
  * @default undefined (enabled by default in overlay)
320
550
  */
321
- this.shift = input(this.config.shift, ...(ngDevMode ? [{ debugName: "shift", alias: 'ngpTooltipTriggerShift',
322
- transform: coerceShift }] : [{
323
- alias: 'ngpTooltipTriggerShift',
324
- transform: coerceShift,
325
- }]));
551
+ this.shift = input(this.config.shift, { ...(ngDevMode ? { debugName: "shift" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipTriggerShift',
552
+ transform: coerceShift });
326
553
  /**
327
554
  * Define the container in which the tooltip should be attached.
328
555
  * @default document.body
329
556
  */
330
- this.container = input(this.config.container, ...(ngDevMode ? [{ debugName: "container", alias: 'ngpTooltipTriggerContainer' }] : [{
331
- alias: 'ngpTooltipTriggerContainer',
332
- }]));
557
+ this.container = input(this.config.container, { ...(ngDevMode ? { debugName: "container" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipTriggerContainer' });
333
558
  /**
334
559
  * Define whether the tooltip should only show when the trigger element overflows.
335
560
  * @default false
336
561
  */
337
- this.showOnOverflow = input(this.config.showOnOverflow, ...(ngDevMode ? [{ debugName: "showOnOverflow", alias: 'ngpTooltipTriggerShowOnOverflow',
338
- transform: booleanAttribute }] : [{
339
- alias: 'ngpTooltipTriggerShowOnOverflow',
340
- transform: booleanAttribute,
341
- }]));
562
+ this.showOnOverflow = input(this.config.showOnOverflow, { ...(ngDevMode ? { debugName: "showOnOverflow" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipTriggerShowOnOverflow',
563
+ transform: booleanAttribute });
342
564
  /**
343
565
  * Define an anchor element for positioning the tooltip.
344
566
  * If provided, the tooltip will be positioned relative to this element instead of the trigger.
345
567
  */
346
- this.anchor = input(null, ...(ngDevMode ? [{ debugName: "anchor", alias: 'ngpTooltipTriggerAnchor' }] : [{ alias: 'ngpTooltipTriggerAnchor' }]));
568
+ this.anchor = input(null, { ...(ngDevMode ? { debugName: "anchor" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipTriggerAnchor' });
347
569
  /**
348
570
  * Provide context to the tooltip. This can be used to pass data to the tooltip content.
349
571
  */
350
- this.context = input(undefined, ...(ngDevMode ? [{ debugName: "context", alias: 'ngpTooltipTriggerContext' }] : [{
351
- alias: 'ngpTooltipTriggerContext',
352
- }]));
572
+ this.context = input(undefined, { ...(ngDevMode ? { debugName: "context" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipTriggerContext' });
353
573
  /**
354
574
  * Define whether to use the text content of the trigger element as the tooltip content.
355
575
  * When enabled, the tooltip will display the text content of the trigger element.
356
576
  * @default true
357
577
  */
358
- this.useTextContent = input(this.config.useTextContent, ...(ngDevMode ? [{ debugName: "useTextContent", alias: 'ngpTooltipTriggerUseTextContent',
359
- transform: booleanAttribute }] : [{
360
- alias: 'ngpTooltipTriggerUseTextContent',
361
- transform: booleanAttribute,
362
- }]));
578
+ this.useTextContent = input(this.config.useTextContent, { ...(ngDevMode ? { debugName: "useTextContent" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipTriggerUseTextContent',
579
+ transform: booleanAttribute });
363
580
  /**
364
581
  * Define whether to track the trigger element position on every animation frame.
365
582
  * Useful for moving elements like slider thumbs.
366
583
  * @default false
367
584
  */
368
- this.trackPosition = input(this.config.trackPosition, ...(ngDevMode ? [{ debugName: "trackPosition", alias: 'ngpTooltipTriggerTrackPosition',
369
- transform: booleanAttribute }] : [{
370
- alias: 'ngpTooltipTriggerTrackPosition',
371
- transform: booleanAttribute,
372
- }]));
585
+ this.trackPosition = input(this.config.trackPosition, { ...(ngDevMode ? { debugName: "trackPosition" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipTriggerTrackPosition',
586
+ transform: booleanAttribute });
373
587
  /**
374
588
  * Programmatic position for the tooltip. When provided, the tooltip
375
589
  * will be positioned at these coordinates instead of the trigger element.
376
590
  * Use with trackPosition="true" for smooth cursor following.
377
591
  */
378
- this.position = input(null, ...(ngDevMode ? [{ debugName: "position", alias: 'ngpTooltipTriggerPosition' }] : [{
379
- alias: 'ngpTooltipTriggerPosition',
380
- }]));
592
+ this.position = input(null, { ...(ngDevMode ? { debugName: "position" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipTriggerPosition' });
381
593
  /**
382
594
  * Defines how the tooltip behaves when the window is scrolled.
383
595
  * @default 'reposition'
384
596
  */
385
- this.scrollBehavior = input(this.config.scrollBehavior, ...(ngDevMode ? [{ debugName: "scrollBehavior", alias: 'ngpTooltipTriggerScrollBehavior' }] : [{
386
- alias: 'ngpTooltipTriggerScrollBehavior',
387
- }]));
597
+ this.scrollBehavior = input(this.config.scrollBehavior, { ...(ngDevMode ? { debugName: "scrollBehavior" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipTriggerScrollBehavior' });
388
598
  /**
389
599
  * Define the cooldown duration in milliseconds.
390
600
  * When moving from one tooltip to another within this duration,
391
601
  * the showDelay is skipped for the new tooltip.
392
602
  * @default 300
393
603
  */
394
- this.cooldown = input(this.config.cooldown, ...(ngDevMode ? [{ debugName: "cooldown", alias: 'ngpTooltipTriggerCooldown',
395
- transform: numberAttribute }] : [{
396
- alias: 'ngpTooltipTriggerCooldown',
397
- transform: numberAttribute,
398
- }]));
604
+ this.cooldown = input(this.config.cooldown, { ...(ngDevMode ? { debugName: "cooldown" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipTriggerCooldown',
605
+ transform: numberAttribute });
399
606
  /**
400
607
  * Whether hovering tooltip content keeps the tooltip open.
401
608
  * @default false
402
609
  */
403
- this.hoverableContent = input(this.config.hoverableContent, ...(ngDevMode ? [{ debugName: "hoverableContent", alias: 'ngpTooltipTriggerHoverableContent',
404
- transform: booleanAttribute }] : [{
405
- alias: 'ngpTooltipTriggerHoverableContent',
406
- transform: booleanAttribute,
407
- }]));
408
- /**
409
- * The overlay that manages the tooltip
410
- * @internal
411
- */
412
- this.overlay = signal(null, ...(ngDevMode ? [{ debugName: "overlay" }] : []));
413
- /**
414
- * The unique id of the tooltip.
415
- */
416
- this.tooltipId = signal(undefined, ...(ngDevMode ? [{ debugName: "tooltipId" }] : []));
417
- /**
418
- * The open state of the tooltip.
419
- * @internal
420
- */
421
- this.open = computed(() => this.overlay()?.isOpen() ?? false, ...(ngDevMode ? [{ debugName: "open" }] : []));
422
- /**
423
- * Tracks whether pointer is currently over trigger.
424
- */
425
- this.triggerHovered = false;
426
- /**
427
- * Tracks whether pointer is currently over tooltip content.
428
- */
429
- this.contentHovered = false;
430
- /**
431
- * Current pointer grace polygon used while crossing trigger -> tooltip.
432
- */
433
- this.hoverBridgePolygon = null;
434
- /**
435
- * Store the state of the tooltip.
436
- * @internal
437
- */
438
- this.state = tooltipTriggerState(this);
439
- this.hasOverflow = setupOverflowListener(this.trigger.nativeElement, {
440
- disabled: computed(() => !this.state.showOnOverflow()),
610
+ this.hoverableContent = input(this.config.hoverableContent, { ...(ngDevMode ? { debugName: "hoverableContent" } : /* istanbul ignore next */ {}), alias: 'ngpTooltipTriggerHoverableContent',
611
+ transform: booleanAttribute });
612
+ this.state = ngpTooltipTrigger({
613
+ tooltip: this.tooltip,
614
+ disabled: this.disabled,
615
+ placement: this.placement,
616
+ offset: this.offset,
617
+ showDelay: this.showDelay,
618
+ hideDelay: this.hideDelay,
619
+ flip: this.flip,
620
+ shift: this.shift,
621
+ container: this.container,
622
+ showOnOverflow: this.showOnOverflow,
623
+ anchor: this.anchor,
624
+ context: this.context,
625
+ useTextContent: this.useTextContent,
626
+ trackPosition: this.trackPosition,
627
+ position: this.position,
628
+ scrollBehavior: this.scrollBehavior,
629
+ cooldown: this.cooldown,
630
+ hoverableContent: this.hoverableContent,
441
631
  });
442
632
  }
443
633
  ngOnDestroy() {
444
- this.clearHoverBridge();
445
- this.overlay()?.destroy();
634
+ return this.state.destroy();
446
635
  }
447
636
  /**
448
637
  * Show the tooltip programmatically (skips cooldown so multiple tooltips can coexist).
449
638
  */
450
639
  show() {
451
- this.performShow(true);
640
+ return this.state.show();
452
641
  }
453
642
  /**
454
643
  * Hide the tooltip.
455
644
  */
456
645
  hide() {
457
- this.clearHoverBridge();
458
- this.overlay()?.hide();
459
- }
460
- /**
461
- * Show the tooltip from an interaction (respects disabled state, uses cooldown).
462
- * @internal
463
- */
464
- showFromInteraction() {
465
- if (this.state.disabled()) {
466
- return;
467
- }
468
- this.triggerHovered = true;
469
- this.clearHoverBridge();
470
- this.performShow(false);
471
- }
472
- /**
473
- * Shared show logic.
474
- * @param skipCooldown When true, skip cooldown registration so multiple tooltips can coexist.
475
- */
476
- performShow(skipCooldown) {
477
- // If already open, cancel any pending close
478
- if (this.open()) {
479
- this.overlay()?.cancelPendingClose();
480
- return;
481
- }
482
- // if we should only show when there is overflow, check if the trigger has overflow
483
- if (this.state.showOnOverflow() && !this.hasOverflow()) {
484
- return;
485
- }
486
- // Create the overlay if it doesn't exist yet
487
- if (!this.overlay()) {
488
- this.createOverlay();
489
- }
490
- this.overlay()?.show({ skipCooldown });
491
- }
492
- /**
493
- * Hide the tooltip from an interaction (respects disabled state).
494
- * @internal
495
- */
496
- hideFromInteraction(event) {
497
- if (this.state.disabled()) {
498
- return;
499
- }
500
- this.triggerHovered = false;
501
- // Blur should close regardless of hover bridge or tooltip hover state.
502
- if (!event) {
503
- this.contentHovered = false;
504
- this.clearHoverBridge();
505
- this.hide();
506
- return;
507
- }
508
- if (!this.state.hoverableContent()) {
509
- this.hide();
510
- return;
511
- }
512
- const tooltipElement = this.overlay()?.getElements()[0];
513
- if (!tooltipElement) {
514
- this.hide();
515
- return;
516
- }
517
- const polygon = createTooltipHoverBridgePolygon({
518
- triggerRect: this.trigger.nativeElement.getBoundingClientRect(),
519
- tooltipRect: tooltipElement.getBoundingClientRect(),
520
- exitPoint: { x: event.clientX, y: event.clientY },
521
- });
522
- if (!polygon) {
523
- this.hide();
524
- return;
525
- }
526
- this.hoverBridgePolygon = polygon;
527
- this.overlay()?.cancelPendingClose();
528
- this.registerPointerMoveListener();
529
- this.scheduleHoverBridgeCloseFallback();
646
+ return this.state.hide();
530
647
  }
531
648
  /**
532
649
  * Called by tooltip content when pointer enters the tooltip.
533
650
  * @internal
534
651
  */
535
652
  onTooltipHoverStart() {
536
- if (this.state.disabled() || !this.state.hoverableContent()) {
537
- return;
538
- }
539
- this.contentHovered = true;
540
- this.clearHoverBridge();
541
- this.overlay()?.cancelPendingClose();
653
+ return this.state.onTooltipHoverStart();
542
654
  }
543
655
  /**
544
656
  * Called by tooltip content when pointer leaves the tooltip.
545
657
  * @internal
546
658
  */
547
659
  onTooltipHoverEnd() {
548
- if (this.state.disabled() || !this.state.hoverableContent()) {
549
- return;
550
- }
551
- this.contentHovered = false;
552
- if (!this.triggerHovered) {
553
- this.hide();
554
- }
555
- }
556
- /**
557
- * Create the overlay that will contain the tooltip
558
- */
559
- createOverlay() {
560
- // Determine the content and context based on useTextContent setting
561
- const shouldUseTextContent = this.state.useTextContent();
562
- let content = this.state.tooltip();
563
- let context = this.state.context;
564
- if (!content) {
565
- if (!shouldUseTextContent) {
566
- if (ngDevMode) {
567
- console.error('[ngpTooltipTrigger]: Tooltip must be a string, TemplateRef, or ComponentType. Alternatively, set useTextContent to true if none is provided.');
568
- }
569
- return;
570
- }
571
- const textContent = this.trigger.nativeElement.textContent?.trim() || '';
572
- if (ngDevMode && !textContent) {
573
- console.warn('[ngpTooltipTrigger]: useTextContent is enabled but trigger element has no text content');
574
- return;
575
- }
576
- content = NgpTooltipTextContentComponent;
577
- context = signal(textContent);
578
- }
579
- else if (isString(content)) {
580
- context = signal(content);
581
- content = NgpTooltipTextContentComponent;
582
- }
583
- // Create config for the overlay
584
- const config = {
585
- content,
586
- triggerElement: this.trigger.nativeElement,
587
- anchorElement: this.state.anchor(),
588
- injector: this.injector,
589
- context,
590
- container: this.state.container(),
591
- placement: this.state.placement,
592
- offset: this.state.offset(),
593
- flip: this.state.flip(),
594
- shift: this.state.shift(),
595
- showDelay: this.state.showDelay(),
596
- hideDelay: this.state.hideDelay(),
597
- closeOnEscape: true,
598
- closeOnOutsideClick: true,
599
- viewContainerRef: this.viewContainerRef,
600
- trackPosition: this.state.trackPosition(),
601
- position: this.state.position,
602
- scrollBehaviour: this.state.scrollBehavior(),
603
- overlayType: 'tooltip',
604
- cooldown: this.state.cooldown(),
605
- };
606
- // Create the overlay instance
607
- this.overlay.set(createOverlay(config));
660
+ return this.state.onTooltipHoverEnd();
608
661
  }
609
662
  /**
610
663
  * Set the tooltip id.
611
664
  */
612
665
  setTooltipId(id) {
613
- this.tooltipId.set(id);
614
- }
615
- /**
616
- * Register document-level pointer tracking while crossing trigger -> tooltip.
617
- */
618
- registerPointerMoveListener() {
619
- if (this.removePointerMoveListener) {
620
- return;
621
- }
622
- const cleanup = this.disposables.addEventListener(document, 'pointermove', ((event) => {
623
- if (this.triggerHovered || this.contentHovered || !this.hoverBridgePolygon) {
624
- this.clearHoverBridge();
625
- return;
626
- }
627
- const inBridge = isPointInHoverBridgePolygon({ x: event.clientX, y: event.clientY }, this.hoverBridgePolygon);
628
- if (!inBridge) {
629
- this.clearHoverBridge();
630
- this.hide();
631
- }
632
- }), true);
633
- this.removePointerMoveListener = () => {
634
- cleanup();
635
- this.removePointerMoveListener = undefined;
636
- };
637
- }
638
- /**
639
- * Clear hover bridge state and global listeners.
640
- */
641
- clearHoverBridge() {
642
- this.hoverBridgePolygon = null;
643
- this.clearHoverBridgeTimeout?.();
644
- this.clearHoverBridgeTimeout = undefined;
645
- this.removePointerMoveListener?.();
646
- }
647
- /**
648
- * Close if pointer leaves trigger and does not move into tooltip soon enough.
649
- */
650
- scheduleHoverBridgeCloseFallback() {
651
- this.clearHoverBridgeTimeout?.();
652
- this.clearHoverBridgeTimeout = this.disposables.setTimeout(() => {
653
- this.clearHoverBridgeTimeout = undefined;
654
- if (!this.triggerHovered && !this.contentHovered && this.hoverBridgePolygon) {
655
- this.clearHoverBridge();
656
- this.hide();
657
- }
658
- }, NgpTooltipTrigger.HOVER_BRIDGE_TIMEOUT_MS);
666
+ return this.state.setTooltipId(id);
659
667
  }
660
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpTooltipTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
661
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpTooltipTrigger, isStandalone: true, selector: "[ngpTooltipTrigger]", inputs: { tooltip: { classPropertyName: "tooltip", publicName: "ngpTooltipTrigger", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "ngpTooltipTriggerDisabled", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "ngpTooltipTriggerPlacement", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "ngpTooltipTriggerOffset", isSignal: true, isRequired: false, transformFunction: null }, showDelay: { classPropertyName: "showDelay", publicName: "ngpTooltipTriggerShowDelay", isSignal: true, isRequired: false, transformFunction: null }, hideDelay: { classPropertyName: "hideDelay", publicName: "ngpTooltipTriggerHideDelay", isSignal: true, isRequired: false, transformFunction: null }, flip: { classPropertyName: "flip", publicName: "ngpTooltipTriggerFlip", isSignal: true, isRequired: false, transformFunction: null }, shift: { classPropertyName: "shift", publicName: "ngpTooltipTriggerShift", isSignal: true, isRequired: false, transformFunction: null }, container: { classPropertyName: "container", publicName: "ngpTooltipTriggerContainer", isSignal: true, isRequired: false, transformFunction: null }, showOnOverflow: { classPropertyName: "showOnOverflow", publicName: "ngpTooltipTriggerShowOnOverflow", isSignal: true, isRequired: false, transformFunction: null }, anchor: { classPropertyName: "anchor", publicName: "ngpTooltipTriggerAnchor", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "ngpTooltipTriggerContext", isSignal: true, isRequired: false, transformFunction: null }, useTextContent: { classPropertyName: "useTextContent", publicName: "ngpTooltipTriggerUseTextContent", isSignal: true, isRequired: false, transformFunction: null }, trackPosition: { classPropertyName: "trackPosition", publicName: "ngpTooltipTriggerTrackPosition", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "ngpTooltipTriggerPosition", isSignal: true, isRequired: false, transformFunction: null }, scrollBehavior: { classPropertyName: "scrollBehavior", publicName: "ngpTooltipTriggerScrollBehavior", isSignal: true, isRequired: false, transformFunction: null }, cooldown: { classPropertyName: "cooldown", publicName: "ngpTooltipTriggerCooldown", isSignal: true, isRequired: false, transformFunction: null }, hoverableContent: { classPropertyName: "hoverableContent", publicName: "ngpTooltipTriggerHoverableContent", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mouseenter": "showFromInteraction()", "mouseleave": "hideFromInteraction($event)", "focus": "showFromInteraction()", "blur": "hideFromInteraction()" }, properties: { "attr.data-open": "open() ? \"\" : null", "attr.data-disabled": "state.disabled() ? \"\" : null", "attr.aria-describedby": "overlay()?.ariaDescribedBy()" } }, providers: [provideTooltipTriggerState({ inherit: false })], exportAs: ["ngpTooltipTrigger"], ngImport: i0 }); }
668
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpTooltipTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
669
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: NgpTooltipTrigger, isStandalone: true, selector: "[ngpTooltipTrigger]", inputs: { tooltip: { classPropertyName: "tooltip", publicName: "ngpTooltipTrigger", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "ngpTooltipTriggerDisabled", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "ngpTooltipTriggerPlacement", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "ngpTooltipTriggerOffset", isSignal: true, isRequired: false, transformFunction: null }, showDelay: { classPropertyName: "showDelay", publicName: "ngpTooltipTriggerShowDelay", isSignal: true, isRequired: false, transformFunction: null }, hideDelay: { classPropertyName: "hideDelay", publicName: "ngpTooltipTriggerHideDelay", isSignal: true, isRequired: false, transformFunction: null }, flip: { classPropertyName: "flip", publicName: "ngpTooltipTriggerFlip", isSignal: true, isRequired: false, transformFunction: null }, shift: { classPropertyName: "shift", publicName: "ngpTooltipTriggerShift", isSignal: true, isRequired: false, transformFunction: null }, container: { classPropertyName: "container", publicName: "ngpTooltipTriggerContainer", isSignal: true, isRequired: false, transformFunction: null }, showOnOverflow: { classPropertyName: "showOnOverflow", publicName: "ngpTooltipTriggerShowOnOverflow", isSignal: true, isRequired: false, transformFunction: null }, anchor: { classPropertyName: "anchor", publicName: "ngpTooltipTriggerAnchor", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "ngpTooltipTriggerContext", isSignal: true, isRequired: false, transformFunction: null }, useTextContent: { classPropertyName: "useTextContent", publicName: "ngpTooltipTriggerUseTextContent", isSignal: true, isRequired: false, transformFunction: null }, trackPosition: { classPropertyName: "trackPosition", publicName: "ngpTooltipTriggerTrackPosition", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "ngpTooltipTriggerPosition", isSignal: true, isRequired: false, transformFunction: null }, scrollBehavior: { classPropertyName: "scrollBehavior", publicName: "ngpTooltipTriggerScrollBehavior", isSignal: true, isRequired: false, transformFunction: null }, cooldown: { classPropertyName: "cooldown", publicName: "ngpTooltipTriggerCooldown", isSignal: true, isRequired: false, transformFunction: null }, hoverableContent: { classPropertyName: "hoverableContent", publicName: "ngpTooltipTriggerHoverableContent", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTooltipTriggerState({ inherit: false })], exportAs: ["ngpTooltipTrigger"], ngImport: i0 }); }
662
670
  }
663
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpTooltipTrigger, decorators: [{
671
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpTooltipTrigger, decorators: [{
664
672
  type: Directive,
665
673
  args: [{
666
674
  selector: '[ngpTooltipTrigger]',
667
675
  exportAs: 'ngpTooltipTrigger',
668
676
  providers: [provideTooltipTriggerState({ inherit: false })],
669
- host: {
670
- '[attr.data-open]': 'open() ? "" : null',
671
- '[attr.data-disabled]': 'state.disabled() ? "" : null',
672
- '[attr.aria-describedby]': 'overlay()?.ariaDescribedBy()',
673
- '(mouseenter)': 'showFromInteraction()',
674
- '(mouseleave)': 'hideFromInteraction($event)',
675
- '(focus)': 'showFromInteraction()',
676
- '(blur)': 'hideFromInteraction()',
677
- },
678
677
  }]
679
- }], ctorParameters: () => [], propDecorators: { tooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTrigger", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerDisabled", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerPlacement", required: false }] }], offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerOffset", required: false }] }], showDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerShowDelay", required: false }] }], hideDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerHideDelay", required: false }] }], flip: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerFlip", required: false }] }], shift: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerShift", required: false }] }], container: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerContainer", required: false }] }], showOnOverflow: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerShowOnOverflow", required: false }] }], anchor: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerAnchor", required: false }] }], context: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerContext", required: false }] }], useTextContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerUseTextContent", required: false }] }], trackPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerTrackPosition", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerPosition", required: false }] }], scrollBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerScrollBehavior", required: false }] }], cooldown: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerCooldown", required: false }] }], hoverableContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerHoverableContent", required: false }] }] } });
678
+ }], propDecorators: { tooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTrigger", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerDisabled", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerPlacement", required: false }] }], offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerOffset", required: false }] }], showDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerShowDelay", required: false }] }], hideDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerHideDelay", required: false }] }], flip: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerFlip", required: false }] }], shift: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerShift", required: false }] }], container: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerContainer", required: false }] }], showOnOverflow: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerShowOnOverflow", required: false }] }], anchor: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerAnchor", required: false }] }], context: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerContext", required: false }] }], useTextContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerUseTextContent", required: false }] }], trackPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerTrackPosition", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerPosition", required: false }] }], scrollBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerScrollBehavior", required: false }] }], cooldown: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerCooldown", required: false }] }], hoverableContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpTooltipTriggerHoverableContent", required: false }] }] } });
680
679
 
681
680
  /**
682
681
  * Generated bundle index. Do not edit.
683
682
  */
684
683
 
685
- export { NgpTooltip, NgpTooltipArrow, NgpTooltipArrowStateToken, NgpTooltipTrigger, injectTooltipArrowState, injectTooltipTriggerState, ngpTooltipArrow, provideTooltipArrowState, provideTooltipConfig, provideTooltipTriggerState };
684
+ export { NgpTooltip, NgpTooltipArrow, NgpTooltipArrowStateToken, NgpTooltipStateToken, NgpTooltipTextContentStateToken, NgpTooltipTrigger, NgpTooltipTriggerStateToken, injectTooltipArrowState, injectTooltipState, injectTooltipTextContentState, injectTooltipTriggerState, ngpTooltip, ngpTooltipArrow, ngpTooltipTextContent, ngpTooltipTrigger, provideTooltipArrowState, provideTooltipConfig, provideTooltipState, provideTooltipTextContentState, provideTooltipTriggerState };
686
685
  //# sourceMappingURL=ng-primitives-tooltip.mjs.map