@radix-ng/primitives 0.50.0 → 1.0.0-beta.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 (207) hide show
  1. package/collection/README.md +1 -0
  2. package/fesm2022/radix-ng-primitives-accordion.mjs +134 -66
  3. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  4. package/fesm2022/radix-ng-primitives-alert-dialog.mjs +224 -132
  5. package/fesm2022/radix-ng-primitives-alert-dialog.mjs.map +1 -1
  6. package/fesm2022/radix-ng-primitives-arrow.mjs +26 -10
  7. package/fesm2022/radix-ng-primitives-arrow.mjs.map +1 -1
  8. package/fesm2022/radix-ng-primitives-aspect-ratio.mjs +6 -6
  9. package/fesm2022/radix-ng-primitives-aspect-ratio.mjs.map +1 -1
  10. package/fesm2022/radix-ng-primitives-avatar.mjs +68 -75
  11. package/fesm2022/radix-ng-primitives-avatar.mjs.map +1 -1
  12. package/fesm2022/radix-ng-primitives-button.mjs +123 -0
  13. package/fesm2022/radix-ng-primitives-button.mjs.map +1 -0
  14. package/fesm2022/radix-ng-primitives-calendar.mjs +104 -103
  15. package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
  16. package/fesm2022/radix-ng-primitives-checkbox.mjs +414 -80
  17. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  18. package/fesm2022/radix-ng-primitives-collapsible.mjs +193 -92
  19. package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
  20. package/fesm2022/radix-ng-primitives-collection.mjs +72 -0
  21. package/fesm2022/radix-ng-primitives-collection.mjs.map +1 -0
  22. package/fesm2022/radix-ng-primitives-config.mjs +5 -5
  23. package/fesm2022/radix-ng-primitives-config.mjs.map +1 -1
  24. package/fesm2022/radix-ng-primitives-context-menu.mjs +143 -427
  25. package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
  26. package/fesm2022/radix-ng-primitives-core.mjs +757 -757
  27. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  28. package/fesm2022/radix-ng-primitives-cropper.mjs +55 -53
  29. package/fesm2022/radix-ng-primitives-cropper.mjs.map +1 -1
  30. package/fesm2022/radix-ng-primitives-date-field.mjs +93 -86
  31. package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
  32. package/fesm2022/radix-ng-primitives-dialog.mjs +658 -330
  33. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  34. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs +98 -76
  35. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs.map +1 -1
  36. package/fesm2022/radix-ng-primitives-drawer.mjs +1059 -0
  37. package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -0
  38. package/fesm2022/radix-ng-primitives-editable.mjs +20 -20
  39. package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
  40. package/fesm2022/radix-ng-primitives-field.mjs +363 -0
  41. package/fesm2022/radix-ng-primitives-field.mjs.map +1 -0
  42. package/fesm2022/radix-ng-primitives-fieldset.mjs +79 -0
  43. package/fesm2022/radix-ng-primitives-fieldset.mjs.map +1 -0
  44. package/fesm2022/radix-ng-primitives-focus-guards.mjs +3 -3
  45. package/fesm2022/radix-ng-primitives-focus-guards.mjs.map +1 -1
  46. package/fesm2022/radix-ng-primitives-focus-scope.mjs +29 -14
  47. package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
  48. package/fesm2022/radix-ng-primitives-input.mjs +172 -0
  49. package/fesm2022/radix-ng-primitives-input.mjs.map +1 -0
  50. package/fesm2022/radix-ng-primitives-label.mjs +11 -11
  51. package/fesm2022/radix-ng-primitives-label.mjs.map +1 -1
  52. package/fesm2022/radix-ng-primitives-menu.mjs +1484 -353
  53. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  54. package/fesm2022/radix-ng-primitives-menubar.mjs +290 -162
  55. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  56. package/fesm2022/radix-ng-primitives-meter.mjs +271 -0
  57. package/fesm2022/radix-ng-primitives-meter.mjs.map +1 -0
  58. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +1060 -1553
  59. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  60. package/fesm2022/radix-ng-primitives-number-field.mjs +1102 -366
  61. package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
  62. package/fesm2022/radix-ng-primitives-pagination.mjs +51 -51
  63. package/fesm2022/radix-ng-primitives-pagination.mjs.map +1 -1
  64. package/fesm2022/radix-ng-primitives-popover.mjs +980 -995
  65. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  66. package/fesm2022/radix-ng-primitives-popper.mjs +137 -82
  67. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  68. package/fesm2022/radix-ng-primitives-portal.mjs +40 -16
  69. package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -1
  70. package/fesm2022/radix-ng-primitives-presence.mjs +134 -246
  71. package/fesm2022/radix-ng-primitives-presence.mjs.map +1 -1
  72. package/fesm2022/radix-ng-primitives-preview-card.mjs +997 -0
  73. package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -0
  74. package/fesm2022/radix-ng-primitives-progress.mjs +231 -92
  75. package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
  76. package/fesm2022/radix-ng-primitives-radio.mjs +211 -70
  77. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  78. package/fesm2022/radix-ng-primitives-roving-focus.mjs +127 -77
  79. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
  80. package/fesm2022/radix-ng-primitives-select.mjs +791 -511
  81. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  82. package/fesm2022/radix-ng-primitives-separator.mjs +16 -45
  83. package/fesm2022/radix-ng-primitives-separator.mjs.map +1 -1
  84. package/fesm2022/radix-ng-primitives-slider.mjs +976 -720
  85. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  86. package/fesm2022/radix-ng-primitives-stepper.mjs +69 -71
  87. package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
  88. package/fesm2022/radix-ng-primitives-switch.mjs +128 -124
  89. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  90. package/fesm2022/radix-ng-primitives-tabs.mjs +388 -115
  91. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  92. package/fesm2022/radix-ng-primitives-time-field.mjs +111 -117
  93. package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
  94. package/fesm2022/radix-ng-primitives-toggle-group.mjs +122 -248
  95. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  96. package/fesm2022/radix-ng-primitives-toggle.mjs +99 -62
  97. package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
  98. package/fesm2022/radix-ng-primitives-toolbar.mjs +307 -94
  99. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  100. package/fesm2022/radix-ng-primitives-tooltip.mjs +690 -1079
  101. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  102. package/fesm2022/radix-ng-primitives-visually-hidden.mjs +46 -87
  103. package/fesm2022/radix-ng-primitives-visually-hidden.mjs.map +1 -1
  104. package/fesm2022/radix-ng-primitives.mjs.map +1 -1
  105. package/meter/README.md +3 -0
  106. package/navigation-menu/README.md +2 -1
  107. package/package.json +85 -63
  108. package/portal/README.md +2 -0
  109. package/preview-card/README.md +3 -0
  110. package/schematics/collection.json +1 -0
  111. package/schematics/ng-add/index.d.ts +3 -2
  112. package/schematics/ng-add/index.js +62 -31
  113. package/schematics/ng-add/index.js.map +1 -1
  114. package/schematics/ng-add/package-config.d.ts +4 -2
  115. package/schematics/ng-add/package-config.js +10 -2
  116. package/schematics/ng-add/package-config.js.map +1 -1
  117. package/schematics/ng-add/schema.d.ts +3 -0
  118. package/schematics/ng-add/schema.js +3 -0
  119. package/schematics/ng-add/schema.js.map +1 -0
  120. package/schematics/ng-add/schema.json +14 -0
  121. package/select/README.md +2 -0
  122. package/{accordion/index.d.ts → types/radix-ng-primitives-accordion.d.ts} +102 -67
  123. package/types/radix-ng-primitives-alert-dialog.d.ts +114 -0
  124. package/{arrow/index.d.ts → types/radix-ng-primitives-arrow.d.ts} +1 -1
  125. package/{aspect-ratio/index.d.ts → types/radix-ng-primitives-aspect-ratio.d.ts} +1 -1
  126. package/{avatar/index.d.ts → types/radix-ng-primitives-avatar.d.ts} +7 -11
  127. package/types/radix-ng-primitives-button.d.ts +73 -0
  128. package/{calendar/index.d.ts → types/radix-ng-primitives-calendar.d.ts} +2 -3
  129. package/types/radix-ng-primitives-checkbox.d.ts +337 -0
  130. package/types/radix-ng-primitives-collapsible.d.ts +159 -0
  131. package/types/radix-ng-primitives-collection.d.ts +44 -0
  132. package/{config/index.d.ts → types/radix-ng-primitives-config.d.ts} +1 -1
  133. package/types/radix-ng-primitives-context-menu.d.ts +73 -0
  134. package/{core/index.d.ts → types/radix-ng-primitives-core.d.ts} +311 -236
  135. package/{cropper/index.d.ts → types/radix-ng-primitives-cropper.d.ts} +6 -5
  136. package/{date-field/index.d.ts → types/radix-ng-primitives-date-field.d.ts} +42 -27
  137. package/types/radix-ng-primitives-dialog.d.ts +323 -0
  138. package/{dismissable-layer/index.d.ts → types/radix-ng-primitives-dismissable-layer.d.ts} +15 -7
  139. package/types/radix-ng-primitives-drawer.d.ts +448 -0
  140. package/{editable/index.d.ts → types/radix-ng-primitives-editable.d.ts} +1 -1
  141. package/types/radix-ng-primitives-field.d.ts +373 -0
  142. package/types/radix-ng-primitives-fieldset.d.ts +48 -0
  143. package/{focus-scope/index.d.ts → types/radix-ng-primitives-focus-scope.d.ts} +13 -5
  144. package/types/radix-ng-primitives-input.d.ts +87 -0
  145. package/{label/index.d.ts → types/radix-ng-primitives-label.d.ts} +0 -1
  146. package/types/radix-ng-primitives-menu.d.ts +612 -0
  147. package/types/radix-ng-primitives-menubar.d.ts +66 -0
  148. package/types/radix-ng-primitives-meter.d.ts +193 -0
  149. package/types/radix-ng-primitives-navigation-menu.d.ts +488 -0
  150. package/types/radix-ng-primitives-number-field.d.ts +464 -0
  151. package/{pagination/index.d.ts → types/radix-ng-primitives-pagination.d.ts} +2 -2
  152. package/types/radix-ng-primitives-popover.d.ts +416 -0
  153. package/{popper/index.d.ts → types/radix-ng-primitives-popper.d.ts} +50 -9
  154. package/types/radix-ng-primitives-portal.d.ts +30 -0
  155. package/types/radix-ng-primitives-presence.d.ts +55 -0
  156. package/types/radix-ng-primitives-preview-card.d.ts +359 -0
  157. package/types/radix-ng-primitives-progress.d.ts +206 -0
  158. package/{radio/index.d.ts → types/radix-ng-primitives-radio.d.ts} +56 -26
  159. package/{roving-focus/index.d.ts → types/radix-ng-primitives-roving-focus.d.ts} +38 -27
  160. package/types/radix-ng-primitives-select.d.ts +512 -0
  161. package/types/radix-ng-primitives-separator.d.ts +38 -0
  162. package/types/radix-ng-primitives-slider.d.ts +377 -0
  163. package/{stepper/index.d.ts → types/radix-ng-primitives-stepper.d.ts} +21 -22
  164. package/types/radix-ng-primitives-switch.d.ts +121 -0
  165. package/types/radix-ng-primitives-tabs.d.ts +247 -0
  166. package/{time-field/index.d.ts → types/radix-ng-primitives-time-field.d.ts} +46 -31
  167. package/types/radix-ng-primitives-toggle-group.d.ts +116 -0
  168. package/types/radix-ng-primitives-toggle.d.ts +65 -0
  169. package/types/radix-ng-primitives-toolbar.d.ts +180 -0
  170. package/types/radix-ng-primitives-tooltip.d.ts +395 -0
  171. package/{visually-hidden/index.d.ts → types/radix-ng-primitives-visually-hidden.d.ts} +19 -19
  172. package/alert-dialog/index.d.ts +0 -57
  173. package/checkbox/index.d.ts +0 -164
  174. package/collapsible/index.d.ts +0 -85
  175. package/context-menu/index.d.ts +0 -129
  176. package/dialog/index.d.ts +0 -205
  177. package/dropdown-menu/README.md +0 -1
  178. package/dropdown-menu/index.d.ts +0 -171
  179. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs +0 -583
  180. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs.map +0 -1
  181. package/fesm2022/radix-ng-primitives-hover-card.mjs +0 -1246
  182. package/fesm2022/radix-ng-primitives-hover-card.mjs.map +0 -1
  183. package/fesm2022/radix-ng-primitives-tooltip2.mjs +0 -740
  184. package/fesm2022/radix-ng-primitives-tooltip2.mjs.map +0 -1
  185. package/hover-card/README.md +0 -3
  186. package/hover-card/index.d.ts +0 -472
  187. package/menu/index.d.ts +0 -139
  188. package/menubar/index.d.ts +0 -56
  189. package/navigation-menu/index.d.ts +0 -405
  190. package/number-field/index.d.ts +0 -203
  191. package/popover/index.d.ts +0 -403
  192. package/portal/index.d.ts +0 -22
  193. package/presence/index.d.ts +0 -103
  194. package/progress/index.d.ts +0 -79
  195. package/select/index.d.ts +0 -214
  196. package/separator/index.d.ts +0 -63
  197. package/slider/index.d.ts +0 -263
  198. package/switch/index.d.ts +0 -105
  199. package/tabs/index.d.ts +0 -112
  200. package/toggle/index.d.ts +0 -75
  201. package/toggle-group/index.d.ts +0 -194
  202. package/toolbar/index.d.ts +0 -55
  203. package/tooltip/index.d.ts +0 -433
  204. package/tooltip2/README.md +0 -3
  205. package/tooltip2/index.d.ts +0 -325
  206. /package/{focus-guards/index.d.ts → types/radix-ng-primitives-focus-guards.d.ts} +0 -0
  207. /package/{index.d.ts → types/radix-ng-primitives.d.ts} +0 -0
