@ojiepermana/angular 22.1.14 → 22.2.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 (252) hide show
  1. package/README.md +8 -6
  2. package/SUPPORT.md +3 -3
  3. package/chart/README.md +1 -1
  4. package/component/README.md +2 -2
  5. package/component/calendar/README.md +3 -15
  6. package/component/drawer/README.md +1 -2
  7. package/fesm2022/ojiepermana-angular-chart-area.mjs +352 -137
  8. package/fesm2022/ojiepermana-angular-chart-bar.mjs +744 -524
  9. package/fesm2022/ojiepermana-angular-chart-core.mjs +1140 -1344
  10. package/fesm2022/ojiepermana-angular-chart-line.mjs +393 -147
  11. package/fesm2022/ojiepermana-angular-chart-pie.mjs +408 -179
  12. package/fesm2022/ojiepermana-angular-chart-primitives.mjs +1262 -920
  13. package/fesm2022/ojiepermana-angular-chart-radar.mjs +473 -205
  14. package/fesm2022/ojiepermana-angular-chart-radial.mjs +425 -182
  15. package/fesm2022/ojiepermana-angular-chart-scatter.mjs +386 -210
  16. package/fesm2022/ojiepermana-angular-chart.mjs +3 -19
  17. package/fesm2022/ojiepermana-angular-component-accordion.mjs +485 -243
  18. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs +963 -325
  19. package/fesm2022/ojiepermana-angular-component-alert.mjs +266 -103
  20. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs +80 -35
  21. package/fesm2022/ojiepermana-angular-component-avatar.mjs +402 -135
  22. package/fesm2022/ojiepermana-angular-component-badge.mjs +109 -59
  23. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs +410 -142
  24. package/fesm2022/ojiepermana-angular-component-button-group.mjs +249 -96
  25. package/fesm2022/ojiepermana-angular-component-button.mjs +153 -75
  26. package/fesm2022/ojiepermana-angular-component-calendar.mjs +531 -418
  27. package/fesm2022/ojiepermana-angular-component-card.mjs +457 -171
  28. package/fesm2022/ojiepermana-angular-component-carousel.mjs +642 -272
  29. package/fesm2022/ojiepermana-angular-component-checkbox.mjs +312 -108
  30. package/fesm2022/ojiepermana-angular-component-collapsible.mjs +299 -115
  31. package/fesm2022/ojiepermana-angular-component-combobox.mjs +396 -183
  32. package/fesm2022/ojiepermana-angular-component-command.mjs +807 -347
  33. package/fesm2022/ojiepermana-angular-component-composer.mjs +807 -330
  34. package/fesm2022/ojiepermana-angular-component-context-menu.mjs +196 -161
  35. package/fesm2022/ojiepermana-angular-component-date-picker.mjs +650 -338
  36. package/fesm2022/ojiepermana-angular-component-dialog.mjs +710 -316
  37. package/fesm2022/ojiepermana-angular-component-drawer.mjs +2 -5
  38. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs +1212 -646
  39. package/fesm2022/ojiepermana-angular-component-editor.mjs +987 -502
  40. package/fesm2022/ojiepermana-angular-component-empty.mjs +350 -137
  41. package/fesm2022/ojiepermana-angular-component-form.mjs +813 -434
  42. package/fesm2022/ojiepermana-angular-component-hover-card.mjs +486 -277
  43. package/fesm2022/ojiepermana-angular-component-icon.mjs +241 -140
  44. package/fesm2022/ojiepermana-angular-component-input-group.mjs +449 -176
  45. package/fesm2022/ojiepermana-angular-component-input-otp.mjs +891 -488
  46. package/fesm2022/ojiepermana-angular-component-input.mjs +86 -55
  47. package/fesm2022/ojiepermana-angular-component-item.mjs +713 -261
  48. package/fesm2022/ojiepermana-angular-component-kanban.mjs +714 -216
  49. package/fesm2022/ojiepermana-angular-component-kbd.mjs +124 -52
  50. package/fesm2022/ojiepermana-angular-component-label.mjs +82 -31
  51. package/fesm2022/ojiepermana-angular-component-menubar.mjs +479 -329
  52. package/fesm2022/ojiepermana-angular-component-native-select.mjs +167 -65
  53. package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs +683 -380
  54. package/fesm2022/ojiepermana-angular-component-pagination.mjs +277 -94
  55. package/fesm2022/ojiepermana-angular-component-pillbox.mjs +1283 -607
  56. package/fesm2022/ojiepermana-angular-component-popover.mjs +291 -204
  57. package/fesm2022/ojiepermana-angular-component-progress.mjs +176 -53
  58. package/fesm2022/ojiepermana-angular-component-radio.mjs +449 -142
  59. package/fesm2022/ojiepermana-angular-component-resizable.mjs +659 -453
  60. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs +117 -39
  61. package/fesm2022/ojiepermana-angular-component-segmented-control.mjs +351 -172
  62. package/fesm2022/ojiepermana-angular-component-select.mjs +475 -345
  63. package/fesm2022/ojiepermana-angular-component-separator.mjs +102 -35
  64. package/fesm2022/ojiepermana-angular-component-sheet.mjs +797 -347
  65. package/fesm2022/ojiepermana-angular-component-skeleton.mjs +62 -29
  66. package/fesm2022/ojiepermana-angular-component-slider.mjs +592 -376
  67. package/fesm2022/ojiepermana-angular-component-spinner.mjs +135 -38
  68. package/fesm2022/ojiepermana-angular-component-switch.mjs +315 -103
  69. package/fesm2022/ojiepermana-angular-component-table.mjs +440 -153
  70. package/fesm2022/ojiepermana-angular-component-tabs.mjs +590 -317
  71. package/fesm2022/ojiepermana-angular-component-textarea.mjs +85 -50
  72. package/fesm2022/ojiepermana-angular-component-timeline.mjs +609 -231
  73. package/fesm2022/ojiepermana-angular-component-toast.mjs +229 -243
  74. package/fesm2022/ojiepermana-angular-component-toggle-group.mjs +573 -288
  75. package/fesm2022/ojiepermana-angular-component-toggle.mjs +187 -78
  76. package/fesm2022/ojiepermana-angular-component-tooltip.mjs +798 -517
  77. package/fesm2022/ojiepermana-angular-component-utils-core.mjs +159 -292
  78. package/fesm2022/ojiepermana-angular-component-utils-overlay.mjs +46 -58
  79. package/fesm2022/ojiepermana-angular-component-utils-scale.mjs +76 -38
  80. package/fesm2022/ojiepermana-angular-component-utils.mjs +2 -8
  81. package/fesm2022/ojiepermana-angular-component.mjs +0 -10
  82. package/fesm2022/ojiepermana-angular-navigation-core.mjs +13 -23
  83. package/fesm2022/ojiepermana-angular-navigation-icon.mjs +35 -24
  84. package/fesm2022/ojiepermana-angular-navigation-navigation-badge-count.component-BKCeWzml.mjs +129 -0
  85. package/fesm2022/ojiepermana-angular-navigation-navigation-dockbar-menu.component-DFEJK2jD.mjs +811 -0
  86. package/fesm2022/{ojiepermana-angular-navigation-navigation-entry-grid.component-COQ-60DS.mjs → ojiepermana-angular-navigation-navigation-entry-grid.component-mpK9Ar08.mjs} +387 -183
  87. package/fesm2022/ojiepermana-angular-navigation-navigation-flyout-menu.component-BPgH7FJk.mjs +650 -0
  88. package/fesm2022/ojiepermana-angular-navigation-navigation-horizontal.component-DMpYcD9t.mjs +662 -0
  89. package/fesm2022/ojiepermana-angular-navigation-navigation-item.component-Basp5SIk.mjs +1228 -0
  90. package/fesm2022/ojiepermana-angular-navigation-navigation-list.component-YUzHI9Pj.mjs +311 -0
  91. package/fesm2022/ojiepermana-angular-navigation-service.mjs +542 -724
  92. package/fesm2022/ojiepermana-angular-navigation-types.mjs +27 -56
  93. package/fesm2022/ojiepermana-angular-navigation.mjs +3052 -4
  94. package/fesm2022/ojiepermana-angular-sdk.mjs +91 -201
  95. package/fesm2022/ojiepermana-angular-theme-component-settings.mjs +1115 -737
  96. package/fesm2022/ojiepermana-angular-theme-layout-services.mjs +245 -328
  97. package/fesm2022/ojiepermana-angular-theme-layout-types.mjs +35 -38
  98. package/fesm2022/ojiepermana-angular-theme-layout-wrapper.mjs +1719 -552
  99. package/fesm2022/ojiepermana-angular-theme-layout.mjs +847 -496
  100. package/fesm2022/ojiepermana-angular-theme-page-core.mjs +288 -358
  101. package/fesm2022/ojiepermana-angular-theme-page-filter.mjs +362 -224
  102. package/fesm2022/ojiepermana-angular-theme-page-overview.mjs +88 -0
  103. package/fesm2022/ojiepermana-angular-theme-page-root.mjs +576 -254
  104. package/fesm2022/ojiepermana-angular-theme-page-side.mjs +317 -177
  105. package/fesm2022/ojiepermana-angular-theme-page-slots.mjs +256 -112
  106. package/fesm2022/ojiepermana-angular-theme-page.mjs +7 -12
  107. package/fesm2022/ojiepermana-angular-theme-shell-services.mjs +215 -326
  108. package/fesm2022/ojiepermana-angular-theme-shell-types.mjs +68 -129
  109. package/fesm2022/ojiepermana-angular-theme-shell.mjs +907 -378
  110. package/fesm2022/ojiepermana-angular-theme-styles.mjs +521 -720
  111. package/fesm2022/ojiepermana-angular-theme.mjs +0 -10
  112. package/fesm2022/ojiepermana-angular.mjs +5 -24
  113. package/navigation/README.md +1 -1
  114. package/package.json +16 -12
  115. package/sdk/README.md +1 -1
  116. package/sdk/src/writer/index.js +2 -2
  117. package/theme/README.md +1 -1
  118. package/theme/layout/README.md +2 -4
  119. package/theme/page/README.md +50 -0
  120. package/theme/styles/README.md +10 -10
  121. package/theme/styles/css/base/prefers-dark.css +1 -1
  122. package/theme/styles/css/base/status.css +1 -1
  123. package/theme/styles/css/color/amber.css +1 -1
  124. package/theme/styles/css/color/blue.css +1 -1
  125. package/theme/styles/css/color/cyan.css +1 -1
  126. package/theme/styles/css/color/emerald.css +1 -1
  127. package/theme/styles/css/color/fuchsia.css +1 -1
  128. package/theme/styles/css/color/green.css +1 -1
  129. package/theme/styles/css/color/indigo.css +1 -1
  130. package/theme/styles/css/color/lime.css +1 -1
  131. package/theme/styles/css/color/orange.css +1 -1
  132. package/theme/styles/css/color/pink.css +1 -1
  133. package/theme/styles/css/color/purple.css +1 -1
  134. package/theme/styles/css/color/red.css +1 -1
  135. package/theme/styles/css/color/rose.css +1 -1
  136. package/theme/styles/css/color/sky.css +1 -1
  137. package/theme/styles/css/color/teal.css +1 -1
  138. package/theme/styles/css/color/violet.css +1 -1
  139. package/theme/styles/css/color/yellow.css +1 -1
  140. package/theme/styles/css/neutral/gray.css +1 -1
  141. package/theme/styles/css/neutral/mauve.css +1 -1
  142. package/theme/styles/css/neutral/mist.css +1 -1
  143. package/theme/styles/css/neutral/neutral.css +1 -1
  144. package/theme/styles/css/neutral/olive.css +1 -1
  145. package/theme/styles/css/neutral/slate.css +1 -1
  146. package/theme/styles/css/neutral/stone.css +1 -1
  147. package/theme/styles/css/neutral/taupe.css +1 -1
  148. package/theme/styles/css/neutral/zinc.css +1 -1
  149. package/types/ojiepermana-angular-chart-area.d.ts +126 -63
  150. package/types/ojiepermana-angular-chart-bar.d.ts +244 -154
  151. package/types/ojiepermana-angular-chart-core.d.ts +409 -398
  152. package/types/ojiepermana-angular-chart-line.d.ts +141 -68
  153. package/types/ojiepermana-angular-chart-pie.d.ts +192 -121
  154. package/types/ojiepermana-angular-chart-primitives.d.ts +283 -214
  155. package/types/ojiepermana-angular-chart-radar.d.ts +189 -108
  156. package/types/ojiepermana-angular-chart-radial.d.ts +177 -106
  157. package/types/ojiepermana-angular-chart-scatter.d.ts +166 -110
  158. package/types/ojiepermana-angular-chart.d.ts +3 -2
  159. package/types/ojiepermana-angular-component-accordion.d.ts +135 -81
  160. package/types/ojiepermana-angular-component-alert-dialog.d.ts +271 -123
  161. package/types/ojiepermana-angular-component-alert.d.ts +69 -39
  162. package/types/ojiepermana-angular-component-aspect-ratio.d.ts +20 -12
  163. package/types/ojiepermana-angular-component-avatar.d.ts +103 -49
  164. package/types/ojiepermana-angular-component-badge.d.ts +36 -24
  165. package/types/ojiepermana-angular-component-breadcrumb.d.ts +79 -40
  166. package/types/ojiepermana-angular-component-button-group.d.ts +48 -24
  167. package/types/ojiepermana-angular-component-button.d.ts +44 -27
  168. package/types/ojiepermana-angular-component-calendar.d.ts +145 -107
  169. package/types/ojiepermana-angular-component-card.d.ts +112 -63
  170. package/types/ojiepermana-angular-component-carousel.d.ts +150 -81
  171. package/types/ojiepermana-angular-component-checkbox.d.ts +96 -38
  172. package/types/ojiepermana-angular-component-collapsible.d.ts +65 -39
  173. package/types/ojiepermana-angular-component-combobox.d.ts +100 -55
  174. package/types/ojiepermana-angular-component-command.d.ts +206 -121
  175. package/types/ojiepermana-angular-component-composer.d.ts +184 -84
  176. package/types/ojiepermana-angular-component-context-menu.d.ts +51 -41
  177. package/types/ojiepermana-angular-component-date-picker.d.ts +199 -109
  178. package/types/ojiepermana-angular-component-dialog.d.ts +200 -105
  179. package/types/ojiepermana-angular-component-drawer.d.ts +2 -1
  180. package/types/ojiepermana-angular-component-dropdown-menu.d.ts +324 -202
  181. package/types/ojiepermana-angular-component-editor.d.ts +215 -117
  182. package/types/ojiepermana-angular-component-empty.d.ts +80 -45
  183. package/types/ojiepermana-angular-component-form.d.ts +185 -121
  184. package/types/ojiepermana-angular-component-hover-card.d.ts +130 -72
  185. package/types/ojiepermana-angular-component-icon.d.ts +87 -57
  186. package/types/ojiepermana-angular-component-input-group.d.ts +93 -46
  187. package/types/ojiepermana-angular-component-input-otp.d.ts +243 -150
  188. package/types/ojiepermana-angular-component-input.d.ts +27 -17
  189. package/types/ojiepermana-angular-component-item.d.ts +160 -84
  190. package/types/ojiepermana-angular-component-kanban.d.ts +157 -62
  191. package/types/ojiepermana-angular-component-kbd.d.ts +24 -15
  192. package/types/ojiepermana-angular-component-label.d.ts +19 -11
  193. package/types/ojiepermana-angular-component-menubar.d.ts +120 -90
  194. package/types/ojiepermana-angular-component-native-select.d.ts +37 -24
  195. package/types/ojiepermana-angular-component-navigation-menu.d.ts +157 -98
  196. package/types/ojiepermana-angular-component-pagination.d.ts +78 -28
  197. package/types/ojiepermana-angular-component-pillbox.d.ts +361 -204
  198. package/types/ojiepermana-angular-component-popover.d.ts +94 -64
  199. package/types/ojiepermana-angular-component-progress.d.ts +45 -17
  200. package/types/ojiepermana-angular-component-radio.d.ts +129 -53
  201. package/types/ojiepermana-angular-component-resizable.d.ts +160 -112
  202. package/types/ojiepermana-angular-component-scroll-area.d.ts +33 -15
  203. package/types/ojiepermana-angular-component-segmented-control.d.ts +94 -50
  204. package/types/ojiepermana-angular-component-select.d.ts +94 -77
  205. package/types/ojiepermana-angular-component-separator.d.ts +26 -14
  206. package/types/ojiepermana-angular-component-sheet.d.ts +226 -116
  207. package/types/ojiepermana-angular-component-skeleton.d.ts +13 -10
  208. package/types/ojiepermana-angular-component-slider.d.ts +140 -75
  209. package/types/ojiepermana-angular-component-spinner.d.ts +31 -13
  210. package/types/ojiepermana-angular-component-switch.d.ts +97 -40
  211. package/types/ojiepermana-angular-component-table.d.ts +102 -50
  212. package/types/ojiepermana-angular-component-tabs.d.ts +174 -115
  213. package/types/ojiepermana-angular-component-textarea.d.ts +27 -17
  214. package/types/ojiepermana-angular-component-timeline.d.ts +141 -59
  215. package/types/ojiepermana-angular-component-toast.d.ts +51 -55
  216. package/types/ojiepermana-angular-component-toggle-group.d.ts +159 -88
  217. package/types/ojiepermana-angular-component-toggle.d.ts +47 -25
  218. package/types/ojiepermana-angular-component-tooltip.d.ts +222 -132
  219. package/types/ojiepermana-angular-component-utils-core.d.ts +81 -90
  220. package/types/ojiepermana-angular-component-utils-overlay.d.ts +7 -11
  221. package/types/ojiepermana-angular-component-utils-scale.d.ts +20 -12
  222. package/types/ojiepermana-angular-component-utils.d.ts +2 -2
  223. package/types/ojiepermana-angular-component.d.ts +1 -2
  224. package/types/ojiepermana-angular-navigation-core.d.ts +46 -50
  225. package/types/ojiepermana-angular-navigation-icon.d.ts +9 -12
  226. package/types/ojiepermana-angular-navigation-service.d.ts +112 -115
  227. package/types/ojiepermana-angular-navigation-types.d.ts +121 -125
  228. package/types/ojiepermana-angular-navigation.d.ts +663 -374
  229. package/types/ojiepermana-angular-sdk.d.ts +69 -71
  230. package/types/ojiepermana-angular-theme-component-settings.d.ts +115 -83
  231. package/types/ojiepermana-angular-theme-layout-services.d.ts +119 -124
  232. package/types/ojiepermana-angular-theme-layout-types.d.ts +27 -31
  233. package/types/ojiepermana-angular-theme-layout-wrapper.d.ts +399 -187
  234. package/types/ojiepermana-angular-theme-layout.d.ts +201 -113
  235. package/types/ojiepermana-angular-theme-page-core.d.ts +136 -142
  236. package/types/ojiepermana-angular-theme-page-filter.d.ts +112 -62
  237. package/types/ojiepermana-angular-theme-page-overview.d.ts +28 -0
  238. package/types/ojiepermana-angular-theme-page-root.d.ts +172 -88
  239. package/types/ojiepermana-angular-theme-page-side.d.ts +89 -49
  240. package/types/ojiepermana-angular-theme-page-slots.d.ts +58 -37
  241. package/types/ojiepermana-angular-theme-page.d.ts +7 -5
  242. package/types/ojiepermana-angular-theme-shell-services.d.ts +119 -125
  243. package/types/ojiepermana-angular-theme-shell-types.d.ts +38 -41
  244. package/types/ojiepermana-angular-theme-shell.d.ts +139 -61
  245. package/types/ojiepermana-angular-theme-styles.d.ts +184 -196
  246. package/types/ojiepermana-angular-theme.d.ts +1 -2
  247. package/types/ojiepermana-angular.d.ts +5 -5
  248. package/fesm2022/ojiepermana-angular-navigation-navigation-badge-count.component-Be3IqzG4.mjs +0 -91
  249. package/fesm2022/ojiepermana-angular-navigation-navigation-dockbar-menu.component-Bc7DWK3R.mjs +0 -522
  250. package/fesm2022/ojiepermana-angular-navigation-navigation-flyout-menu.component-DA8VPEn7.mjs +0 -404
  251. package/fesm2022/ojiepermana-angular-navigation-navigation-horizontal.component-U2TJTzlW.mjs +0 -466
  252. package/fesm2022/ojiepermana-angular-navigation-ojiepermana-angular-navigation-CIUhmytH.mjs +0 -2668
