@radix-ng/primitives 0.42.0 → 0.44.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 (453) hide show
  1. package/accordion/index.d.ts +160 -15
  2. package/alert-dialog/index.d.ts +54 -14
  3. package/arrow/README.md +1 -0
  4. package/arrow/index.d.ts +11 -0
  5. package/aspect-ratio/index.d.ts +35 -1
  6. package/avatar/index.d.ts +81 -11
  7. package/calendar/index.d.ts +310 -29
  8. package/checkbox/index.d.ts +163 -15
  9. package/collapsible/index.d.ts +82 -11
  10. package/config/index.d.ts +35 -2
  11. package/context-menu/index.d.ts +126 -23
  12. package/core/index.d.ts +898 -27
  13. package/cropper/index.d.ts +134 -14
  14. package/date-field/index.d.ts +209 -10
  15. package/dialog/index.d.ts +202 -20
  16. package/dismissable-layer/README.md +1 -0
  17. package/dismissable-layer/index.d.ts +126 -0
  18. package/dropdown-menu/index.d.ts +168 -23
  19. package/editable/index.d.ts +70 -1
  20. package/fesm2022/radix-ng-primitives-accordion.mjs +36 -36
  21. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  22. package/fesm2022/radix-ng-primitives-alert-dialog.mjs +28 -28
  23. package/fesm2022/radix-ng-primitives-alert-dialog.mjs.map +1 -1
  24. package/fesm2022/radix-ng-primitives-arrow.mjs +38 -0
  25. package/fesm2022/radix-ng-primitives-arrow.mjs.map +1 -0
  26. package/fesm2022/radix-ng-primitives-aspect-ratio.mjs +5 -5
  27. package/fesm2022/radix-ng-primitives-aspect-ratio.mjs.map +1 -1
  28. package/fesm2022/radix-ng-primitives-avatar.mjs +20 -20
  29. package/fesm2022/radix-ng-primitives-avatar.mjs.map +1 -1
  30. package/fesm2022/radix-ng-primitives-calendar.mjs +110 -95
  31. package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
  32. package/fesm2022/radix-ng-primitives-checkbox.mjs +219 -209
  33. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  34. package/fesm2022/radix-ng-primitives-collapsible.mjs +27 -27
  35. package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
  36. package/fesm2022/radix-ng-primitives-config.mjs +5 -5
  37. package/fesm2022/radix-ng-primitives-config.mjs.map +1 -1
  38. package/fesm2022/radix-ng-primitives-context-menu.mjs +34 -34
  39. package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
  40. package/fesm2022/radix-ng-primitives-core.mjs +72 -24
  41. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  42. package/fesm2022/radix-ng-primitives-cropper.mjs +51 -51
  43. package/fesm2022/radix-ng-primitives-cropper.mjs.map +1 -1
  44. package/fesm2022/radix-ng-primitives-date-field.mjs +48 -48
  45. package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
  46. package/fesm2022/radix-ng-primitives-dialog.mjs +33 -33
  47. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  48. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs +418 -0
  49. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs.map +1 -0
  50. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs +37 -37
  51. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs.map +1 -1
  52. package/fesm2022/radix-ng-primitives-editable.mjs +21 -21
  53. package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
  54. package/fesm2022/radix-ng-primitives-focus-guards.mjs +53 -0
  55. package/fesm2022/radix-ng-primitives-focus-guards.mjs.map +1 -0
  56. package/fesm2022/radix-ng-primitives-focus-scope.mjs +17 -9
  57. package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
  58. package/fesm2022/radix-ng-primitives-hover-card.mjs +74 -74
  59. package/fesm2022/radix-ng-primitives-hover-card.mjs.map +1 -1
  60. package/fesm2022/radix-ng-primitives-label.mjs +8 -8
  61. package/fesm2022/radix-ng-primitives-label.mjs.map +1 -1
  62. package/fesm2022/radix-ng-primitives-menu.mjs +65 -65
  63. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  64. package/fesm2022/radix-ng-primitives-menubar.mjs +31 -31
  65. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  66. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +91 -88
  67. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  68. package/fesm2022/radix-ng-primitives-number-field.mjs +56 -43
  69. package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
  70. package/fesm2022/radix-ng-primitives-pagination.mjs +45 -45
  71. package/fesm2022/radix-ng-primitives-pagination.mjs.map +1 -1
  72. package/fesm2022/radix-ng-primitives-popover.mjs +68 -68
  73. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  74. package/fesm2022/radix-ng-primitives-popper.mjs +418 -0
  75. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -0
  76. package/fesm2022/radix-ng-primitives-portal.mjs +51 -0
  77. package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -0
  78. package/fesm2022/radix-ng-primitives-presence.mjs +4 -4
  79. package/fesm2022/radix-ng-primitives-presence.mjs.map +1 -1
  80. package/fesm2022/radix-ng-primitives-progress.mjs +15 -15
  81. package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
  82. package/fesm2022/radix-ng-primitives-radio.mjs +30 -30
  83. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  84. package/fesm2022/radix-ng-primitives-roving-focus.mjs +179 -163
  85. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
  86. package/fesm2022/radix-ng-primitives-select.mjs +37 -37
  87. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  88. package/fesm2022/radix-ng-primitives-separator.mjs +16 -14
  89. package/fesm2022/radix-ng-primitives-separator.mjs.map +1 -1
  90. package/fesm2022/radix-ng-primitives-slider.mjs +75 -75
  91. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  92. package/fesm2022/radix-ng-primitives-stepper.mjs +45 -45
  93. package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
  94. package/fesm2022/radix-ng-primitives-switch.mjs +28 -28
  95. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  96. package/fesm2022/radix-ng-primitives-tabs.mjs +33 -33
  97. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  98. package/fesm2022/radix-ng-primitives-time-field.mjs +78 -66
  99. package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
  100. package/fesm2022/radix-ng-primitives-toggle-group.mjs +22 -22
  101. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  102. package/fesm2022/radix-ng-primitives-toggle.mjs +9 -9
  103. package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
  104. package/fesm2022/radix-ng-primitives-toolbar.mjs +28 -28
  105. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  106. package/fesm2022/radix-ng-primitives-tooltip.mjs +74 -74
  107. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  108. package/fesm2022/radix-ng-primitives-tooltip2.mjs +740 -0
  109. package/fesm2022/radix-ng-primitives-tooltip2.mjs.map +1 -0
  110. package/fesm2022/radix-ng-primitives-visually-hidden.mjs +93 -98
  111. package/fesm2022/radix-ng-primitives-visually-hidden.mjs.map +1 -1
  112. package/fesm2022/radix-ng-primitives.mjs.map +1 -1
  113. package/focus-guards/README.md +1 -0
  114. package/focus-guards/index.d.ts +15 -0
  115. package/focus-scope/index.d.ts +65 -1
  116. package/hover-card/index.d.ts +471 -19
  117. package/index.d.ts +2 -1
  118. package/label/index.d.ts +27 -1
  119. package/menu/index.d.ts +136 -26
  120. package/menubar/index.d.ts +53 -21
  121. package/navigation-menu/index.d.ts +402 -25
  122. package/number-field/index.d.ts +202 -16
  123. package/package.json +26 -5
  124. package/pagination/index.d.ts +96 -20
  125. package/popover/index.d.ts +402 -19
  126. package/popper/README.md +3 -0
  127. package/popper/index.d.ts +206 -0
  128. package/portal/README.md +1 -0
  129. package/portal/index.d.ts +22 -0
  130. package/presence/index.d.ts +103 -5
  131. package/progress/index.d.ts +76 -8
  132. package/radio/index.d.ts +118 -4
  133. package/roving-focus/index.d.ts +174 -3
  134. package/select/index.d.ts +211 -23
  135. package/separator/index.d.ts +63 -1
  136. package/slider/index.d.ts +262 -17
  137. package/stepper/index.d.ts +122 -21
  138. package/switch/index.d.ts +102 -9
  139. package/tabs/index.d.ts +111 -13
  140. package/time-field/index.d.ts +211 -10
  141. package/toggle/index.d.ts +75 -3
  142. package/toggle-group/index.d.ts +194 -5
  143. package/toolbar/index.d.ts +52 -16
  144. package/tooltip/index.d.ts +432 -19
  145. package/tooltip2/README.md +3 -0
  146. package/tooltip2/index.d.ts +325 -0
  147. package/visually-hidden/index.d.ts +65 -3
  148. package/accordion/src/accordion-content-presence.directive.d.ts +0 -6
  149. package/accordion/src/accordion-content.directive.d.ts +0 -8
  150. package/accordion/src/accordion-header.directive.d.ts +0 -7
  151. package/accordion/src/accordion-item.directive.d.ts +0 -43
  152. package/accordion/src/accordion-root.directive.d.ts +0 -83
  153. package/accordion/src/accordion-trigger.directive.d.ts +0 -10
  154. package/alert-dialog/src/alert-dialog-cancel.directive.d.ts +0 -7
  155. package/alert-dialog/src/alert-dialog-content.directive.d.ts +0 -9
  156. package/alert-dialog/src/alert-dialog-root.directive.d.ts +0 -9
  157. package/alert-dialog/src/alert-dialog-title.directive.d.ts +0 -5
  158. package/alert-dialog/src/alert-dialog-trigger.directive.d.ts +0 -7
  159. package/alert-dialog/src/alert-dialog.service.d.ts +0 -14
  160. package/aspect-ratio/src/aspect-ratio.directive.d.ts +0 -32
  161. package/avatar/src/avatar-context.token.d.ts +0 -7
  162. package/avatar/src/avatar-fallback.directive.d.ts +0 -20
  163. package/avatar/src/avatar-image.directive.d.ts +0 -29
  164. package/avatar/src/avatar-root.directive.d.ts +0 -8
  165. package/avatar/src/avatar.config.d.ts +0 -13
  166. package/avatar/src/types.d.ts +0 -2
  167. package/calendar/src/calendar-cell-trigger.directive.d.ts +0 -54
  168. package/calendar/src/calendar-cell.directive.d.ts +0 -11
  169. package/calendar/src/calendar-grid-body.directive.d.ts +0 -5
  170. package/calendar/src/calendar-grid-head.directive.d.ts +0 -5
  171. package/calendar/src/calendar-grid-row.directive.d.ts +0 -5
  172. package/calendar/src/calendar-grid.directive.d.ts +0 -8
  173. package/calendar/src/calendar-head-cell.directive.d.ts +0 -5
  174. package/calendar/src/calendar-header.directive.d.ts +0 -5
  175. package/calendar/src/calendar-heading.directive.d.ts +0 -7
  176. package/calendar/src/calendar-next.directive.d.ts +0 -16
  177. package/calendar/src/calendar-prev.directive.d.ts +0 -16
  178. package/calendar/src/calendar-root.directive.d.ts +0 -148
  179. package/calendar/src/calendar.d.ts +0 -44
  180. package/calendar/src//321/201alendar-/321/201ontext.token.d.ts +0 -24
  181. package/checkbox/src/checkbox-button.directive.d.ts +0 -8
  182. package/checkbox/src/checkbox-indicator.directive.d.ts +0 -6
  183. package/checkbox/src/checkbox-input.directive.d.ts +0 -10
  184. package/checkbox/src/checkbox.directive.d.ts +0 -86
  185. package/checkbox/src/checkbox.token.d.ts +0 -4
  186. package/collapsible/src/collapsible-content-presence.directive.d.ts +0 -6
  187. package/collapsible/src/collapsible-content.directive.d.ts +0 -18
  188. package/collapsible/src/collapsible-root.directive.d.ts +0 -44
  189. package/collapsible/src/collapsible-trigger.directive.d.ts +0 -6
  190. package/config/src/config.d.ts +0 -21
  191. package/config/src/config.provider.d.ts +0 -10
  192. package/context-menu/src/context-menu-content.directive.d.ts +0 -15
  193. package/context-menu/src/context-menu-item-checkbox.directive.d.ts +0 -9
  194. package/context-menu/src/context-menu-item-indicator.directive.d.ts +0 -7
  195. package/context-menu/src/context-menu-item-radio-group.directive.d.ts +0 -12
  196. package/context-menu/src/context-menu-item-radio.directive.d.ts +0 -19
  197. package/context-menu/src/context-menu-item-selectable.d.ts +0 -12
  198. package/context-menu/src/context-menu-item.directive.d.ts +0 -17
  199. package/context-menu/src/context-menu-label.directive.d.ts +0 -5
  200. package/context-menu/src/context-menu-separator.directive.d.ts +0 -6
  201. package/context-menu/src/context-menu-trigger.directive.d.ts +0 -31
  202. package/core/src/accessor/control-value-accessor.d.ts +0 -67
  203. package/core/src/accessor/provide-value-accessor.d.ts +0 -12
  204. package/core/src/auto-focus.directive.d.ts +0 -14
  205. package/core/src/chunk.d.ts +0 -12
  206. package/core/src/clamp.d.ts +0 -38
  207. package/core/src/create-context.d.ts +0 -10
  208. package/core/src/date-time/calendar.d.ts +0 -33
  209. package/core/src/date-time/comparators.d.ts +0 -98
  210. package/core/src/date-time/formatter.d.ts +0 -30
  211. package/core/src/date-time/index.d.ts +0 -9
  212. package/core/src/date-time/parser.d.ts +0 -37
  213. package/core/src/date-time/parts.d.ts +0 -12
  214. package/core/src/date-time/placeholders.d.ts +0 -8
  215. package/core/src/date-time/segment.d.ts +0 -4
  216. package/core/src/date-time/types.d.ts +0 -58
  217. package/core/src/date-time/useDateField.d.ts +0 -142
  218. package/core/src/date-time/utils.d.ts +0 -7
  219. package/core/src/document.d.ts +0 -1
  220. package/core/src/focus-initial.directive.d.ts +0 -9
  221. package/core/src/getActiveElement.d.ts +0 -1
  222. package/core/src/id-generator.d.ts +0 -12
  223. package/core/src/inject-ng-control.d.ts +0 -8
  224. package/core/src/is-client.d.ts +0 -1
  225. package/core/src/is-equal.d.ts +0 -7
  226. package/core/src/is-inside-form.d.ts +0 -2
  227. package/core/src/is-nullish.d.ts +0 -1
  228. package/core/src/is-number.d.ts +0 -1
  229. package/core/src/isValueEqualOrExist.d.ts +0 -10
  230. package/core/src/kbd-constants.d.ts +0 -41
  231. package/core/src/positioning/constants.d.ts +0 -3
  232. package/core/src/positioning/types.d.ts +0 -42
  233. package/core/src/positioning/utils.d.ts +0 -12
  234. package/core/src/provide-token.d.ts +0 -22
  235. package/core/src/serialize.d.ts +0 -11
  236. package/core/src/types.d.ts +0 -25
  237. package/core/src/useArrowNavigation.d.ts +0 -65
  238. package/core/src/useResizeObserver.d.ts +0 -15
  239. package/core/src/watch.d.ts +0 -41
  240. package/core/src/window.d.ts +0 -3
  241. package/cropper/src/cropper-context.token.d.ts +0 -12
  242. package/cropper/src/cropper-crop-area.directive.d.ts +0 -6
  243. package/cropper/src/cropper-description.directive.d.ts +0 -6
  244. package/cropper/src/cropper-image.component.d.ts +0 -10
  245. package/cropper/src/cropper-root.directive.d.ts +0 -91
  246. package/date-field/src/date-field-context.token.d.ts +0 -19
  247. package/date-field/src/date-field-input.directive.d.ts +0 -53
  248. package/date-field/src/date-field-root.directive.d.ts +0 -131
  249. package/dialog/src/dialog-close.directive.d.ts +0 -7
  250. package/dialog/src/dialog-content.directive.d.ts +0 -21
  251. package/dialog/src/dialog-description.directive.d.ts +0 -5
  252. package/dialog/src/dialog-dismiss.directive.d.ts +0 -7
  253. package/dialog/src/dialog-ref.d.ts +0 -40
  254. package/dialog/src/dialog-title.directive.d.ts +0 -5
  255. package/dialog/src/dialog-trigger.directive.d.ts +0 -28
  256. package/dialog/src/dialog.config.d.ts +0 -41
  257. package/dialog/src/dialog.injectors.d.ts +0 -4
  258. package/dialog/src/dialog.providers.d.ts +0 -19
  259. package/dialog/src/dialog.service.d.ts +0 -26
  260. package/dismissible-layer/README.md +0 -1
  261. package/dismissible-layer/index.d.ts +0 -1
  262. package/dismissible-layer/src/utils.d.ts +0 -38
  263. package/dropdown-menu/src/dropdown-menu-content.directive.d.ts +0 -15
  264. package/dropdown-menu/src/dropdown-menu-item-checkbox.directive.d.ts +0 -9
  265. package/dropdown-menu/src/dropdown-menu-item-indicator.directive.d.ts +0 -7
  266. package/dropdown-menu/src/dropdown-menu-item-radio-group.directive.d.ts +0 -12
  267. package/dropdown-menu/src/dropdown-menu-item-radio.directive.d.ts +0 -19
  268. package/dropdown-menu/src/dropdown-menu-item-selectable.d.ts +0 -12
  269. package/dropdown-menu/src/dropdown-menu-item.directive.d.ts +0 -17
  270. package/dropdown-menu/src/dropdown-menu-label.directive.d.ts +0 -6
  271. package/dropdown-menu/src/dropdown-menu-separator.directive.d.ts +0 -6
  272. package/dropdown-menu/src/dropdown-menu-trigger.directive.d.ts +0 -73
  273. package/editable/src/editable-root.d.ts +0 -67
  274. package/fesm2022/radix-ng-primitives-dismissible-layer.mjs +0 -211
  275. package/fesm2022/radix-ng-primitives-dismissible-layer.mjs.map +0 -1
  276. package/focus-scope/src/focus-scope.d.ts +0 -53
  277. package/focus-scope/src/stack.d.ts +0 -13
  278. package/focus-scope/src/utils.d.ts +0 -46
  279. package/hover-card/src/hover-card-anchor.directive.d.ts +0 -28
  280. package/hover-card/src/hover-card-anchor.token.d.ts +0 -3
  281. package/hover-card/src/hover-card-arrow.directive.d.ts +0 -45
  282. package/hover-card/src/hover-card-arrow.token.d.ts +0 -3
  283. package/hover-card/src/hover-card-close.directive.d.ts +0 -18
  284. package/hover-card/src/hover-card-close.token.d.ts +0 -3
  285. package/hover-card/src/hover-card-content-attributes.component.d.ts +0 -25
  286. package/hover-card/src/hover-card-content-attributes.token.d.ts +0 -3
  287. package/hover-card/src/hover-card-content.directive.d.ts +0 -124
  288. package/hover-card/src/hover-card-root.directive.d.ts +0 -182
  289. package/hover-card/src/hover-card-root.inject.d.ts +0 -3
  290. package/hover-card/src/hover-card-trigger.directive.d.ts +0 -26
  291. package/hover-card/src/hover-card.types.d.ts +0 -18
  292. package/hover-card/src/utils/cdk-event.service.d.ts +0 -30
  293. package/hover-card/src/utils/constants.d.ts +0 -1
  294. package/hover-card/src/utils/types.d.ts +0 -7
  295. package/label/src/label.directive.d.ts +0 -24
  296. package/menu/src/menu-content.directive.d.ts +0 -6
  297. package/menu/src/menu-directive.d.ts +0 -6
  298. package/menu/src/menu-group.directive.d.ts +0 -6
  299. package/menu/src/menu-item-checkbox.directive.d.ts +0 -21
  300. package/menu/src/menu-item-indicator.directive.d.ts +0 -10
  301. package/menu/src/menu-item-radio.directive.d.ts +0 -20
  302. package/menu/src/menu-item.directive.d.ts +0 -18
  303. package/menu/src/menu-label.directive.d.ts +0 -5
  304. package/menu/src/menu-radio-group.directive.d.ts +0 -6
  305. package/menu/src/menu-separator.directive.d.ts +0 -5
  306. package/menu/src/menu-trigger.directive.d.ts +0 -35
  307. package/menu/src/utils.d.ts +0 -3
  308. package/menubar/src/menubar-content.directive.d.ts +0 -6
  309. package/menubar/src/menubar-item-checkbox.directive.d.ts +0 -6
  310. package/menubar/src/menubar-item-indicator.directive.d.ts +0 -6
  311. package/menubar/src/menubar-item-radio.directive.d.ts +0 -6
  312. package/menubar/src/menubar-item.directive.d.ts +0 -6
  313. package/menubar/src/menubar-radio-group.directive.d.ts +0 -6
  314. package/menubar/src/menubar-root.directive.d.ts +0 -6
  315. package/menubar/src/menubar-separator.directive.d.ts +0 -6
  316. package/menubar/src/menubar-trigger.directive.d.ts +0 -6
  317. package/navigation-menu/src/navigation-menu-a11y.component.d.ts +0 -15
  318. package/navigation-menu/src/navigation-menu-content.directive.d.ts +0 -31
  319. package/navigation-menu/src/navigation-menu-indicator.directive.d.ts +0 -29
  320. package/navigation-menu/src/navigation-menu-item.directive.d.ts +0 -44
  321. package/navigation-menu/src/navigation-menu-link.directive.d.ts +0 -17
  322. package/navigation-menu/src/navigation-menu-list.directive.d.ts +0 -38
  323. package/navigation-menu/src/navigation-menu-sub.directive.d.ts +0 -19
  324. package/navigation-menu/src/navigation-menu-trigger.directive.d.ts +0 -33
  325. package/navigation-menu/src/navigation-menu-viewport.directive.d.ts +0 -61
  326. package/navigation-menu/src/navigation-menu.directive.d.ts +0 -76
  327. package/navigation-menu/src/navigation-menu.token.d.ts +0 -36
  328. package/navigation-menu/src/navigation-menu.types.d.ts +0 -13
  329. package/navigation-menu/src/utils.d.ts +0 -44
  330. package/number-field/src/number-field-context.token.d.ts +0 -24
  331. package/number-field/src/number-field-decrement.directive.d.ts +0 -23
  332. package/number-field/src/number-field-increment.directive.d.ts +0 -23
  333. package/number-field/src/number-field-input.directive.d.ts +0 -22
  334. package/number-field/src/number-field-root.directive.d.ts +0 -86
  335. package/number-field/src/types.d.ts +0 -1
  336. package/number-field/src/utils.d.ts +0 -18
  337. package/pagination/src/pagination-context.token.d.ts +0 -11
  338. package/pagination/src/pagination-ellipsis.directive.d.ts +0 -5
  339. package/pagination/src/pagination-first.directive.d.ts +0 -8
  340. package/pagination/src/pagination-last.directive.d.ts +0 -8
  341. package/pagination/src/pagination-list-item.directive.d.ts +0 -10
  342. package/pagination/src/pagination-list.directive.d.ts +0 -12
  343. package/pagination/src/pagination-next.directive.d.ts +0 -8
  344. package/pagination/src/pagination-prev.directive.d.ts +0 -8
  345. package/pagination/src/pagination-root.directive.d.ts +0 -18
  346. package/pagination/src/utils.d.ts +0 -9
  347. package/popover/src/popover-anchor.directive.d.ts +0 -28
  348. package/popover/src/popover-anchor.token.d.ts +0 -3
  349. package/popover/src/popover-arrow.directive.d.ts +0 -40
  350. package/popover/src/popover-arrow.token.d.ts +0 -3
  351. package/popover/src/popover-close.directive.d.ts +0 -15
  352. package/popover/src/popover-close.token.d.ts +0 -3
  353. package/popover/src/popover-content-attributes.component.d.ts +0 -23
  354. package/popover/src/popover-content-attributes.token.d.ts +0 -3
  355. package/popover/src/popover-content.directive.d.ts +0 -104
  356. package/popover/src/popover-root.directive.d.ts +0 -155
  357. package/popover/src/popover-root.inject.d.ts +0 -3
  358. package/popover/src/popover-trigger.directive.d.ts +0 -18
  359. package/popover/src/popover.types.d.ts +0 -14
  360. package/popover/src/utils/cdk-event.service.d.ts +0 -30
  361. package/popover/src/utils/constants.d.ts +0 -1
  362. package/popover/src/utils/types.d.ts +0 -7
  363. package/presence/src/presence.d.ts +0 -42
  364. package/presence/src/presence.directive.d.ts +0 -27
  365. package/presence/src/transitions/transition.collapse.d.ts +0 -15
  366. package/presence/src/transitions/transition.toast.d.ts +0 -3
  367. package/presence/src/types.d.ts +0 -15
  368. package/presence/src/utils.d.ts +0 -42
  369. package/progress/src/progress-indicator.directive.d.ts +0 -15
  370. package/progress/src/progress-root.directive.d.ts +0 -54
  371. package/radio/src/radio-indicator.directive.d.ts +0 -9
  372. package/radio/src/radio-item-input.directive.d.ts +0 -12
  373. package/radio/src/radio-item.directive.d.ts +0 -30
  374. package/radio/src/radio-root.directive.d.ts +0 -57
  375. package/radio/src/radio-tokens.d.ts +0 -14
  376. package/roving-focus/src/roving-focus-group.directive.d.ts +0 -50
  377. package/roving-focus/src/roving-focus-item.directive.d.ts +0 -50
  378. package/roving-focus/src/utils.d.ts +0 -19
  379. package/select/src/select-content.directive.d.ts +0 -20
  380. package/select/src/select-group.directive.d.ts +0 -5
  381. package/select/src/select-icon.directive.d.ts +0 -5
  382. package/select/src/select-item-indicator.directive.d.ts +0 -7
  383. package/select/src/select-item.directive.d.ts +0 -53
  384. package/select/src/select-label.directive.d.ts +0 -5
  385. package/select/src/select-separator.directive.d.ts +0 -5
  386. package/select/src/select-trigger.directive.d.ts +0 -17
  387. package/select/src/select-value.directive.d.ts +0 -8
  388. package/select/src/select.component.d.ts +0 -98
  389. package/separator/src/separator.directive.d.ts +0 -60
  390. package/slider/src/slider-horizontal.component.d.ts +0 -28
  391. package/slider/src/slider-impl.directive.d.ts +0 -17
  392. package/slider/src/slider-orientation-context.service.d.ts +0 -14
  393. package/slider/src/slider-range.component.d.ts +0 -13
  394. package/slider/src/slider-root.component.d.ts +0 -123
  395. package/slider/src/slider-thumb-impl.directive.d.ts +0 -27
  396. package/slider/src/slider-thumb.component.d.ts +0 -6
  397. package/slider/src/slider-track.component.d.ts +0 -7
  398. package/slider/src/slider-vertical.component.d.ts +0 -28
  399. package/slider/src/utils.d.ts +0 -52
  400. package/stepper/src/stepper-description.directive.d.ts +0 -6
  401. package/stepper/src/stepper-indicator.directive.d.ts +0 -6
  402. package/stepper/src/stepper-item-context.token.d.ts +0 -13
  403. package/stepper/src/stepper-item.directive.d.ts +0 -21
  404. package/stepper/src/stepper-root-context.token.d.ts +0 -12
  405. package/stepper/src/stepper-root.directive.d.ts +0 -33
  406. package/stepper/src/stepper-separator.directive.d.ts +0 -10
  407. package/stepper/src/stepper-title.directive.d.ts +0 -6
  408. package/stepper/src/stepper-trigger.directive.d.ts +0 -14
  409. package/stepper/src/types.d.ts +0 -1
  410. package/switch/src/switch-input.directive.d.ts +0 -11
  411. package/switch/src/switch-root.directive.d.ts +0 -74
  412. package/switch/src/switch-thumb.directive.d.ts +0 -9
  413. package/tabs/src/tabs-content.directive.d.ts +0 -13
  414. package/tabs/src/tabs-list.directive.d.ts +0 -10
  415. package/tabs/src/tabs-root.directive.d.ts +0 -53
  416. package/tabs/src/tabs-trigger.directive.d.ts +0 -29
  417. package/tabs/src/utils.d.ts +0 -2
  418. package/time-field/src/time-field-context.token.d.ts +0 -20
  419. package/time-field/src/time-field-input.directive.d.ts +0 -53
  420. package/time-field/src/time-field-root.directive.d.ts +0 -130
  421. package/toggle/src/toggle-visually-hidden-input.directive.d.ts +0 -6
  422. package/toggle/src/toggle.directive.d.ts +0 -65
  423. package/toggle-group/src/toggle-group-item.directive.d.ts +0 -37
  424. package/toggle-group/src/toggle-group-item.token.d.ts +0 -4
  425. package/toggle-group/src/toggle-group-without-focus.directive.d.ts +0 -69
  426. package/toggle-group/src/toggle-group.directive.d.ts +0 -74
  427. package/toggle-group/src/toggle-group.token.d.ts +0 -10
  428. package/toolbar/src/toolbar-button.directive.d.ts +0 -11
  429. package/toolbar/src/toolbar-link.directive.d.ts +0 -7
  430. package/toolbar/src/toolbar-root.directive.d.ts +0 -8
  431. package/toolbar/src/toolbar-root.token.d.ts +0 -5
  432. package/toolbar/src/toolbar-separator.directive.d.ts +0 -6
  433. package/toolbar/src/toolbar-toggle-group.directive.d.ts +0 -6
  434. package/toolbar/src/toolbar-toggle-item.directive.d.ts +0 -6
  435. package/tooltip/src/tooltip-anchor.directive.d.ts +0 -28
  436. package/tooltip/src/tooltip-anchor.token.d.ts +0 -3
  437. package/tooltip/src/tooltip-arrow.directive.d.ts +0 -40
  438. package/tooltip/src/tooltip-arrow.token.d.ts +0 -3
  439. package/tooltip/src/tooltip-close.directive.d.ts +0 -18
  440. package/tooltip/src/tooltip-close.token.d.ts +0 -3
  441. package/tooltip/src/tooltip-content-attributes.component.d.ts +0 -25
  442. package/tooltip/src/tooltip-content-attributes.token.d.ts +0 -3
  443. package/tooltip/src/tooltip-content.directive.d.ts +0 -104
  444. package/tooltip/src/tooltip-root.directive.d.ts +0 -168
  445. package/tooltip/src/tooltip-root.inject.d.ts +0 -3
  446. package/tooltip/src/tooltip-trigger.directive.d.ts +0 -26
  447. package/tooltip/src/tooltip.types.d.ts +0 -18
  448. package/tooltip/src/utils/cdk-event.service.d.ts +0 -30
  449. package/tooltip/src/utils/constants.d.ts +0 -1
  450. package/tooltip/src/utils/types.d.ts +0 -7
  451. package/visually-hidden/src/visually-hidden-input-bubble.directive.d.ts +0 -23
  452. package/visually-hidden/src/visually-hidden-input.directive.d.ts +0 -19
  453. package/visually-hidden/src/visually-hidden.directive.d.ts +0 -17