@@ -1,1246 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, TemplateRef, DestroyRef, computed, input, numberAttribute, booleanAttribute, output, effect, untracked, SimpleChange, Directive, ElementRef, NgZone, Renderer2, isDevMode, VERSION, Injectable, makeEnvironmentProviders, signal, contentChild, ViewContainerRef, afterNextRender, assertInInjectionContext, forwardRef, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
3
- import * as i1 from '@angular/cdk/overlay';
4
- import { Overlay, CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
5
- import { RdxPositionSide, RdxPositionAlign, RDX_POSITIONING_DEFAULTS, getContentPosition, getAllPossibleConnectedPositions, injectDocument, injectWindow, getArrowPositionParams, getSideAndAlignFromAllPossibleConnectedPositions } from '@radix-ng/primitives/core';
6
- import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
7
- import { filter, tap, Subject, map, debounce, timer } from 'rxjs';
8
-
9
- const RdxHoverCardAnchorToken = new InjectionToken('RdxHoverCardAnchorToken');
10
-
11
- const RdxHoverCardArrowToken = new InjectionToken('RdxHoverCardArrowToken');
12
-
13
- const RdxHoverCardCloseToken = new InjectionToken('RdxHoverCardCloseToken');
14
-
15
- const RdxHoverCardContentAttributesToken = new InjectionToken('RdxHoverCardContentAttributesToken');
16
-
17
- var RdxHoverCardState;
18
- (function (RdxHoverCardState) {
19
- RdxHoverCardState["OPEN"] = "open";
20
- RdxHoverCardState["CLOSED"] = "closed";
21
- })(RdxHoverCardState || (RdxHoverCardState = {}));
22
- var RdxHoverCardAction;
23
- (function (RdxHoverCardAction) {
24
- RdxHoverCardAction["OPEN"] = "open";
25
- RdxHoverCardAction["CLOSE"] = "close";
26
- })(RdxHoverCardAction || (RdxHoverCardAction = {}));
27
- var RdxHoverCardAttachDetachEvent;
28
- (function (RdxHoverCardAttachDetachEvent) {
29
- RdxHoverCardAttachDetachEvent["ATTACH"] = "attach";
30
- RdxHoverCardAttachDetachEvent["DETACH"] = "detach";
31
- })(RdxHoverCardAttachDetachEvent || (RdxHoverCardAttachDetachEvent = {}));
32
- var RdxHoverCardAnimationStatus;
33
- (function (RdxHoverCardAnimationStatus) {
34
- RdxHoverCardAnimationStatus["OPEN_STARTED"] = "open_started";
35
- RdxHoverCardAnimationStatus["OPEN_ENDED"] = "open_ended";
36
- RdxHoverCardAnimationStatus["CLOSED_STARTED"] = "closed_started";
37
- RdxHoverCardAnimationStatus["CLOSED_ENDED"] = "closed_ended";
38
- })(RdxHoverCardAnimationStatus || (RdxHoverCardAnimationStatus = {}));
39
-
40
- /**
41
- * @group Components
42
- */
43
- class RdxHoverCardContentDirective {
44
- constructor() {
45
- /** @ignore */
46
- this.rootDirective = injectHoverCardRoot();
47
- /** @ignore */
48
- this.templateRef = inject(TemplateRef);
49
- /** @ignore */
50
- this.overlay = inject(Overlay);
51
- /** @ignore */
52
- this.destroyRef = inject(DestroyRef);
53
- /** @ignore */
54
- this.connectedOverlay = inject(CdkConnectedOverlay);
55
- /** @ignore */
56
- this.name = computed(() => `rdx-hover-card-trigger-${this.rootDirective.uniqueId()}`, ...(ngDevMode ? [{ debugName: "name" }] : []));
57
- /**
58
- * The preferred side of the trigger to render against when open. Will be reversed when collisions occur and avoidCollisions is enabled.
59
- * @group Props
60
- * @defaultValue top
61
- */
62
- this.side = input(RdxPositionSide.Top, ...(ngDevMode ? [{ debugName: "side" }] : []));
63
- /**
64
- * The distance in pixels from the trigger.
65
- * @group Props
66
- * @defaultValue undefined
67
- */
68
- this.sideOffset = input(NaN, ...(ngDevMode ? [{ debugName: "sideOffset", transform: numberAttribute }] : [{
69
- transform: numberAttribute
70
- }]));
71
- /**
72
- * The preferred alignment against the trigger. May change when collisions occur.
73
- * @group Props
74
- * @defaultValue center
75
- */
76
- this.align = input(RdxPositionAlign.Center, ...(ngDevMode ? [{ debugName: "align" }] : []));
77
- /**
78
- * An offset in pixels from the "start" or "end" alignment options.
79
- * @group Props
80
- * @defaultValue undefined
81
- */
82
- this.alignOffset = input(NaN, ...(ngDevMode ? [{ debugName: "alignOffset", transform: numberAttribute }] : [{
83
- transform: numberAttribute
84
- }]));
85
- /**
86
- * Whether to add some alternate positions of the content.
87
- * @group Props
88
- * @defaultValue false
89
- */
90
- this.alternatePositionsDisabled = input(false, ...(ngDevMode ? [{ debugName: "alternatePositionsDisabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
91
- /**
92
- * Whether to prevent `onOverlayEscapeKeyDown` handler from calling.
93
- * @group Props
94
- * @defaultValue false
95
- */
96
- this.onOverlayEscapeKeyDownDisabled = input(false, ...(ngDevMode ? [{ debugName: "onOverlayEscapeKeyDownDisabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
97
- /**
98
- * Whether to prevent `onOverlayOutsideClick` handler from calling.
99
- * @group Props
100
- * @defaultValue false
101
- */
102
- this.onOverlayOutsideClickDisabled = input(false, ...(ngDevMode ? [{ debugName: "onOverlayOutsideClickDisabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
103
- /**
104
- * Event handler called when the escape key is down.
105
- * It can be prevented by setting `onOverlayEscapeKeyDownDisabled` input to `true`.
106
- * @group Emits
107
- */
108
- this.onOverlayEscapeKeyDown = output();
109
- /**
110
- * Event handler called when a pointer event occurs outside the bounds of the component.
111
- * It can be prevented by setting `onOverlayOutsideClickDisabled` input to `true`.
112
- * @group Emits
113
- */
114
- this.onOverlayOutsideClick = output();
115
- /**
116
- * Event handler called after the overlay is open
117
- * @group Emits
118
- */
119
- this.onOpen = output();
120
- /**
121
- * Event handler called after the overlay is closed
122
- * @group Emits
123
- */
124
- this.onClosed = output();
125
- /** @ingore */
126
- this.positions = computed(() => this.computePositions(), ...(ngDevMode ? [{ debugName: "positions" }] : []));
127
- this.onOriginChangeEffect();
128
- this.onPositionChangeEffect();
129
- }
130
- /** @ignore */
131
- ngOnInit() {
132
- this.setScrollStrategy();
133
- this.setHasBackdrop();
134
- this.setDisableClose();
135
- this.onAttach();
136
- this.onDetach();
137
- this.connectKeydownEscape();
138
- this.connectOutsideClick();
139
- }
140
- /** @ignore */
141
- open() {
142
- if (this.connectedOverlay.open) {
143
- return;
144
- }
145
- const prevOpen = this.connectedOverlay.open;
146
- this.connectedOverlay.open = true;
147
- this.fireOverlayNgOnChanges('open', this.connectedOverlay.open, prevOpen);
148
- }
149
- /** @ignore */
150
- close() {
151
- if (!this.connectedOverlay.open) {
152
- return;
153
- }
154
- const prevOpen = this.connectedOverlay.open;
155
- this.connectedOverlay.open = false;
156
- this.fireOverlayNgOnChanges('open', this.connectedOverlay.open, prevOpen);
157
- }
158
- /** @ignore */
159
- positionChange() {
160
- return this.connectedOverlay.positionChange.asObservable();
161
- }
162
- /** @ignore */
163
- connectKeydownEscape() {
164
- this.connectedOverlay.overlayKeydown
165
- .asObservable()
166
- .pipe(filter(() => !this.onOverlayEscapeKeyDownDisabled() &&
167
- !this.rootDirective.rdxCdkEventService?.primitivePreventedFromCdkEvent(this.rootDirective, 'cdkOverlayEscapeKeyDown')), filter((event) => event.key === 'Escape'), tap((event) => {
168
- this.onOverlayEscapeKeyDown.emit(event);
169
- }), filter(() => !this.rootDirective.firstDefaultOpen()), tap(() => {
170
- this.rootDirective.handleClose();
171
- }), takeUntilDestroyed(this.destroyRef))
172
- .subscribe();
173
- }
174
- /** @ignore */
175
- connectOutsideClick() {
176
- this.connectedOverlay.overlayOutsideClick
177
- .asObservable()
178
- .pipe(filter(() => !this.onOverlayOutsideClickDisabled() &&
179
- !this.rootDirective.rdxCdkEventService?.primitivePreventedFromCdkEvent(this.rootDirective, 'cdkOverlayOutsideClick')),
180
- /**
181
- * Handle the situation when an anchor is added and the anchor becomes the origin of the overlay
182
- * hence the trigger will be considered the outside element
183
- */
184
- filter((event) => {
185
- return (!this.rootDirective.anchorDirective() ||
186
- !this.rootDirective
187
- .triggerDirective()
188
- .elementRef.nativeElement.contains(event.target));
189
- }), tap((event) => {
190
- this.onOverlayOutsideClick.emit(event);
191
- }), filter(() => !this.rootDirective.firstDefaultOpen()), tap(() => {
192
- this.rootDirective.handleClose();
193
- }), takeUntilDestroyed(this.destroyRef))
194
- .subscribe();
195
- }
196
- /** @ignore */
197
- onAttach() {
198
- this.connectedOverlay.attach
199
- .asObservable()
200
- .pipe(tap(() => {
201
- /**
202
- * `this.onOpen.emit();` is being delegated to the rootDirective directive due to the opening animation
203
- */
204
- this.rootDirective.attachDetachEvent.set(RdxHoverCardAttachDetachEvent.ATTACH);
205
- }), takeUntilDestroyed(this.destroyRef))
206
- .subscribe();
207
- }
208
- /** @ignore */
209
- onDetach() {
210
- this.connectedOverlay.detach
211
- .asObservable()
212
- .pipe(tap(() => {
213
- /**
214
- * `this.onClosed.emit();` is being delegated to the rootDirective directive due to the closing animation
215
- */
216
- this.rootDirective.attachDetachEvent.set(RdxHoverCardAttachDetachEvent.DETACH);
217
- }), takeUntilDestroyed(this.destroyRef))
218
- .subscribe();
219
- }
220
- /** @ignore */
221
- setScrollStrategy() {
222
- const prevScrollStrategy = this.connectedOverlay.scrollStrategy;
223
- this.connectedOverlay.scrollStrategy = this.overlay.scrollStrategies.reposition();
224
- this.fireOverlayNgOnChanges('scrollStrategy', this.connectedOverlay.scrollStrategy, prevScrollStrategy);
225
- }
226
- /** @ignore */
227
- setHasBackdrop() {
228
- const prevHasBackdrop = this.connectedOverlay.hasBackdrop;
229
- this.connectedOverlay.hasBackdrop = false;
230
- this.fireOverlayNgOnChanges('hasBackdrop', this.connectedOverlay.hasBackdrop, prevHasBackdrop);
231
- }
232
- /** @ignore */
233
- setDisableClose() {
234
- const prevDisableClose = this.connectedOverlay.disableClose;
235
- this.connectedOverlay.disableClose = true;
236
- this.fireOverlayNgOnChanges('disableClose', this.connectedOverlay.disableClose, prevDisableClose);
237
- }
238
- /** @ignore */
239
- setOrigin(origin) {
240
- const prevOrigin = this.connectedOverlay.origin;
241
- this.connectedOverlay.origin = origin;
242
- this.fireOverlayNgOnChanges('origin', this.connectedOverlay.origin, prevOrigin);
243
- }
244
- /** @ignore */
245
- setPositions(positions) {
246
- const prevPositions = this.connectedOverlay.positions;
247
- this.connectedOverlay.positions = positions;
248
- this.fireOverlayNgOnChanges('positions', this.connectedOverlay.positions, prevPositions);
249
- this.connectedOverlay.overlayRef?.updatePosition();
250
- }
251
- /** @ignore */
252
- computePositions() {
253
- const arrowHeight = this.rootDirective.arrowDirective()?.height() ?? 0;
254
- const offsets = {
255
- sideOffset: arrowHeight + (isNaN(this.sideOffset()) ? RDX_POSITIONING_DEFAULTS.offsets.side : this.sideOffset()),
256
- alignOffset: isNaN(this.alignOffset()) ? RDX_POSITIONING_DEFAULTS.offsets.align : this.alignOffset()
257
- };
258
- const basePosition = getContentPosition({
259
- side: this.side(),
260
- align: this.align(),
261
- sideOffset: offsets.sideOffset,
262
- alignOffset: offsets.alignOffset
263
- });
264
- const positions = [basePosition];
265
- if (!this.alternatePositionsDisabled()) {
266
- /**
267
- * Alternate positions for better user experience along the X/Y axis (e.g. vertical/horizontal scrolling)
268
- */
269
- const allPossibleConnectedPositions = getAllPossibleConnectedPositions();
270
- allPossibleConnectedPositions.forEach((_, key) => {
271
- const sideAndAlignArray = key.split('|');
272
- if (sideAndAlignArray[0] !== this.side() ||
273
- sideAndAlignArray[1] !== this.align()) {
274
- positions.push(getContentPosition({
275
- side: sideAndAlignArray[0],
276
- align: sideAndAlignArray[1],
277
- sideOffset: offsets.sideOffset,
278
- alignOffset: offsets.alignOffset
279
- }));
280
- }
281
- });
282
- }
283
- return positions;
284
- }
285
- onOriginChangeEffect() {
286
- effect(() => {
287
- const origin = (this.rootDirective.anchorDirective() ?? this.rootDirective.triggerDirective())
288
- .overlayOrigin;
289
- untracked(() => {
290
- this.setOrigin(origin);
291
- });
292
- });
293
- }
294
- /** @ignore */
295
- onPositionChangeEffect() {
296
- effect(() => {
297
- const positions = this.positions();
298
- this.alternatePositionsDisabled();
299
- untracked(() => {
300
- this.setPositions(positions);
301
- });
302
- });
303
- }
304
- /** @ignore */
305
- fireOverlayNgOnChanges(input, currentValue, previousValue, firstChange = false) {
306
- this.connectedOverlay.ngOnChanges({
307
- [input]: new SimpleChange(previousValue, currentValue, firstChange)
308
- });
309
- }
310
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxHoverCardContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
311
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.3", type: RdxHoverCardContentDirective, isStandalone: true, selector: "[rdxHoverCardContent]", inputs: { side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, sideOffset: { classPropertyName: "sideOffset", publicName: "sideOffset", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, alignOffset: { classPropertyName: "alignOffset", publicName: "alignOffset", isSignal: true, isRequired: false, transformFunction: null }, alternatePositionsDisabled: { classPropertyName: "alternatePositionsDisabled", publicName: "alternatePositionsDisabled", isSignal: true, isRequired: false, transformFunction: null }, onOverlayEscapeKeyDownDisabled: { classPropertyName: "onOverlayEscapeKeyDownDisabled", publicName: "onOverlayEscapeKeyDownDisabled", isSignal: true, isRequired: false, transformFunction: null }, onOverlayOutsideClickDisabled: { classPropertyName: "onOverlayOutsideClickDisabled", publicName: "onOverlayOutsideClickDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onOverlayEscapeKeyDown: "onOverlayEscapeKeyDown", onOverlayOutsideClick: "onOverlayOutsideClick", onOpen: "onOpen", onClosed: "onClosed" }, hostDirectives: [{ directive: i1.CdkConnectedOverlay }], ngImport: i0 }); }
312
- }
313
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxHoverCardContentDirective, decorators: [{
314
- type: Directive,
315
- args: [{
316
- selector: '[rdxHoverCardContent]',
317
- hostDirectives: [CdkConnectedOverlay]
318
- }]
319
- }], ctorParameters: () => [] });
320
-
321
- class RdxHoverCardTriggerDirective {
322
- constructor() {
323
- /** @ignore */
324
- this.rootDirective = injectHoverCardRoot();
325
- /** @ignore */
326
- this.elementRef = inject(ElementRef);
327
- /** @ignore */
328
- this.overlayOrigin = inject(CdkOverlayOrigin);
329
- /** @ignore */
330
- this.name = computed(() => `rdx-hover-card-trigger-${this.rootDirective.uniqueId()}`, ...(ngDevMode ? [{ debugName: "name" }] : []));
331
- }
332
- /** @ignore */
333
- pointerenter() {
334
- this.rootDirective.handleOpen();
335
- }
336
- /** @ignore */
337
- pointerleave() {
338
- this.rootDirective.handleClose();
339
- }
340
- /** @ignore */
341
- focus() {
342
- this.rootDirective.handleOpen();
343
- }
344
- /** @ignore */
345
- blur() {
346
- this.rootDirective.handleClose();
347
- }
348
- /** @ignore */
349
- click() {
350
- this.rootDirective.handleClose();
351
- }
352
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxHoverCardTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
353
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.3", type: RdxHoverCardTriggerDirective, isStandalone: true, selector: "[rdxHoverCardTrigger]", host: { listeners: { "pointerenter": "pointerenter()", "pointerleave": "pointerleave()", "focus": "focus()", "blur": "blur()", "click": "click()" }, properties: { "attr.id": "name()", "attr.aria-haspopup": "\"dialog\"", "attr.aria-expanded": "rootDirective.isOpen()", "attr.aria-controls": "rootDirective.contentDirective().name()", "attr.data-state": "rootDirective.state()" } }, hostDirectives: [{ directive: i1.CdkOverlayOrigin }], ngImport: i0 }); }
354
- }
355
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxHoverCardTriggerDirective, decorators: [{
356
- type: Directive,
357
- args: [{
358
- selector: '[rdxHoverCardTrigger]',
359
- hostDirectives: [CdkOverlayOrigin],
360
- host: {
361
- '[attr.id]': 'name()',
362
- '[attr.aria-haspopup]': '"dialog"',
363
- '[attr.aria-expanded]': 'rootDirective.isOpen()',
364
- '[attr.aria-controls]': 'rootDirective.contentDirective().name()',
365
- '[attr.data-state]': 'rootDirective.state()',
366
- '(pointerenter)': 'pointerenter()',
367
- '(pointerleave)': 'pointerleave()',
368
- '(focus)': 'focus()',
369
- '(blur)': 'blur()',
370
- '(click)': 'click()'
371
- }
372
- }]
373
- }] });
374
-
375
- const RdxCdkEventServiceWindowKey = Symbol('__RdxCdkEventService__');
376
-
377
- function eventTypeAsPrimitiveConfigKey(eventType) {
378
- return `prevent${eventType[0].toUpperCase()}${eventType.slice(1)}`;
379
- }
380
- class RdxCdkEventService {
381
- #clickDomRootEventCallbacks;
382
- constructor() {
383
- this.document = injectDocument();
384
- this.destroyRef = inject(DestroyRef);
385
- this.ngZone = inject(NgZone);
386
- this.renderer2 = inject(Renderer2);
387
- this.window = injectWindow();
388
- this.onDestroyCallbacks = new Set([() => deleteRdxCdkEventServiceWindowKey(this.window)]);
389
- this.#clickDomRootEventCallbacks = new Set();
390
- this.#listenToClickDomRootEvent();
391
- this.#registerOnDestroyCallbacks();
392
- }
393
- registerPrimitive(primitiveInstance) {
394
- if (!this.primitiveConfigs) {
395
- this.primitiveConfigs = new Map();
396
- }
397
- if (!this.primitiveConfigs.has(primitiveInstance)) {
398
- this.primitiveConfigs.set(primitiveInstance, {});
399
- }
400
- }
401
- deregisterPrimitive(primitiveInstance) {
402
- if (this.primitiveConfigs?.has(primitiveInstance)) {
403
- this.primitiveConfigs.delete(primitiveInstance);
404
- }
405
- }
406
- preventPrimitiveFromCdkEvent(primitiveInstance, eventType) {
407
- this.#setPreventPrimitiveFromCdkEvent(primitiveInstance, eventType, true);
408
- }
409
- allowPrimitiveForCdkEvent(primitiveInstance, eventType) {
410
- this.#setPreventPrimitiveFromCdkEvent(primitiveInstance, eventType, false);
411
- }
412
- preventPrimitiveFromCdkMultiEvents(primitiveInstance, eventTypes) {
413
- eventTypes.forEach((eventType) => {
414
- this.#setPreventPrimitiveFromCdkEvent(primitiveInstance, eventType, true);
415
- });
416
- }
417
- allowPrimitiveForCdkMultiEvents(primitiveInstance, eventTypes) {
418
- eventTypes.forEach((eventType) => {
419
- this.#setPreventPrimitiveFromCdkEvent(primitiveInstance, eventType, false);
420
- });
421
- }
422
- setPreventPrimitiveFromCdkMixEvents(primitiveInstance, eventTypes) {
423
- Object.keys(eventTypes).forEach((eventType) => {
424
- this.#setPreventPrimitiveFromCdkEvent(primitiveInstance, eventType, eventTypes[eventTypeAsPrimitiveConfigKey(eventType)]);
425
- });
426
- }
427
- primitivePreventedFromCdkEvent(primitiveInstance, eventType) {
428
- return this.primitiveConfigs?.get(primitiveInstance)?.[eventTypeAsPrimitiveConfigKey(eventType)];
429
- }
430
- addClickDomRootEventCallback(callback) {
431
- this.#clickDomRootEventCallbacks.add(callback);
432
- }
433
- removeClickDomRootEventCallback(callback) {
434
- return this.#clickDomRootEventCallbacks.delete(callback);
435
- }
436
- #setPreventPrimitiveFromCdkEvent(primitiveInstance, eventType, value) {
437
- if (!this.primitiveConfigs?.has(primitiveInstance)) {
438
- isDevMode() &&
439
- console.error('[RdxCdkEventService.preventPrimitiveFromCdkEvent] RDX Primitive instance has not been registered!', primitiveInstance);
440
- return;
441
- }
442
- switch (eventType) {
443
- case 'cdkOverlayOutsideClick':
444
- this.primitiveConfigs.get(primitiveInstance).preventCdkOverlayOutsideClick = value;
445
- break;
446
- case 'cdkOverlayEscapeKeyDown':
447
- this.primitiveConfigs.get(primitiveInstance).preventCdkOverlayEscapeKeyDown = value;
448
- break;
449
- }
450
- }
451
- #registerOnDestroyCallbacks() {
452
- this.destroyRef.onDestroy(() => {
453
- this.onDestroyCallbacks.forEach((onDestroyCallback) => onDestroyCallback());
454
- this.onDestroyCallbacks.clear();
455
- });
456
- }
457
- #listenToClickDomRootEvent() {
458
- const target = this.document;
459
- const eventName = 'click';
460
- const options = { capture: true };
461
- const callback = (event) => {
462
- this.#clickDomRootEventCallbacks.forEach((clickDomRootEventCallback) => clickDomRootEventCallback(event));
463
- };
464
- const major = parseInt(VERSION.major);
465
- const minor = parseInt(VERSION.minor);
466
- let destroyClickDomRootEventListener;
467
- /**
468
- * @see src/cdk/platform/features/backwards-compatibility.ts in @angular/cdk
469
- */
470
- if (major > 19 || (major === 19 && minor > 0) || (major === 0 && minor === 0)) {
471
- destroyClickDomRootEventListener = this.ngZone.runOutsideAngular(() => {
472
- const destroyClickDomRootEventListenerInternal = this.renderer2.listen(target, eventName, callback, options);
473
- return () => {
474
- destroyClickDomRootEventListenerInternal();
475
- this.#clickDomRootEventCallbacks.clear();
476
- };
477
- });
478
- }
479
- else {
480
- /**
481
- * This part can get removed when v19.1 or higher is on the board
482
- */
483
- destroyClickDomRootEventListener = this.ngZone.runOutsideAngular(() => {
484
- target.addEventListener(eventName, callback, options);
485
- return () => {
486
- this.ngZone.runOutsideAngular(() => target.removeEventListener(eventName, callback, options));
487
- this.#clickDomRootEventCallbacks.clear();
488
- };
489
- });
490
- }
491
- this.onDestroyCallbacks.add(destroyClickDomRootEventListener);
492
- }
493
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxCdkEventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
494
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxCdkEventService }); }
495
- }
496
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxCdkEventService, decorators: [{
497
- type: Injectable
498
- }], ctorParameters: () => [] });
499
- const RdxCdkEventServiceToken = new InjectionToken('RdxCdkEventServiceToken');
500
- const existsErrorMessage = 'RdxCdkEventService should be provided only once!';
501
- const deleteRdxCdkEventServiceWindowKey = (window) => {
502
- delete window[RdxCdkEventServiceWindowKey];
503
- };
504
- const getProvider = (throwWhenExists = true) => ({
505
- provide: RdxCdkEventServiceToken,
506
- useFactory: () => {
507
- isDevMode() && console.log('providing RdxCdkEventService...');
508
- const window = injectWindow();
509
- if (window[RdxCdkEventServiceWindowKey]) {
510
- if (throwWhenExists) {
511
- throw Error(existsErrorMessage);
512
- }
513
- else {
514
- isDevMode() && console.warn(existsErrorMessage);
515
- }
516
- }
517
- window[RdxCdkEventServiceWindowKey] ??= new RdxCdkEventService();
518
- return window[RdxCdkEventServiceWindowKey];
519
- }
520
- });
521
- const provideRdxCdkEventServiceInRoot = () => makeEnvironmentProviders([getProvider()]);
522
- const provideRdxCdkEventService = () => getProvider(false);
523
- const injectRdxCdkEventService = () => inject(RdxCdkEventServiceToken, { optional: true });
524
-
525
- let nextId = 0;
526
- /**
527
- * @group Components
528
- */
529
- class RdxHoverCardRootDirective {
530
- constructor() {
531
- /** @ignore */
532
- this.uniqueId = signal(++nextId, ...(ngDevMode ? [{ debugName: "uniqueId" }] : []));
533
- /** @ignore */
534
- this.name = computed(() => `rdx-hover-card-root-${this.uniqueId()}`, ...(ngDevMode ? [{ debugName: "name" }] : []));
535
- /**
536
- * The anchor directive that comes from outside the hover-card rootDirective
537
- * @group Props
538
- * @defaultValue undefined
539
- */
540
- this.anchor = input(void 0, ...(ngDevMode ? [{ debugName: "anchor" }] : []));
541
- /**
542
- * The open state of the hover-card when it is initially rendered. Use when you do not need to control its open state.
543
- * @group Props
544
- * @defaultValue false
545
- */
546
- this.defaultOpen = input(false, ...(ngDevMode ? [{ debugName: "defaultOpen", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
547
- /**
548
- * The controlled state of the hover-card. `open` input takes precedence over `defaultOpen` input.
549
- * @group Props
550
- * @defaultValue undefined
551
- */
552
- this.open = input(void 0, ...(ngDevMode ? [{ debugName: "open", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
553
- /**
554
- * The delay in milliseconds before the hover-card opens.
555
- * @group Props
556
- * @defaultValue 500
557
- */
558
- this.openDelay = input(500, ...(ngDevMode ? [{ debugName: "openDelay", transform: numberAttribute }] : [{
559
- transform: numberAttribute
560
- }]));
561
- /**
562
- * The delay in milliseconds before the hover-card closes.
563
- * @group Props
564
- * @defaultValue 200
565
- */
566
- this.closeDelay = input(200, ...(ngDevMode ? [{ debugName: "closeDelay", transform: numberAttribute }] : [{
567
- transform: numberAttribute
568
- }]));
569
- /**
570
- * Whether to control the state of the hover-card from outside. Use in conjunction with `open` input.
571
- * @group Props
572
- * @defaultValue undefined
573
- */
574
- this.externalControl = input(void 0, ...(ngDevMode ? [{ debugName: "externalControl", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
575
- /**
576
- * Whether to take into account CSS opening/closing animations.
577
- * @group Props
578
- * @defaultValue false
579
- */
580
- this.cssAnimation = input(false, ...(ngDevMode ? [{ debugName: "cssAnimation", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
581
- /**
582
- * Whether to take into account CSS opening animations. `cssAnimation` input must be set to 'true'
583
- * @group Props
584
- * @defaultValue false
585
- */
586
- this.cssOpeningAnimation = input(false, ...(ngDevMode ? [{ debugName: "cssOpeningAnimation", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
587
- /**
588
- * Whether to take into account CSS closing animations. `cssAnimation` input must be set to 'true'
589
- * @group Props
590
- * @defaultValue false
591
- */
592
- this.cssClosingAnimation = input(false, ...(ngDevMode ? [{ debugName: "cssClosingAnimation", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
593
- /** @ignore */
594
- this.cssAnimationStatus = signal(null, ...(ngDevMode ? [{ debugName: "cssAnimationStatus" }] : []));
595
- /** @ignore */
596
- this.contentDirective = contentChild.required(RdxHoverCardContentDirective);
597
- /** @ignore */
598
- this.triggerDirective = contentChild.required(RdxHoverCardTriggerDirective);
599
- /** @ignore */
600
- this.arrowDirective = contentChild(RdxHoverCardArrowToken, ...(ngDevMode ? [{ debugName: "arrowDirective" }] : []));
601
- /** @ignore */
602
- this.closeDirective = contentChild(RdxHoverCardCloseToken, ...(ngDevMode ? [{ debugName: "closeDirective" }] : []));
603
- /** @ignore */
604
- this.contentAttributesComponent = contentChild(RdxHoverCardContentAttributesToken, ...(ngDevMode ? [{ debugName: "contentAttributesComponent" }] : []));
605
- /** @ignore */
606
- this.internalAnchorDirective = contentChild(RdxHoverCardAnchorToken, ...(ngDevMode ? [{ debugName: "internalAnchorDirective" }] : []));
607
- /** @ignore */
608
- this.viewContainerRef = inject(ViewContainerRef);
609
- /** @ignore */
610
- this.rdxCdkEventService = injectRdxCdkEventService();
611
- /** @ignore */
612
- this.destroyRef = inject(DestroyRef);
613
- /** @ignore */
614
- this.state = signal(RdxHoverCardState.CLOSED, ...(ngDevMode ? [{ debugName: "state" }] : []));
615
- /** @ignore */
616
- this.attachDetachEvent = signal(RdxHoverCardAttachDetachEvent.DETACH, ...(ngDevMode ? [{ debugName: "attachDetachEvent" }] : []));
617
- /** @ignore */
618
- this.isFirstDefaultOpen = signal(false, ...(ngDevMode ? [{ debugName: "isFirstDefaultOpen" }] : []));
619
- /** @ignore */
620
- this.anchorDirective = computed(() => this.internalAnchorDirective() ?? this.anchor(), ...(ngDevMode ? [{ debugName: "anchorDirective" }] : []));
621
- /** @ignore */
622
- this.actionSubject$ = new Subject();
623
- /** @ignore */
624
- this.onAnchorChangeEffect = () => {
625
- effect(() => {
626
- const anchor = this.anchor();
627
- untracked(() => {
628
- if (anchor) {
629
- anchor.setRoot(this);
630
- }
631
- });
632
- });
633
- };
634
- this.rdxCdkEventService?.registerPrimitive(this);
635
- this.destroyRef.onDestroy(() => this.rdxCdkEventService?.deregisterPrimitive(this));
636
- this.actionSubscription();
637
- this.onStateChangeEffect();
638
- this.onCssAnimationStatusChangeChangeEffect();
639
- this.onOpenChangeEffect();
640
- this.onIsFirstDefaultOpenChangeEffect();
641
- this.onAnchorChangeEffect();
642
- this.emitOpenOrClosedEventEffect();
643
- afterNextRender({
644
- write: () => {
645
- if (this.defaultOpen() && !this.open()) {
646
- this.isFirstDefaultOpen.set(true);
647
- }
648
- }
649
- });
650
- }
651
- /** @ignore */
652
- getAnimationParamsSnapshot() {
653
- return {
654
- cssAnimation: this.cssAnimation(),
655
- cssOpeningAnimation: this.cssOpeningAnimation(),
656
- cssClosingAnimation: this.cssClosingAnimation(),
657
- cssAnimationStatus: this.cssAnimationStatus(),
658
- attachDetachEvent: this.attachDetachEvent(),
659
- state: this.state(),
660
- canEmitOnOpenOrOnClosed: this.canEmitOnOpenOrOnClosed()
661
- };
662
- }
663
- /** @ignore */
664
- controlledExternally() {
665
- return this.externalControl;
666
- }
667
- /** @ignore */
668
- firstDefaultOpen() {
669
- return this.isFirstDefaultOpen();
670
- }
671
- /** @ignore */
672
- handleOpen() {
673
- if (this.externalControl()) {
674
- return;
675
- }
676
- this.actionSubject$.next(RdxHoverCardAction.OPEN);
677
- }
678
- /** @ignore */
679
- handleClose(closeButton) {
680
- if (this.isFirstDefaultOpen()) {
681
- this.isFirstDefaultOpen.set(false);
682
- }
683
- if (!closeButton && this.externalControl()) {
684
- return;
685
- }
686
- this.actionSubject$.next(RdxHoverCardAction.CLOSE);
687
- }
688
- /** @ignore */
689
- handleToggle() {
690
- if (this.externalControl()) {
691
- return;
692
- }
693
- this.isOpen() ? this.handleClose() : this.handleOpen();
694
- }
695
- /** @ignore */
696
- isOpen(state) {
697
- return (state ?? this.state()) === RdxHoverCardState.OPEN;
698
- }
699
- /** @ignore */
700
- setState(state = RdxHoverCardState.CLOSED) {
701
- if (state === this.state()) {
702
- return;
703
- }
704
- this.state.set(state);
705
- }
706
- /** @ignore */
707
- openContent() {
708
- this.contentDirective().open();
709
- if (!this.cssAnimation() || !this.cssOpeningAnimation()) {
710
- this.cssAnimationStatus.set(null);
711
- }
712
- }
713
- /** @ignore */
714
- closeContent() {
715
- this.contentDirective().close();
716
- if (!this.cssAnimation() || !this.cssClosingAnimation()) {
717
- this.cssAnimationStatus.set(null);
718
- }
719
- }
720
- /** @ignore */
721
- emitOnOpen() {
722
- this.contentDirective().onOpen.emit();
723
- }
724
- /** @ignore */
725
- emitOnClosed() {
726
- this.contentDirective().onClosed.emit();
727
- }
728
- /** @ignore */
729
- ifOpenOrCloseWithoutAnimations(state) {
730
- return (!this.contentAttributesComponent() ||
731
- !this.cssAnimation() ||
732
- (this.cssAnimation() && !this.cssClosingAnimation() && state === RdxHoverCardState.CLOSED) ||
733
- (this.cssAnimation() && !this.cssOpeningAnimation() && state === RdxHoverCardState.OPEN) ||
734
- // !this.cssAnimationStatus() ||
735
- (this.cssOpeningAnimation() &&
736
- state === RdxHoverCardState.OPEN &&
737
- [RdxHoverCardAnimationStatus.OPEN_STARTED].includes(this.cssAnimationStatus())) ||
738
- (this.cssClosingAnimation() &&
739
- state === RdxHoverCardState.CLOSED &&
740
- [RdxHoverCardAnimationStatus.CLOSED_STARTED].includes(this.cssAnimationStatus())));
741
- }
742
- /** @ignore */
743
- ifOpenOrCloseWithAnimations(cssAnimationStatus) {
744
- return (this.contentAttributesComponent() &&
745
- this.cssAnimation() &&
746
- cssAnimationStatus &&
747
- ((this.cssOpeningAnimation() &&
748
- this.state() === RdxHoverCardState.OPEN &&
749
- [RdxHoverCardAnimationStatus.OPEN_ENDED].includes(cssAnimationStatus)) ||
750
- (this.cssClosingAnimation() &&
751
- this.state() === RdxHoverCardState.CLOSED &&
752
- [RdxHoverCardAnimationStatus.CLOSED_ENDED].includes(cssAnimationStatus))));
753
- }
754
- /** @ignore */
755
- openOrClose(state) {
756
- const isOpen = this.isOpen(state);
757
- isOpen ? this.openContent() : this.closeContent();
758
- }
759
- /** @ignore */
760
- emitOnOpenOrOnClosed(state) {
761
- this.isOpen(state)
762
- ? this.attachDetachEvent() === RdxHoverCardAttachDetachEvent.ATTACH && this.emitOnOpen()
763
- : this.attachDetachEvent() === RdxHoverCardAttachDetachEvent.DETACH && this.emitOnClosed();
764
- }
765
- /** @ignore */
766
- canEmitOnOpenOrOnClosed() {
767
- return (!this.cssAnimation() ||
768
- (!this.cssOpeningAnimation() && this.state() === RdxHoverCardState.OPEN) ||
769
- (this.cssOpeningAnimation() &&
770
- this.state() === RdxHoverCardState.OPEN &&
771
- this.cssAnimationStatus() === RdxHoverCardAnimationStatus.OPEN_ENDED) ||
772
- (!this.cssClosingAnimation() && this.state() === RdxHoverCardState.CLOSED) ||
773
- (this.cssClosingAnimation() &&
774
- this.state() === RdxHoverCardState.CLOSED &&
775
- this.cssAnimationStatus() === RdxHoverCardAnimationStatus.CLOSED_ENDED));
776
- }
777
- /** @ignore */
778
- onStateChangeEffect() {
779
- let isFirst = true;
780
- effect(() => {
781
- const state = this.state();
782
- untracked(() => {
783
- if (isFirst) {
784
- isFirst = false;
785
- return;
786
- }
787
- if (!this.ifOpenOrCloseWithoutAnimations(state)) {
788
- return;
789
- }
790
- this.openOrClose(state);
791
- });
792
- }, {});
793
- }
794
- /** @ignore */
795
- onCssAnimationStatusChangeChangeEffect() {
796
- let isFirst = true;
797
- effect(() => {
798
- const cssAnimationStatus = this.cssAnimationStatus();
799
- untracked(() => {
800
- if (isFirst) {
801
- isFirst = false;
802
- return;
803
- }
804
- if (!this.ifOpenOrCloseWithAnimations(cssAnimationStatus)) {
805
- return;
806
- }
807
- this.openOrClose(this.state());
808
- });
809
- });
810
- }
811
- /** @ignore */
812
- emitOpenOrClosedEventEffect() {
813
- let isFirst = true;
814
- effect(() => {
815
- this.attachDetachEvent();
816
- this.cssAnimationStatus();
817
- untracked(() => {
818
- if (isFirst) {
819
- isFirst = false;
820
- return;
821
- }
822
- const canEmitOpenClose = untracked(() => this.canEmitOnOpenOrOnClosed());
823
- if (!canEmitOpenClose) {
824
- return;
825
- }
826
- this.emitOnOpenOrOnClosed(this.state());
827
- });
828
- });
829
- }
830
- /** @ignore */
831
- onOpenChangeEffect() {
832
- effect(() => {
833
- const open = this.open();
834
- untracked(() => {
835
- this.setState(open ? RdxHoverCardState.OPEN : RdxHoverCardState.CLOSED);
836
- });
837
- });
838
- }
839
- /** @ignore */
840
- onIsFirstDefaultOpenChangeEffect() {
841
- const effectRef = effect(() => {
842
- const defaultOpen = this.defaultOpen();
843
- untracked(() => {
844
- if (!defaultOpen || this.open()) {
845
- effectRef.destroy();
846
- return;
847
- }
848
- this.handleOpen();
849
- });
850
- }, ...(ngDevMode ? [{ debugName: "effectRef" }] : []));
851
- }
852
- /** @ignore */
853
- actionSubscription() {
854
- this.actionSubject$
855
- .asObservable()
856
- .pipe(map((action) => {
857
- switch (action) {
858
- case RdxHoverCardAction.OPEN:
859
- return { action, duration: this.openDelay() };
860
- case RdxHoverCardAction.CLOSE:
861
- return { action, duration: this.closeDelay() };
862
- }
863
- }), debounce((config) => timer(config.duration)), tap((config) => {
864
- switch (config.action) {
865
- case RdxHoverCardAction.OPEN:
866
- this.setState(RdxHoverCardState.OPEN);
867
- break;
868
- case RdxHoverCardAction.CLOSE:
869
- this.setState(RdxHoverCardState.CLOSED);
870
- break;
871
- }
872
- }), takeUntilDestroyed())
873
- .subscribe();
874
- }
875
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxHoverCardRootDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
876
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.3", type: RdxHoverCardRootDirective, isStandalone: true, selector: "[rdxHoverCardRoot]", inputs: { anchor: { classPropertyName: "anchor", publicName: "anchor", isSignal: true, isRequired: false, transformFunction: null }, defaultOpen: { classPropertyName: "defaultOpen", publicName: "defaultOpen", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, openDelay: { classPropertyName: "openDelay", publicName: "openDelay", isSignal: true, isRequired: false, transformFunction: null }, closeDelay: { classPropertyName: "closeDelay", publicName: "closeDelay", isSignal: true, isRequired: false, transformFunction: null }, externalControl: { classPropertyName: "externalControl", publicName: "externalControl", isSignal: true, isRequired: false, transformFunction: null }, cssAnimation: { classPropertyName: "cssAnimation", publicName: "cssAnimation", isSignal: true, isRequired: false, transformFunction: null }, cssOpeningAnimation: { classPropertyName: "cssOpeningAnimation", publicName: "cssOpeningAnimation", isSignal: true, isRequired: false, transformFunction: null }, cssClosingAnimation: { classPropertyName: "cssClosingAnimation", publicName: "cssClosingAnimation", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "contentDirective", first: true, predicate: RdxHoverCardContentDirective, descendants: true, isSignal: true }, { propertyName: "triggerDirective", first: true, predicate: RdxHoverCardTriggerDirective, descendants: true, isSignal: true }, { propertyName: "arrowDirective", first: true, predicate: RdxHoverCardArrowToken, descendants: true, isSignal: true }, { propertyName: "closeDirective", first: true, predicate: RdxHoverCardCloseToken, descendants: true, isSignal: true }, { propertyName: "contentAttributesComponent", first: true, predicate: RdxHoverCardContentAttributesToken, descendants: true, isSignal: true }, { propertyName: "internalAnchorDirective", first: true, predicate: RdxHoverCardAnchorToken, descendants: true, isSignal: true }], exportAs: ["rdxHoverCardRoot"], ngImport: i0 }); }
877
- }
878
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxHoverCardRootDirective, decorators: [{
879
- type: Directive,
880
- args: [{
881
- selector: '[rdxHoverCardRoot]',
882
- exportAs: 'rdxHoverCardRoot'
883
- }]
884
- }], ctorParameters: () => [] });
885
-
886
- function injectHoverCardRoot(optional = false) {
887
- isDevMode() && assertInInjectionContext(injectHoverCardRoot);
888
- return inject(RdxHoverCardRootDirective, { optional });
889
- }
890
-
891
- class RdxHoverCardAnchorDirective {
892
- constructor() {
893
- /**
894
- * @ignore
895
- * If outside the rootDirective then null, otherwise the rootDirective directive - with optional `true` passed in as the first param.
896
- * If outside the rootDirective and non-null value that means the html structure is wrong - hover-card inside hover-card.
897
- * */
898
- this.rootDirective = injectHoverCardRoot(true);
899
- /** @ignore */
900
- this.elementRef = inject(ElementRef);
901
- /** @ignore */
902
- this.overlayOrigin = inject(CdkOverlayOrigin);
903
- /** @ignore */
904
- this.document = injectDocument();
905
- /** @ignore */
906
- this.name = computed(() => `rdx-hover-card-external-anchor-${this.rootDirective?.uniqueId()}`, ...(ngDevMode ? [{ debugName: "name" }] : []));
907
- }
908
- /** @ignore */
909
- click() {
910
- this.emitOutsideClick();
911
- }
912
- /** @ignore */
913
- setRoot(root) {
914
- this.rootDirective = root;
915
- }
916
- emitOutsideClick() {
917
- if (!this.rootDirective?.isOpen() || this.rootDirective?.contentDirective().onOverlayOutsideClickDisabled()) {
918
- return;
919
- }
920
- const clickEvent = new MouseEvent('click', {
921
- view: this.document.defaultView,
922
- bubbles: true,
923
- cancelable: true,
924
- relatedTarget: this.elementRef.nativeElement
925
- });
926
- this.rootDirective?.triggerDirective().elementRef.nativeElement.dispatchEvent(clickEvent);
927
- }
928
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxHoverCardAnchorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
929
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.3", type: RdxHoverCardAnchorDirective, isStandalone: true, selector: "[rdxHoverCardAnchor]", host: { attributes: { "type": "button" }, listeners: { "click": "click()" }, properties: { "attr.id": "name()", "attr.aria-haspopup": "\"dialog\"" } }, providers: [
930
- {
931
- provide: RdxHoverCardAnchorToken,
932
- useExisting: forwardRef(() => RdxHoverCardAnchorDirective)
933
- }
934
- ], exportAs: ["rdxHoverCardAnchor"], hostDirectives: [{ directive: i1.CdkOverlayOrigin }], ngImport: i0 }); }
935
- }
936
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxHoverCardAnchorDirective, decorators: [{
937
- type: Directive,
938
- args: [{
939
- selector: '[rdxHoverCardAnchor]',
940
- exportAs: 'rdxHoverCardAnchor',
941
- hostDirectives: [CdkOverlayOrigin],
942
- host: {
943
- type: 'button',
944
- '[attr.id]': 'name()',
945
- '[attr.aria-haspopup]': '"dialog"',
946
- '(click)': 'click()'
947
- },
948
- providers: [
949
- {
950
- provide: RdxHoverCardAnchorToken,
951
- useExisting: forwardRef(() => RdxHoverCardAnchorDirective)
952
- }
953
- ]
954
- }]
955
- }] });
956
-
957
- /**
958
- * @group Components
959
- */
960
- class RdxHoverCardArrowDirective {
961
- constructor() {
962
- /** @ignore */
963
- this.renderer = inject(Renderer2);
964
- /** @ignore */
965
- this.rootDirective = injectHoverCardRoot();
966
- /** @ignore */
967
- this.elementRef = inject(ElementRef);
968
- /**
969
- * The width of the arrow in pixels.
970
- * @group Props
971
- * @defaultValue 10
972
- */
973
- this.width = input(RDX_POSITIONING_DEFAULTS.arrow.width, ...(ngDevMode ? [{ debugName: "width", transform: numberAttribute }] : [{ transform: numberAttribute }]));
974
- /**
975
- * The height of the arrow in pixels.
976
- * @group Props
977
- * @defaultValue 5
978
- */
979
- this.height = input(RDX_POSITIONING_DEFAULTS.arrow.height, ...(ngDevMode ? [{ debugName: "height", transform: numberAttribute }] : [{ transform: numberAttribute }]));
980
- /** @ignore */
981
- this.arrowSvgElement = computed(() => {
982
- const width = this.width();
983
- const height = this.height();
984
- const svgElement = this.renderer.createElement('svg', 'svg');
985
- this.renderer.setAttribute(svgElement, 'viewBox', '0 0 30 10');
986
- this.renderer.setAttribute(svgElement, 'width', String(width));
987
- this.renderer.setAttribute(svgElement, 'height', String(height));
988
- const polygonElement = this.renderer.createElement('polygon', 'svg');
989
- this.renderer.setAttribute(polygonElement, 'points', '0,0 30,0 15,10');
990
- this.renderer.setAttribute(svgElement, 'preserveAspectRatio', 'none');
991
- this.renderer.appendChild(svgElement, polygonElement);
992
- return svgElement;
993
- }, ...(ngDevMode ? [{ debugName: "arrowSvgElement" }] : []));
994
- /** @ignore */
995
- this.currentArrowSvgElement = signal(void 0, ...(ngDevMode ? [{ debugName: "currentArrowSvgElement" }] : []));
996
- /** @ignore */
997
- this.position = toSignal(this.rootDirective.contentDirective().positionChange());
998
- afterNextRender({
999
- write: () => {
1000
- if (this.elementRef.nativeElement.parentElement) {
1001
- this.renderer.setStyle(this.elementRef.nativeElement.parentElement, 'position', 'relative');
1002
- }
1003
- this.renderer.setStyle(this.elementRef.nativeElement, 'position', 'absolute');
1004
- this.renderer.setStyle(this.elementRef.nativeElement, 'boxSizing', '');
1005
- this.renderer.setStyle(this.elementRef.nativeElement, 'fontSize', '0px');
1006
- }
1007
- });
1008
- this.onArrowSvgElementChangeEffect();
1009
- this.onContentPositionAndArrowDimensionsChangeEffect();
1010
- }
1011
- /** @ignore */
1012
- setAnchorOrTriggerRect() {
1013
- this.anchorOrTriggerRect = (this.rootDirective.anchorDirective() ?? this.rootDirective.triggerDirective()).elementRef.nativeElement.getBoundingClientRect();
1014
- }
1015
- /** @ignore */
1016
- setPosition(position, arrowDimensions) {
1017
- this.setAnchorOrTriggerRect();
1018
- const posParams = getArrowPositionParams(getSideAndAlignFromAllPossibleConnectedPositions(position.connectionPair), { width: arrowDimensions.width, height: arrowDimensions.height }, { width: this.anchorOrTriggerRect.width, height: this.anchorOrTriggerRect.height });
1019
- this.renderer.setStyle(this.elementRef.nativeElement, 'top', posParams.top);
1020
- this.renderer.setStyle(this.elementRef.nativeElement, 'bottom', '');
1021
- this.renderer.setStyle(this.elementRef.nativeElement, 'left', posParams.left);
1022
- this.renderer.setStyle(this.elementRef.nativeElement, 'right', '');
1023
- this.renderer.setStyle(this.elementRef.nativeElement, 'transform', posParams.transform);
1024
- this.renderer.setStyle(this.elementRef.nativeElement, 'transformOrigin', posParams.transformOrigin);
1025
- }
1026
- /** @ignore */
1027
- onArrowSvgElementChangeEffect() {
1028
- effect(() => {
1029
- const arrowElement = this.arrowSvgElement();
1030
- untracked(() => {
1031
- const currentArrowSvgElement = this.currentArrowSvgElement();
1032
- if (currentArrowSvgElement) {
1033
- this.renderer.removeChild(this.elementRef.nativeElement, currentArrowSvgElement);
1034
- }
1035
- this.currentArrowSvgElement.set(arrowElement);
1036
- this.renderer.setStyle(this.elementRef.nativeElement, 'width', `${this.width()}px`);
1037
- this.renderer.setStyle(this.elementRef.nativeElement, 'height', `${this.height()}px`);
1038
- this.renderer.appendChild(this.elementRef.nativeElement, this.currentArrowSvgElement());
1039
- });
1040
- });
1041
- }
1042
- /** @ignore */
1043
- onContentPositionAndArrowDimensionsChangeEffect() {
1044
- effect(() => {
1045
- const position = this.position();
1046
- const arrowDimensions = { width: this.width(), height: this.height() };
1047
- untracked(() => {
1048
- if (!position) {
1049
- return;
1050
- }
1051
- this.setPosition(position, arrowDimensions);
1052
- });
1053
- });
1054
- }
1055
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxHoverCardArrowDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1056
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.3", type: RdxHoverCardArrowDirective, isStandalone: true, selector: "[rdxHoverCardArrow]", inputs: { width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
1057
- {
1058
- provide: RdxHoverCardArrowToken,
1059
- useExisting: forwardRef(() => RdxHoverCardArrowDirective)
1060
- }
1061
- ], ngImport: i0 }); }
1062
- }
1063
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxHoverCardArrowDirective, decorators: [{
1064
- type: Directive,
1065
- args: [{
1066
- selector: '[rdxHoverCardArrow]',
1067
- providers: [
1068
- {
1069
- provide: RdxHoverCardArrowToken,
1070
- useExisting: forwardRef(() => RdxHoverCardArrowDirective)
1071
- }
1072
- ]
1073
- }]
1074
- }], ctorParameters: () => [] });
1075
-
1076
- /**
1077
- * TODO: to be removed? But it seems to be useful when controlled from outside
1078
- */
1079
- class RdxHoverCardCloseDirective {
1080
- constructor() {
1081
- /** @ignore */
1082
- this.rootDirective = injectHoverCardRoot();
1083
- /** @ignore */
1084
- this.elementRef = inject(ElementRef);
1085
- /** @ignore */
1086
- this.renderer = inject(Renderer2);
1087
- this.onIsControlledExternallyEffect();
1088
- }
1089
- /** @ignore */
1090
- onIsControlledExternallyEffect() {
1091
- effect(() => {
1092
- const isControlledExternally = this.rootDirective.controlledExternally()();
1093
- untracked(() => {
1094
- this.renderer.setStyle(this.elementRef.nativeElement, 'display', isControlledExternally ? null : 'none');
1095
- });
1096
- });
1097
- }
1098
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxHoverCardCloseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1099
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.3", type: RdxHoverCardCloseDirective, isStandalone: true, selector: "[rdxHoverCardClose]", host: { attributes: { "type": "button" }, listeners: { "click": "rootDirective.handleClose(true)" } }, providers: [
1100
- {
1101
- provide: RdxHoverCardCloseToken,
1102
- useExisting: forwardRef(() => RdxHoverCardCloseDirective)
1103
- }
1104
- ], ngImport: i0 }); }
1105
- }
1106
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxHoverCardCloseDirective, decorators: [{
1107
- type: Directive,
1108
- args: [{
1109
- selector: '[rdxHoverCardClose]',
1110
- host: {
1111
- type: 'button',
1112
- '(click)': 'rootDirective.handleClose(true)'
1113
- },
1114
- providers: [
1115
- {
1116
- provide: RdxHoverCardCloseToken,
1117
- useExisting: forwardRef(() => RdxHoverCardCloseDirective)
1118
- }
1119
- ]
1120
- }]
1121
- }], ctorParameters: () => [] });
1122
-
1123
- class RdxHoverCardContentAttributesComponent {
1124
- constructor() {
1125
- /** @ignore */
1126
- this.rootDirective = injectHoverCardRoot();
1127
- /** @ignore */
1128
- this.name = computed(() => `rdx-hover-card-content-attributes-${this.rootDirective.uniqueId()}`, ...(ngDevMode ? [{ debugName: "name" }] : []));
1129
- /** @ignore */
1130
- this.disableAnimation = computed(() => !this.canAnimate(), ...(ngDevMode ? [{ debugName: "disableAnimation" }] : []));
1131
- }
1132
- /** @ignore */
1133
- onAnimationStart(_) {
1134
- this.rootDirective.cssAnimationStatus.set(this.rootDirective.state() === RdxHoverCardState.OPEN
1135
- ? RdxHoverCardAnimationStatus.OPEN_STARTED
1136
- : RdxHoverCardAnimationStatus.CLOSED_STARTED);
1137
- }
1138
- /** @ignore */
1139
- onAnimationEnd(_) {
1140
- this.rootDirective.cssAnimationStatus.set(this.rootDirective.state() === RdxHoverCardState.OPEN
1141
- ? RdxHoverCardAnimationStatus.OPEN_ENDED
1142
- : RdxHoverCardAnimationStatus.CLOSED_ENDED);
1143
- }
1144
- /** @ignore */
1145
- pointerenter() {
1146
- this.rootDirective.handleOpen();
1147
- }
1148
- /** @ignore */
1149
- pointerleave() {
1150
- this.rootDirective.handleClose();
1151
- }
1152
- /** @ignore */
1153
- focus() {
1154
- this.rootDirective.handleOpen();
1155
- }
1156
- /** @ignore */
1157
- blur() {
1158
- this.rootDirective.handleClose();
1159
- }
1160
- /** @ignore */
1161
- canAnimate() {
1162
- return (this.rootDirective.cssAnimation() &&
1163
- ((this.rootDirective.cssOpeningAnimation() && this.rootDirective.state() === RdxHoverCardState.OPEN) ||
1164
- (this.rootDirective.cssClosingAnimation() && this.rootDirective.state() === RdxHoverCardState.CLOSED)));
1165
- }
1166
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxHoverCardContentAttributesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1167
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.3", type: RdxHoverCardContentAttributesComponent, isStandalone: true, selector: "[rdxHoverCardContentAttributes]", host: { listeners: { "animationstart": "onAnimationStart($event)", "animationend": "onAnimationEnd($event)", "pointerenter": "pointerenter()", "pointerleave": "pointerleave()", "focus": "focus()", "blur": "blur()" }, properties: { "attr.role": "\"dialog\"", "attr.id": "name()", "attr.data-state": "rootDirective.state()", "attr.data-side": "rootDirective.contentDirective().side()", "attr.data-align": "rootDirective.contentDirective().align()", "style": "disableAnimation() ? {animation: \"none !important\"} : null" } }, providers: [
1168
- {
1169
- provide: RdxHoverCardContentAttributesToken,
1170
- useExisting: forwardRef(() => RdxHoverCardContentAttributesComponent)
1171
- }
1172
- ], ngImport: i0, template: `
1173
- <ng-content />
1174
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1175
- }
1176
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxHoverCardContentAttributesComponent, decorators: [{
1177
- type: Component,
1178
- args: [{
1179
- selector: '[rdxHoverCardContentAttributes]',
1180
- template: `
1181
- <ng-content />
1182
- `,
1183
- host: {
1184
- '[attr.role]': '"dialog"',
1185
- '[attr.id]': 'name()',
1186
- '[attr.data-state]': 'rootDirective.state()',
1187
- '[attr.data-side]': 'rootDirective.contentDirective().side()',
1188
- '[attr.data-align]': 'rootDirective.contentDirective().align()',
1189
- '[style]': 'disableAnimation() ? {animation: "none !important"} : null',
1190
- '(animationstart)': 'onAnimationStart($event)',
1191
- '(animationend)': 'onAnimationEnd($event)',
1192
- '(pointerenter)': 'pointerenter()',
1193
- '(pointerleave)': 'pointerleave()',
1194
- '(focus)': 'focus()',
1195
- '(blur)': 'blur()'
1196
- },
1197
- providers: [
1198
- {
1199
- provide: RdxHoverCardContentAttributesToken,
1200
- useExisting: forwardRef(() => RdxHoverCardContentAttributesComponent)
1201
- }
1202
- ],
1203
- changeDetection: ChangeDetectionStrategy.OnPush
1204
- }]
1205
- }] });
1206
-
1207
- const _imports = [
1208
- RdxHoverCardArrowDirective,
1209
- RdxHoverCardCloseDirective,
1210
- RdxHoverCardContentDirective,
1211
- RdxHoverCardTriggerDirective,
1212
- RdxHoverCardRootDirective,
1213
- RdxHoverCardAnchorDirective,
1214
- RdxHoverCardContentAttributesComponent
1215
- ];
1216
- class RdxHoverCardModule {
1217
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxHoverCardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1218
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.3", ngImport: i0, type: RdxHoverCardModule, imports: [RdxHoverCardArrowDirective,
1219
- RdxHoverCardCloseDirective,
1220
- RdxHoverCardContentDirective,
1221
- RdxHoverCardTriggerDirective,
1222
- RdxHoverCardRootDirective,
1223
- RdxHoverCardAnchorDirective,
1224
- RdxHoverCardContentAttributesComponent], exports: [RdxHoverCardArrowDirective,
1225
- RdxHoverCardCloseDirective,
1226
- RdxHoverCardContentDirective,
1227
- RdxHoverCardTriggerDirective,
1228
- RdxHoverCardRootDirective,
1229
- RdxHoverCardAnchorDirective,
1230
- RdxHoverCardContentAttributesComponent] }); }
1231
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxHoverCardModule }); }
1232
- }
1233
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: RdxHoverCardModule, decorators: [{
1234
- type: NgModule,
1235
- args: [{
1236
- imports: [..._imports],
1237
- exports: [..._imports]
1238
- }]
1239
- }] });
1240
-
1241
- /**
1242
- * Generated bundle index. Do not edit.
1243
- */
1244
-
1245
- export { RdxHoverCardAnchorDirective, RdxHoverCardArrowDirective, RdxHoverCardCloseDirective, RdxHoverCardContentAttributesComponent, RdxHoverCardContentDirective, RdxHoverCardModule, RdxHoverCardRootDirective, RdxHoverCardTriggerDirective };
1246
- //# sourceMappingURL=radix-ng-primitives-hover-card.mjs.map