@@ -1,277 +1,486 @@
1
- import * as i0 from '@angular/core';
2
- import { InjectionToken, input, forwardRef, Component, inject, TemplateRef, Directive, ViewContainerRef, ElementRef, DestroyRef, output, signal } from '@angular/core';
3
- import { Overlay } from '@angular/cdk/overlay';
4
- import { TemplatePortal } from '@angular/cdk/portal';
5
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
- import { connectedPositionFor, oppositeSide, overlayDismissals } from '@ojiepermana/angular/component/utils/overlay';
7
-
8
- const HOVER_CARD_DEFAULTS = new InjectionToken('HOVER_CARD_DEFAULTS');
9
- class HoverCardComponent {
10
- side = input('bottom', /* @ts-ignore */
11
- ...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
12
- align = input('center', /* @ts-ignore */
13
- ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
14
- sideOffset = input(8, /* @ts-ignore */
15
- ...(ngDevMode ? [{ debugName: "sideOffset" }] : /* istanbul ignore next */ []));
16
- openDelay = input(100, /* @ts-ignore */
17
- ...(ngDevMode ? [{ debugName: "openDelay" }] : /* istanbul ignore next */ []));
18
- closeDelay = input(100, /* @ts-ignore */
19
- ...(ngDevMode ? [{ debugName: "closeDelay" }] : /* istanbul ignore next */ []));
20
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: HoverCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
21
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: HoverCardComponent, isStandalone: true, selector: "HoverCard", inputs: { side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, sideOffset: { classPropertyName: "sideOffset", publicName: "sideOffset", 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 } }, host: { classAttribute: "contents" }, providers: [{ provide: HOVER_CARD_DEFAULTS, useExisting: forwardRef(() => HoverCardComponent) }], ngImport: i0, template: '<ng-content />', isInline: true });
22
- }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: HoverCardComponent, decorators: [{
24
- type: Component,
25
- args: [{
26
- selector: 'HoverCard',
27
- providers: [{ provide: HOVER_CARD_DEFAULTS, useExisting: forwardRef(() => HoverCardComponent) }],
28
- host: {
29
- class: 'contents',
30
- },
31
- template: '<ng-content />',
32
- }]
33
- }], propDecorators: { side: [{ type: i0.Input, args: [{ isSignal: true, alias: "side", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], sideOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "sideOffset", required: false }] }], openDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "openDelay", required: false }] }], closeDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeDelay", required: false }] }] } });
34
-
35
- class HoverCardContentDirective {
36
- template = inject(TemplateRef);
37
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: HoverCardContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
38
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.6", type: HoverCardContentDirective, isStandalone: true, selector: "ng-template[HoverCardContent]", exportAs: ["HoverCardContent"], ngImport: i0 });
39
- }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: HoverCardContentDirective, decorators: [{
41
- type: Directive,
42
- args: [{
43
- selector: 'ng-template[HoverCardContent]',
44
- exportAs: 'HoverCardContent',
45
- }]
46
- }] });
47
-
48
- // Hover cards are visual preview content (Radix-style): the trigger keeps its
49
- // own semantics and must NOT advertise aria-haspopup="dialog" for content that
50
- // is not a dialog.
51
- class HoverCardTriggerDirective {
52
- overlay = inject(Overlay);
53
- vcr = inject(ViewContainerRef);
54
- el = inject(ElementRef);
55
- destroyRef = inject(DestroyRef);
56
- defaults = inject(HOVER_CARD_DEFAULTS, { optional: true });
57
- HoverCardTrigger = input.required(/* @ts-ignore */
58
- ...(ngDevMode ? [{ debugName: "HoverCardTrigger" }] : /* istanbul ignore next */ []));
59
- side = input(undefined, /* @ts-ignore */
60
- ...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
61
- align = input(undefined, /* @ts-ignore */
62
- ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
63
- sideOffset = input(undefined, /* @ts-ignore */
64
- ...(ngDevMode ? [{ debugName: "sideOffset" }] : /* istanbul ignore next */ []));
65
- openDelay = input(undefined, /* @ts-ignore */
66
- ...(ngDevMode ? [{ debugName: "openDelay" }] : /* istanbul ignore next */ []));
67
- closeDelay = input(undefined, /* @ts-ignore */
68
- ...(ngDevMode ? [{ debugName: "closeDelay" }] : /* istanbul ignore next */ []));
69
- disabled = input(false, /* @ts-ignore */
70
- ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
71
- openedChange = output();
72
- isOpen = signal(false, /* @ts-ignore */
73
- ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
74
- overlayRef = null;
75
- openTimeoutId = null;
76
- closeTimeoutId = null;
77
- isTriggerHovered = false;
78
- isContentHovered = false;
79
- isTriggerFocused = false;
80
- isContentFocused = false;
81
- constructor() {
82
- this.destroyRef.onDestroy(() => {
83
- this.clearOpenTimeout();
84
- this.clearCloseTimeout();
85
- this.close(false);
86
- });
87
- }
88
- handleTriggerPointerEnter() {
89
- if (this.disabled()) {
90
- return;
91
- }
92
- this.isTriggerHovered = true;
93
- this.clearCloseTimeout();
94
- this.scheduleOpen();
95
- }
96
- handleTriggerPointerLeave(event) {
97
- this.isTriggerHovered = false;
98
- if (this.relatedTargetInsideContent(event.relatedTarget)) {
99
- return;
100
- }
101
- this.scheduleClose();
102
- }
103
- handleTriggerFocusIn() {
104
- if (this.disabled()) {
105
- return;
106
- }
107
- this.isTriggerFocused = true;
108
- this.clearCloseTimeout();
109
- this.scheduleOpen();
110
- }
111
- handleTriggerFocusOut(event) {
112
- this.isTriggerFocused = false;
113
- if (this.relatedTargetInsideContent(event.relatedTarget)) {
114
- return;
115
- }
116
- this.scheduleClose();
117
- }
118
- open() {
119
- if (this.isOpen() || this.disabled()) {
120
- return;
121
- }
122
- const side = this.side() ?? this.defaults?.side() ?? 'bottom';
123
- const align = this.align() ?? this.defaults?.align() ?? 'center';
124
- const sideOffset = this.sideOffset() ?? this.defaults?.sideOffset() ?? 8;
125
- const primary = connectedPositionFor(side, align, sideOffset);
126
- const fallback = connectedPositionFor(oppositeSide(side), align, sideOffset);
127
- const positionStrategy = this.overlay
128
- .position()
129
- .flexibleConnectedTo(this.el)
130
- .withPositions([primary, fallback])
131
- .withPush(true)
132
- .withViewportMargin(8)
133
- .withFlexibleDimensions(false);
134
- this.overlayRef = this.overlay.create({
135
- positionStrategy,
136
- scrollStrategy: this.overlay.scrollStrategies.reposition(),
137
- hasBackdrop: false,
138
- panelClass: 'hover-card-panel',
139
- });
140
- const portal = new TemplatePortal(this.HoverCardTrigger().template, this.vcr);
141
- this.overlayRef.attach(portal);
142
- this.bindOverlayInteractions();
143
- overlayDismissals(this.overlayRef, this.el.nativeElement)
144
- .pipe(takeUntilDestroyed(this.destroyRef))
145
- .subscribe(() => this.close());
146
- this.isOpen.set(true);
147
- this.openedChange.emit(true);
148
- }
149
- close(emitOpenedChange = true) {
150
- this.clearOpenTimeout();
151
- this.clearCloseTimeout();
152
- if (!this.isOpen()) {
153
- return;
154
- }
155
- const overlayRef = this.overlayRef;
156
- this.unbindOverlayInteractions();
157
- this.overlayRef = null;
158
- this.isContentHovered = false;
159
- this.isContentFocused = false;
160
- this.isOpen.set(false);
161
- overlayRef?.dispose();
162
- if (emitOpenedChange) {
163
- this.openedChange.emit(false);
164
- }
165
- }
166
- bindOverlayInteractions() {
167
- const overlayElement = this.overlayRef?.overlayElement;
168
- if (!overlayElement) {
169
- return;
170
- }
171
- overlayElement.addEventListener('pointerenter', this.onContentPointerEnter);
172
- overlayElement.addEventListener('pointerleave', this.onContentPointerLeave);
173
- overlayElement.addEventListener('focusin', this.onContentFocusIn);
174
- overlayElement.addEventListener('focusout', this.onContentFocusOut);
175
- }
176
- unbindOverlayInteractions() {
177
- const overlayElement = this.overlayRef?.overlayElement;
178
- if (!overlayElement) {
179
- return;
180
- }
181
- overlayElement.removeEventListener('pointerenter', this.onContentPointerEnter);
182
- overlayElement.removeEventListener('pointerleave', this.onContentPointerLeave);
183
- overlayElement.removeEventListener('focusin', this.onContentFocusIn);
184
- overlayElement.removeEventListener('focusout', this.onContentFocusOut);
185
- }
186
- onContentPointerEnter = () => {
187
- this.isContentHovered = true;
188
- this.clearCloseTimeout();
189
- };
190
- onContentPointerLeave = (event) => {
191
- this.isContentHovered = false;
192
- if (this.el.nativeElement.contains(event.relatedTarget)) {
193
- return;
194
- }
195
- this.scheduleClose();
196
- };
197
- onContentFocusIn = () => {
198
- this.isContentFocused = true;
199
- this.clearCloseTimeout();
200
- };
201
- onContentFocusOut = (event) => {
202
- this.isContentFocused = false;
203
- if (this.el.nativeElement.contains(event.relatedTarget)) {
204
- return;
205
- }
206
- this.scheduleClose();
207
- };
208
- scheduleOpen() {
209
- this.clearCloseTimeout();
210
- if (this.isOpen()) {
211
- return;
212
- }
213
- this.clearOpenTimeout();
214
- this.openTimeoutId = window.setTimeout(() => {
215
- this.openTimeoutId = null;
216
- if (this.disabled() || (!this.isTriggerHovered && !this.isTriggerFocused)) {
217
- return;
218
- }
219
- this.open();
220
- }, this.openDelay() ?? this.defaults?.openDelay() ?? 100);
221
- }
222
- scheduleClose() {
223
- this.clearOpenTimeout();
224
- if (!this.isOpen()) {
225
- return;
226
- }
227
- this.clearCloseTimeout();
228
- this.closeTimeoutId = window.setTimeout(() => {
229
- this.closeTimeoutId = null;
230
- if (this.isTriggerHovered ||
231
- this.isContentHovered ||
232
- this.isTriggerFocused ||
233
- this.isContentFocused) {
234
- return;
235
- }
236
- this.close();
237
- }, this.closeDelay() ?? this.defaults?.closeDelay() ?? 100);
238
- }
239
- clearOpenTimeout() {
240
- if (this.openTimeoutId !== null) {
241
- window.clearTimeout(this.openTimeoutId);
242
- this.openTimeoutId = null;
243
- }
244
- }
245
- clearCloseTimeout() {
246
- if (this.closeTimeoutId !== null) {
247
- window.clearTimeout(this.closeTimeoutId);
248
- this.closeTimeoutId = null;
249
- }
250
- }
251
- relatedTargetInsideContent(relatedTarget) {
252
- return this.overlayRef?.overlayElement.contains(relatedTarget) ?? false;
253
- }
254
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: HoverCardTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
255
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.6", type: HoverCardTriggerDirective, isStandalone: true, selector: "[HoverCardTrigger]", inputs: { HoverCardTrigger: { classPropertyName: "HoverCardTrigger", publicName: "HoverCardTrigger", isSignal: true, isRequired: true, transformFunction: null }, side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, sideOffset: { classPropertyName: "sideOffset", publicName: "sideOffset", 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 }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openedChange: "openedChange" }, host: { listeners: { "pointerenter": "handleTriggerPointerEnter()", "pointerleave": "handleTriggerPointerLeave($event)", "focusin": "handleTriggerFocusIn()", "focusout": "handleTriggerFocusOut($event)", "keydown.escape": "close()" }, properties: { "attr.data-state": "isOpen() ? \"open\" : \"closed\"" } }, exportAs: ["HoverCardTrigger"], ngImport: i0 });
256
- }
257
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: HoverCardTriggerDirective, decorators: [{
258
- type: Directive,
259
- args: [{
260
- selector: '[HoverCardTrigger]',
261
- exportAs: 'HoverCardTrigger',
262
- host: {
263
- '[attr.data-state]': 'isOpen() ? "open" : "closed"',
264
- '(pointerenter)': 'handleTriggerPointerEnter()',
265
- '(pointerleave)': 'handleTriggerPointerLeave($event)',
266
- '(focusin)': 'handleTriggerFocusIn()',
267
- '(focusout)': 'handleTriggerFocusOut($event)',
268
- '(keydown.escape)': 'close()',
269
- },
270
- }]
271
- }], ctorParameters: () => [], propDecorators: { HoverCardTrigger: [{ type: i0.Input, args: [{ isSignal: true, alias: "HoverCardTrigger", required: true }] }], side: [{ type: i0.Input, args: [{ isSignal: true, alias: "side", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], sideOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "sideOffset", required: false }] }], openDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "openDelay", required: false }] }], closeDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeDelay", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], openedChange: [{ type: i0.Output, args: ["openedChange"] }] } });
272
-
273
- /**
274
- * Generated bundle index. Do not edit.
275
- */
276
-
277
- export { HOVER_CARD_DEFAULTS, HoverCardComponent, HoverCardContentDirective, HoverCardTriggerDirective };
1
+ import * as i0 from "@angular/core";
2
+ import { Component, DestroyRef, Directive, ElementRef, InjectionToken, TemplateRef, ViewContainerRef, forwardRef, inject, input, output, signal } from "@angular/core";
3
+ import { Overlay } from "@angular/cdk/overlay";
4
+ import { TemplatePortal } from "@angular/cdk/portal";
5
+ import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
6
+ import { connectedPositionFor, oppositeSide, overlayDismissals } from "@ojiepermana/angular/component/utils/overlay";
7
+ const HOVER_CARD_DEFAULTS = new InjectionToken("HOVER_CARD_DEFAULTS");
8
+ var HoverCardComponent = class HoverCardComponent {
9
+ side = input("bottom", ...ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []);
10
+ align = input("center", ...ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []);
11
+ sideOffset = input(8, ...ngDevMode ? [{ debugName: "sideOffset" }] : /* istanbul ignore next */ []);
12
+ openDelay = input(100, ...ngDevMode ? [{ debugName: "openDelay" }] : /* istanbul ignore next */ []);
13
+ closeDelay = input(100, ...ngDevMode ? [{ debugName: "closeDelay" }] : /* istanbul ignore next */ []);
14
+ static ɵfac = i0.ɵɵngDeclareFactory({
15
+ minVersion: "12.0.0",
16
+ version: "22.2.0",
17
+ ngImport: i0,
18
+ type: HoverCardComponent,
19
+ deps: [],
20
+ target: i0.ɵɵFactoryTarget.Component
21
+ });
22
+ static ɵcmp = i0.ɵɵngDeclareComponent({
23
+ minVersion: "17.1.0",
24
+ version: "22.2.0",
25
+ type: HoverCardComponent,
26
+ isStandalone: true,
27
+ selector: "HoverCard",
28
+ inputs: {
29
+ side: {
30
+ classPropertyName: "side",
31
+ publicName: "side",
32
+ isSignal: true,
33
+ isRequired: false,
34
+ transformFunction: null
35
+ },
36
+ align: {
37
+ classPropertyName: "align",
38
+ publicName: "align",
39
+ isSignal: true,
40
+ isRequired: false,
41
+ transformFunction: null
42
+ },
43
+ sideOffset: {
44
+ classPropertyName: "sideOffset",
45
+ publicName: "sideOffset",
46
+ isSignal: true,
47
+ isRequired: false,
48
+ transformFunction: null
49
+ },
50
+ openDelay: {
51
+ classPropertyName: "openDelay",
52
+ publicName: "openDelay",
53
+ isSignal: true,
54
+ isRequired: false,
55
+ transformFunction: null
56
+ },
57
+ closeDelay: {
58
+ classPropertyName: "closeDelay",
59
+ publicName: "closeDelay",
60
+ isSignal: true,
61
+ isRequired: false,
62
+ transformFunction: null
63
+ }
64
+ },
65
+ host: { classAttribute: "contents" },
66
+ providers: [{
67
+ provide: HOVER_CARD_DEFAULTS,
68
+ useExisting: forwardRef(() => HoverCardComponent)
69
+ }],
70
+ ngImport: i0,
71
+ template: "<ng-content />",
72
+ isInline: true
73
+ });
74
+ };
75
+ i0.ɵɵngDeclareClassMetadata({
76
+ minVersion: "12.0.0",
77
+ version: "22.2.0",
78
+ ngImport: i0,
79
+ type: HoverCardComponent,
80
+ decorators: [{
81
+ type: Component,
82
+ args: [{
83
+ selector: "HoverCard",
84
+ providers: [{
85
+ provide: HOVER_CARD_DEFAULTS,
86
+ useExisting: forwardRef(() => HoverCardComponent)
87
+ }],
88
+ host: { class: "contents" },
89
+ template: "<ng-content />"
90
+ }]
91
+ }],
92
+ propDecorators: {
93
+ side: [{
94
+ type: i0.Input,
95
+ args: [{
96
+ isSignal: true,
97
+ alias: "side",
98
+ required: false
99
+ }]
100
+ }],
101
+ align: [{
102
+ type: i0.Input,
103
+ args: [{
104
+ isSignal: true,
105
+ alias: "align",
106
+ required: false
107
+ }]
108
+ }],
109
+ sideOffset: [{
110
+ type: i0.Input,
111
+ args: [{
112
+ isSignal: true,
113
+ alias: "sideOffset",
114
+ required: false
115
+ }]
116
+ }],
117
+ openDelay: [{
118
+ type: i0.Input,
119
+ args: [{
120
+ isSignal: true,
121
+ alias: "openDelay",
122
+ required: false
123
+ }]
124
+ }],
125
+ closeDelay: [{
126
+ type: i0.Input,
127
+ args: [{
128
+ isSignal: true,
129
+ alias: "closeDelay",
130
+ required: false
131
+ }]
132
+ }]
133
+ }
134
+ });
135
+ var HoverCardContentDirective = class HoverCardContentDirective {
136
+ template = inject(TemplateRef);
137
+ static ɵfac = i0.ɵɵngDeclareFactory({
138
+ minVersion: "12.0.0",
139
+ version: "22.2.0",
140
+ ngImport: i0,
141
+ type: HoverCardContentDirective,
142
+ deps: [],
143
+ target: i0.ɵɵFactoryTarget.Directive
144
+ });
145
+ static ɵdir = i0.ɵɵngDeclareDirective({
146
+ minVersion: "14.0.0",
147
+ version: "22.2.0",
148
+ type: HoverCardContentDirective,
149
+ isStandalone: true,
150
+ selector: "ng-template[HoverCardContent]",
151
+ exportAs: ["HoverCardContent"],
152
+ ngImport: i0
153
+ });
154
+ };
155
+ i0.ɵɵngDeclareClassMetadata({
156
+ minVersion: "12.0.0",
157
+ version: "22.2.0",
158
+ ngImport: i0,
159
+ type: HoverCardContentDirective,
160
+ decorators: [{
161
+ type: Directive,
162
+ args: [{
163
+ selector: "ng-template[HoverCardContent]",
164
+ exportAs: "HoverCardContent"
165
+ }]
166
+ }]
167
+ });
168
+ var HoverCardTriggerDirective = class HoverCardTriggerDirective {
169
+ overlay = inject(Overlay);
170
+ vcr = inject(ViewContainerRef);
171
+ el = inject(ElementRef);
172
+ destroyRef = inject(DestroyRef);
173
+ defaults = inject(HOVER_CARD_DEFAULTS, { optional: true });
174
+ HoverCardTrigger = input.required(...ngDevMode ? [{ debugName: "HoverCardTrigger" }] : /* istanbul ignore next */ []);
175
+ side = input(void 0, ...ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []);
176
+ align = input(void 0, ...ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []);
177
+ sideOffset = input(void 0, ...ngDevMode ? [{ debugName: "sideOffset" }] : /* istanbul ignore next */ []);
178
+ openDelay = input(void 0, ...ngDevMode ? [{ debugName: "openDelay" }] : /* istanbul ignore next */ []);
179
+ closeDelay = input(void 0, ...ngDevMode ? [{ debugName: "closeDelay" }] : /* istanbul ignore next */ []);
180
+ disabled = input(false, ...ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []);
181
+ openedChange = output();
182
+ isOpen = signal(false, ...ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []);
183
+ overlayRef = null;
184
+ openTimeoutId = null;
185
+ closeTimeoutId = null;
186
+ isTriggerHovered = false;
187
+ isContentHovered = false;
188
+ isTriggerFocused = false;
189
+ isContentFocused = false;
190
+ constructor() {
191
+ this.destroyRef.onDestroy(() => {
192
+ this.clearOpenTimeout();
193
+ this.clearCloseTimeout();
194
+ this.close(false);
195
+ });
196
+ }
197
+ handleTriggerPointerEnter() {
198
+ if (this.disabled()) return;
199
+ this.isTriggerHovered = true;
200
+ this.clearCloseTimeout();
201
+ this.scheduleOpen();
202
+ }
203
+ handleTriggerPointerLeave(event) {
204
+ this.isTriggerHovered = false;
205
+ if (this.relatedTargetInsideContent(event.relatedTarget)) return;
206
+ this.scheduleClose();
207
+ }
208
+ handleTriggerFocusIn() {
209
+ if (this.disabled()) return;
210
+ this.isTriggerFocused = true;
211
+ this.clearCloseTimeout();
212
+ this.scheduleOpen();
213
+ }
214
+ handleTriggerFocusOut(event) {
215
+ this.isTriggerFocused = false;
216
+ if (this.relatedTargetInsideContent(event.relatedTarget)) return;
217
+ this.scheduleClose();
218
+ }
219
+ open() {
220
+ if (this.isOpen() || this.disabled()) return;
221
+ const side = this.side() ?? this.defaults?.side() ?? "bottom";
222
+ const align = this.align() ?? this.defaults?.align() ?? "center";
223
+ const sideOffset = this.sideOffset() ?? this.defaults?.sideOffset() ?? 8;
224
+ const primary = connectedPositionFor(side, align, sideOffset);
225
+ const fallback = connectedPositionFor(oppositeSide(side), align, sideOffset);
226
+ const positionStrategy = this.overlay.position().flexibleConnectedTo(this.el).withPositions([primary, fallback]).withPush(true).withViewportMargin(8).withFlexibleDimensions(false);
227
+ this.overlayRef = this.overlay.create({
228
+ positionStrategy,
229
+ scrollStrategy: this.overlay.scrollStrategies.reposition(),
230
+ hasBackdrop: false,
231
+ panelClass: "hover-card-panel"
232
+ });
233
+ const portal = new TemplatePortal(this.HoverCardTrigger().template, this.vcr);
234
+ this.overlayRef.attach(portal);
235
+ this.bindOverlayInteractions();
236
+ overlayDismissals(this.overlayRef, this.el.nativeElement).pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.close());
237
+ this.isOpen.set(true);
238
+ this.openedChange.emit(true);
239
+ }
240
+ close(emitOpenedChange = true) {
241
+ this.clearOpenTimeout();
242
+ this.clearCloseTimeout();
243
+ if (!this.isOpen()) return;
244
+ const overlayRef = this.overlayRef;
245
+ this.unbindOverlayInteractions();
246
+ this.overlayRef = null;
247
+ this.isContentHovered = false;
248
+ this.isContentFocused = false;
249
+ this.isOpen.set(false);
250
+ overlayRef?.dispose();
251
+ if (emitOpenedChange) this.openedChange.emit(false);
252
+ }
253
+ bindOverlayInteractions() {
254
+ const overlayElement = this.overlayRef?.overlayElement;
255
+ if (!overlayElement) return;
256
+ overlayElement.addEventListener("pointerenter", this.onContentPointerEnter);
257
+ overlayElement.addEventListener("pointerleave", this.onContentPointerLeave);
258
+ overlayElement.addEventListener("focusin", this.onContentFocusIn);
259
+ overlayElement.addEventListener("focusout", this.onContentFocusOut);
260
+ }
261
+ unbindOverlayInteractions() {
262
+ const overlayElement = this.overlayRef?.overlayElement;
263
+ if (!overlayElement) return;
264
+ overlayElement.removeEventListener("pointerenter", this.onContentPointerEnter);
265
+ overlayElement.removeEventListener("pointerleave", this.onContentPointerLeave);
266
+ overlayElement.removeEventListener("focusin", this.onContentFocusIn);
267
+ overlayElement.removeEventListener("focusout", this.onContentFocusOut);
268
+ }
269
+ onContentPointerEnter = () => {
270
+ this.isContentHovered = true;
271
+ this.clearCloseTimeout();
272
+ };
273
+ onContentPointerLeave = (event) => {
274
+ this.isContentHovered = false;
275
+ if (this.el.nativeElement.contains(event.relatedTarget)) return;
276
+ this.scheduleClose();
277
+ };
278
+ onContentFocusIn = () => {
279
+ this.isContentFocused = true;
280
+ this.clearCloseTimeout();
281
+ };
282
+ onContentFocusOut = (event) => {
283
+ this.isContentFocused = false;
284
+ if (this.el.nativeElement.contains(event.relatedTarget)) return;
285
+ this.scheduleClose();
286
+ };
287
+ scheduleOpen() {
288
+ this.clearCloseTimeout();
289
+ if (this.isOpen()) return;
290
+ this.clearOpenTimeout();
291
+ this.openTimeoutId = window.setTimeout(() => {
292
+ this.openTimeoutId = null;
293
+ if (this.disabled() || !this.isTriggerHovered && !this.isTriggerFocused) return;
294
+ this.open();
295
+ }, this.openDelay() ?? this.defaults?.openDelay() ?? 100);
296
+ }
297
+ scheduleClose() {
298
+ this.clearOpenTimeout();
299
+ if (!this.isOpen()) return;
300
+ this.clearCloseTimeout();
301
+ this.closeTimeoutId = window.setTimeout(() => {
302
+ this.closeTimeoutId = null;
303
+ if (this.isTriggerHovered || this.isContentHovered || this.isTriggerFocused || this.isContentFocused) return;
304
+ this.close();
305
+ }, this.closeDelay() ?? this.defaults?.closeDelay() ?? 100);
306
+ }
307
+ clearOpenTimeout() {
308
+ if (this.openTimeoutId !== null) {
309
+ window.clearTimeout(this.openTimeoutId);
310
+ this.openTimeoutId = null;
311
+ }
312
+ }
313
+ clearCloseTimeout() {
314
+ if (this.closeTimeoutId !== null) {
315
+ window.clearTimeout(this.closeTimeoutId);
316
+ this.closeTimeoutId = null;
317
+ }
318
+ }
319
+ relatedTargetInsideContent(relatedTarget) {
320
+ return this.overlayRef?.overlayElement.contains(relatedTarget) ?? false;
321
+ }
322
+ static ɵfac = i0.ɵɵngDeclareFactory({
323
+ minVersion: "12.0.0",
324
+ version: "22.2.0",
325
+ ngImport: i0,
326
+ type: HoverCardTriggerDirective,
327
+ deps: [],
328
+ target: i0.ɵɵFactoryTarget.Directive
329
+ });
330
+ static ɵdir = i0.ɵɵngDeclareDirective({
331
+ minVersion: "17.1.0",
332
+ version: "22.2.0",
333
+ type: HoverCardTriggerDirective,
334
+ isStandalone: true,
335
+ selector: "[HoverCardTrigger]",
336
+ inputs: {
337
+ HoverCardTrigger: {
338
+ classPropertyName: "HoverCardTrigger",
339
+ publicName: "HoverCardTrigger",
340
+ isSignal: true,
341
+ isRequired: true,
342
+ transformFunction: null
343
+ },
344
+ side: {
345
+ classPropertyName: "side",
346
+ publicName: "side",
347
+ isSignal: true,
348
+ isRequired: false,
349
+ transformFunction: null
350
+ },
351
+ align: {
352
+ classPropertyName: "align",
353
+ publicName: "align",
354
+ isSignal: true,
355
+ isRequired: false,
356
+ transformFunction: null
357
+ },
358
+ sideOffset: {
359
+ classPropertyName: "sideOffset",
360
+ publicName: "sideOffset",
361
+ isSignal: true,
362
+ isRequired: false,
363
+ transformFunction: null
364
+ },
365
+ openDelay: {
366
+ classPropertyName: "openDelay",
367
+ publicName: "openDelay",
368
+ isSignal: true,
369
+ isRequired: false,
370
+ transformFunction: null
371
+ },
372
+ closeDelay: {
373
+ classPropertyName: "closeDelay",
374
+ publicName: "closeDelay",
375
+ isSignal: true,
376
+ isRequired: false,
377
+ transformFunction: null
378
+ },
379
+ disabled: {
380
+ classPropertyName: "disabled",
381
+ publicName: "disabled",
382
+ isSignal: true,
383
+ isRequired: false,
384
+ transformFunction: null
385
+ }
386
+ },
387
+ outputs: { openedChange: "openedChange" },
388
+ host: {
389
+ listeners: {
390
+ "pointerenter": "handleTriggerPointerEnter()",
391
+ "pointerleave": "handleTriggerPointerLeave($event)",
392
+ "focusin": "handleTriggerFocusIn()",
393
+ "focusout": "handleTriggerFocusOut($event)",
394
+ "keydown.escape": "close()"
395
+ },
396
+ properties: { "attr.data-state": "isOpen() ? \"open\" : \"closed\"" }
397
+ },
398
+ exportAs: ["HoverCardTrigger"],
399
+ ngImport: i0
400
+ });
401
+ };
402
+ i0.ɵɵngDeclareClassMetadata({
403
+ minVersion: "12.0.0",
404
+ version: "22.2.0",
405
+ ngImport: i0,
406
+ type: HoverCardTriggerDirective,
407
+ decorators: [{
408
+ type: Directive,
409
+ args: [{
410
+ selector: "[HoverCardTrigger]",
411
+ exportAs: "HoverCardTrigger",
412
+ host: {
413
+ "[attr.data-state]": "isOpen() ? \"open\" : \"closed\"",
414
+ "(pointerenter)": "handleTriggerPointerEnter()",
415
+ "(pointerleave)": "handleTriggerPointerLeave($event)",
416
+ "(focusin)": "handleTriggerFocusIn()",
417
+ "(focusout)": "handleTriggerFocusOut($event)",
418
+ "(keydown.escape)": "close()"
419
+ }
420
+ }]
421
+ }],
422
+ ctorParameters: () => [],
423
+ propDecorators: {
424
+ HoverCardTrigger: [{
425
+ type: i0.Input,
426
+ args: [{
427
+ isSignal: true,
428
+ alias: "HoverCardTrigger",
429
+ required: true
430
+ }]
431
+ }],
432
+ side: [{
433
+ type: i0.Input,
434
+ args: [{
435
+ isSignal: true,
436
+ alias: "side",
437
+ required: false
438
+ }]
439
+ }],
440
+ align: [{
441
+ type: i0.Input,
442
+ args: [{
443
+ isSignal: true,
444
+ alias: "align",
445
+ required: false
446
+ }]
447
+ }],
448
+ sideOffset: [{
449
+ type: i0.Input,
450
+ args: [{
451
+ isSignal: true,
452
+ alias: "sideOffset",
453
+ required: false
454
+ }]
455
+ }],
456
+ openDelay: [{
457
+ type: i0.Input,
458
+ args: [{
459
+ isSignal: true,
460
+ alias: "openDelay",
461
+ required: false
462
+ }]
463
+ }],
464
+ closeDelay: [{
465
+ type: i0.Input,
466
+ args: [{
467
+ isSignal: true,
468
+ alias: "closeDelay",
469
+ required: false
470
+ }]
471
+ }],
472
+ disabled: [{
473
+ type: i0.Input,
474
+ args: [{
475
+ isSignal: true,
476
+ alias: "disabled",
477
+ required: false
478
+ }]
479
+ }],
480
+ openedChange: [{
481
+ type: i0.Output,
482
+ args: ["openedChange"]
483
+ }]
484
+ }
485
+ });
486
+ export { HOVER_CARD_DEFAULTS, HoverCardComponent, HoverCardContentDirective, HoverCardTriggerDirective };