@@ -1 +1 @@
1
- {"version":3,"file":"radix-ng-primitives-cropper.mjs","sources":["../../../packages/primitives/cropper/src/cropper-context.token.ts","../../../packages/primitives/cropper/src/cropper-crop-area.directive.ts","../../../packages/primitives/cropper/src/cropper-description.directive.ts","../../../packages/primitives/cropper/src/cropper-image.component.ts","../../../packages/primitives/cropper/src/cropper-root.directive.ts","../../../packages/primitives/cropper/index.ts","../../../packages/primitives/cropper/radix-ng-primitives-cropper.ts"],"sourcesContent":["import { inject, InjectionToken, InputSignal, WritableSignal } from '@angular/core';\n\nexport interface CropperContextToken {\n image: InputSignal<string>;\n getImageProps: () => { [key: string]: any };\n getImageWrapperStyle: () => Record<string, string>;\n getCropAreaStyle: () => Record<string, string>;\n descriptionId: WritableSignal<string>;\n}\n\nexport const CROPPER_ROOT_CONTEXT = new InjectionToken<CropperContextToken>('CROPPER_ROOT_CONTEXT');\n\nexport function injectCropperRootContext() {\n return inject(CROPPER_ROOT_CONTEXT);\n}\n","import { Directive } from '@angular/core';\nimport { injectCropperRootContext } from './cropper-context.token';\n\n@Directive({\n selector: '[rdxCropperCropArea]',\n host: {\n '[style]': 'rootContext.getCropAreaStyle()'\n }\n})\nexport class RdxCropperCropAreaDirective {\n readonly rootContext = injectCropperRootContext();\n}\n","import { Directive } from '@angular/core';\nimport { injectCropperRootContext } from './cropper-context.token';\n\n@Directive({\n selector: '[rdxCropperDescription]',\n host: {\n '[attr.id]': 'rootContext.descriptionId()'\n }\n})\nexport class RdxCropperDescriptionDirective {\n readonly rootContext = injectCropperRootContext();\n}\n","import { Component, computed, input } from '@angular/core';\nimport { injectCropperRootContext } from './cropper-context.token';\n\n@Component({\n selector: '[rdxCropperImage]',\n host: {\n '[style]': 'rootContext.getImageWrapperStyle()'\n },\n template: `\n <img\n [class]=\"imgClasses()\"\n [src]=\"rootContext.getImageProps()['src']\"\n [alt]=\"rootContext.getImageProps()['alt']\"\n [draggable]=\"rootContext.getImageProps()['draggable']\"\n [style]=\"imgStyless()\"\n aria-hidden=\"true\"\n />\n `\n})\nexport class RdxCropperImageComponent {\n protected readonly rootContext = injectCropperRootContext();\n\n readonly imgClass = input<string>();\n\n readonly imgStyles = input<string>();\n\n protected readonly imgClasses = computed(() => this.imgClass());\n\n protected readonly imgStyless = computed(() => this.imgStyles());\n}\n","// Based on https://github.com/origin-space/image-cropper/blob/main/src/Cropper.tsx\n\nimport { NumberInput } from '@angular/cdk/coercion';\nimport {\n afterNextRender,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n numberAttribute,\n output,\n signal\n} from '@angular/core';\nimport { clamp, provideToken } from '@radix-ng/primitives/core';\nimport { CROPPER_ROOT_CONTEXT, CropperContextToken } from './cropper-context.token';\n\nexport type Area = { x: number; y: number; width: number; height: number };\n\n@Directive({\n selector: '[rdxCropperRoot]',\n providers: [provideToken(CROPPER_ROOT_CONTEXT, RdxCropperRootDirective)],\n host: {\n '[attr.aria-label]': '\"Interactive image cropper\"',\n '[attr.aria-describedby]': 'descriptionId()',\n '[attr.aria-valuemin]': 'minZoom()',\n '[attr.aria-valuemax]': 'maxZoom()',\n '[attr.aria-valuenow]': 'effectiveZoom()',\n '[attr.aria-valuetext]': 'zoomValueText()',\n tabindex: '0',\n role: 'application',\n '(mousedown)': 'onMouseDown($event)',\n '(keydown)': 'onKeyDown($event)',\n '(keyup)': 'onKeyUp($event)'\n }\n})\nexport class RdxCropperRootDirective implements CropperContextToken {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly CROPPER_DESC_WARN_MESSAGE = `Warning: \\`Cropper\\` requires a description element for accessibility.`;\n\n readonly image = input.required<string>();\n readonly cropPadding = input(25, { transform: numberAttribute });\n readonly aspectRatio = input(1, { transform: numberAttribute });\n readonly minZoom = input(1, { transform: numberAttribute });\n readonly maxZoom = input(3, { transform: numberAttribute });\n readonly zoomSensitivity = input(0.005, { transform: numberAttribute });\n readonly keyboardStep = input(10, { transform: numberAttribute });\n readonly zoom = input<number, NumberInput>(undefined, { transform: numberAttribute });\n\n readonly onCropChange = output<Area | null>();\n readonly onZoomChange = output<number>();\n\n // State signals\n private readonly imgWidth = signal<number | null>(null);\n private readonly imgHeight = signal<number | null>(null);\n private readonly cropAreaWidth = signal(0);\n private readonly cropAreaHeight = signal(0);\n private readonly imageWrapperWidth = signal(0);\n private readonly imageWrapperHeight = signal(0);\n private readonly offsetX = signal(0);\n private readonly offsetY = signal(0);\n private readonly internalZoom = signal(this.minZoom());\n private readonly isDragging = signal(false);\n readonly descriptionId = signal(`cropper-${Math.random().toString(36).substring(2, 9)}`);\n\n private readonly isZoomControlled = computed(() => this.zoom() !== undefined);\n protected readonly effectiveZoom = computed(() => (this.isZoomControlled() ? this.zoom()! : this.internalZoom()));\n protected readonly zoomValueText = computed(() => {\n const zoomPercent = this.effectiveZoom() * 100;\n return `Zoom: ${zoomPercent.toFixed(0)}%`;\n });\n\n // Refs\n private readonly dragStartPoint = signal({ x: 0, y: 0 });\n private readonly dragStartOffset = signal({ x: 0, y: 0 });\n private readonly latestRestrictedOffset = signal({ x: 0, y: 0 });\n private readonly latestZoom = signal(this.minZoom());\n private readonly isInitialSetupDone = signal(false);\n private readonly initialPinchDistance = signal(0);\n private readonly initialPinchZoom = signal(1);\n private readonly isPinching = signal(false);\n private readonly hasWarned = signal(false);\n\n constructor() {\n afterNextRender(() => {\n this.initializeContainerDimensions();\n });\n\n this.setupImageLoadEffect();\n this.setupDimensionsEffects();\n this.setupCropCalculationEffect();\n this.setupAccessibilityWarningEffect();\n this.setupEventListenersEffect();\n\n effect(() => {\n this.latestZoom.set(this.effectiveZoom());\n });\n }\n\n private updateZoom(newZoomValue: number): number {\n const clampedZoom = clamp(newZoomValue, this.minZoom(), this.maxZoom());\n\n this.onZoomChange.emit(clampedZoom);\n\n if (!this.isZoomControlled()) {\n this.internalZoom.set(clampedZoom);\n }\n return clampedZoom;\n }\n\n private initializeContainerDimensions() {\n const element = this.elementRef.nativeElement;\n if (element && element.clientWidth > 0 && element.clientHeight > 0) {\n this.cropAreaWidth.set(Math.max(0, element.clientWidth - this.cropPadding() * 2));\n this.cropAreaHeight.set(Math.max(0, element.clientHeight - this.cropPadding() * 2));\n }\n }\n\n private setupImageLoadEffect() {\n effect(() => {\n const image = this.image();\n this.offsetX.set(0);\n this.offsetY.set(0);\n\n if (!this.isZoomControlled()) {\n this.internalZoom.set(this.minZoom());\n }\n\n this.isInitialSetupDone.set(false);\n\n if (!image) {\n this.imgWidth.set(null);\n this.imgHeight.set(null);\n return;\n }\n\n let isMounted = true;\n const img = new Image();\n img.onload = () => {\n if (isMounted) {\n this.imgWidth.set(img.naturalWidth);\n this.imgHeight.set(img.naturalHeight);\n }\n };\n img.onerror = () => {\n if (isMounted) {\n this.imgWidth.set(null);\n this.imgHeight.set(null);\n }\n };\n img.src = image;\n\n return () => {\n isMounted = false;\n };\n });\n }\n\n private setupDimensionsEffects(): void {\n effect(() => {\n const element = this.elementRef.nativeElement;\n if (!element) return;\n\n const updateDimensions = (width: number, height: number) => {\n if (width <= 0 || height <= 0) {\n this.cropAreaWidth.set(0);\n this.cropAreaHeight.set(0);\n return;\n }\n\n const maxPossibleWidth = Math.max(0, width - this.cropPadding() * 2);\n const maxPossibleHeight = Math.max(0, height - this.cropPadding() * 2);\n let targetCropW: number, targetCropH: number;\n\n if (maxPossibleWidth / this.aspectRatio() >= maxPossibleHeight) {\n targetCropH = maxPossibleHeight;\n targetCropW = targetCropH * this.aspectRatio();\n } else {\n targetCropW = maxPossibleWidth;\n targetCropH = targetCropW / this.aspectRatio();\n }\n\n this.cropAreaWidth.set(targetCropW);\n this.cropAreaHeight.set(targetCropH);\n };\n\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n if (width > 0 && height > 0) updateDimensions(width, height);\n }\n });\n\n observer.observe(element);\n const initialWidth = element.clientWidth;\n const initialHeight = element.clientHeight;\n if (initialWidth > 0 && initialHeight > 0) {\n updateDimensions(initialWidth, initialHeight);\n }\n\n return () => observer.disconnect();\n });\n\n // Update image wrapper dimensions when crop area or image dimensions change\n effect(() => {\n const cropW = this.cropAreaWidth();\n const cropH = this.cropAreaHeight();\n const imgW = this.imgWidth();\n const imgH = this.imgHeight();\n\n if (cropW <= 0 || cropH <= 0 || !imgW || !imgH) {\n this.imageWrapperWidth.set(0);\n this.imageWrapperHeight.set(0);\n return;\n }\n\n const naturalAspect = imgW / imgH;\n const cropAspect = cropW / cropH;\n let targetWrapperWidth: number, targetWrapperHeight: number;\n\n if (naturalAspect >= cropAspect) {\n targetWrapperHeight = cropH;\n targetWrapperWidth = targetWrapperHeight * naturalAspect;\n } else {\n targetWrapperWidth = cropW;\n targetWrapperHeight = targetWrapperWidth / naturalAspect;\n }\n\n this.imageWrapperWidth.set(targetWrapperWidth);\n this.imageWrapperHeight.set(targetWrapperHeight);\n });\n }\n\n private restrictOffset(dragOffsetX: number, dragOffsetY: number, currentZoom: number): { x: number; y: number } {\n const wrapperW = this.imageWrapperWidth();\n const wrapperH = this.imageWrapperHeight();\n const cropW = this.cropAreaWidth();\n const cropH = this.cropAreaHeight();\n\n if (wrapperW <= 0 || wrapperH <= 0 || cropW <= 0 || cropH <= 0) {\n return { x: 0, y: 0 };\n }\n\n const effectiveWrapperWidth = wrapperW * currentZoom;\n const effectiveWrapperHeight = wrapperH * currentZoom;\n const maxDragX = Math.max(0, (effectiveWrapperWidth - cropW) / 2);\n const maxDragY = Math.max(0, (effectiveWrapperHeight - cropH) / 2);\n\n return {\n x: clamp(dragOffsetX, -maxDragX, maxDragX),\n y: clamp(dragOffsetY, -maxDragY, maxDragY)\n };\n }\n\n private calculateCropData(finalOffsetX?: number, finalOffsetY?: number, finalZoom?: number): Area | null {\n const currentOffsetX = finalOffsetX ?? this.latestRestrictedOffset().x;\n const currentOffsetY = finalOffsetY ?? this.latestRestrictedOffset().y;\n const currentZoom = finalZoom ?? this.effectiveZoom();\n const imgW = this.imgWidth();\n const imgH = this.imgHeight();\n const wrapperW = this.imageWrapperWidth();\n const wrapperH = this.imageWrapperHeight();\n const cropW = this.cropAreaWidth();\n const cropH = this.cropAreaHeight();\n\n if (!imgW || !imgH || wrapperW <= 0 || wrapperH <= 0 || cropW <= 0 || cropH <= 0) {\n return null;\n }\n\n const scaledWrapperWidth = wrapperW * currentZoom;\n const scaledWrapperHeight = wrapperH * currentZoom;\n const topLeftOffsetX = currentOffsetX + (cropW - scaledWrapperWidth) / 2;\n const topLeftOffsetY = currentOffsetY + (cropH - scaledWrapperHeight) / 2;\n const baseScale = imgW / wrapperW;\n\n if (isNaN(baseScale) || baseScale === 0) {\n return null;\n }\n\n const sx = (-topLeftOffsetX * baseScale) / currentZoom;\n const sy = (-topLeftOffsetY * baseScale) / currentZoom;\n const sWidth = (cropW * baseScale) / currentZoom;\n const sHeight = (cropH * baseScale) / currentZoom;\n\n const finalX = clamp(Math.round(sx), 0, imgW);\n const finalY = clamp(Math.round(sy), 0, imgH);\n const finalWidth = clamp(Math.round(sWidth), 0, imgW - finalX);\n const finalHeight = clamp(Math.round(sHeight), 0, imgH - finalY);\n\n if (finalWidth <= 0 || finalHeight <= 0) {\n return null;\n }\n\n return { x: finalX, y: finalY, width: finalWidth, height: finalHeight };\n }\n\n private setupCropCalculationEffect(): void {\n effect(() => {\n const wrapperW = this.imageWrapperWidth();\n const wrapperH = this.imageWrapperHeight();\n const cropW = this.cropAreaWidth();\n const cropH = this.cropAreaHeight();\n const currentZoom = this.effectiveZoom();\n\n if (wrapperW > 0 && wrapperH > 0 && cropW > 0 && cropH > 0) {\n if (!this.isInitialSetupDone()) {\n const restrictedInitial = this.restrictOffset(0, 0, currentZoom);\n this.offsetX.set(restrictedInitial.x);\n this.offsetY.set(restrictedInitial.y);\n\n if (!this.isZoomControlled()) {\n this.internalZoom.set(currentZoom);\n }\n\n this.dragStartOffset.set(restrictedInitial);\n this.latestRestrictedOffset.set(restrictedInitial);\n this.latestZoom.set(currentZoom);\n\n this.onCropChange.emit(\n this.calculateCropData(restrictedInitial.x, restrictedInitial.y, currentZoom)\n );\n\n this.isInitialSetupDone.set(true);\n } else {\n const currentX = this.latestRestrictedOffset().x;\n const currentY = this.latestRestrictedOffset().y;\n const restrictedCurrent = this.restrictOffset(currentX, currentY, currentZoom);\n\n if (restrictedCurrent.x !== currentX || restrictedCurrent.y !== currentY) {\n this.offsetX.set(restrictedCurrent.x);\n this.offsetY.set(restrictedCurrent.y);\n this.latestRestrictedOffset.set(restrictedCurrent);\n this.dragStartOffset.set(restrictedCurrent);\n }\n\n this.onCropChange.emit(\n this.calculateCropData(restrictedCurrent.x, restrictedCurrent.y, currentZoom)\n );\n }\n } else {\n this.isInitialSetupDone.set(false);\n this.offsetX.set(0);\n this.offsetY.set(0);\n\n if (!this.isZoomControlled()) {\n this.internalZoom.set(this.minZoom());\n }\n\n this.dragStartOffset.set({ x: 0, y: 0 });\n this.latestRestrictedOffset.set({ x: 0, y: 0 });\n this.latestZoom.set(currentZoom);\n this.onCropChange.emit(null);\n }\n });\n }\n\n private setupAccessibilityWarningEffect(): void {\n effect(() => {\n const checkTimeout = setTimeout(() => {\n if (this.elementRef.nativeElement && !this.hasWarned()) {\n const hasDescription = document.getElementById(this.descriptionId());\n if (!hasDescription) {\n console.warn(this.CROPPER_DESC_WARN_MESSAGE);\n this.hasWarned.set(true);\n }\n }\n }, 100);\n\n return () => clearTimeout(checkTimeout);\n });\n }\n\n private setupEventListenersEffect(): void {\n effect((onCleanup) => {\n const node = this.elementRef.nativeElement;\n if (!node) return;\n\n const options = { passive: false } as any;\n\n const wheelHandler = (e: WheelEvent) => this.handleWheel(e);\n const touchStartHandler = (e: TouchEvent) => this.handleTouchStart(e);\n const touchMoveHandler = (e: TouchEvent) => this.handleTouchMove(e);\n const touchEndHandler = (e: TouchEvent) => this.handleTouchEnd(e);\n\n node.addEventListener('wheel', wheelHandler, options);\n node.addEventListener('touchstart', touchStartHandler, options);\n node.addEventListener('touchmove', touchMoveHandler, options);\n node.addEventListener('touchend', touchEndHandler, options);\n node.addEventListener('touchcancel', touchEndHandler, options);\n\n onCleanup(() => {\n node.removeEventListener('wheel', wheelHandler, options);\n node.removeEventListener('touchstart', touchStartHandler, options);\n node.removeEventListener('touchmove', touchMoveHandler, options);\n node.removeEventListener('touchend', touchEndHandler, options);\n node.removeEventListener('touchcancel', touchEndHandler, options);\n });\n });\n }\n\n private handleInteractionEnd(): void {\n const finalData = this.calculateCropData(\n this.latestRestrictedOffset().x,\n this.latestRestrictedOffset().y,\n this.effectiveZoom()\n );\n this.onCropChange.emit(finalData);\n }\n\n /**\n * @ignore\n */\n onMouseDown(e: MouseEvent): void {\n if (e.button !== 0) return;\n e.preventDefault();\n this.isDragging.set(true);\n this.isPinching.set(false);\n this.dragStartPoint.set({ x: e.clientX, y: e.clientY });\n this.dragStartOffset.set(this.latestRestrictedOffset());\n\n const handleMouseMove = (ev: MouseEvent) => {\n const deltaX = ev.clientX - this.dragStartPoint().x;\n const deltaY = ev.clientY - this.dragStartPoint().y;\n const targetOffsetX = this.dragStartOffset().x + deltaX;\n const targetOffsetY = this.dragStartOffset().y + deltaY;\n const restricted = this.restrictOffset(targetOffsetX, targetOffsetY, this.effectiveZoom());\n this.latestRestrictedOffset.set(restricted);\n this.offsetX.set(restricted.x);\n this.offsetY.set(restricted.y);\n };\n\n const handleMouseUp = () => {\n this.isDragging.set(false);\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n this.handleInteractionEnd();\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n }\n\n private handleWheel(e: WheelEvent): void {\n e.preventDefault();\n e.stopPropagation();\n if (!this.elementRef.nativeElement || this.imageWrapperWidth() <= 0 || this.imageWrapperHeight() <= 0) return;\n\n const currentZoom = this.latestZoom();\n const currentOffsetX = this.latestRestrictedOffset().x;\n const currentOffsetY = this.latestRestrictedOffset().y;\n const delta = e.deltaY * -this.zoomSensitivity();\n const targetZoom = currentZoom + delta;\n\n if (clamp(targetZoom, this.minZoom(), this.maxZoom()) === currentZoom) return;\n\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const pointerX = e.clientX - rect.left - rect.width / 2;\n const pointerY = e.clientY - rect.top - rect.height / 2;\n const imagePointX = (pointerX - currentOffsetX) / currentZoom;\n const imagePointY = (pointerY - currentOffsetY) / currentZoom;\n\n const finalNewZoom = this.updateZoom(targetZoom);\n\n const newOffsetX = pointerX - imagePointX * finalNewZoom;\n const newOffsetY = pointerY - imagePointY * finalNewZoom;\n const restrictedNewOffset = this.restrictOffset(newOffsetX, newOffsetY, finalNewZoom);\n\n this.offsetX.set(restrictedNewOffset.x);\n this.offsetY.set(restrictedNewOffset.y);\n this.latestRestrictedOffset.set(restrictedNewOffset);\n\n const finalData = this.calculateCropData(restrictedNewOffset.x, restrictedNewOffset.y, finalNewZoom);\n this.onCropChange.emit(finalData);\n }\n\n private getPinchDistance(touches: TouchList): number {\n return Math.sqrt(\n Math.pow(touches[1].clientX - touches[0].clientX, 2) + Math.pow(touches[1].clientY - touches[0].clientY, 2)\n );\n }\n\n private getPinchCenter(touches: TouchList): { x: number; y: number } {\n return {\n x: (touches[0].clientX + touches[1].clientX) / 2,\n y: (touches[0].clientY + touches[1].clientY) / 2\n };\n }\n\n private handleTouchStart(e: TouchEvent): void {\n if (this.imageWrapperWidth() <= 0 || this.imageWrapperHeight() <= 0) return;\n e.preventDefault();\n const touches = e.touches;\n\n if (touches.length === 1) {\n this.isDragging.set(true);\n this.isPinching.set(false);\n this.dragStartPoint.set({ x: touches[0].clientX, y: touches[0].clientY });\n this.dragStartOffset.set(this.latestRestrictedOffset());\n } else if (touches.length === 2) {\n this.isDragging.set(false);\n this.isPinching.set(true);\n this.initialPinchDistance.set(this.getPinchDistance(touches));\n this.initialPinchZoom.set(this.latestZoom());\n this.dragStartOffset.set(this.latestRestrictedOffset());\n }\n }\n\n private handleTouchMove(e: TouchEvent): void {\n if (this.imageWrapperWidth() <= 0 || this.imageWrapperHeight() <= 0) return;\n e.preventDefault();\n const touches = e.touches;\n\n if (touches.length === 1 && this.isDragging() && !this.isPinching()) {\n const deltaX = touches[0].clientX - this.dragStartPoint().x;\n const deltaY = touches[0].clientY - this.dragStartPoint().y;\n const targetOffsetX = this.dragStartOffset().x + deltaX;\n const targetOffsetY = this.dragStartOffset().y + deltaY;\n const restricted = this.restrictOffset(targetOffsetX, targetOffsetY, this.effectiveZoom());\n this.latestRestrictedOffset.set(restricted);\n this.offsetX.set(restricted.x);\n this.offsetY.set(restricted.y);\n } else if (touches.length === 2 && this.isPinching()) {\n const currentPinchDistance = this.getPinchDistance(touches);\n const scale = currentPinchDistance / this.initialPinchDistance();\n const currentZoom = this.initialPinchZoom();\n const targetZoom = currentZoom * scale;\n\n if (clamp(targetZoom, this.minZoom(), this.maxZoom()) === this.latestZoom()) return;\n\n const pinchCenter = this.getPinchCenter(touches);\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const pinchCenterX = pinchCenter.x - rect.left - rect.width / 2;\n const pinchCenterY = pinchCenter.y - rect.top - rect.height / 2;\n const currentOffsetX = this.dragStartOffset().x;\n const currentOffsetY = this.dragStartOffset().y;\n const imagePointX = (pinchCenterX - currentOffsetX) / currentZoom;\n const imagePointY = (pinchCenterY - currentOffsetY) / currentZoom;\n\n const finalNewZoom = this.updateZoom(targetZoom);\n\n const newOffsetX = pinchCenterX - imagePointX * finalNewZoom;\n const newOffsetY = pinchCenterY - imagePointY * finalNewZoom;\n const restrictedNewOffset = this.restrictOffset(newOffsetX, newOffsetY, finalNewZoom);\n\n this.offsetX.set(restrictedNewOffset.x);\n this.offsetY.set(restrictedNewOffset.y);\n this.latestRestrictedOffset.set(restrictedNewOffset);\n\n const finalData = this.calculateCropData(restrictedNewOffset.x, restrictedNewOffset.y, finalNewZoom);\n this.onCropChange.emit(finalData);\n }\n }\n\n private handleTouchEnd(e: TouchEvent): void {\n e.preventDefault();\n const touches = e.touches;\n\n if (this.isPinching() && touches.length < 2) {\n this.isPinching.set(false);\n\n if (touches.length === 1) {\n this.isDragging.set(true);\n this.dragStartPoint.set({ x: touches[0].clientX, y: touches[0].clientY });\n this.dragStartOffset.set(this.latestRestrictedOffset());\n } else {\n this.isDragging.set(false);\n this.handleInteractionEnd();\n }\n } else if (this.isDragging() && touches.length === 0) {\n this.isDragging.set(false);\n this.handleInteractionEnd();\n }\n }\n\n /**\n * @ignore\n */\n onKeyDown(e: KeyboardEvent): void {\n if (this.imageWrapperWidth() <= 0) return;\n\n let targetOffsetX = this.latestRestrictedOffset().x;\n let targetOffsetY = this.latestRestrictedOffset().y;\n let moved = false;\n\n switch (e.key) {\n case 'ArrowUp':\n targetOffsetY += this.keyboardStep();\n moved = true;\n break;\n case 'ArrowDown':\n targetOffsetY -= this.keyboardStep();\n moved = true;\n break;\n case 'ArrowLeft':\n targetOffsetX += this.keyboardStep();\n moved = true;\n break;\n case 'ArrowRight':\n targetOffsetX -= this.keyboardStep();\n moved = true;\n break;\n default:\n return;\n }\n\n if (moved) {\n e.preventDefault();\n const restricted = this.restrictOffset(targetOffsetX, targetOffsetY, this.effectiveZoom());\n if (restricted.x !== this.latestRestrictedOffset().x || restricted.y !== this.latestRestrictedOffset().y) {\n this.latestRestrictedOffset.set(restricted);\n this.offsetX.set(restricted.x);\n this.offsetY.set(restricted.y);\n }\n }\n }\n\n /**\n * @ignore\n */\n onKeyUp(e: KeyboardEvent): void {\n if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key)) {\n this.handleInteractionEnd();\n }\n }\n\n /**\n * @ignore\n */\n getImageProps(): { [key: string]: any } {\n return {\n src: this.image(),\n alt: 'Image being cropped',\n draggable: false,\n 'aria-hidden': true\n };\n }\n\n /**\n * @ignore\n */\n getImageWrapperStyle(): Record<string, string> {\n const wrapperW = this.imageWrapperWidth();\n const wrapperH = this.imageWrapperHeight();\n const offsetX = this.offsetX();\n const offsetY = this.offsetY();\n const zoom = this.effectiveZoom();\n\n return {\n width: `${wrapperW}px`,\n height: `${wrapperH}px`,\n transform: `translate3d(${offsetX}px, ${offsetY}px, 0px) scale(${zoom})`,\n position: 'absolute',\n left: `calc(50% - ${wrapperW / 2}px)`,\n top: `calc(50% - ${wrapperH / 2}px)`,\n willChange: 'transform'\n };\n }\n\n /**\n * @ignore\n */\n getCropAreaStyle(): Record<string, string> {\n return {\n width: `${this.cropAreaWidth()}px`,\n height: `${this.cropAreaHeight()}px`\n };\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RdxCropperCropAreaDirective } from './src/cropper-crop-area.directive';\nimport { RdxCropperDescriptionDirective } from './src/cropper-description.directive';\nimport { RdxCropperImageComponent } from './src/cropper-image.component';\nimport { RdxCropperRootDirective } from './src/cropper-root.directive';\n\nexport * from './src/cropper-context.token';\nexport * from './src/cropper-crop-area.directive';\nexport * from './src/cropper-description.directive';\nexport * from './src/cropper-image.component';\nexport * from './src/cropper-root.directive';\n\nconst _imports = [\n RdxCropperRootDirective,\n RdxCropperImageComponent,\n RdxCropperCropAreaDirective,\n RdxCropperDescriptionDirective\n];\n\n@NgModule({\n imports: [..._imports],\n exports: [..._imports]\n})\nexport class RdxCropperModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"radix-ng-primitives-cropper.mjs","sources":["../tmp-esm2022/cropper/src/cropper-context.token.js","../tmp-esm2022/cropper/src/cropper-crop-area.directive.js","../tmp-esm2022/cropper/src/cropper-description.directive.js","../tmp-esm2022/cropper/src/cropper-image.component.js","../tmp-esm2022/cropper/src/cropper-root.directive.js","../tmp-esm2022/cropper/index.js","../tmp-esm2022/cropper/radix-ng-primitives-cropper.js"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nexport const CROPPER_ROOT_CONTEXT = new InjectionToken('CROPPER_ROOT_CONTEXT');\nexport function injectCropperRootContext() {\n return inject(CROPPER_ROOT_CONTEXT);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JvcHBlci1jb250ZXh0LnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9jcm9wcGVyL3NyYy9jcm9wcGVyLWNvbnRleHQudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQStCLE1BQU0sZUFBZSxDQUFDO0FBVXBGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksY0FBYyxDQUFzQixzQkFBc0IsQ0FBQyxDQUFDO0FBRXBHLE1BQU0sVUFBVSx3QkFBd0I7SUFDcEMsT0FBTyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3Rpb25Ub2tlbiwgSW5wdXRTaWduYWwsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JvcHBlckNvbnRleHRUb2tlbiB7XG4gICAgaW1hZ2U6IElucHV0U2lnbmFsPHN0cmluZz47XG4gICAgZ2V0SW1hZ2VQcm9wczogKCkgPT4geyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgICBnZXRJbWFnZVdyYXBwZXJTdHlsZTogKCkgPT4gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBnZXRDcm9wQXJlYVN0eWxlOiAoKSA9PiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGRlc2NyaXB0aW9uSWQ6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG59XG5cbmV4cG9ydCBjb25zdCBDUk9QUEVSX1JPT1RfQ09OVEVYVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDcm9wcGVyQ29udGV4dFRva2VuPignQ1JPUFBFUl9ST09UX0NPTlRFWFQnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdENyb3BwZXJSb290Q29udGV4dCgpIHtcbiAgICByZXR1cm4gaW5qZWN0KENST1BQRVJfUk9PVF9DT05URVhUKTtcbn1cbiJdfQ==","import { Directive } from '@angular/core';\nimport { injectCropperRootContext } from './cropper-context.token';\nimport * as i0 from \"@angular/core\";\nexport class RdxCropperCropAreaDirective {\n constructor() {\n this.rootContext = injectCropperRootContext();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxCropperCropAreaDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.3\", type: RdxCropperCropAreaDirective, isStandalone: true, selector: \"[rdxCropperCropArea]\", host: { properties: { \"style\": \"rootContext.getCropAreaStyle()\" } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxCropperCropAreaDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[rdxCropperCropArea]',\n host: {\n '[style]': 'rootContext.getCropAreaStyle()'\n }\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JvcHBlci1jcm9wLWFyZWEuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9jcm9wcGVyL3NyYy9jcm9wcGVyLWNyb3AtYXJlYS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFRbkUsTUFBTSxPQUFPLDJCQUEyQjtJQU54QztRQU9hLGdCQUFXLEdBQUcsd0JBQXdCLEVBQUUsQ0FBQztLQUNyRDs4R0FGWSwyQkFBMkI7a0dBQTNCLDJCQUEyQjs7MkZBQTNCLDJCQUEyQjtrQkFOdkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxJQUFJLEVBQUU7d0JBQ0YsU0FBUyxFQUFFLGdDQUFnQztxQkFDOUM7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdENyb3BwZXJSb290Q29udGV4dCB9IGZyb20gJy4vY3JvcHBlci1jb250ZXh0LnRva2VuJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcmR4Q3JvcHBlckNyb3BBcmVhXScsXG4gICAgaG9zdDoge1xuICAgICAgICAnW3N0eWxlXSc6ICdyb290Q29udGV4dC5nZXRDcm9wQXJlYVN0eWxlKCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBSZHhDcm9wcGVyQ3JvcEFyZWFEaXJlY3RpdmUge1xuICAgIHJlYWRvbmx5IHJvb3RDb250ZXh0ID0gaW5qZWN0Q3JvcHBlclJvb3RDb250ZXh0KCk7XG59XG4iXX0=","import { Directive } from '@angular/core';\nimport { injectCropperRootContext } from './cropper-context.token';\nimport * as i0 from \"@angular/core\";\nexport class RdxCropperDescriptionDirective {\n constructor() {\n this.rootContext = injectCropperRootContext();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxCropperDescriptionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.3\", type: RdxCropperDescriptionDirective, isStandalone: true, selector: \"[rdxCropperDescription]\", host: { properties: { \"attr.id\": \"rootContext.descriptionId()\" } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxCropperDescriptionDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[rdxCropperDescription]',\n host: {\n '[attr.id]': 'rootContext.descriptionId()'\n }\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JvcHBlci1kZXNjcmlwdGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL2Nyb3BwZXIvc3JjL2Nyb3BwZXItZGVzY3JpcHRpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBUW5FLE1BQU0sT0FBTyw4QkFBOEI7SUFOM0M7UUFPYSxnQkFBVyxHQUFHLHdCQUF3QixFQUFFLENBQUM7S0FDckQ7OEdBRlksOEJBQThCO2tHQUE5Qiw4QkFBOEI7OzJGQUE5Qiw4QkFBOEI7a0JBTjFDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsSUFBSSxFQUFFO3dCQUNGLFdBQVcsRUFBRSw2QkFBNkI7cUJBQzdDO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbmplY3RDcm9wcGVyUm9vdENvbnRleHQgfSBmcm9tICcuL2Nyb3BwZXItY29udGV4dC50b2tlbic7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3JkeENyb3BwZXJEZXNjcmlwdGlvbl0nLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLmlkXSc6ICdyb290Q29udGV4dC5kZXNjcmlwdGlvbklkKCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBSZHhDcm9wcGVyRGVzY3JpcHRpb25EaXJlY3RpdmUge1xuICAgIHJlYWRvbmx5IHJvb3RDb250ZXh0ID0gaW5qZWN0Q3JvcHBlclJvb3RDb250ZXh0KCk7XG59XG4iXX0=","import { Component, computed, input } from '@angular/core';\nimport { injectCropperRootContext } from './cropper-context.token';\nimport * as i0 from \"@angular/core\";\nexport class RdxCropperImageComponent {\n constructor() {\n this.rootContext = injectCropperRootContext();\n this.imgClass = input(...(ngDevMode ? [undefined, { debugName: \"imgClass\" }] : []));\n this.imgStyles = input(...(ngDevMode ? [undefined, { debugName: \"imgStyles\" }] : []));\n this.imgClasses = computed(() => this.imgClass(), ...(ngDevMode ? [{ debugName: \"imgClasses\" }] : []));\n this.imgStyless = computed(() => this.imgStyles(), ...(ngDevMode ? [{ debugName: \"imgStyless\" }] : []));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxCropperImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.1.0\", version: \"20.3.3\", type: RdxCropperImageComponent, isStandalone: true, selector: \"[rdxCropperImage]\", inputs: { imgClass: { classPropertyName: \"imgClass\", publicName: \"imgClass\", isSignal: true, isRequired: false, transformFunction: null }, imgStyles: { classPropertyName: \"imgStyles\", publicName: \"imgStyles\", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { \"style\": \"rootContext.getImageWrapperStyle()\" } }, ngImport: i0, template: `\n <img\n [class]=\"imgClasses()\"\n [src]=\"rootContext.getImageProps()['src']\"\n [alt]=\"rootContext.getImageProps()['alt']\"\n [draggable]=\"rootContext.getImageProps()['draggable']\"\n [style]=\"imgStyless()\"\n aria-hidden=\"true\"\n />\n `, isInline: true }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxCropperImageComponent, decorators: [{\n type: Component,\n args: [{\n selector: '[rdxCropperImage]',\n host: {\n '[style]': 'rootContext.getImageWrapperStyle()'\n },\n template: `\n <img\n [class]=\"imgClasses()\"\n [src]=\"rootContext.getImageProps()['src']\"\n [alt]=\"rootContext.getImageProps()['alt']\"\n [draggable]=\"rootContext.getImageProps()['draggable']\"\n [style]=\"imgStyless()\"\n aria-hidden=\"true\"\n />\n `\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JvcHBlci1pbWFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL2Nyb3BwZXIvc3JjL2Nyb3BwZXItaW1hZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFrQm5FLE1BQU0sT0FBTyx3QkFBd0I7SUFoQnJDO1FBaUJ1QixnQkFBVyxHQUFHLHdCQUF3QixFQUFFLENBQUM7UUFFbkQsYUFBUSxHQUFHLEtBQUssOERBQVUsQ0FBQztRQUUzQixjQUFTLEdBQUcsS0FBSywrREFBVSxDQUFDO1FBRWxCLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxzREFBQyxDQUFDO1FBRTdDLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxzREFBQyxDQUFDO0tBQ3BFOzhHQVZZLHdCQUF3QjtrR0FBeEIsd0JBQXdCLHVhQVh2Qjs7Ozs7Ozs7O0tBU1Q7OzJGQUVRLHdCQUF3QjtrQkFoQnBDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsSUFBSSxFQUFFO3dCQUNGLFNBQVMsRUFBRSxvQ0FBb0M7cUJBQ2xEO29CQUNELFFBQVEsRUFBRTs7Ozs7Ozs7O0tBU1Q7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0Q3JvcHBlclJvb3RDb250ZXh0IH0gZnJvbSAnLi9jcm9wcGVyLWNvbnRleHQudG9rZW4nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ1tyZHhDcm9wcGVySW1hZ2VdJyxcbiAgICBob3N0OiB7XG4gICAgICAgICdbc3R5bGVdJzogJ3Jvb3RDb250ZXh0LmdldEltYWdlV3JhcHBlclN0eWxlKCknXG4gICAgfSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8aW1nXG4gICAgICAgICAgICBbY2xhc3NdPVwiaW1nQ2xhc3NlcygpXCJcbiAgICAgICAgICAgIFtzcmNdPVwicm9vdENvbnRleHQuZ2V0SW1hZ2VQcm9wcygpWydzcmMnXVwiXG4gICAgICAgICAgICBbYWx0XT1cInJvb3RDb250ZXh0LmdldEltYWdlUHJvcHMoKVsnYWx0J11cIlxuICAgICAgICAgICAgW2RyYWdnYWJsZV09XCJyb290Q29udGV4dC5nZXRJbWFnZVByb3BzKClbJ2RyYWdnYWJsZSddXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJpbWdTdHlsZXNzKClcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgLz5cbiAgICBgXG59KVxuZXhwb3J0IGNsYXNzIFJkeENyb3BwZXJJbWFnZUNvbXBvbmVudCB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJvb3RDb250ZXh0ID0gaW5qZWN0Q3JvcHBlclJvb3RDb250ZXh0KCk7XG5cbiAgICByZWFkb25seSBpbWdDbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcblxuICAgIHJlYWRvbmx5IGltZ1N0eWxlcyA9IGlucHV0PHN0cmluZz4oKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBpbWdDbGFzc2VzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pbWdDbGFzcygpKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBpbWdTdHlsZXNzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pbWdTdHlsZXMoKSk7XG59XG4iXX0=","import { afterNextRender, computed, Directive, effect, ElementRef, inject, input, numberAttribute, output, signal } from '@angular/core';\nimport { clamp, provideToken } from '@radix-ng/primitives/core';\nimport { CROPPER_ROOT_CONTEXT } from './cropper-context.token';\nimport * as i0 from \"@angular/core\";\nexport class RdxCropperRootDirective {\n constructor() {\n this.elementRef = inject((ElementRef));\n this.CROPPER_DESC_WARN_MESSAGE = `Warning: \\`Cropper\\` requires a description element for accessibility.`;\n this.image = input.required(...(ngDevMode ? [{ debugName: \"image\" }] : []));\n this.cropPadding = input(25, ...(ngDevMode ? [{ debugName: \"cropPadding\", transform: numberAttribute }] : [{ transform: numberAttribute }]));\n this.aspectRatio = input(1, ...(ngDevMode ? [{ debugName: \"aspectRatio\", transform: numberAttribute }] : [{ transform: numberAttribute }]));\n this.minZoom = input(1, ...(ngDevMode ? [{ debugName: \"minZoom\", transform: numberAttribute }] : [{ transform: numberAttribute }]));\n this.maxZoom = input(3, ...(ngDevMode ? [{ debugName: \"maxZoom\", transform: numberAttribute }] : [{ transform: numberAttribute }]));\n this.zoomSensitivity = input(0.005, ...(ngDevMode ? [{ debugName: \"zoomSensitivity\", transform: numberAttribute }] : [{ transform: numberAttribute }]));\n this.keyboardStep = input(10, ...(ngDevMode ? [{ debugName: \"keyboardStep\", transform: numberAttribute }] : [{ transform: numberAttribute }]));\n this.zoom = input(undefined, ...(ngDevMode ? [{ debugName: \"zoom\", transform: numberAttribute }] : [{ transform: numberAttribute }]));\n this.onCropChange = output();\n this.onZoomChange = output();\n // State signals\n this.imgWidth = signal(null, ...(ngDevMode ? [{ debugName: \"imgWidth\" }] : []));\n this.imgHeight = signal(null, ...(ngDevMode ? [{ debugName: \"imgHeight\" }] : []));\n this.cropAreaWidth = signal(0, ...(ngDevMode ? [{ debugName: \"cropAreaWidth\" }] : []));\n this.cropAreaHeight = signal(0, ...(ngDevMode ? [{ debugName: \"cropAreaHeight\" }] : []));\n this.imageWrapperWidth = signal(0, ...(ngDevMode ? [{ debugName: \"imageWrapperWidth\" }] : []));\n this.imageWrapperHeight = signal(0, ...(ngDevMode ? [{ debugName: \"imageWrapperHeight\" }] : []));\n this.offsetX = signal(0, ...(ngDevMode ? [{ debugName: \"offsetX\" }] : []));\n this.offsetY = signal(0, ...(ngDevMode ? [{ debugName: \"offsetY\" }] : []));\n this.internalZoom = signal(this.minZoom(), ...(ngDevMode ? [{ debugName: \"internalZoom\" }] : []));\n this.isDragging = signal(false, ...(ngDevMode ? [{ debugName: \"isDragging\" }] : []));\n this.descriptionId = signal(`cropper-${Math.random().toString(36).substring(2, 9)}`, ...(ngDevMode ? [{ debugName: \"descriptionId\" }] : []));\n this.isZoomControlled = computed(() => this.zoom() !== undefined, ...(ngDevMode ? [{ debugName: \"isZoomControlled\" }] : []));\n this.effectiveZoom = computed(() => (this.isZoomControlled() ? this.zoom() : this.internalZoom()), ...(ngDevMode ? [{ debugName: \"effectiveZoom\" }] : []));\n this.zoomValueText = computed(() => {\n const zoomPercent = this.effectiveZoom() * 100;\n return `Zoom: ${zoomPercent.toFixed(0)}%`;\n }, ...(ngDevMode ? [{ debugName: \"zoomValueText\" }] : []));\n // Refs\n this.dragStartPoint = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"dragStartPoint\" }] : []));\n this.dragStartOffset = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"dragStartOffset\" }] : []));\n this.latestRestrictedOffset = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"latestRestrictedOffset\" }] : []));\n this.latestZoom = signal(this.minZoom(), ...(ngDevMode ? [{ debugName: \"latestZoom\" }] : []));\n this.isInitialSetupDone = signal(false, ...(ngDevMode ? [{ debugName: \"isInitialSetupDone\" }] : []));\n this.initialPinchDistance = signal(0, ...(ngDevMode ? [{ debugName: \"initialPinchDistance\" }] : []));\n this.initialPinchZoom = signal(1, ...(ngDevMode ? [{ debugName: \"initialPinchZoom\" }] : []));\n this.isPinching = signal(false, ...(ngDevMode ? [{ debugName: \"isPinching\" }] : []));\n this.hasWarned = signal(false, ...(ngDevMode ? [{ debugName: \"hasWarned\" }] : []));\n afterNextRender(() => {\n this.initializeContainerDimensions();\n });\n this.setupImageLoadEffect();\n this.setupDimensionsEffects();\n this.setupCropCalculationEffect();\n this.setupAccessibilityWarningEffect();\n this.setupEventListenersEffect();\n effect(() => {\n this.latestZoom.set(this.effectiveZoom());\n });\n }\n updateZoom(newZoomValue) {\n const clampedZoom = clamp(newZoomValue, this.minZoom(), this.maxZoom());\n this.onZoomChange.emit(clampedZoom);\n if (!this.isZoomControlled()) {\n this.internalZoom.set(clampedZoom);\n }\n return clampedZoom;\n }\n initializeContainerDimensions() {\n const element = this.elementRef.nativeElement;\n if (element && element.clientWidth > 0 && element.clientHeight > 0) {\n this.cropAreaWidth.set(Math.max(0, element.clientWidth - this.cropPadding() * 2));\n this.cropAreaHeight.set(Math.max(0, element.clientHeight - this.cropPadding() * 2));\n }\n }\n setupImageLoadEffect() {\n effect(() => {\n const image = this.image();\n this.offsetX.set(0);\n this.offsetY.set(0);\n if (!this.isZoomControlled()) {\n this.internalZoom.set(this.minZoom());\n }\n this.isInitialSetupDone.set(false);\n if (!image) {\n this.imgWidth.set(null);\n this.imgHeight.set(null);\n return;\n }\n let isMounted = true;\n const img = new Image();\n img.onload = () => {\n if (isMounted) {\n this.imgWidth.set(img.naturalWidth);\n this.imgHeight.set(img.naturalHeight);\n }\n };\n img.onerror = () => {\n if (isMounted) {\n this.imgWidth.set(null);\n this.imgHeight.set(null);\n }\n };\n img.src = image;\n return () => {\n isMounted = false;\n };\n });\n }\n setupDimensionsEffects() {\n effect(() => {\n const element = this.elementRef.nativeElement;\n if (!element)\n return;\n const updateDimensions = (width, height) => {\n if (width <= 0 || height <= 0) {\n this.cropAreaWidth.set(0);\n this.cropAreaHeight.set(0);\n return;\n }\n const maxPossibleWidth = Math.max(0, width - this.cropPadding() * 2);\n const maxPossibleHeight = Math.max(0, height - this.cropPadding() * 2);\n let targetCropW, targetCropH;\n if (maxPossibleWidth / this.aspectRatio() >= maxPossibleHeight) {\n targetCropH = maxPossibleHeight;\n targetCropW = targetCropH * this.aspectRatio();\n }\n else {\n targetCropW = maxPossibleWidth;\n targetCropH = targetCropW / this.aspectRatio();\n }\n this.cropAreaWidth.set(targetCropW);\n this.cropAreaHeight.set(targetCropH);\n };\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n if (width > 0 && height > 0)\n updateDimensions(width, height);\n }\n });\n observer.observe(element);\n const initialWidth = element.clientWidth;\n const initialHeight = element.clientHeight;\n if (initialWidth > 0 && initialHeight > 0) {\n updateDimensions(initialWidth, initialHeight);\n }\n return () => observer.disconnect();\n });\n // Update image wrapper dimensions when crop area or image dimensions change\n effect(() => {\n const cropW = this.cropAreaWidth();\n const cropH = this.cropAreaHeight();\n const imgW = this.imgWidth();\n const imgH = this.imgHeight();\n if (cropW <= 0 || cropH <= 0 || !imgW || !imgH) {\n this.imageWrapperWidth.set(0);\n this.imageWrapperHeight.set(0);\n return;\n }\n const naturalAspect = imgW / imgH;\n const cropAspect = cropW / cropH;\n let targetWrapperWidth, targetWrapperHeight;\n if (naturalAspect >= cropAspect) {\n targetWrapperHeight = cropH;\n targetWrapperWidth = targetWrapperHeight * naturalAspect;\n }\n else {\n targetWrapperWidth = cropW;\n targetWrapperHeight = targetWrapperWidth / naturalAspect;\n }\n this.imageWrapperWidth.set(targetWrapperWidth);\n this.imageWrapperHeight.set(targetWrapperHeight);\n });\n }\n restrictOffset(dragOffsetX, dragOffsetY, currentZoom) {\n const wrapperW = this.imageWrapperWidth();\n const wrapperH = this.imageWrapperHeight();\n const cropW = this.cropAreaWidth();\n const cropH = this.cropAreaHeight();\n if (wrapperW <= 0 || wrapperH <= 0 || cropW <= 0 || cropH <= 0) {\n return { x: 0, y: 0 };\n }\n const effectiveWrapperWidth = wrapperW * currentZoom;\n const effectiveWrapperHeight = wrapperH * currentZoom;\n const maxDragX = Math.max(0, (effectiveWrapperWidth - cropW) / 2);\n const maxDragY = Math.max(0, (effectiveWrapperHeight - cropH) / 2);\n return {\n x: clamp(dragOffsetX, -maxDragX, maxDragX),\n y: clamp(dragOffsetY, -maxDragY, maxDragY)\n };\n }\n calculateCropData(finalOffsetX, finalOffsetY, finalZoom) {\n const currentOffsetX = finalOffsetX ?? this.latestRestrictedOffset().x;\n const currentOffsetY = finalOffsetY ?? this.latestRestrictedOffset().y;\n const currentZoom = finalZoom ?? this.effectiveZoom();\n const imgW = this.imgWidth();\n const imgH = this.imgHeight();\n const wrapperW = this.imageWrapperWidth();\n const wrapperH = this.imageWrapperHeight();\n const cropW = this.cropAreaWidth();\n const cropH = this.cropAreaHeight();\n if (!imgW || !imgH || wrapperW <= 0 || wrapperH <= 0 || cropW <= 0 || cropH <= 0) {\n return null;\n }\n const scaledWrapperWidth = wrapperW * currentZoom;\n const scaledWrapperHeight = wrapperH * currentZoom;\n const topLeftOffsetX = currentOffsetX + (cropW - scaledWrapperWidth) / 2;\n const topLeftOffsetY = currentOffsetY + (cropH - scaledWrapperHeight) / 2;\n const baseScale = imgW / wrapperW;\n if (isNaN(baseScale) || baseScale === 0) {\n return null;\n }\n const sx = (-topLeftOffsetX * baseScale) / currentZoom;\n const sy = (-topLeftOffsetY * baseScale) / currentZoom;\n const sWidth = (cropW * baseScale) / currentZoom;\n const sHeight = (cropH * baseScale) / currentZoom;\n const finalX = clamp(Math.round(sx), 0, imgW);\n const finalY = clamp(Math.round(sy), 0, imgH);\n const finalWidth = clamp(Math.round(sWidth), 0, imgW - finalX);\n const finalHeight = clamp(Math.round(sHeight), 0, imgH - finalY);\n if (finalWidth <= 0 || finalHeight <= 0) {\n return null;\n }\n return { x: finalX, y: finalY, width: finalWidth, height: finalHeight };\n }\n setupCropCalculationEffect() {\n effect(() => {\n const wrapperW = this.imageWrapperWidth();\n const wrapperH = this.imageWrapperHeight();\n const cropW = this.cropAreaWidth();\n const cropH = this.cropAreaHeight();\n const currentZoom = this.effectiveZoom();\n if (wrapperW > 0 && wrapperH > 0 && cropW > 0 && cropH > 0) {\n if (!this.isInitialSetupDone()) {\n const restrictedInitial = this.restrictOffset(0, 0, currentZoom);\n this.offsetX.set(restrictedInitial.x);\n this.offsetY.set(restrictedInitial.y);\n if (!this.isZoomControlled()) {\n this.internalZoom.set(currentZoom);\n }\n this.dragStartOffset.set(restrictedInitial);\n this.latestRestrictedOffset.set(restrictedInitial);\n this.latestZoom.set(currentZoom);\n this.onCropChange.emit(this.calculateCropData(restrictedInitial.x, restrictedInitial.y, currentZoom));\n this.isInitialSetupDone.set(true);\n }\n else {\n const currentX = this.latestRestrictedOffset().x;\n const currentY = this.latestRestrictedOffset().y;\n const restrictedCurrent = this.restrictOffset(currentX, currentY, currentZoom);\n if (restrictedCurrent.x !== currentX || restrictedCurrent.y !== currentY) {\n this.offsetX.set(restrictedCurrent.x);\n this.offsetY.set(restrictedCurrent.y);\n this.latestRestrictedOffset.set(restrictedCurrent);\n this.dragStartOffset.set(restrictedCurrent);\n }\n this.onCropChange.emit(this.calculateCropData(restrictedCurrent.x, restrictedCurrent.y, currentZoom));\n }\n }\n else {\n this.isInitialSetupDone.set(false);\n this.offsetX.set(0);\n this.offsetY.set(0);\n if (!this.isZoomControlled()) {\n this.internalZoom.set(this.minZoom());\n }\n this.dragStartOffset.set({ x: 0, y: 0 });\n this.latestRestrictedOffset.set({ x: 0, y: 0 });\n this.latestZoom.set(currentZoom);\n this.onCropChange.emit(null);\n }\n });\n }\n setupAccessibilityWarningEffect() {\n effect(() => {\n const checkTimeout = setTimeout(() => {\n if (this.elementRef.nativeElement && !this.hasWarned()) {\n const hasDescription = document.getElementById(this.descriptionId());\n if (!hasDescription) {\n console.warn(this.CROPPER_DESC_WARN_MESSAGE);\n this.hasWarned.set(true);\n }\n }\n }, 100);\n return () => clearTimeout(checkTimeout);\n });\n }\n setupEventListenersEffect() {\n effect((onCleanup) => {\n const node = this.elementRef.nativeElement;\n if (!node)\n return;\n const options = { passive: false };\n const wheelHandler = (e) => this.handleWheel(e);\n const touchStartHandler = (e) => this.handleTouchStart(e);\n const touchMoveHandler = (e) => this.handleTouchMove(e);\n const touchEndHandler = (e) => this.handleTouchEnd(e);\n node.addEventListener('wheel', wheelHandler, options);\n node.addEventListener('touchstart', touchStartHandler, options);\n node.addEventListener('touchmove', touchMoveHandler, options);\n node.addEventListener('touchend', touchEndHandler, options);\n node.addEventListener('touchcancel', touchEndHandler, options);\n onCleanup(() => {\n node.removeEventListener('wheel', wheelHandler, options);\n node.removeEventListener('touchstart', touchStartHandler, options);\n node.removeEventListener('touchmove', touchMoveHandler, options);\n node.removeEventListener('touchend', touchEndHandler, options);\n node.removeEventListener('touchcancel', touchEndHandler, options);\n });\n });\n }\n handleInteractionEnd() {\n const finalData = this.calculateCropData(this.latestRestrictedOffset().x, this.latestRestrictedOffset().y, this.effectiveZoom());\n this.onCropChange.emit(finalData);\n }\n /**\n * @ignore\n */\n onMouseDown(e) {\n if (e.button !== 0)\n return;\n e.preventDefault();\n this.isDragging.set(true);\n this.isPinching.set(false);\n this.dragStartPoint.set({ x: e.clientX, y: e.clientY });\n this.dragStartOffset.set(this.latestRestrictedOffset());\n const handleMouseMove = (ev) => {\n const deltaX = ev.clientX - this.dragStartPoint().x;\n const deltaY = ev.clientY - this.dragStartPoint().y;\n const targetOffsetX = this.dragStartOffset().x + deltaX;\n const targetOffsetY = this.dragStartOffset().y + deltaY;\n const restricted = this.restrictOffset(targetOffsetX, targetOffsetY, this.effectiveZoom());\n this.latestRestrictedOffset.set(restricted);\n this.offsetX.set(restricted.x);\n this.offsetY.set(restricted.y);\n };\n const handleMouseUp = () => {\n this.isDragging.set(false);\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n this.handleInteractionEnd();\n };\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n }\n handleWheel(e) {\n e.preventDefault();\n e.stopPropagation();\n if (!this.elementRef.nativeElement || this.imageWrapperWidth() <= 0 || this.imageWrapperHeight() <= 0)\n return;\n const currentZoom = this.latestZoom();\n const currentOffsetX = this.latestRestrictedOffset().x;\n const currentOffsetY = this.latestRestrictedOffset().y;\n const delta = e.deltaY * -this.zoomSensitivity();\n const targetZoom = currentZoom + delta;\n if (clamp(targetZoom, this.minZoom(), this.maxZoom()) === currentZoom)\n return;\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const pointerX = e.clientX - rect.left - rect.width / 2;\n const pointerY = e.clientY - rect.top - rect.height / 2;\n const imagePointX = (pointerX - currentOffsetX) / currentZoom;\n const imagePointY = (pointerY - currentOffsetY) / currentZoom;\n const finalNewZoom = this.updateZoom(targetZoom);\n const newOffsetX = pointerX - imagePointX * finalNewZoom;\n const newOffsetY = pointerY - imagePointY * finalNewZoom;\n const restrictedNewOffset = this.restrictOffset(newOffsetX, newOffsetY, finalNewZoom);\n this.offsetX.set(restrictedNewOffset.x);\n this.offsetY.set(restrictedNewOffset.y);\n this.latestRestrictedOffset.set(restrictedNewOffset);\n const finalData = this.calculateCropData(restrictedNewOffset.x, restrictedNewOffset.y, finalNewZoom);\n this.onCropChange.emit(finalData);\n }\n getPinchDistance(touches) {\n return Math.sqrt(Math.pow(touches[1].clientX - touches[0].clientX, 2) + Math.pow(touches[1].clientY - touches[0].clientY, 2));\n }\n getPinchCenter(touches) {\n return {\n x: (touches[0].clientX + touches[1].clientX) / 2,\n y: (touches[0].clientY + touches[1].clientY) / 2\n };\n }\n handleTouchStart(e) {\n if (this.imageWrapperWidth() <= 0 || this.imageWrapperHeight() <= 0)\n return;\n e.preventDefault();\n const touches = e.touches;\n if (touches.length === 1) {\n this.isDragging.set(true);\n this.isPinching.set(false);\n this.dragStartPoint.set({ x: touches[0].clientX, y: touches[0].clientY });\n this.dragStartOffset.set(this.latestRestrictedOffset());\n }\n else if (touches.length === 2) {\n this.isDragging.set(false);\n this.isPinching.set(true);\n this.initialPinchDistance.set(this.getPinchDistance(touches));\n this.initialPinchZoom.set(this.latestZoom());\n this.dragStartOffset.set(this.latestRestrictedOffset());\n }\n }\n handleTouchMove(e) {\n if (this.imageWrapperWidth() <= 0 || this.imageWrapperHeight() <= 0)\n return;\n e.preventDefault();\n const touches = e.touches;\n if (touches.length === 1 && this.isDragging() && !this.isPinching()) {\n const deltaX = touches[0].clientX - this.dragStartPoint().x;\n const deltaY = touches[0].clientY - this.dragStartPoint().y;\n const targetOffsetX = this.dragStartOffset().x + deltaX;\n const targetOffsetY = this.dragStartOffset().y + deltaY;\n const restricted = this.restrictOffset(targetOffsetX, targetOffsetY, this.effectiveZoom());\n this.latestRestrictedOffset.set(restricted);\n this.offsetX.set(restricted.x);\n this.offsetY.set(restricted.y);\n }\n else if (touches.length === 2 && this.isPinching()) {\n const currentPinchDistance = this.getPinchDistance(touches);\n const scale = currentPinchDistance / this.initialPinchDistance();\n const currentZoom = this.initialPinchZoom();\n const targetZoom = currentZoom * scale;\n if (clamp(targetZoom, this.minZoom(), this.maxZoom()) === this.latestZoom())\n return;\n const pinchCenter = this.getPinchCenter(touches);\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const pinchCenterX = pinchCenter.x - rect.left - rect.width / 2;\n const pinchCenterY = pinchCenter.y - rect.top - rect.height / 2;\n const currentOffsetX = this.dragStartOffset().x;\n const currentOffsetY = this.dragStartOffset().y;\n const imagePointX = (pinchCenterX - currentOffsetX) / currentZoom;\n const imagePointY = (pinchCenterY - currentOffsetY) / currentZoom;\n const finalNewZoom = this.updateZoom(targetZoom);\n const newOffsetX = pinchCenterX - imagePointX * finalNewZoom;\n const newOffsetY = pinchCenterY - imagePointY * finalNewZoom;\n const restrictedNewOffset = this.restrictOffset(newOffsetX, newOffsetY, finalNewZoom);\n this.offsetX.set(restrictedNewOffset.x);\n this.offsetY.set(restrictedNewOffset.y);\n this.latestRestrictedOffset.set(restrictedNewOffset);\n const finalData = this.calculateCropData(restrictedNewOffset.x, restrictedNewOffset.y, finalNewZoom);\n this.onCropChange.emit(finalData);\n }\n }\n handleTouchEnd(e) {\n e.preventDefault();\n const touches = e.touches;\n if (this.isPinching() && touches.length < 2) {\n this.isPinching.set(false);\n if (touches.length === 1) {\n this.isDragging.set(true);\n this.dragStartPoint.set({ x: touches[0].clientX, y: touches[0].clientY });\n this.dragStartOffset.set(this.latestRestrictedOffset());\n }\n else {\n this.isDragging.set(false);\n this.handleInteractionEnd();\n }\n }\n else if (this.isDragging() && touches.length === 0) {\n this.isDragging.set(false);\n this.handleInteractionEnd();\n }\n }\n /**\n * @ignore\n */\n onKeyDown(e) {\n if (this.imageWrapperWidth() <= 0)\n return;\n let targetOffsetX = this.latestRestrictedOffset().x;\n let targetOffsetY = this.latestRestrictedOffset().y;\n let moved = false;\n switch (e.key) {\n case 'ArrowUp':\n targetOffsetY += this.keyboardStep();\n moved = true;\n break;\n case 'ArrowDown':\n targetOffsetY -= this.keyboardStep();\n moved = true;\n break;\n case 'ArrowLeft':\n targetOffsetX += this.keyboardStep();\n moved = true;\n break;\n case 'ArrowRight':\n targetOffsetX -= this.keyboardStep();\n moved = true;\n break;\n default:\n return;\n }\n if (moved) {\n e.preventDefault();\n const restricted = this.restrictOffset(targetOffsetX, targetOffsetY, this.effectiveZoom());\n if (restricted.x !== this.latestRestrictedOffset().x || restricted.y !== this.latestRestrictedOffset().y) {\n this.latestRestrictedOffset.set(restricted);\n this.offsetX.set(restricted.x);\n this.offsetY.set(restricted.y);\n }\n }\n }\n /**\n * @ignore\n */\n onKeyUp(e) {\n if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key)) {\n this.handleInteractionEnd();\n }\n }\n /**\n * @ignore\n */\n getImageProps() {\n return {\n src: this.image(),\n alt: 'Image being cropped',\n draggable: false,\n 'aria-hidden': true\n };\n }\n /**\n * @ignore\n */\n getImageWrapperStyle() {\n const wrapperW = this.imageWrapperWidth();\n const wrapperH = this.imageWrapperHeight();\n const offsetX = this.offsetX();\n const offsetY = this.offsetY();\n const zoom = this.effectiveZoom();\n return {\n width: `${wrapperW}px`,\n height: `${wrapperH}px`,\n transform: `translate3d(${offsetX}px, ${offsetY}px, 0px) scale(${zoom})`,\n position: 'absolute',\n left: `calc(50% - ${wrapperW / 2}px)`,\n top: `calc(50% - ${wrapperH / 2}px)`,\n willChange: 'transform'\n };\n }\n /**\n * @ignore\n */\n getCropAreaStyle() {\n return {\n width: `${this.cropAreaWidth()}px`,\n height: `${this.cropAreaHeight()}px`\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxCropperRootDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.3\", type: RdxCropperRootDirective, isStandalone: true, selector: \"[rdxCropperRoot]\", inputs: { image: { classPropertyName: \"image\", publicName: \"image\", isSignal: true, isRequired: true, transformFunction: null }, cropPadding: { classPropertyName: \"cropPadding\", publicName: \"cropPadding\", isSignal: true, isRequired: false, transformFunction: null }, aspectRatio: { classPropertyName: \"aspectRatio\", publicName: \"aspectRatio\", isSignal: true, isRequired: false, transformFunction: null }, minZoom: { classPropertyName: \"minZoom\", publicName: \"minZoom\", isSignal: true, isRequired: false, transformFunction: null }, maxZoom: { classPropertyName: \"maxZoom\", publicName: \"maxZoom\", isSignal: true, isRequired: false, transformFunction: null }, zoomSensitivity: { classPropertyName: \"zoomSensitivity\", publicName: \"zoomSensitivity\", isSignal: true, isRequired: false, transformFunction: null }, keyboardStep: { classPropertyName: \"keyboardStep\", publicName: \"keyboardStep\", isSignal: true, isRequired: false, transformFunction: null }, zoom: { classPropertyName: \"zoom\", publicName: \"zoom\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onCropChange: \"onCropChange\", onZoomChange: \"onZoomChange\" }, host: { attributes: { \"tabindex\": \"0\", \"role\": \"application\" }, listeners: { \"mousedown\": \"onMouseDown($event)\", \"keydown\": \"onKeyDown($event)\", \"keyup\": \"onKeyUp($event)\" }, properties: { \"attr.aria-label\": \"\\\"Interactive image cropper\\\"\", \"attr.aria-describedby\": \"descriptionId()\", \"attr.aria-valuemin\": \"minZoom()\", \"attr.aria-valuemax\": \"maxZoom()\", \"attr.aria-valuenow\": \"effectiveZoom()\", \"attr.aria-valuetext\": \"zoomValueText()\" } }, providers: [provideToken(CROPPER_ROOT_CONTEXT, RdxCropperRootDirective)], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxCropperRootDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[rdxCropperRoot]',\n providers: [provideToken(CROPPER_ROOT_CONTEXT, RdxCropperRootDirective)],\n host: {\n '[attr.aria-label]': '\"Interactive image cropper\"',\n '[attr.aria-describedby]': 'descriptionId()',\n '[attr.aria-valuemin]': 'minZoom()',\n '[attr.aria-valuemax]': 'maxZoom()',\n '[attr.aria-valuenow]': 'effectiveZoom()',\n '[attr.aria-valuetext]': 'zoomValueText()',\n tabindex: '0',\n role: 'application',\n '(mousedown)': 'onMouseDown($event)',\n '(keydown)': 'onKeyDown($event)',\n '(keyup)': 'onKeyUp($event)'\n }\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JvcHBlci1yb290LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvY3JvcHBlci9zcmMvY3JvcHBlci1yb290LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQ0gsZUFBZSxFQUNmLFFBQVEsRUFDUixTQUFTLEVBQ1QsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLGVBQWUsRUFDZixNQUFNLEVBQ04sTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG9CQUFvQixFQUF1QixNQUFNLHlCQUF5QixDQUFDOztBQXFCcEYsTUFBTSxPQUFPLHVCQUF1QjtJQStDaEM7UUE5Q2lCLGVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQSxVQUF1QixDQUFBLENBQUMsQ0FBQztRQUM3Qyw4QkFBeUIsR0FBRyx3RUFBd0UsQ0FBQztRQUU3RyxVQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsZ0RBQVUsQ0FBQztRQUNqQyxnQkFBVyxHQUFHLEtBQUssQ0FBQyxFQUFFLCtDQUFJLFNBQVMsRUFBRSxlQUFlLE9BQTVCLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxHQUFDLENBQUM7UUFDeEQsZ0JBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQywrQ0FBSSxTQUFTLEVBQUUsZUFBZSxPQUE1QixFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsR0FBQyxDQUFDO1FBQ3ZELFlBQU8sR0FBRyxLQUFLLENBQUMsQ0FBQywyQ0FBSSxTQUFTLEVBQUUsZUFBZSxPQUE1QixFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsR0FBQyxDQUFDO1FBQ25ELFlBQU8sR0FBRyxLQUFLLENBQUMsQ0FBQywyQ0FBSSxTQUFTLEVBQUUsZUFBZSxPQUE1QixF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QUFDOzhHQXRuQlEsdUJBQXVCO2tHQUF2Qix1QkFBdUIsNm1EQWZyQixDQUFDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDOzsyRkFlL0QsdUJBQXVCO2tCQWpCbkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixTQUFTLEVBQUUsQ0FBQyxZQUFZLENBQUMsb0JBQW9CLDBCQUEwQixDQUFDO29CQUN4RSxJQUFJLEVBQUU7d0JBQ0YsbUJBQW1CLEVBQUUsNkJBQTZCO3dCQUNsRCx5QkFBeUIsRUFBRSxpQkFBaUI7d0JBQzVDLHNCQUFzQixFQUFFLFdBQVc7d0JBQ25DLHNCQUFzQixFQUFFLFdBQVc7d0JBQ25DLHNCQUFzQixFQUFFLGlCQUFpQjt3QkFDekMsdUJBQXVCLEVBQUUsaUJBQWlCO3dCQUMxQyxRQUFRLEVBQUUsR0FBRzt3QkFDYixJQUFJLEVBQUUsYUFBYTt3QkFDbkIsYUFBYSxFQUFFLHFCQUFxQjt3QkFDcEMsV0FBVyxFQUFFLG1CQUFtQjt3QkFDaEMsU0FBUyxFQUFFLGlCQUFpQjtxQkFDL0I7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vb3JpZ2luLXNwYWNlL2ltYWdlLWNyb3BwZXIvYmxvYi9tYWluL3NyYy9Dcm9wcGVyLnRzeFxuXG5pbXBvcnQgeyBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICAgIGFmdGVyTmV4dFJlbmRlcixcbiAgICBjb21wdXRlZCxcbiAgICBEaXJlY3RpdmUsXG4gICAgZWZmZWN0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBvdXRwdXQsXG4gICAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xhbXAsIHByb3ZpZGVUb2tlbiB9IGZyb20gJ0ByYWRpeC1uZy9wcmltaXRpdmVzL2NvcmUnO1xuaW1wb3J0IHsgQ1JPUFBFUl9ST09UX0NPTlRFWFQsIENyb3BwZXJDb250ZXh0VG9rZW4gfSBmcm9tICcuL2Nyb3BwZXItY29udGV4dC50b2tlbic7XG5cbmV4cG9ydCB0eXBlIEFyZWEgPSB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9O1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tyZHhDcm9wcGVyUm9vdF0nLFxuICAgIHByb3ZpZGVyczogW3Byb3ZpZGVUb2tlbihDUk9QUEVSX1JPT1RfQ09OVEVYVCwgUmR4Q3JvcHBlclJvb3REaXJlY3RpdmUpXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5hcmlhLWxhYmVsXSc6ICdcIkludGVyYWN0aXZlIGltYWdlIGNyb3BwZXJcIicsXG4gICAgICAgICdbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XSc6ICdkZXNjcmlwdGlvbklkKCknLFxuICAgICAgICAnW2F0dHIuYXJpYS12YWx1ZW1pbl0nOiAnbWluWm9vbSgpJyxcbiAgICAgICAgJ1thdHRyLmFyaWEtdmFsdWVtYXhdJzogJ21heFpvb20oKScsXG4gICAgICAgICdbYXR0ci5hcmlhLXZhbHVlbm93XSc6ICdlZmZlY3RpdmVab29tKCknLFxuICAgICAgICAnW2F0dHIuYXJpYS12YWx1ZXRleHRdJzogJ3pvb21WYWx1ZVRleHQoKScsXG4gICAgICAgIHRhYmluZGV4OiAnMCcsXG4gICAgICAgIHJvbGU6ICdhcHBsaWNhdGlvbicsXG4gICAgICAgICcobW91c2Vkb3duKSc6ICdvbk1vdXNlRG93bigkZXZlbnQpJyxcbiAgICAgICAgJyhrZXlkb3duKSc6ICdvbktleURvd24oJGV2ZW50KScsXG4gICAgICAgICcoa2V5dXApJzogJ29uS2V5VXAoJGV2ZW50KSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFJkeENyb3BwZXJSb290RGlyZWN0aXZlIGltcGxlbWVudHMgQ3JvcHBlckNvbnRleHRUb2tlbiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IENST1BQRVJfREVTQ19XQVJOX01FU1NBR0UgPSBgV2FybmluZzogXFxgQ3JvcHBlclxcYCByZXF1aXJlcyBhIGRlc2NyaXB0aW9uIGVsZW1lbnQgZm9yIGFjY2Vzc2liaWxpdHkuYDtcblxuICAgIHJlYWRvbmx5IGltYWdlID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICAgIHJlYWRvbmx5IGNyb3BQYWRkaW5nID0gaW5wdXQoMjUsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG4gICAgcmVhZG9ubHkgYXNwZWN0UmF0aW8gPSBpbnB1dCgxLCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xuICAgIHJlYWRvbmx5IG1pblpvb20gPSBpbnB1dCgxLCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xuICAgIHJlYWRvbmx5IG1heFpvb20gPSBpbnB1dCgzLCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xuICAgIHJlYWRvbmx5IHpvb21TZW5zaXRpdml0eSA9IGlucHV0KDAuMDA1LCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xuICAgIHJlYWRvbmx5IGtleWJvYXJkU3RlcCA9IGlucHV0KDEwLCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xuICAgIHJlYWRvbmx5IHpvb20gPSBpbnB1dDxudW1iZXIsIE51bWJlcklucHV0Pih1bmRlZmluZWQsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG5cbiAgICByZWFkb25seSBvbkNyb3BDaGFuZ2UgPSBvdXRwdXQ8QXJlYSB8IG51bGw+KCk7XG4gICAgcmVhZG9ubHkgb25ab29tQ2hhbmdlID0gb3V0cHV0PG51bWJlcj4oKTtcblxuICAgIC8vIFN0YXRlIHNpZ25hbHNcbiAgICBwcml2YXRlIHJlYWRvbmx5IGltZ1dpZHRoID0gc2lnbmFsPG51bWJlciB8IG51bGw+KG51bGwpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW1nSGVpZ2h0ID0gc2lnbmFsPG51bWJlciB8IG51bGw+KG51bGwpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY3JvcEFyZWFXaWR0aCA9IHNpZ25hbCgwKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNyb3BBcmVhSGVpZ2h0ID0gc2lnbmFsKDApO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW1hZ2VXcmFwcGVyV2lkdGggPSBzaWduYWwoMCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpbWFnZVdyYXBwZXJIZWlnaHQgPSBzaWduYWwoMCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBvZmZzZXRYID0gc2lnbmFsKDApO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb2Zmc2V0WSA9IHNpZ25hbCgwKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGludGVybmFsWm9vbSA9IHNpZ25hbCh0aGlzLm1pblpvb20oKSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpc0RyYWdnaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgICByZWFkb25seSBkZXNjcmlwdGlvbklkID0gc2lnbmFsKGBjcm9wcGVyLSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWApO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBpc1pvb21Db250cm9sbGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy56b29tKCkgIT09IHVuZGVmaW5lZCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGVmZmVjdGl2ZVpvb20gPSBjb21wdXRlZCgoKSA9PiAodGhpcy5pc1pvb21Db250cm9sbGVkKCkgPyB0aGlzLnpvb20oKSEgOiB0aGlzLmludGVybmFsWm9vbSgpKSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHpvb21WYWx1ZVRleHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHpvb21QZXJjZW50ID0gdGhpcy5lZmZlY3RpdmVab29tKCkgKiAxMDA7XG4gICAgICAgIHJldHVybiBgWm9vbTogJHt6b29tUGVyY2VudC50b0ZpeGVkKDApfSVgO1xuICAgIH0pO1xuXG4gICAgLy8gUmVmc1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZHJhZ1N0YXJ0UG9pbnQgPSBzaWduYWwoeyB4OiAwLCB5OiAwIH0pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZHJhZ1N0YXJ0T2Zmc2V0ID0gc2lnbmFsKHsgeDogMCwgeTogMCB9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxhdGVzdFJlc3RyaWN0ZWRPZmZzZXQgPSBzaWduYWwoeyB4OiAwLCB5OiAwIH0pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbGF0ZXN0Wm9vbSA9IHNpZ25hbCh0aGlzLm1pblpvb20oKSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpc0luaXRpYWxTZXR1cERvbmUgPSBzaWduYWwoZmFsc2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5pdGlhbFBpbmNoRGlzdGFuY2UgPSBzaWduYWwoMCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpbml0aWFsUGluY2hab29tID0gc2lnbmFsKDEpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNQaW5jaGluZyA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBoYXNXYXJuZWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDb250YWluZXJEaW1lbnNpb25zKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2V0dXBJbWFnZUxvYWRFZmZlY3QoKTtcbiAgICAgICAgdGhpcy5zZXR1cERpbWVuc2lvbnNFZmZlY3RzKCk7XG4gICAgICAgIHRoaXMuc2V0dXBDcm9wQ2FsY3VsYXRpb25FZmZlY3QoKTtcbiAgICAgICAgdGhpcy5zZXR1cEFjY2Vzc2liaWxpdHlXYXJuaW5nRWZmZWN0KCk7XG4gICAgICAgIHRoaXMuc2V0dXBFdmVudExpc3RlbmVyc0VmZmVjdCgpO1xuXG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxhdGVzdFpvb20uc2V0KHRoaXMuZWZmZWN0aXZlWm9vbSgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVab29tKG5ld1pvb21WYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgY2xhbXBlZFpvb20gPSBjbGFtcChuZXdab29tVmFsdWUsIHRoaXMubWluWm9vbSgpLCB0aGlzLm1heFpvb20oKSk7XG5cbiAgICAgICAgdGhpcy5vblpvb21DaGFuZ2UuZW1pdChjbGFtcGVkWm9vbSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzWm9vbUNvbnRyb2xsZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbFpvb20uc2V0KGNsYW1wZWRab29tKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xhbXBlZFpvb207XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplQ29udGFpbmVyRGltZW5zaW9ucygpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmNsaWVudFdpZHRoID4gMCAmJiBlbGVtZW50LmNsaWVudEhlaWdodCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY3JvcEFyZWFXaWR0aC5zZXQoTWF0aC5tYXgoMCwgZWxlbWVudC5jbGllbnRXaWR0aCAtIHRoaXMuY3JvcFBhZGRpbmcoKSAqIDIpKTtcbiAgICAgICAgICAgIHRoaXMuY3JvcEFyZWFIZWlnaHQuc2V0KE1hdGgubWF4KDAsIGVsZW1lbnQuY2xpZW50SGVpZ2h0IC0gdGhpcy5jcm9wUGFkZGluZygpICogMikpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cEltYWdlTG9hZEVmZmVjdCgpIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5pbWFnZSgpO1xuICAgICAgICAgICAgdGhpcy5vZmZzZXRYLnNldCgwKTtcbiAgICAgICAgICAgIHRoaXMub2Zmc2V0WS5zZXQoMCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pc1pvb21Db250cm9sbGVkKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsWm9vbS5zZXQodGhpcy5taW5ab29tKCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmlzSW5pdGlhbFNldHVwRG9uZS5zZXQoZmFsc2UpO1xuXG4gICAgICAgICAgICBpZiAoIWltYWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbWdXaWR0aC5zZXQobnVsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbWdIZWlnaHQuc2V0KG51bGwpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGlzTW91bnRlZCA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTW91bnRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmltZ1dpZHRoLnNldChpbWcubmF0dXJhbFdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWdIZWlnaHQuc2V0KGltZy5uYXR1cmFsSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTW91bnRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmltZ1dpZHRoLnNldChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWdIZWlnaHQuc2V0KG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpbWcuc3JjID0gaW1hZ2U7XG5cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaXNNb3VudGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwRGltZW5zaW9uc0VmZmVjdHMoKTogdm9pZCB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIWVsZW1lbnQpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgdXBkYXRlRGltZW5zaW9ucyA9ICh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JvcEFyZWFXaWR0aC5zZXQoMCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JvcEFyZWFIZWlnaHQuc2V0KDApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgbWF4UG9zc2libGVXaWR0aCA9IE1hdGgubWF4KDAsIHdpZHRoIC0gdGhpcy5jcm9wUGFkZGluZygpICogMik7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4UG9zc2libGVIZWlnaHQgPSBNYXRoLm1heCgwLCBoZWlnaHQgLSB0aGlzLmNyb3BQYWRkaW5nKCkgKiAyKTtcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0Q3JvcFc6IG51bWJlciwgdGFyZ2V0Q3JvcEg6IG51bWJlcjtcblxuICAgICAgICAgICAgICAgIGlmIChtYXhQb3NzaWJsZVdpZHRoIC8gdGhpcy5hc3BlY3RSYXRpbygpID49IG1heFBvc3NpYmxlSGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldENyb3BIID0gbWF4UG9zc2libGVIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldENyb3BXID0gdGFyZ2V0Q3JvcEggKiB0aGlzLmFzcGVjdFJhdGlvKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q3JvcFcgPSBtYXhQb3NzaWJsZVdpZHRoO1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRDcm9wSCA9IHRhcmdldENyb3BXIC8gdGhpcy5hc3BlY3RSYXRpbygpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuY3JvcEFyZWFXaWR0aC5zZXQodGFyZ2V0Q3JvcFcpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3JvcEFyZWFIZWlnaHQuc2V0KHRhcmdldENyb3BIKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZW50cnkuY29udGVudFJlY3Q7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkgdXBkYXRlRGltZW5zaW9ucyh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxXaWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICAgICAgICBjb25zdCBpbml0aWFsSGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICBpZiAoaW5pdGlhbFdpZHRoID4gMCAmJiBpbml0aWFsSGVpZ2h0ID4gMCkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZURpbWVuc2lvbnMoaW5pdGlhbFdpZHRoLCBpbml0aWFsSGVpZ2h0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGltYWdlIHdyYXBwZXIgZGltZW5zaW9ucyB3aGVuIGNyb3AgYXJlYSBvciBpbWFnZSBkaW1lbnNpb25zIGNoYW5nZVxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3JvcFcgPSB0aGlzLmNyb3BBcmVhV2lkdGgoKTtcbiAgICAgICAgICAgIGNvbnN0IGNyb3BIID0gdGhpcy5jcm9wQXJlYUhlaWdodCgpO1xuICAgICAgICAgICAgY29uc3QgaW1nVyA9IHRoaXMuaW1nV2lkdGgoKTtcbiAgICAgICAgICAgIGNvbnN0IGltZ0ggPSB0aGlzLmltZ0hlaWdodCgpO1xuXG4gICAgICAgICAgICBpZiAoY3JvcFcgPD0gMCB8fCBjcm9wSCA8PSAwIHx8ICFpbWdXIHx8ICFpbWdIKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZVdyYXBwZXJXaWR0aC5zZXQoMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZVdyYXBwZXJIZWlnaHQuc2V0KDApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbmF0dXJhbEFzcGVjdCA9IGltZ1cgLyBpbWdIO1xuICAgICAgICAgICAgY29uc3QgY3JvcEFzcGVjdCA9IGNyb3BXIC8gY3JvcEg7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0V3JhcHBlcldpZHRoOiBudW1iZXIsIHRhcmdldFdyYXBwZXJIZWlnaHQ6IG51bWJlcjtcblxuICAgICAgICAgICAgaWYgKG5hdHVyYWxBc3BlY3QgPj0gY3JvcEFzcGVjdCkge1xuICAgICAgICAgICAgICAgIHRhcmdldFdyYXBwZXJIZWlnaHQgPSBjcm9wSDtcbiAgICAgICAgICAgICAgICB0YXJnZXRXcmFwcGVyV2lkdGggPSB0YXJnZXRXcmFwcGVySGVpZ2h0ICogbmF0dXJhbEFzcGVjdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0V3JhcHBlcldpZHRoID0gY3JvcFc7XG4gICAgICAgICAgICAgICAgdGFyZ2V0V3JhcHBlckhlaWdodCA9IHRhcmdldFdyYXBwZXJXaWR0aCAvIG5hdHVyYWxBc3BlY3Q7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaW1hZ2VXcmFwcGVyV2lkdGguc2V0KHRhcmdldFdyYXBwZXJXaWR0aCk7XG4gICAgICAgICAgICB0aGlzLmltYWdlV3JhcHBlckhlaWdodC5zZXQodGFyZ2V0V3JhcHBlckhlaWdodCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzdHJpY3RPZmZzZXQoZHJhZ09mZnNldFg6IG51bWJlciwgZHJhZ09mZnNldFk6IG51bWJlciwgY3VycmVudFpvb206IG51bWJlcik6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IHdyYXBwZXJXID0gdGhpcy5pbWFnZVdyYXBwZXJXaWR0aCgpO1xuICAgICAgICBjb25zdCB3cmFwcGVySCA9IHRoaXMuaW1hZ2VXcmFwcGVySGVpZ2h0KCk7XG4gICAgICAgIGNvbnN0IGNyb3BXID0gdGhpcy5jcm9wQXJlYVdpZHRoKCk7XG4gICAgICAgIGNvbnN0IGNyb3BIID0gdGhpcy5jcm9wQXJlYUhlaWdodCgpO1xuXG4gICAgICAgIGlmICh3cmFwcGVyVyA8PSAwIHx8IHdyYXBwZXJIIDw9IDAgfHwgY3JvcFcgPD0gMCB8fCBjcm9wSCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4geyB4OiAwLCB5OiAwIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlZmZlY3RpdmVXcmFwcGVyV2lkdGggPSB3cmFwcGVyVyAqIGN1cnJlbnRab29tO1xuICAgICAgICBjb25zdCBlZmZlY3RpdmVXcmFwcGVySGVpZ2h0ID0gd3JhcHBlckggKiBjdXJyZW50Wm9vbTtcbiAgICAgICAgY29uc3QgbWF4RHJhZ1ggPSBNYXRoLm1heCgwLCAoZWZmZWN0aXZlV3JhcHBlcldpZHRoIC0gY3JvcFcpIC8gMik7XG4gICAgICAgIGNvbnN0IG1heERyYWdZID0gTWF0aC5tYXgoMCwgKGVmZmVjdGl2ZVdyYXBwZXJIZWlnaHQgLSBjcm9wSCkgLyAyKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogY2xhbXAoZHJhZ09mZnNldFgsIC1tYXhEcmFnWCwgbWF4RHJhZ1gpLFxuICAgICAgICAgICAgeTogY2xhbXAoZHJhZ09mZnNldFksIC1tYXhEcmFnWSwgbWF4RHJhZ1kpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVDcm9wRGF0YShmaW5hbE9mZnNldFg/OiBudW1iZXIsIGZpbmFsT2Zmc2V0WT86IG51bWJlciwgZmluYWxab29tPzogbnVtYmVyKTogQXJlYSB8IG51bGwge1xuICAgICAgICBjb25zdCBjdXJyZW50T2Zmc2V0WCA9IGZpbmFsT2Zmc2V0WCA/PyB0aGlzLmxhdGVzdFJlc3RyaWN0ZWRPZmZzZXQoKS54O1xuICAgICAgICBjb25zdCBjdXJyZW50T2Zmc2V0WSA9IGZpbmFsT2Zmc2V0WSA/PyB0aGlzLmxhdGVzdFJlc3RyaWN0ZWRPZmZzZXQoKS55O1xuICAgICAgICBjb25zdCBjdXJyZW50Wm9vbSA9IGZpbmFsWm9vbSA/PyB0aGlzLmVmZmVjdGl2ZVpvb20oKTtcbiAgICAgICAgY29uc3QgaW1nVyA9IHRoaXMuaW1nV2lkdGgoKTtcbiAgICAgICAgY29uc3QgaW1nSCA9IHRoaXMuaW1nSGVpZ2h0KCk7XG4gICAgICAgIGNvbnN0IHdyYXBwZXJXID0gdGhpcy5pbWFnZVdyYXBwZXJXaWR0aCgpO1xuICAgICAgICBjb25zdCB3cmFwcGVySCA9IHRoaXMuaW1hZ2VXcmFwcGVySGVpZ2h0KCk7XG4gICAgICAgIGNvbnN0IGNyb3BXID0gdGhpcy5jcm9wQXJlYVdpZHRoKCk7XG4gICAgICAgIGNvbnN0IGNyb3BIID0gdGhpcy5jcm9wQXJlYUhlaWdodCgpO1xuXG4gICAgICAgIGlmICghaW1nVyB8fCAhaW1nSCB8fCB3cmFwcGVyVyA8PSAwIHx8IHdyYXBwZXJIIDw9IDAgfHwgY3JvcFcgPD0gMCB8fCBjcm9wSCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNjYWxlZFdyYXBwZXJXaWR0aCA9IHdyYXBwZXJXICogY3VycmVudFpvb207XG4gICAgICAgIGNvbnN0IHNjYWxlZFdyYXBwZXJIZWlnaHQgPSB3cmFwcGVySCAqIGN1cnJlbnRab29tO1xuICAgICAgICBjb25zdCB0b3BMZWZ0T2Zmc2V0WCA9IGN1cnJlbnRPZmZzZXRYICsgKGNyb3BXIC0gc2NhbGVkV3JhcHBlcldpZHRoKSAvIDI7XG4gICAgICAgIGNvbnN0IHRvcExlZnRPZmZzZXRZID0gY3VycmVudE9mZnNldFkgKyAoY3JvcEggLSBzY2FsZWRXcmFwcGVySGVpZ2h0KSAvIDI7XG4gICAgICAgIGNvbnN0IGJhc2VTY2FsZSA9IGltZ1cgLyB3cmFwcGVyVztcblxuICAgICAgICBpZiAoaXNOYU4oYmFzZVNjYWxlKSB8fCBiYXNlU2NhbGUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3ggPSAoLXRvcExlZnRPZmZzZXRYICogYmFzZVNjYWxlKSAvIGN1cnJlbnRab29tO1xuICAgICAgICBjb25zdCBzeSA9ICgtdG9wTGVmdE9mZnNldFkgKiBiYXNlU2NhbGUpIC8gY3VycmVudFpvb207XG4gICAgICAgIGNvbnN0IHNXaWR0aCA9IChjcm9wVyAqIGJhc2VTY2FsZSkgLyBjdXJyZW50Wm9vbTtcbiAgICAgICAgY29uc3Qgc0hlaWdodCA9IChjcm9wSCAqIGJhc2VTY2FsZSkgLyBjdXJyZW50Wm9vbTtcblxuICAgICAgICBjb25zdCBmaW5hbFggPSBjbGFtcChNYXRoLnJvdW5kKHN4KSwgMCwgaW1nVyk7XG4gICAgICAgIGNvbnN0IGZpbmFsWSA9IGNsYW1wKE1hdGgucm91bmQoc3kpLCAwLCBpbWdIKTtcbiAgICAgICAgY29uc3QgZmluYWxXaWR0aCA9IGNsYW1wKE1hdGgucm91bmQoc1dpZHRoKSwgMCwgaW1nVyAtIGZpbmFsWCk7XG4gICAgICAgIGNvbnN0IGZpbmFsSGVpZ2h0ID0gY2xhbXAoTWF0aC5yb3VuZChzSGVpZ2h0KSwgMCwgaW1nSCAtIGZpbmFsWSk7XG5cbiAgICAgICAgaWYgKGZpbmFsV2lkdGggPD0gMCB8fCBmaW5hbEhlaWdodCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHg6IGZpbmFsWCwgeTogZmluYWxZLCB3aWR0aDogZmluYWxXaWR0aCwgaGVpZ2h0OiBmaW5hbEhlaWdodCB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBDcm9wQ2FsY3VsYXRpb25FZmZlY3QoKTogdm9pZCB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyVyA9IHRoaXMuaW1hZ2VXcmFwcGVyV2lkdGgoKTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXJIID0gdGhpcy5pbWFnZVdyYXBwZXJIZWlnaHQoKTtcbiAgICAgICAgICAgIGNvbnN0IGNyb3BXID0gdGhpcy5jcm9wQXJlYVdpZHRoKCk7XG4gICAgICAgICAgICBjb25zdCBjcm9wSCA9IHRoaXMuY3JvcEFyZWFIZWlnaHQoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRab29tID0gdGhpcy5lZmZlY3RpdmVab29tKCk7XG5cbiAgICAgICAgICAgIGlmICh3cmFwcGVyVyA+IDAgJiYgd3JhcHBlckggPiAwICYmIGNyb3BXID4gMCAmJiBjcm9wSCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNJbml0aWFsU2V0dXBEb25lKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdHJpY3RlZEluaXRpYWwgPSB0aGlzLnJlc3RyaWN0T2Zmc2V0KDAsIDAsIGN1cnJlbnRab29tKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRYLnNldChyZXN0cmljdGVkSW5pdGlhbC54KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRZLnNldChyZXN0cmljdGVkSW5pdGlhbC55KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNab29tQ29udHJvbGxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsWm9vbS5zZXQoY3VycmVudFpvb20pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnU3RhcnRPZmZzZXQuc2V0KHJlc3RyaWN0ZWRJbml0aWFsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RSZXN0cmljdGVkT2Zmc2V0LnNldChyZXN0cmljdGVkSW5pdGlhbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF0ZXN0Wm9vbS5zZXQoY3VycmVudFpvb20pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Dcm9wQ2hhbmdlLmVtaXQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUNyb3BEYXRhKHJlc3RyaWN0ZWRJbml0aWFsLngsIHJlc3RyaWN0ZWRJbml0aWFsLnksIGN1cnJlbnRab29tKVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsU2V0dXBEb25lLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50WCA9IHRoaXMubGF0ZXN0UmVzdHJpY3RlZE9mZnNldCgpLng7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRZID0gdGhpcy5sYXRlc3RSZXN0cmljdGVkT2Zmc2V0KCkueTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdHJpY3RlZEN1cnJlbnQgPSB0aGlzLnJlc3RyaWN0T2Zmc2V0KGN1cnJlbnRYLCBjdXJyZW50WSwgY3VycmVudFpvb20pO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN0cmljdGVkQ3VycmVudC54ICE9PSBjdXJyZW50WCB8fCByZXN0cmljdGVkQ3VycmVudC55ICE9PSBjdXJyZW50WSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRYLnNldChyZXN0cmljdGVkQ3VycmVudC54KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0WS5zZXQocmVzdHJpY3RlZEN1cnJlbnQueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdFJlc3RyaWN0ZWRPZmZzZXQuc2V0KHJlc3RyaWN0ZWRDdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXJ0T2Zmc2V0LnNldChyZXN0cmljdGVkQ3VycmVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ3JvcENoYW5nZS5lbWl0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVDcm9wRGF0YShyZXN0cmljdGVkQ3VycmVudC54LCByZXN0cmljdGVkQ3VycmVudC55LCBjdXJyZW50Wm9vbSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsU2V0dXBEb25lLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRYLnNldCgwKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZnNldFkuc2V0KDApO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzWm9vbUNvbnRyb2xsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsWm9vbS5zZXQodGhpcy5taW5ab29tKCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXJ0T2Zmc2V0LnNldCh7IHg6IDAsIHk6IDAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RSZXN0cmljdGVkT2Zmc2V0LnNldCh7IHg6IDAsIHk6IDAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3Rab29tLnNldChjdXJyZW50Wm9vbSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNyb3BDaGFuZ2UuZW1pdChudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cEFjY2Vzc2liaWxpdHlXYXJuaW5nRWZmZWN0KCk6IHZvaWQge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hlY2tUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50ICYmICF0aGlzLmhhc1dhcm5lZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0Rlc2NyaXB0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5kZXNjcmlwdGlvbklkKCkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc0Rlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4odGhpcy5DUk9QUEVSX0RFU0NfV0FSTl9NRVNTQUdFKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzV2FybmVkLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDEwMCk7XG5cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQoY2hlY2tUaW1lb3V0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cEV2ZW50TGlzdGVuZXJzRWZmZWN0KCk6IHZvaWQge1xuICAgICAgICBlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKCFub2RlKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IHBhc3NpdmU6IGZhbHNlIH0gYXMgYW55O1xuXG4gICAgICAgICAgICBjb25zdCB3aGVlbEhhbmRsZXIgPSAoZTogV2hlZWxFdmVudCkgPT4gdGhpcy5oYW5kbGVXaGVlbChlKTtcbiAgICAgICAgICAgIGNvbnN0IHRvdWNoU3RhcnRIYW5kbGVyID0gKGU6IFRvdWNoRXZlbnQpID0+IHRoaXMuaGFuZGxlVG91Y2hTdGFydChlKTtcbiAgICAgICAgICAgIGNvbnN0IHRvdWNoTW92ZUhhbmRsZXIgPSAoZTogVG91Y2hFdmVudCkgPT4gdGhpcy5oYW5kbGVUb3VjaE1vdmUoZSk7XG4gICAgICAgICAgICBjb25zdCB0b3VjaEVuZEhhbmRsZXIgPSAoZTogVG91Y2hFdmVudCkgPT4gdGhpcy5oYW5kbGVUb3VjaEVuZChlKTtcblxuICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIHdoZWVsSGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0b3VjaFN0YXJ0SGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRvdWNoTW92ZUhhbmRsZXIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRvdWNoRW5kSGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoY2FuY2VsJywgdG91Y2hFbmRIYW5kbGVyLCBvcHRpb25zKTtcblxuICAgICAgICAgICAgb25DbGVhbnVwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgd2hlZWxIYW5kbGVyLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0b3VjaFN0YXJ0SGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0b3VjaE1vdmVIYW5kbGVyLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdG91Y2hFbmRIYW5kbGVyLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoY2FuY2VsJywgdG91Y2hFbmRIYW5kbGVyLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUludGVyYWN0aW9uRW5kKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaW5hbERhdGEgPSB0aGlzLmNhbGN1bGF0ZUNyb3BEYXRhKFxuICAgICAgICAgICAgdGhpcy5sYXRlc3RSZXN0cmljdGVkT2Zmc2V0KCkueCxcbiAgICAgICAgICAgIHRoaXMubGF0ZXN0UmVzdHJpY3RlZE9mZnNldCgpLnksXG4gICAgICAgICAgICB0aGlzLmVmZmVjdGl2ZVpvb20oKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLm9uQ3JvcENoYW5nZS5lbWl0KGZpbmFsRGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIG9uTW91c2VEb3duKGU6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGUuYnV0dG9uICE9PSAwKSByZXR1cm47XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nLnNldCh0cnVlKTtcbiAgICAgICAgdGhpcy5pc1BpbmNoaW5nLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXJ0UG9pbnQuc2V0KHsgeDogZS5jbGllbnRYLCB5OiBlLmNsaWVudFkgfSk7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXJ0T2Zmc2V0LnNldCh0aGlzLmxhdGVzdFJlc3RyaWN0ZWRPZmZzZXQoKSk7XG5cbiAgICAgICAgY29uc3QgaGFuZGxlTW91c2VNb3ZlID0gKGV2OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWx0YVggPSBldi5jbGllbnRYIC0gdGhpcy5kcmFnU3RhcnRQb2ludCgpLng7XG4gICAgICAgICAgICBjb25zdCBkZWx0YVkgPSBldi5jbGllbnRZIC0gdGhpcy5kcmFnU3RhcnRQb2ludCgpLnk7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRPZmZzZXRYID0gdGhpcy5kcmFnU3RhcnRPZmZzZXQoKS54ICsgZGVsdGFYO1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0T2Zmc2V0WSA9IHRoaXMuZHJhZ1N0YXJ0T2Zmc2V0KCkueSArIGRlbHRhWTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3RyaWN0ZWQgPSB0aGlzLnJlc3RyaWN0T2Zmc2V0KHRhcmdldE9mZnNldFgsIHRhcmdldE9mZnNldFksIHRoaXMuZWZmZWN0aXZlWm9vbSgpKTtcbiAgICAgICAgICAgIHRoaXMubGF0ZXN0UmVzdHJpY3RlZE9mZnNldC5zZXQocmVzdHJpY3RlZCk7XG4gICAgICAgICAgICB0aGlzLm9mZnNldFguc2V0KHJlc3RyaWN0ZWQueCk7XG4gICAgICAgICAgICB0aGlzLm9mZnNldFkuc2V0KHJlc3RyaWN0ZWQueSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFuZGxlTW91c2VVcCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGhhbmRsZU1vdXNlTW92ZSk7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGhhbmRsZU1vdXNlVXApO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVJbnRlcmFjdGlvbkVuZCgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVNb3VzZU1vdmUpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGhhbmRsZU1vdXNlVXApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlV2hlZWwoZTogV2hlZWxFdmVudCk6IHZvaWQge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgfHwgdGhpcy5pbWFnZVdyYXBwZXJXaWR0aCgpIDw9IDAgfHwgdGhpcy5pbWFnZVdyYXBwZXJIZWlnaHQoKSA8PSAwKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY3VycmVudFpvb20gPSB0aGlzLmxhdGVzdFpvb20oKTtcbiAgICAgICAgY29uc3QgY3VycmVudE9mZnNldFggPSB0aGlzLmxhdGVzdFJlc3RyaWN0ZWRPZmZzZXQoKS54O1xuICAgICAgICBjb25zdCBjdXJyZW50T2Zmc2V0WSA9IHRoaXMubGF0ZXN0UmVzdHJpY3RlZE9mZnNldCgpLnk7XG4gICAgICAgIGNvbnN0IGRlbHRhID0gZS5kZWx0YVkgKiAtdGhpcy56b29tU2Vuc2l0aXZpdHkoKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0Wm9vbSA9IGN1cnJlbnRab29tICsgZGVsdGE7XG5cbiAgICAgICAgaWYgKGNsYW1wKHRhcmdldFpvb20sIHRoaXMubWluWm9vbSgpLCB0aGlzLm1heFpvb20oKSkgPT09IGN1cnJlbnRab29tKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBwb2ludGVyWCA9IGUuY2xpZW50WCAtIHJlY3QubGVmdCAtIHJlY3Qud2lkdGggLyAyO1xuICAgICAgICBjb25zdCBwb2ludGVyWSA9IGUuY2xpZW50WSAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCBpbWFnZVBvaW50WCA9IChwb2ludGVyWCAtIGN1cnJlbnRPZmZzZXRYKSAvIGN1cnJlbnRab29tO1xuICAgICAgICBjb25zdCBpbWFnZVBvaW50WSA9IChwb2ludGVyWSAtIGN1cnJlbnRPZmZzZXRZKSAvIGN1cnJlbnRab29tO1xuXG4gICAgICAgIGNvbnN0IGZpbmFsTmV3Wm9vbSA9IHRoaXMudXBkYXRlWm9vbSh0YXJnZXRab29tKTtcblxuICAgICAgICBjb25zdCBuZXdPZmZzZXRYID0gcG9pbnRlclggLSBpbWFnZVBvaW50WCAqIGZpbmFsTmV3Wm9vbTtcbiAgICAgICAgY29uc3QgbmV3T2Zmc2V0WSA9IHBvaW50ZXJZIC0gaW1hZ2VQb2ludFkgKiBmaW5hbE5ld1pvb207XG4gICAgICAgIGNvbnN0IHJlc3RyaWN0ZWROZXdPZmZzZXQgPSB0aGlzLnJlc3RyaWN0T2Zmc2V0KG5ld09mZnNldFgsIG5ld09mZnNldFksIGZpbmFsTmV3Wm9vbSk7XG5cbiAgICAgICAgdGhpcy5vZmZzZXRYLnNldChyZXN0cmljdGVkTmV3T2Zmc2V0LngpO1xuICAgICAgICB0aGlzLm9mZnNldFkuc2V0KHJlc3RyaWN0ZWROZXdPZmZzZXQueSk7XG4gICAgICAgIHRoaXMubGF0ZXN0UmVzdHJpY3RlZE9mZnNldC5zZXQocmVzdHJpY3RlZE5ld09mZnNldCk7XG5cbiAgICAgICAgY29uc3QgZmluYWxEYXRhID0gdGhpcy5jYWxjdWxhdGVDcm9wRGF0YShyZXN0cmljdGVkTmV3T2Zmc2V0LngsIHJlc3RyaWN0ZWROZXdPZmZzZXQueSwgZmluYWxOZXdab29tKTtcbiAgICAgICAgdGhpcy5vbkNyb3BDaGFuZ2UuZW1pdChmaW5hbERhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGluY2hEaXN0YW5jZSh0b3VjaGVzOiBUb3VjaExpc3QpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KFxuICAgICAgICAgICAgTWF0aC5wb3codG91Y2hlc1sxXS5jbGllbnRYIC0gdG91Y2hlc1swXS5jbGllbnRYLCAyKSArIE1hdGgucG93KHRvdWNoZXNbMV0uY2xpZW50WSAtIHRvdWNoZXNbMF0uY2xpZW50WSwgMilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBpbmNoQ2VudGVyKHRvdWNoZXM6IFRvdWNoTGlzdCk6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiAodG91Y2hlc1swXS5jbGllbnRYICsgdG91Y2hlc1sxXS5jbGllbnRYKSAvIDIsXG4gICAgICAgICAgICB5OiAodG91Y2hlc1swXS5jbGllbnRZICsgdG91Y2hlc1sxXS5jbGllbnRZKSAvIDJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVRvdWNoU3RhcnQoZTogVG91Y2hFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pbWFnZVdyYXBwZXJXaWR0aCgpIDw9IDAgfHwgdGhpcy5pbWFnZVdyYXBwZXJIZWlnaHQoKSA8PSAwKSByZXR1cm47XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgdG91Y2hlcyA9IGUudG91Y2hlcztcblxuICAgICAgICBpZiAodG91Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmlzUGluY2hpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXJ0UG9pbnQuc2V0KHsgeDogdG91Y2hlc1swXS5jbGllbnRYLCB5OiB0b3VjaGVzWzBdLmNsaWVudFkgfSk7XG4gICAgICAgICAgICB0aGlzLmRyYWdTdGFydE9mZnNldC5zZXQodGhpcy5sYXRlc3RSZXN0cmljdGVkT2Zmc2V0KCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRvdWNoZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aGlzLmlzRHJhZ2dpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuaXNQaW5jaGluZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxQaW5jaERpc3RhbmNlLnNldCh0aGlzLmdldFBpbmNoRGlzdGFuY2UodG91Y2hlcykpO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsUGluY2hab29tLnNldCh0aGlzLmxhdGVzdFpvb20oKSk7XG4gICAgICAgICAgICB0aGlzLmRyYWdTdGFydE9mZnNldC5zZXQodGhpcy5sYXRlc3RSZXN0cmljdGVkT2Zmc2V0KCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVUb3VjaE1vdmUoZTogVG91Y2hFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pbWFnZVdyYXBwZXJXaWR0aCgpIDw9IDAgfHwgdGhpcy5pbWFnZVdyYXBwZXJIZWlnaHQoKSA8PSAwKSByZXR1cm47XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgdG91Y2hlcyA9IGUudG91Y2hlcztcblxuICAgICAgICBpZiAodG91Y2hlcy5sZW5ndGggPT09IDEgJiYgdGhpcy5pc0RyYWdnaW5nKCkgJiYgIXRoaXMuaXNQaW5jaGluZygpKSB7XG4gICAgICAgICAgICBjb25zdCBkZWx0YVggPSB0b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLmRyYWdTdGFydFBvaW50KCkueDtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhWSA9IHRvdWNoZXNbMF0uY2xpZW50WSAtIHRoaXMuZHJhZ1N0YXJ0UG9pbnQoKS55O1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0T2Zmc2V0WCA9IHRoaXMuZHJhZ1N0YXJ0T2Zmc2V0KCkueCArIGRlbHRhWDtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldE9mZnNldFkgPSB0aGlzLmRyYWdTdGFydE9mZnNldCgpLnkgKyBkZWx0YVk7XG4gICAgICAgICAgICBjb25zdCByZXN0cmljdGVkID0gdGhpcy5yZXN0cmljdE9mZnNldCh0YXJnZXRPZmZzZXRYLCB0YXJnZXRPZmZzZXRZLCB0aGlzLmVmZmVjdGl2ZVpvb20oKSk7XG4gICAgICAgICAgICB0aGlzLmxhdGVzdFJlc3RyaWN0ZWRPZmZzZXQuc2V0KHJlc3RyaWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5vZmZzZXRYLnNldChyZXN0cmljdGVkLngpO1xuICAgICAgICAgICAgdGhpcy5vZmZzZXRZLnNldChyZXN0cmljdGVkLnkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRvdWNoZXMubGVuZ3RoID09PSAyICYmIHRoaXMuaXNQaW5jaGluZygpKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UGluY2hEaXN0YW5jZSA9IHRoaXMuZ2V0UGluY2hEaXN0YW5jZSh0b3VjaGVzKTtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gY3VycmVudFBpbmNoRGlzdGFuY2UgLyB0aGlzLmluaXRpYWxQaW5jaERpc3RhbmNlKCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Wm9vbSA9IHRoaXMuaW5pdGlhbFBpbmNoWm9vbSgpO1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Wm9vbSA9IGN1cnJlbnRab29tICogc2NhbGU7XG5cbiAgICAgICAgICAgIGlmIChjbGFtcCh0YXJnZXRab29tLCB0aGlzLm1pblpvb20oKSwgdGhpcy5tYXhab29tKCkpID09PSB0aGlzLmxhdGVzdFpvb20oKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBwaW5jaENlbnRlciA9IHRoaXMuZ2V0UGluY2hDZW50ZXIodG91Y2hlcyk7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBjb25zdCBwaW5jaENlbnRlclggPSBwaW5jaENlbnRlci54IC0gcmVjdC5sZWZ0IC0gcmVjdC53aWR0aCAvIDI7XG4gICAgICAgICAgICBjb25zdCBwaW5jaENlbnRlclkgPSBwaW5jaENlbnRlci55IC0gcmVjdC50b3AgLSByZWN0LmhlaWdodCAvIDI7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50T2Zmc2V0WCA9IHRoaXMuZHJhZ1N0YXJ0T2Zmc2V0KCkueDtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRPZmZzZXRZID0gdGhpcy5kcmFnU3RhcnRPZmZzZXQoKS55O1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VQb2ludFggPSAocGluY2hDZW50ZXJYIC0gY3VycmVudE9mZnNldFgpIC8gY3VycmVudFpvb207XG4gICAgICAgICAgICBjb25zdCBpbWFnZVBvaW50WSA9IChwaW5jaENlbnRlclkgLSBjdXJyZW50T2Zmc2V0WSkgLyBjdXJyZW50Wm9vbTtcblxuICAgICAgICAgICAgY29uc3QgZmluYWxOZXdab29tID0gdGhpcy51cGRhdGVab29tKHRhcmdldFpvb20pO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdPZmZzZXRYID0gcGluY2hDZW50ZXJYIC0gaW1hZ2VQb2ludFggKiBmaW5hbE5ld1pvb207XG4gICAgICAgICAgICBjb25zdCBuZXdPZmZzZXRZID0gcGluY2hDZW50ZXJZIC0gaW1hZ2VQb2ludFkgKiBmaW5hbE5ld1pvb207XG4gICAgICAgICAgICBjb25zdCByZXN0cmljdGVkTmV3T2Zmc2V0ID0gdGhpcy5yZXN0cmljdE9mZnNldChuZXdPZmZzZXRYLCBuZXdPZmZzZXRZLCBmaW5hbE5ld1pvb20pO1xuXG4gICAgICAgICAgICB0aGlzLm9mZnNldFguc2V0KHJlc3RyaWN0ZWROZXdPZmZzZXQueCk7XG4gICAgICAgICAgICB0aGlzLm9mZnNldFkuc2V0KHJlc3RyaWN0ZWROZXdPZmZzZXQueSk7XG4gICAgICAgICAgICB0aGlzLmxhdGVzdFJlc3RyaWN0ZWRPZmZzZXQuc2V0KHJlc3RyaWN0ZWROZXdPZmZzZXQpO1xuXG4gICAgICAgICAgICBjb25zdCBmaW5hbERhdGEgPSB0aGlzLmNhbGN1bGF0ZUNyb3BEYXRhKHJlc3RyaWN0ZWROZXdPZmZzZXQueCwgcmVzdHJpY3RlZE5ld09mZnNldC55LCBmaW5hbE5ld1pvb20pO1xuICAgICAgICAgICAgdGhpcy5vbkNyb3BDaGFuZ2UuZW1pdChmaW5hbERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVUb3VjaEVuZChlOiBUb3VjaEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgdG91Y2hlcyA9IGUudG91Y2hlcztcblxuICAgICAgICBpZiAodGhpcy5pc1BpbmNoaW5nKCkgJiYgdG91Y2hlcy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICB0aGlzLmlzUGluY2hpbmcuc2V0KGZhbHNlKTtcblxuICAgICAgICAgICAgaWYgKHRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0RyYWdnaW5nLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdTdGFydFBvaW50LnNldCh7IHg6IHRvdWNoZXNbMF0uY2xpZW50WCwgeTogdG91Y2hlc1swXS5jbGllbnRZIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXJ0T2Zmc2V0LnNldCh0aGlzLmxhdGVzdFJlc3RyaWN0ZWRPZmZzZXQoKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlSW50ZXJhY3Rpb25FbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRHJhZ2dpbmcoKSAmJiB0b3VjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5pc0RyYWdnaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUludGVyYWN0aW9uRW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgb25LZXlEb3duKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VXcmFwcGVyV2lkdGgoKSA8PSAwKSByZXR1cm47XG5cbiAgICAgICAgbGV0IHRhcmdldE9mZnNldFggPSB0aGlzLmxhdGVzdFJlc3RyaWN0ZWRPZmZzZXQoKS54O1xuICAgICAgICBsZXQgdGFyZ2V0T2Zmc2V0WSA9IHRoaXMubGF0ZXN0UmVzdHJpY3RlZE9mZnNldCgpLnk7XG4gICAgICAgIGxldCBtb3ZlZCA9IGZhbHNlO1xuXG4gICAgICAgIHN3aXRjaCAoZS5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICAgICAgICAgIHRhcmdldE9mZnNldFkgKz0gdGhpcy5rZXlib2FyZFN0ZXAoKTtcbiAgICAgICAgICAgICAgICBtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICAgICAgICAgIHRhcmdldE9mZnNldFkgLT0gdGhpcy5rZXlib2FyZFN0ZXAoKTtcbiAgICAgICAgICAgICAgICBtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICAgICAgICAgIHRhcmdldE9mZnNldFggKz0gdGhpcy5rZXlib2FyZFN0ZXAoKTtcbiAgICAgICAgICAgICAgICBtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgICAgICAgICB0YXJnZXRPZmZzZXRYIC09IHRoaXMua2V5Ym9hcmRTdGVwKCk7XG4gICAgICAgICAgICAgICAgbW92ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW92ZWQpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3RyaWN0ZWQgPSB0aGlzLnJlc3RyaWN0T2Zmc2V0KHRhcmdldE9mZnNldFgsIHRhcmdldE9mZnNldFksIHRoaXMuZWZmZWN0aXZlWm9vbSgpKTtcbiAgICAgICAgICAgIGlmIChyZXN0cmljdGVkLnggIT09IHRoaXMubGF0ZXN0UmVzdHJpY3RlZE9mZnNldCgpLnggfHwgcmVzdHJpY3RlZC55ICE9PSB0aGlzLmxhdGVzdFJlc3RyaWN0ZWRPZmZzZXQoKS55KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RSZXN0cmljdGVkT2Zmc2V0LnNldChyZXN0cmljdGVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZnNldFguc2V0KHJlc3RyaWN0ZWQueCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRZLnNldChyZXN0cmljdGVkLnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIG9uS2V5VXAoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoWydBcnJvd1VwJywgJ0Fycm93RG93bicsICdBcnJvd0xlZnQnLCAnQXJyb3dSaWdodCddLmluY2x1ZGVzKGUua2V5KSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVJbnRlcmFjdGlvbkVuZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIGdldEltYWdlUHJvcHMoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcmM6IHRoaXMuaW1hZ2UoKSxcbiAgICAgICAgICAgIGFsdDogJ0ltYWdlIGJlaW5nIGNyb3BwZWQnLFxuICAgICAgICAgICAgZHJhZ2dhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICdhcmlhLWhpZGRlbic6IHRydWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgZ2V0SW1hZ2VXcmFwcGVyU3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHdyYXBwZXJXID0gdGhpcy5pbWFnZVdyYXBwZXJXaWR0aCgpO1xuICAgICAgICBjb25zdCB3cmFwcGVySCA9IHRoaXMuaW1hZ2VXcmFwcGVySGVpZ2h0KCk7XG4gICAgICAgIGNvbnN0IG9mZnNldFggPSB0aGlzLm9mZnNldFgoKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WSA9IHRoaXMub2Zmc2V0WSgpO1xuICAgICAgICBjb25zdCB6b29tID0gdGhpcy5lZmZlY3RpdmVab29tKCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoOiBgJHt3cmFwcGVyV31weGAsXG4gICAgICAgICAgICBoZWlnaHQ6IGAke3dyYXBwZXJIfXB4YCxcbiAgICAgICAgICAgIHRyYW5zZm9ybTogYHRyYW5zbGF0ZTNkKCR7b2Zmc2V0WH1weCwgJHtvZmZzZXRZfXB4LCAwcHgpIHNjYWxlKCR7em9vbX0pYCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgbGVmdDogYGNhbGMoNTAlIC0gJHt3cmFwcGVyVyAvIDJ9cHgpYCxcbiAgICAgICAgICAgIHRvcDogYGNhbGMoNTAlIC0gJHt3cmFwcGVySCAvIDJ9cHgpYCxcbiAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0nXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIGdldENyb3BBcmVhU3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3aWR0aDogYCR7dGhpcy5jcm9wQXJlYVdpZHRoKCl9cHhgLFxuICAgICAgICAgICAgaGVpZ2h0OiBgJHt0aGlzLmNyb3BBcmVhSGVpZ2h0KCl9cHhgXG4gICAgICAgIH07XG4gICAgfVxufVxuIl19","import { NgModule } from '@angular/core';\nimport { RdxCropperCropAreaDirective } from './src/cropper-crop-area.directive';\nimport { RdxCropperDescriptionDirective } from './src/cropper-description.directive';\nimport { RdxCropperImageComponent } from './src/cropper-image.component';\nimport { RdxCropperRootDirective } from './src/cropper-root.directive';\nimport * as i0 from \"@angular/core\";\nexport * from './src/cropper-context.token';\nexport * from './src/cropper-crop-area.directive';\nexport * from './src/cropper-description.directive';\nexport * from './src/cropper-image.component';\nexport * from './src/cropper-root.directive';\nconst _imports = [\n RdxCropperRootDirective,\n RdxCropperImageComponent,\n RdxCropperCropAreaDirective,\n RdxCropperDescriptionDirective\n];\nexport class RdxCropperModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxCropperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxCropperModule, imports: [RdxCropperRootDirective,\n RdxCropperImageComponent,\n RdxCropperCropAreaDirective,\n RdxCropperDescriptionDirective], exports: [RdxCropperRootDirective,\n RdxCropperImageComponent,\n RdxCropperCropAreaDirective,\n RdxCropperDescriptionDirective] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxCropperModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxCropperModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [..._imports],\n exports: [..._imports]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL2Nyb3BwZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNyRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFFdkUsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBRTdDLE1BQU0sUUFBUSxHQUFHO0lBQ2IsdUJBQXVCO0lBQ3ZCLHdCQUF3QjtJQUN4QiwyQkFBMkI7SUFDM0IsOEJBQThCO0NBQ2pDLENBQUM7QUFNRixNQUFNLE9BQU8sZ0JBQWdCOzhHQUFoQixnQkFBZ0I7K0dBQWhCLGdCQUFnQixZQVZ6Qix1QkFBdUI7WUFDdkIsd0JBQXdCO1lBQ3hCLDJCQUEyQjtZQUMzQiw4QkFBOEIsYUFIOUIsdUJBQXVCO1lBQ3ZCLHdCQUF3QjtZQUN4QiwyQkFBMkI7WUFDM0IsOEJBQThCOytHQU9yQixnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBSjVCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUM7b0JBQ3RCLE9BQU8sRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDO2lCQUN6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZHhDcm9wcGVyQ3JvcEFyZWFEaXJlY3RpdmUgfSBmcm9tICcuL3NyYy9jcm9wcGVyLWNyb3AtYXJlYS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmR4Q3JvcHBlckRlc2NyaXB0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi9zcmMvY3JvcHBlci1kZXNjcmlwdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmR4Q3JvcHBlckltYWdlQ29tcG9uZW50IH0gZnJvbSAnLi9zcmMvY3JvcHBlci1pbWFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmR4Q3JvcHBlclJvb3REaXJlY3RpdmUgfSBmcm9tICcuL3NyYy9jcm9wcGVyLXJvb3QuZGlyZWN0aXZlJztcblxuZXhwb3J0ICogZnJvbSAnLi9zcmMvY3JvcHBlci1jb250ZXh0LnRva2VuJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2Nyb3BwZXItY3JvcC1hcmVhLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9jcm9wcGVyLWRlc2NyaXB0aW9uLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9jcm9wcGVyLWltYWdlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9jcm9wcGVyLXJvb3QuZGlyZWN0aXZlJztcblxuY29uc3QgX2ltcG9ydHMgPSBbXG4gICAgUmR4Q3JvcHBlclJvb3REaXJlY3RpdmUsXG4gICAgUmR4Q3JvcHBlckltYWdlQ29tcG9uZW50LFxuICAgIFJkeENyb3BwZXJDcm9wQXJlYURpcmVjdGl2ZSxcbiAgICBSZHhDcm9wcGVyRGVzY3JpcHRpb25EaXJlY3RpdmVcbl07XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogWy4uLl9pbXBvcnRzXSxcbiAgICBleHBvcnRzOiBbLi4uX2ltcG9ydHNdXG59KVxuZXhwb3J0IGNsYXNzIFJkeENyb3BwZXJNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaXgtbmctcHJpbWl0aXZlcy1jcm9wcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9jcm9wcGVyL3JhZGl4LW5nLXByaW1pdGl2ZXMtY3JvcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}