@spartan-ng/brain 0.0.1-alpha.373 → 0.0.1-alpha.379

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 (398) hide show
  1. package/accordion/README.md +3 -0
  2. package/accordion/index.d.ts +13 -0
  3. package/accordion/lib/brn-accordion-content.component.d.ts +15 -0
  4. package/accordion/lib/brn-accordion.directive.d.ts +47 -0
  5. package/alert-dialog/README.md +3 -0
  6. package/alert-dialog/index.d.ts +25 -0
  7. package/alert-dialog/lib/brn-alert-dialog-content.directive.d.ts +6 -0
  8. package/alert-dialog/lib/brn-alert-dialog-description.directive.d.ts +6 -0
  9. package/alert-dialog/lib/brn-alert-dialog-overlay.component.d.ts +6 -0
  10. package/alert-dialog/lib/brn-alert-dialog-title.directive.d.ts +6 -0
  11. package/alert-dialog/lib/brn-alert-dialog-trigger.directive.d.ts +8 -0
  12. package/alert-dialog/lib/brn-alert-dialog.component.d.ts +7 -0
  13. package/avatar/README.md +3 -0
  14. package/avatar/index.d.ts +17 -0
  15. package/avatar/lib/brn-avatar.component.d.ts +7 -0
  16. package/avatar/lib/fallback/brn-avatar-fallback.directive.d.ts +11 -0
  17. package/avatar/lib/fallback/index.d.ts +1 -0
  18. package/avatar/lib/image/brn-avatar-image.directive.d.ts +9 -0
  19. package/avatar/lib/image/index.d.ts +1 -0
  20. package/avatar/lib/util/hex-color-for.d.ts +1 -0
  21. package/avatar/lib/util/index.d.ts +3 -0
  22. package/avatar/lib/util/initials.pipe.d.ts +7 -0
  23. package/avatar/lib/util/is-bright.d.ts +1 -0
  24. package/calendar/README.md +3 -0
  25. package/calendar/index.d.ts +36 -0
  26. package/calendar/lib/brn-calendar-cell-button.directive.d.ts +59 -0
  27. package/calendar/lib/brn-calendar-cell.directive.d.ts +5 -0
  28. package/calendar/lib/brn-calendar-grid.directive.d.ts +7 -0
  29. package/calendar/lib/brn-calendar-header.directive.d.ts +7 -0
  30. package/calendar/lib/brn-calendar-next-button.directive.d.ts +13 -0
  31. package/calendar/lib/brn-calendar-previous-button.directive.d.ts +13 -0
  32. package/calendar/lib/brn-calendar-week.directive.d.ts +25 -0
  33. package/calendar/lib/brn-calendar-weekday.directive.d.ts +25 -0
  34. package/calendar/lib/brn-calendar.directive.d.ts +55 -0
  35. package/calendar/lib/brn-calendar.token.d.ts +8 -0
  36. package/calendar/lib/i18n/calendar-i18n.d.ts +17 -0
  37. package/checkbox/lib/brn-checkbox.component.d.ts +1 -1
  38. package/collapsible/README.md +3 -0
  39. package/collapsible/index.d.ts +16 -0
  40. package/collapsible/lib/brn-collapsible-content.component.d.ts +19 -0
  41. package/collapsible/lib/brn-collapsible-trigger.directive.d.ts +12 -0
  42. package/collapsible/lib/brn-collapsible.component.d.ts +11 -0
  43. package/command/README.md +3 -0
  44. package/command/index.d.ts +33 -0
  45. package/command/lib/brn-command-empty.directive.d.ts +6 -0
  46. package/command/lib/brn-command-group.component.d.ts +6 -0
  47. package/command/lib/brn-command-input.directive.d.ts +6 -0
  48. package/command/lib/brn-command-item.directive.d.ts +6 -0
  49. package/command/lib/brn-command-list.component.d.ts +6 -0
  50. package/command/lib/brn-command-loader.directive.d.ts +6 -0
  51. package/command/lib/brn-command-separator.component.d.ts +6 -0
  52. package/command/lib/brn-command.component.d.ts +6 -0
  53. package/date-time/README.md +3 -0
  54. package/date-time/index.d.ts +2 -0
  55. package/date-time/lib/date-adapter.d.ts +176 -0
  56. package/date-time/lib/native-date-adapter.d.ts +103 -0
  57. package/date-time-luxon/README.md +3 -0
  58. package/date-time-luxon/index.d.ts +1 -0
  59. package/date-time-luxon/lib/date-adapter.d.ts +29 -0
  60. package/dialog/README.md +3 -0
  61. package/dialog/index.d.ts +33 -0
  62. package/dialog/lib/brn-dialog-close.directive.d.ts +10 -0
  63. package/dialog/lib/brn-dialog-content.directive.d.ts +12 -0
  64. package/dialog/lib/brn-dialog-description.directive.d.ts +8 -0
  65. package/dialog/lib/brn-dialog-options.d.ts +26 -0
  66. package/dialog/lib/brn-dialog-overlay.component.d.ts +8 -0
  67. package/dialog/lib/brn-dialog-ref.d.ts +24 -0
  68. package/dialog/lib/brn-dialog-state.d.ts +1 -0
  69. package/dialog/lib/brn-dialog-title.directive.d.ts +8 -0
  70. package/dialog/lib/brn-dialog-trigger.directive.d.ts +16 -0
  71. package/dialog/lib/brn-dialog-utils.d.ts +1 -0
  72. package/dialog/lib/brn-dialog.component.d.ts +56 -0
  73. package/dialog/lib/brn-dialog.service.d.ts +22 -0
  74. package/esm2022/accordion/index.mjs +31 -0
  75. package/esm2022/accordion/lib/brn-accordion-content.component.mjs +50 -0
  76. package/esm2022/accordion/lib/brn-accordion.directive.mjs +180 -0
  77. package/esm2022/accordion/spartan-ng-brain-accordion.mjs +5 -0
  78. package/esm2022/alert-dialog/index.mjs +45 -0
  79. package/esm2022/alert-dialog/lib/brn-alert-dialog-content.directive.mjs +17 -0
  80. package/esm2022/alert-dialog/lib/brn-alert-dialog-description.directive.mjs +18 -0
  81. package/esm2022/alert-dialog/lib/brn-alert-dialog-overlay.component.mjs +20 -0
  82. package/esm2022/alert-dialog/lib/brn-alert-dialog-title.directive.mjs +18 -0
  83. package/esm2022/alert-dialog/lib/brn-alert-dialog-trigger.directive.mjs +27 -0
  84. package/esm2022/alert-dialog/lib/brn-alert-dialog.component.mjs +40 -0
  85. package/esm2022/alert-dialog/spartan-ng-brain-alert-dialog.mjs +5 -0
  86. package/esm2022/avatar/index.mjs +23 -0
  87. package/esm2022/avatar/lib/brn-avatar.component.mjs +31 -0
  88. package/esm2022/avatar/lib/fallback/brn-avatar-fallback.directive.mjs +21 -0
  89. package/esm2022/avatar/lib/fallback/index.mjs +2 -0
  90. package/esm2022/avatar/lib/image/brn-avatar-image.directive.mjs +29 -0
  91. package/esm2022/avatar/lib/image/index.mjs +2 -0
  92. package/esm2022/avatar/lib/util/hex-color-for.mjs +22 -0
  93. package/esm2022/avatar/lib/util/index.mjs +4 -0
  94. package/esm2022/avatar/lib/util/initials.pipe.mjs +27 -0
  95. package/esm2022/avatar/lib/util/is-bright.mjs +12 -0
  96. package/esm2022/avatar/spartan-ng-brain-avatar.mjs +5 -0
  97. package/esm2022/calendar/index.mjs +62 -0
  98. package/esm2022/calendar/lib/brn-calendar-cell-button.directive.mjs +160 -0
  99. package/esm2022/calendar/lib/brn-calendar-cell.directive.mjs +17 -0
  100. package/esm2022/calendar/lib/brn-calendar-grid.directive.mjs +21 -0
  101. package/esm2022/calendar/lib/brn-calendar-header.directive.mjs +22 -0
  102. package/esm2022/calendar/lib/brn-calendar-next-button.directive.mjs +42 -0
  103. package/esm2022/calendar/lib/brn-calendar-previous-button.directive.mjs +42 -0
  104. package/esm2022/calendar/lib/brn-calendar-week.directive.mjs +64 -0
  105. package/esm2022/calendar/lib/brn-calendar-weekday.directive.mjs +48 -0
  106. package/esm2022/calendar/lib/brn-calendar.directive.mjs +154 -0
  107. package/esm2022/calendar/lib/brn-calendar.token.mjs +12 -0
  108. package/esm2022/calendar/lib/i18n/calendar-i18n.mjs +33 -0
  109. package/esm2022/calendar/spartan-ng-brain-calendar.mjs +5 -0
  110. package/esm2022/checkbox/lib/brn-checkbox.component.mjs +1 -1
  111. package/esm2022/collapsible/index.mjs +30 -0
  112. package/esm2022/collapsible/lib/brn-collapsible-content.component.mjs +61 -0
  113. package/esm2022/collapsible/lib/brn-collapsible-trigger.directive.mjs +35 -0
  114. package/esm2022/collapsible/lib/brn-collapsible.component.mjs +33 -0
  115. package/esm2022/collapsible/spartan-ng-brain-collapsible.mjs +5 -0
  116. package/esm2022/command/index.mjs +64 -0
  117. package/esm2022/command/lib/brn-command-empty.directive.mjs +29 -0
  118. package/esm2022/command/lib/brn-command-group.component.mjs +45 -0
  119. package/esm2022/command/lib/brn-command-input.directive.mjs +29 -0
  120. package/esm2022/command/lib/brn-command-item.directive.mjs +36 -0
  121. package/esm2022/command/lib/brn-command-list.component.mjs +35 -0
  122. package/esm2022/command/lib/brn-command-loader.directive.mjs +29 -0
  123. package/esm2022/command/lib/brn-command-separator.component.mjs +30 -0
  124. package/esm2022/command/lib/brn-command.component.mjs +21 -0
  125. package/esm2022/command/spartan-ng-brain-command.mjs +5 -0
  126. package/esm2022/date-time/index.mjs +3 -0
  127. package/esm2022/date-time/lib/date-adapter.mjs +16 -0
  128. package/esm2022/date-time/lib/native-date-adapter.mjs +155 -0
  129. package/esm2022/date-time/spartan-ng-brain-date-time.mjs +5 -0
  130. package/esm2022/date-time-luxon/index.mjs +2 -0
  131. package/esm2022/date-time-luxon/lib/date-adapter.mjs +85 -0
  132. package/esm2022/date-time-luxon/spartan-ng-brain-date-time-luxon.mjs +5 -0
  133. package/esm2022/dialog/index.mjs +55 -0
  134. package/esm2022/dialog/lib/brn-dialog-close.directive.mjs +29 -0
  135. package/esm2022/dialog/lib/brn-dialog-content.directive.mjs +41 -0
  136. package/esm2022/dialog/lib/brn-dialog-description.directive.mjs +25 -0
  137. package/esm2022/dialog/lib/brn-dialog-options.mjs +19 -0
  138. package/esm2022/dialog/lib/brn-dialog-overlay.component.mjs +29 -0
  139. package/esm2022/dialog/lib/brn-dialog-ref.mjs +53 -0
  140. package/esm2022/dialog/lib/brn-dialog-state.mjs +2 -0
  141. package/esm2022/dialog/lib/brn-dialog-title.directive.mjs +25 -0
  142. package/esm2022/dialog/lib/brn-dialog-trigger.directive.mjs +39 -0
  143. package/esm2022/dialog/lib/brn-dialog-utils.mjs +12 -0
  144. package/esm2022/dialog/lib/brn-dialog.component.mjs +208 -0
  145. package/esm2022/dialog/lib/brn-dialog.service.mjs +127 -0
  146. package/esm2022/dialog/spartan-ng-brain-dialog.mjs +5 -0
  147. package/esm2022/form-field/index.mjs +2 -0
  148. package/esm2022/form-field/lib/brn-form-field-control.mjs +14 -0
  149. package/esm2022/form-field/spartan-ng-brain-form-field.mjs +5 -0
  150. package/esm2022/forms/index.mjs +4 -0
  151. package/esm2022/forms/lib/control-value-accessor.mjs +2 -0
  152. package/esm2022/forms/lib/error-options.mjs +26 -0
  153. package/esm2022/forms/lib/error-state-tracker.mjs +29 -0
  154. package/esm2022/forms/spartan-ng-brain-forms.mjs +5 -0
  155. package/esm2022/hover-card/index.mjs +29 -0
  156. package/esm2022/hover-card/lib/brn-hover-card-content.service.mjs +205 -0
  157. package/esm2022/hover-card/lib/brn-hover-card.component.mjs +34 -0
  158. package/esm2022/hover-card/lib/createHoverObservable.mjs +19 -0
  159. package/esm2022/hover-card/spartan-ng-brain-hover-card.mjs +5 -0
  160. package/esm2022/label/index.mjs +17 -0
  161. package/esm2022/label/lib/brn-label.directive.mjs +49 -0
  162. package/esm2022/label/spartan-ng-brain-label.mjs +5 -0
  163. package/esm2022/menu/index.mjs +100 -0
  164. package/esm2022/menu/lib/brn-context-menu-trigger.directive.mjs +40 -0
  165. package/esm2022/menu/lib/brn-menu-align.mjs +15 -0
  166. package/esm2022/menu/lib/brn-menu-bar.directive.mjs +17 -0
  167. package/esm2022/menu/lib/brn-menu-group.directive.mjs +17 -0
  168. package/esm2022/menu/lib/brn-menu-item-checkbox.directive.mjs +30 -0
  169. package/esm2022/menu/lib/brn-menu-item-radio.directive.mjs +30 -0
  170. package/esm2022/menu/lib/brn-menu-item.directive.mjs +27 -0
  171. package/esm2022/menu/lib/brn-menu-trigger.directive.mjs +36 -0
  172. package/esm2022/menu/lib/brn-menu.directive.mjs +50 -0
  173. package/esm2022/menu/spartan-ng-brain-menu.mjs +5 -0
  174. package/esm2022/popover/index.mjs +35 -0
  175. package/esm2022/popover/lib/brn-popover-close.directive.mjs +15 -0
  176. package/esm2022/popover/lib/brn-popover-content.directive.mjs +17 -0
  177. package/esm2022/popover/lib/brn-popover-trigger.directive.mjs +37 -0
  178. package/esm2022/popover/lib/brn-popover.component.mjs +81 -0
  179. package/esm2022/popover/spartan-ng-brain-popover.mjs +5 -0
  180. package/esm2022/progress/index.mjs +21 -0
  181. package/esm2022/progress/lib/brn-progress-indicator.component.mjs +22 -0
  182. package/esm2022/progress/lib/brn-progress.component.mjs +61 -0
  183. package/esm2022/progress/lib/brn-progress.token.mjs +9 -0
  184. package/esm2022/progress/spartan-ng-brain-progress.mjs +5 -0
  185. package/esm2022/radio-group/index.mjs +20 -0
  186. package/esm2022/radio-group/lib/brn-radio-group.component.mjs +90 -0
  187. package/esm2022/radio-group/lib/brn-radio-group.token.mjs +9 -0
  188. package/esm2022/radio-group/lib/brn-radio.component.mjs +185 -0
  189. package/esm2022/radio-group/spartan-ng-brain-radio-group.mjs +5 -0
  190. package/esm2022/select/index.mjs +56 -0
  191. package/esm2022/select/lib/brn-select-content.component.mjs +204 -0
  192. package/esm2022/select/lib/brn-select-group.directive.mjs +19 -0
  193. package/esm2022/select/lib/brn-select-label.directive.mjs +23 -0
  194. package/esm2022/select/lib/brn-select-option.directive.mjs +65 -0
  195. package/esm2022/select/lib/brn-select-value.component.mjs +46 -0
  196. package/esm2022/select/lib/brn-select.component.mjs +358 -0
  197. package/esm2022/select/lib/brn-select.service.mjs +197 -0
  198. package/esm2022/select/spartan-ng-brain-select.mjs +5 -0
  199. package/esm2022/separator/index.mjs +17 -0
  200. package/esm2022/separator/lib/brn-separator.component.mjs +24 -0
  201. package/esm2022/separator/spartan-ng-brain-separator.mjs +5 -0
  202. package/esm2022/sheet/index.mjs +50 -0
  203. package/esm2022/sheet/lib/brn-sheet-close.directive.mjs +15 -0
  204. package/esm2022/sheet/lib/brn-sheet-content.directive.mjs +25 -0
  205. package/esm2022/sheet/lib/brn-sheet-description.directive.mjs +18 -0
  206. package/esm2022/sheet/lib/brn-sheet-overlay.component.mjs +20 -0
  207. package/esm2022/sheet/lib/brn-sheet-title.directive.mjs +18 -0
  208. package/esm2022/sheet/lib/brn-sheet-trigger.directive.mjs +26 -0
  209. package/esm2022/sheet/lib/brn-sheet.component.mjs +55 -0
  210. package/esm2022/sheet/spartan-ng-brain-sheet.mjs +5 -0
  211. package/esm2022/slider/index.mjs +13 -0
  212. package/esm2022/slider/lib/brn-slider-thumb.directive.mjs +41 -0
  213. package/esm2022/slider/lib/brn-slider-tick-mark.directive.mjs +37 -0
  214. package/esm2022/slider/lib/brn-slider-track-active-fill.directive.mjs +29 -0
  215. package/esm2022/slider/lib/brn-slider-track.directive.mjs +290 -0
  216. package/esm2022/slider/spartan-ng-brain-slider.mjs +5 -0
  217. package/esm2022/switch/index.mjs +20 -0
  218. package/esm2022/switch/lib/brn-switch-thumb.component.mjs +16 -0
  219. package/esm2022/switch/lib/brn-switch.component.mjs +236 -0
  220. package/esm2022/switch/spartan-ng-brain-switch.mjs +5 -0
  221. package/esm2022/table/index.mjs +47 -0
  222. package/esm2022/table/lib/brn-cell-def.directive.mjs +22 -0
  223. package/esm2022/table/lib/brn-column-def.component.mjs +82 -0
  224. package/esm2022/table/lib/brn-column-manager.mjs +61 -0
  225. package/esm2022/table/lib/brn-footer-def.directive.mjs +22 -0
  226. package/esm2022/table/lib/brn-header-def.directive.mjs +22 -0
  227. package/esm2022/table/lib/brn-paginator.directive.mjs +109 -0
  228. package/esm2022/table/lib/brn-table.component.mjs +169 -0
  229. package/esm2022/table/spartan-ng-brain-table.mjs +5 -0
  230. package/esm2022/tabs/index.mjs +32 -0
  231. package/esm2022/tabs/lib/brn-tabs-list.directive.mjs +65 -0
  232. package/esm2022/tabs/lib/brn-tabs-paginated-list.directive.mjs +525 -0
  233. package/esm2022/tabs/lib/brn-tabs-trigger.directive.mjs +134 -0
  234. package/esm2022/tabs/spartan-ng-brain-tabs.mjs +5 -0
  235. package/esm2022/toggle/index.mjs +31 -0
  236. package/esm2022/toggle/lib/brn-toggle-group.component.mjs +159 -0
  237. package/esm2022/toggle/lib/brn-toggle-group.token.mjs +9 -0
  238. package/esm2022/toggle/lib/brn-toggle.directive.mjs +65 -0
  239. package/esm2022/toggle/spartan-ng-brain-toggle.mjs +5 -0
  240. package/esm2022/tooltip/index.mjs +35 -0
  241. package/esm2022/tooltip/lib/brn-tooltip-content.component.mjs +228 -0
  242. package/esm2022/tooltip/lib/brn-tooltip-content.directive.mjs +22 -0
  243. package/esm2022/tooltip/lib/brn-tooltip-trigger.directive.mjs +689 -0
  244. package/esm2022/tooltip/lib/brn-tooltip.directive.mjs +15 -0
  245. package/esm2022/tooltip/spartan-ng-brain-tooltip.mjs +5 -0
  246. package/fesm2022/spartan-ng-brain-accordion.mjs +259 -0
  247. package/fesm2022/spartan-ng-brain-accordion.mjs.map +1 -0
  248. package/fesm2022/spartan-ng-brain-alert-dialog.mjs +162 -0
  249. package/fesm2022/spartan-ng-brain-alert-dialog.mjs.map +1 -0
  250. package/fesm2022/spartan-ng-brain-avatar.mjs +156 -0
  251. package/fesm2022/spartan-ng-brain-avatar.mjs.map +1 -0
  252. package/fesm2022/spartan-ng-brain-calendar.mjs +629 -0
  253. package/fesm2022/spartan-ng-brain-calendar.mjs.map +1 -0
  254. package/fesm2022/spartan-ng-brain-checkbox.mjs.map +1 -1
  255. package/fesm2022/spartan-ng-brain-collapsible.mjs +152 -0
  256. package/fesm2022/spartan-ng-brain-collapsible.mjs.map +1 -0
  257. package/fesm2022/spartan-ng-brain-command.mjs +284 -0
  258. package/fesm2022/spartan-ng-brain-command.mjs.map +1 -0
  259. package/fesm2022/spartan-ng-brain-date-time-luxon.mjs +92 -0
  260. package/fesm2022/spartan-ng-brain-date-time-luxon.mjs.map +1 -0
  261. package/fesm2022/spartan-ng-brain-date-time.mjs +177 -0
  262. package/fesm2022/spartan-ng-brain-date-time.mjs.map +1 -0
  263. package/fesm2022/spartan-ng-brain-dialog.mjs +617 -0
  264. package/fesm2022/spartan-ng-brain-dialog.mjs.map +1 -0
  265. package/fesm2022/spartan-ng-brain-form-field.mjs +21 -0
  266. package/fesm2022/spartan-ng-brain-form-field.mjs.map +1 -0
  267. package/fesm2022/spartan-ng-brain-forms.mjs +61 -0
  268. package/fesm2022/spartan-ng-brain-forms.mjs.map +1 -0
  269. package/fesm2022/spartan-ng-brain-hover-card.mjs +274 -0
  270. package/fesm2022/spartan-ng-brain-hover-card.mjs.map +1 -0
  271. package/fesm2022/spartan-ng-brain-label.mjs +69 -0
  272. package/fesm2022/spartan-ng-brain-label.mjs.map +1 -0
  273. package/fesm2022/spartan-ng-brain-menu.mjs +316 -0
  274. package/fesm2022/spartan-ng-brain-menu.mjs.map +1 -0
  275. package/fesm2022/spartan-ng-brain-popover.mjs +173 -0
  276. package/fesm2022/spartan-ng-brain-popover.mjs.map +1 -0
  277. package/fesm2022/spartan-ng-brain-progress.mjs +108 -0
  278. package/fesm2022/spartan-ng-brain-progress.mjs.map +1 -0
  279. package/fesm2022/spartan-ng-brain-radio-group.mjs +299 -0
  280. package/fesm2022/spartan-ng-brain-radio-group.mjs.map +1 -0
  281. package/fesm2022/spartan-ng-brain-select.mjs +928 -0
  282. package/fesm2022/spartan-ng-brain-select.mjs.map +1 -0
  283. package/fesm2022/spartan-ng-brain-separator.mjs +44 -0
  284. package/fesm2022/spartan-ng-brain-separator.mjs.map +1 -0
  285. package/fesm2022/spartan-ng-brain-sheet.mjs +197 -0
  286. package/fesm2022/spartan-ng-brain-sheet.mjs.map +1 -0
  287. package/fesm2022/spartan-ng-brain-slider.mjs +399 -0
  288. package/fesm2022/spartan-ng-brain-slider.mjs.map +1 -0
  289. package/fesm2022/spartan-ng-brain-switch.mjs +271 -0
  290. package/fesm2022/spartan-ng-brain-switch.mjs.map +1 -0
  291. package/fesm2022/spartan-ng-brain-table.mjs +506 -0
  292. package/fesm2022/spartan-ng-brain-table.mjs.map +1 -0
  293. package/fesm2022/spartan-ng-brain-tabs.mjs +748 -0
  294. package/fesm2022/spartan-ng-brain-tabs.mjs.map +1 -0
  295. package/fesm2022/spartan-ng-brain-toggle.mjs +260 -0
  296. package/fesm2022/spartan-ng-brain-toggle.mjs.map +1 -0
  297. package/fesm2022/spartan-ng-brain-tooltip.mjs +975 -0
  298. package/fesm2022/spartan-ng-brain-tooltip.mjs.map +1 -0
  299. package/form-field/README.md +3 -0
  300. package/form-field/index.d.ts +1 -0
  301. package/form-field/lib/brn-form-field-control.d.ts +11 -0
  302. package/forms/README.md +3 -0
  303. package/forms/index.d.ts +3 -0
  304. package/forms/lib/control-value-accessor.d.ts +2 -0
  305. package/forms/lib/error-options.d.ts +14 -0
  306. package/forms/lib/error-state-tracker.d.ts +15 -0
  307. package/hover-card/README.md +3 -0
  308. package/hover-card/index.d.ts +14 -0
  309. package/hover-card/lib/brn-hover-card-content.service.d.ts +65 -0
  310. package/hover-card/lib/brn-hover-card.component.d.ts +9 -0
  311. package/hover-card/lib/createHoverObservable.d.ts +4 -0
  312. package/label/README.md +3 -0
  313. package/label/index.d.ts +8 -0
  314. package/label/lib/brn-label.directive.d.ts +15 -0
  315. package/menu/README.md +3 -0
  316. package/menu/index.d.ts +49 -0
  317. package/menu/lib/brn-context-menu-trigger.directive.d.ts +13 -0
  318. package/menu/lib/brn-menu-align.d.ts +3 -0
  319. package/menu/lib/brn-menu-bar.directive.d.ts +6 -0
  320. package/menu/lib/brn-menu-group.directive.d.ts +6 -0
  321. package/menu/lib/brn-menu-item-checkbox.directive.d.ts +11 -0
  322. package/menu/lib/brn-menu-item-radio.directive.d.ts +11 -0
  323. package/menu/lib/brn-menu-item.directive.d.ts +10 -0
  324. package/menu/lib/brn-menu-trigger.directive.d.ts +10 -0
  325. package/menu/lib/brn-menu.directive.d.ts +11 -0
  326. package/package.json +182 -9
  327. package/popover/README.md +3 -0
  328. package/popover/index.d.ts +19 -0
  329. package/popover/lib/brn-popover-close.directive.d.ts +6 -0
  330. package/popover/lib/brn-popover-content.directive.d.ts +6 -0
  331. package/popover/lib/brn-popover-trigger.directive.d.ts +10 -0
  332. package/popover/lib/brn-popover.component.d.ts +14 -0
  333. package/progress/README.md +3 -0
  334. package/progress/index.d.ts +14 -0
  335. package/progress/lib/brn-progress-indicator.component.d.ts +6 -0
  336. package/progress/lib/brn-progress.component.d.ts +15 -0
  337. package/progress/lib/brn-progress.token.d.ts +4 -0
  338. package/radio-group/README.md +3 -0
  339. package/radio-group/index.d.ts +13 -0
  340. package/radio-group/lib/brn-radio-group.component.d.ts +57 -0
  341. package/radio-group/lib/brn-radio-group.token.d.ts +4 -0
  342. package/radio-group/lib/brn-radio.component.d.ts +58 -0
  343. package/select/README.md +3 -0
  344. package/select/index.d.ts +28 -0
  345. package/select/lib/brn-select-content.component.d.ts +50 -0
  346. package/select/lib/brn-select-group.directive.d.ts +6 -0
  347. package/select/lib/brn-select-label.directive.d.ts +9 -0
  348. package/select/lib/brn-select-option.directive.d.ts +25 -0
  349. package/select/lib/brn-select-value.component.d.ts +11 -0
  350. package/select/lib/brn-select.component.d.ts +82 -0
  351. package/select/lib/brn-select.service.d.ts +67 -0
  352. package/separator/README.md +3 -0
  353. package/separator/index.d.ts +8 -0
  354. package/separator/lib/brn-separator.component.d.ts +11 -0
  355. package/sheet/README.md +3 -0
  356. package/sheet/index.d.ts +28 -0
  357. package/sheet/lib/brn-sheet-close.directive.d.ts +6 -0
  358. package/sheet/lib/brn-sheet-content.directive.d.ts +8 -0
  359. package/sheet/lib/brn-sheet-description.directive.d.ts +6 -0
  360. package/sheet/lib/brn-sheet-overlay.component.d.ts +6 -0
  361. package/sheet/lib/brn-sheet-title.directive.d.ts +6 -0
  362. package/sheet/lib/brn-sheet-trigger.directive.d.ts +9 -0
  363. package/sheet/lib/brn-sheet.component.d.ts +9 -0
  364. package/slider/README.md +3 -0
  365. package/slider/index.d.ts +7 -0
  366. package/slider/lib/brn-slider-thumb.directive.d.ts +17 -0
  367. package/slider/lib/brn-slider-tick-mark.directive.d.ts +15 -0
  368. package/slider/lib/brn-slider-track-active-fill.directive.d.ts +10 -0
  369. package/slider/lib/brn-slider-track.directive.d.ts +139 -0
  370. package/switch/README.md +3 -0
  371. package/switch/index.d.ts +13 -0
  372. package/switch/lib/brn-switch-thumb.component.d.ts +5 -0
  373. package/switch/lib/brn-switch.component.d.ts +58 -0
  374. package/table/README.md +3 -0
  375. package/table/index.d.ts +26 -0
  376. package/table/lib/brn-cell-def.directive.d.ts +9 -0
  377. package/table/lib/brn-column-def.component.d.ts +18 -0
  378. package/table/lib/brn-column-manager.d.ts +26 -0
  379. package/table/lib/brn-footer-def.directive.d.ts +9 -0
  380. package/table/lib/brn-header-def.directive.d.ts +9 -0
  381. package/table/lib/brn-paginator.directive.d.ts +41 -0
  382. package/table/lib/brn-table.component.d.ts +37 -0
  383. package/tabs/README.md +3 -0
  384. package/tabs/index.d.ts +14 -0
  385. package/tabs/lib/brn-tabs-list.directive.d.ts +17 -0
  386. package/tabs/lib/brn-tabs-paginated-list.directive.d.ts +196 -0
  387. package/tabs/lib/brn-tabs-trigger.directive.d.ts +61 -0
  388. package/toggle/README.md +3 -0
  389. package/toggle/index.d.ts +15 -0
  390. package/toggle/lib/brn-toggle-group.component.d.ts +68 -0
  391. package/toggle/lib/brn-toggle-group.token.d.ts +4 -0
  392. package/toggle/lib/brn-toggle.directive.d.ts +25 -0
  393. package/tooltip/README.md +3 -0
  394. package/tooltip/index.d.ts +19 -0
  395. package/tooltip/lib/brn-tooltip-content.component.d.ts +73 -0
  396. package/tooltip/lib/brn-tooltip-content.directive.d.ts +8 -0
  397. package/tooltip/lib/brn-tooltip-trigger.directive.d.ts +177 -0
  398. package/tooltip/lib/brn-tooltip.directive.d.ts +7 -0
@@ -0,0 +1,358 @@
1
+ import { CdkListbox, CdkListboxModule, CdkOption } from '@angular/cdk/listbox';
2
+ import { CdkConnectedOverlay, OverlayModule, } from '@angular/cdk/overlay';
3
+ import { ChangeDetectionStrategy, Component, computed, contentChild, contentChildren, inject, input, output, signal, viewChild, } from '@angular/core';
4
+ import { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
5
+ import { FormGroupDirective, NgControl, NgForm } from '@angular/forms';
6
+ import { BrnFormFieldControl } from '@spartan-ng/brain/form-field';
7
+ import { ErrorStateMatcher, ErrorStateTracker } from '@spartan-ng/brain/forms';
8
+ import { BrnLabelDirective } from '@spartan-ng/brain/label';
9
+ import { provideExposedSideProviderExisting, provideExposesStateProviderExisting, } from '@spartan-ng/ui-core';
10
+ import { Subject, combineLatest, delay, map, of, switchMap } from 'rxjs';
11
+ import { BrnSelectContentComponent } from './brn-select-content.component';
12
+ import { BrnSelectService } from './brn-select.service';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/cdk/overlay";
15
+ let nextId = 0;
16
+ export class BrnSelectComponent {
17
+ _selectService = inject(BrnSelectService);
18
+ triggerWidth = this._selectService.triggerWidth;
19
+ multiple = input(false);
20
+ placeholder = input('');
21
+ disabled = input(false);
22
+ dir = input('ltr');
23
+ _disabledFromSetDisabledState = signal(false);
24
+ selectLabel = contentChild(BrnLabelDirective, { descendants: false });
25
+ /** Overlay pane containing the options. */
26
+ selectContent = contentChild.required(BrnSelectContentComponent);
27
+ options = contentChildren(CdkOption, { descendants: true });
28
+ options$ = toObservable(this.options);
29
+ optionsAndIndex$ = this.options$.pipe(map((options, index) => [options, index]));
30
+ /** Overlay pane containing the options. */
31
+ _overlayDir = viewChild(CdkConnectedOverlay);
32
+ openedChange = output();
33
+ closeDelay = input(100);
34
+ isExpanded = this._selectService.isExpanded;
35
+ _delayedExpanded = toSignal(toObservable(this.isExpanded).pipe(switchMap((expanded) => (!expanded ? of(expanded).pipe(delay(this.closeDelay())) : of(expanded))), takeUntilDestroyed()), { initialValue: false });
36
+ state = computed(() => (this.isExpanded() ? 'open' : 'closed'));
37
+ _positionChanges$ = new Subject();
38
+ side = toSignal(this._positionChanges$.pipe(map((change) =>
39
+ // todo: better translation or adjusting hlm to take that into account
40
+ change.connectionPair.originY === 'center'
41
+ ? change.connectionPair.originX === 'start'
42
+ ? 'left'
43
+ : 'right'
44
+ : change.connectionPair.originY)), { initialValue: 'bottom' });
45
+ backupLabelId = computed(() => this._selectService.labelId());
46
+ labelProvided = signal(false);
47
+ ngControl = inject(NgControl, { optional: true, self: true });
48
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
49
+ _onChange = () => { };
50
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
51
+ _onTouched = () => { };
52
+ _shouldEmitValueChange = signal(false);
53
+ /*
54
+ * This position config ensures that the top "start" corner of the overlay
55
+ * is aligned with with the top "start" of the origin by default (overlapping
56
+ * the trigger completely). If the panel cannot fit below the trigger, it
57
+ * will fall back to a position above the trigger.
58
+ */
59
+ _positions = [
60
+ {
61
+ originX: 'start',
62
+ originY: 'bottom',
63
+ overlayX: 'start',
64
+ overlayY: 'top',
65
+ },
66
+ {
67
+ originX: 'end',
68
+ originY: 'bottom',
69
+ overlayX: 'end',
70
+ overlayY: 'top',
71
+ },
72
+ {
73
+ originX: 'start',
74
+ originY: 'top',
75
+ overlayX: 'start',
76
+ overlayY: 'bottom',
77
+ },
78
+ {
79
+ originX: 'end',
80
+ originY: 'top',
81
+ overlayX: 'end',
82
+ overlayY: 'bottom',
83
+ },
84
+ ];
85
+ errorStateTracker;
86
+ _defaultErrorStateMatcher = inject(ErrorStateMatcher);
87
+ _parentForm = inject(NgForm, { optional: true });
88
+ _parentFormGroup = inject(FormGroupDirective, { optional: true });
89
+ errorState = computed(() => this.errorStateTracker.errorState());
90
+ writeValue$ = new Subject();
91
+ constructor() {
92
+ this._selectService.state.update((state) => ({
93
+ ...state,
94
+ multiple: this.multiple,
95
+ placeholder: this.placeholder,
96
+ disabled: this.disabled,
97
+ disabledBySetDisabled: this._disabledFromSetDisabledState,
98
+ dir: this.dir,
99
+ }));
100
+ this.handleOptionChanges();
101
+ this.handleInitialOptionSelect();
102
+ this._selectService.state.update((state) => ({
103
+ ...state,
104
+ id: `brn-select-${nextId++}`,
105
+ }));
106
+ if (this.ngControl !== null) {
107
+ this.ngControl.valueAccessor = this;
108
+ }
109
+ // Watch for Listbox Selection Changes to trigger Collapse and Value Change
110
+ this._selectService.listBoxValueChangeEvent$.pipe(takeUntilDestroyed()).subscribe(() => {
111
+ if (!this.multiple()) {
112
+ this.close();
113
+ }
114
+ // we set shouldEmitValueChange to true because we want to propagate the value change
115
+ // as a result of user interaction
116
+ this._shouldEmitValueChange.set(true);
117
+ });
118
+ /**
119
+ * Listening to value changes in order to trigger forms api on change
120
+ * ShouldEmitValueChange simply ensures we only propagate value change when a user makes a selection
121
+ * we don't propagate changes made from outside the component (ex. patch value or initial value from form control)
122
+ */
123
+ toObservable(this._selectService.value).subscribe((value) => {
124
+ if (this._shouldEmitValueChange()) {
125
+ this._onChange((value ?? null));
126
+ }
127
+ this._shouldEmitValueChange.set(true);
128
+ });
129
+ this.errorStateTracker = new ErrorStateTracker(this._defaultErrorStateMatcher, this.ngControl, this._parentFormGroup, this._parentForm);
130
+ }
131
+ ngAfterContentInit() {
132
+ // Check if Label Directive Provided and pass to service
133
+ const label = this.selectLabel();
134
+ if (label) {
135
+ this.labelProvided.set(true);
136
+ this._selectService.state.update((state) => ({
137
+ ...state,
138
+ labelId: label.id(),
139
+ }));
140
+ }
141
+ else if (this.placeholder()) {
142
+ this._selectService.state.update((state) => ({
143
+ ...state,
144
+ labelId: `${state.id}--label`,
145
+ }));
146
+ }
147
+ }
148
+ ngDoCheck() {
149
+ this.errorStateTracker.updateErrorState();
150
+ }
151
+ toggle() {
152
+ if (this.isExpanded()) {
153
+ this.close();
154
+ }
155
+ else {
156
+ this.open();
157
+ }
158
+ }
159
+ open() {
160
+ if (!this._canOpen())
161
+ return;
162
+ this._selectService.state.update((state) => ({
163
+ ...state,
164
+ isExpanded: true,
165
+ }));
166
+ this.openedChange.emit(true);
167
+ this._moveFocusToCDKList();
168
+ }
169
+ close() {
170
+ if (!this.isExpanded())
171
+ return;
172
+ if (this._selectService.selectTrigger) {
173
+ this._selectService.selectTrigger.focus();
174
+ }
175
+ this.openedChange.emit(false);
176
+ this._selectService.state.update((state) => ({
177
+ ...state,
178
+ isExpanded: false,
179
+ }));
180
+ this._onTouched();
181
+ }
182
+ _canOpen() {
183
+ return !this.isExpanded() && !this.disabled() && this.options()?.length > 0;
184
+ }
185
+ _moveFocusToCDKList() {
186
+ setTimeout(() => {
187
+ this.selectContent()?.focusList();
188
+ });
189
+ }
190
+ writeValue(value) {
191
+ this.writeValue$.next(value);
192
+ }
193
+ registerOnChange(fn) {
194
+ this._onChange = fn;
195
+ }
196
+ registerOnTouched(fn) {
197
+ this._onTouched = fn;
198
+ }
199
+ setDisabledState(isDisabled) {
200
+ this._disabledFromSetDisabledState.set(isDisabled);
201
+ }
202
+ /**
203
+ * Once writeValue is called and options are available we can handle setting the initial options
204
+ * @private
205
+ */
206
+ handleInitialOptionSelect() {
207
+ // Write value cannot be handled until options are available, so we wait until both are available with a combineLatest
208
+ combineLatest([this.writeValue$, this.options$])
209
+ .pipe(map((values, index) => [...values, index]), takeUntilDestroyed())
210
+ .subscribe(([value, _, index]) => {
211
+ this._shouldEmitValueChange.set(false);
212
+ this._selectService.setInitialSelectedOptions(value);
213
+ // the first time this observable emits a value we are simply setting the initial state
214
+ // this change should not count as changing the state of the select, so we need to mark as pristine
215
+ if (index === 0) {
216
+ this.ngControl?.control?.markAsPristine();
217
+ }
218
+ });
219
+ }
220
+ /**
221
+ * When options change, our current selected options may become invalid
222
+ * Here we will automatically update our current selected options so that they are always inline with the possibleOptions
223
+ * @private
224
+ */
225
+ handleOptionChanges() {
226
+ this.optionsAndIndex$.pipe(takeUntilDestroyed()).subscribe(([options, index]) => {
227
+ if (index > 0) {
228
+ this.handleInvalidOptions(options);
229
+ }
230
+ this.updatePossibleOptions(options);
231
+ });
232
+ }
233
+ /**
234
+ * Check that our "selectedOptions" are still valid when "possibleOptions" is about to be updated
235
+ */
236
+ handleInvalidOptions(options) {
237
+ const selectedOptions = this._selectService.selectedOptions();
238
+ const availableOptionSet = new Set(options);
239
+ if (this._selectService.multiple()) {
240
+ const filteredOptions = selectedOptions.filter((o) => availableOptionSet.has(o));
241
+ // only update if there was an actual change
242
+ if (selectedOptions.length !== filteredOptions.length) {
243
+ // update should result in a value change since we are deselecting a value
244
+ this._shouldEmitValueChange.set(true);
245
+ const value = filteredOptions.map((o) => o?.value ?? '');
246
+ this._selectService.state.update((state) => ({
247
+ ...state,
248
+ selectedOptions: filteredOptions,
249
+ value: value,
250
+ }));
251
+ this._onChange((value ?? null));
252
+ }
253
+ }
254
+ else {
255
+ const selectedOption = selectedOptions[0] ?? null;
256
+ if (selectedOption !== null && !availableOptionSet.has(selectedOption)) {
257
+ this._shouldEmitValueChange.set(true);
258
+ this._selectService.state.update((state) => ({
259
+ ...state,
260
+ selectedOptions: [],
261
+ value: '',
262
+ }));
263
+ this._onChange('');
264
+ }
265
+ }
266
+ }
267
+ /**
268
+ * Sync the updated options with "possibleOptions" in the select service
269
+ */
270
+ updatePossibleOptions(options) {
271
+ this._selectService.state.update((state) => ({
272
+ ...state,
273
+ possibleOptions: options,
274
+ }));
275
+ }
276
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: BrnSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
277
+ /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.5", type: BrnSelectComponent, isStandalone: true, selector: "brn-select, hlm-select", inputs: { multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, dir: { classPropertyName: "dir", publicName: "dir", isSignal: true, isRequired: false, transformFunction: null }, closeDelay: { classPropertyName: "closeDelay", publicName: "closeDelay", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openedChange: "openedChange" }, providers: [
278
+ BrnSelectService,
279
+ CdkListbox,
280
+ provideExposedSideProviderExisting((() => BrnSelectComponent)),
281
+ provideExposesStateProviderExisting((() => BrnSelectComponent)),
282
+ {
283
+ provide: BrnFormFieldControl,
284
+ useExisting: BrnSelectComponent,
285
+ },
286
+ ], queries: [{ propertyName: "selectLabel", first: true, predicate: BrnLabelDirective, isSignal: true }, { propertyName: "selectContent", first: true, predicate: BrnSelectContentComponent, descendants: true, isSignal: true }, { propertyName: "options", predicate: CdkOption, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_overlayDir", first: true, predicate: CdkConnectedOverlay, descendants: true, isSignal: true }], ngImport: i0, template: `
287
+ @if (!labelProvided() && placeholder()) {
288
+ <label class="hidden" [attr.id]="backupLabelId()">{{ placeholder() }}</label>
289
+ } @else {
290
+ <ng-content select="label[hlmLabel],label[brnLabel]" />
291
+ }
292
+
293
+ <div cdk-overlay-origin (click)="toggle()" #trigger="cdkOverlayOrigin">
294
+ <ng-content select="hlm-select-trigger,[brnSelectTrigger]" />
295
+ </div>
296
+ <ng-template
297
+ cdk-connected-overlay
298
+ cdkConnectedOverlayLockPosition
299
+ cdkConnectedOverlayHasBackdrop
300
+ cdkConnectedOverlayBackdropClass="cdk-overlay-transparent-backdrop"
301
+ [cdkConnectedOverlayOrigin]="trigger"
302
+ [cdkConnectedOverlayOpen]="_delayedExpanded()"
303
+ [cdkConnectedOverlayPositions]="_positions"
304
+ [cdkConnectedOverlayWidth]="triggerWidth() > 0 ? triggerWidth() : 'auto'"
305
+ (backdropClick)="close()"
306
+ (detach)="close()"
307
+ (positionChange)="_positionChanges$.next($event)"
308
+ >
309
+ <ng-content />
310
+ </ng-template>
311
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "ngmodule", type: CdkListboxModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
312
+ }
313
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: BrnSelectComponent, decorators: [{
314
+ type: Component,
315
+ args: [{
316
+ selector: 'brn-select, hlm-select',
317
+ standalone: true,
318
+ imports: [OverlayModule, CdkListboxModule],
319
+ changeDetection: ChangeDetectionStrategy.OnPush,
320
+ providers: [
321
+ BrnSelectService,
322
+ CdkListbox,
323
+ provideExposedSideProviderExisting((() => BrnSelectComponent)),
324
+ provideExposesStateProviderExisting((() => BrnSelectComponent)),
325
+ {
326
+ provide: BrnFormFieldControl,
327
+ useExisting: BrnSelectComponent,
328
+ },
329
+ ],
330
+ template: `
331
+ @if (!labelProvided() && placeholder()) {
332
+ <label class="hidden" [attr.id]="backupLabelId()">{{ placeholder() }}</label>
333
+ } @else {
334
+ <ng-content select="label[hlmLabel],label[brnLabel]" />
335
+ }
336
+
337
+ <div cdk-overlay-origin (click)="toggle()" #trigger="cdkOverlayOrigin">
338
+ <ng-content select="hlm-select-trigger,[brnSelectTrigger]" />
339
+ </div>
340
+ <ng-template
341
+ cdk-connected-overlay
342
+ cdkConnectedOverlayLockPosition
343
+ cdkConnectedOverlayHasBackdrop
344
+ cdkConnectedOverlayBackdropClass="cdk-overlay-transparent-backdrop"
345
+ [cdkConnectedOverlayOrigin]="trigger"
346
+ [cdkConnectedOverlayOpen]="_delayedExpanded()"
347
+ [cdkConnectedOverlayPositions]="_positions"
348
+ [cdkConnectedOverlayWidth]="triggerWidth() > 0 ? triggerWidth() : 'auto'"
349
+ (backdropClick)="close()"
350
+ (detach)="close()"
351
+ (positionChange)="_positionChanges$.next($event)"
352
+ >
353
+ <ng-content />
354
+ </ng-template>
355
+ `,
356
+ }]
357
+ }], ctorParameters: () => [] });
358
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3NlbGVjdC9zcmMvbGliL2Jybi1zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0UsT0FBTyxFQUNOLG1CQUFtQixFQUduQixhQUFhLEdBQ2IsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBRU4sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFHVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGVBQWUsRUFDZixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEYsT0FBTyxFQUE2QixrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFZLGlCQUFpQixFQUFFLGlCQUFpQixFQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUdOLGtDQUFrQyxFQUNsQyxtQ0FBbUMsR0FDbkMsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0Us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OzRCQUNDLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcsb0JBQW9CO3lCQUMvQjtxQkFDRDtvQkFDRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5QlQ7aUJBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtMaXN0Ym94LCBDZGtMaXN0Ym94TW9kdWxlLCBDZGtPcHRpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvbGlzdGJveCc7XG5pbXBvcnQge1xuXHRDZGtDb25uZWN0ZWRPdmVybGF5LFxuXHR0eXBlIENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZSxcblx0dHlwZSBDb25uZWN0ZWRQb3NpdGlvbixcblx0T3ZlcmxheU1vZHVsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcblx0QWZ0ZXJDb250ZW50SW5pdCxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0dHlwZSBEb0NoZWNrLFxuXHR0eXBlIFNpZ25hbCxcblx0Y29tcHV0ZWQsXG5cdGNvbnRlbnRDaGlsZCxcblx0Y29udGVudENoaWxkcmVuLFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHRvdXRwdXQsXG5cdHNpZ25hbCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IHR5cGUgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTmdDb250cm9sLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCcm5Gb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQHNwYXJ0YW4tbmcvYnJhaW4vZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBDaGFuZ2VGbiwgRXJyb3JTdGF0ZU1hdGNoZXIsIEVycm9yU3RhdGVUcmFja2VyLCBUb3VjaEZuIH0gZnJvbSAnQHNwYXJ0YW4tbmcvYnJhaW4vZm9ybXMnO1xuaW1wb3J0IHsgQnJuTGFiZWxEaXJlY3RpdmUgfSBmcm9tICdAc3BhcnRhbi1uZy9icmFpbi9sYWJlbCc7XG5pbXBvcnQge1xuXHR0eXBlIEV4cG9zZXNTaWRlLFxuXHR0eXBlIEV4cG9zZXNTdGF0ZSxcblx0cHJvdmlkZUV4cG9zZWRTaWRlUHJvdmlkZXJFeGlzdGluZyxcblx0cHJvdmlkZUV4cG9zZXNTdGF0ZVByb3ZpZGVyRXhpc3RpbmcsXG59IGZyb20gJ0BzcGFydGFuLW5nL3VpLWNvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZGVsYXksIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQnJuU2VsZWN0Q29udGVudENvbXBvbmVudCB9IGZyb20gJy4vYnJuLXNlbGVjdC1jb250ZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCcm5TZWxlY3RTZXJ2aWNlIH0gZnJvbSAnLi9icm4tc2VsZWN0LnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBCcm5SZWFkRGlyZWN0aW9uID0gJ2x0cicgfCAncnRsJztcblxubGV0IG5leHRJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2Jybi1zZWxlY3QsIGhsbS1zZWxlY3QnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbT3ZlcmxheU1vZHVsZSwgQ2RrTGlzdGJveE1vZHVsZV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRwcm92aWRlcnM6IFtcblx0XHRCcm5TZWxlY3RTZXJ2aWNlLFxuXHRcdENka0xpc3Rib3gsXG5cdFx0cHJvdmlkZUV4cG9zZWRTaWRlUHJvdmlkZXJFeGlzdGluZygoKSA9PiBCcm5TZWxlY3RDb21wb25lbnQpLFxuXHRcdHByb3ZpZGVFeHBvc2VzU3RhdGVQcm92aWRlckV4aXN0aW5nKCgpID0+IEJyblNlbGVjdENvbXBvbmVudCksXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogQnJuRm9ybUZpZWxkQ29udHJvbCxcblx0XHRcdHVzZUV4aXN0aW5nOiBCcm5TZWxlY3RDb21wb25lbnQsXG5cdFx0fSxcblx0XSxcblx0dGVtcGxhdGU6IGBcblx0XHRAaWYgKCFsYWJlbFByb3ZpZGVkKCkgJiYgcGxhY2Vob2xkZXIoKSkge1xuXHRcdFx0PGxhYmVsIGNsYXNzPVwiaGlkZGVuXCIgW2F0dHIuaWRdPVwiYmFja3VwTGFiZWxJZCgpXCI+e3sgcGxhY2Vob2xkZXIoKSB9fTwvbGFiZWw+XG5cdFx0fSBAZWxzZSB7XG5cdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJsYWJlbFtobG1MYWJlbF0sbGFiZWxbYnJuTGFiZWxdXCIgLz5cblx0XHR9XG5cblx0XHQ8ZGl2IGNkay1vdmVybGF5LW9yaWdpbiAoY2xpY2spPVwidG9nZ2xlKClcIiAjdHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIj5cblx0XHRcdDxuZy1jb250ZW50IHNlbGVjdD1cImhsbS1zZWxlY3QtdHJpZ2dlcixbYnJuU2VsZWN0VHJpZ2dlcl1cIiAvPlxuXHRcdDwvZGl2PlxuXHRcdDxuZy10ZW1wbGF0ZVxuXHRcdFx0Y2RrLWNvbm5lY3RlZC1vdmVybGF5XG5cdFx0XHRjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uXG5cdFx0XHRjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3Bcblx0XHRcdGNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzPVwiY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BcIlxuXHRcdFx0W2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwidHJpZ2dlclwiXG5cdFx0XHRbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwiX2RlbGF5ZWRFeHBhbmRlZCgpXCJcblx0XHRcdFtjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zXT1cIl9wb3NpdGlvbnNcIlxuXHRcdFx0W2Nka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aF09XCJ0cmlnZ2VyV2lkdGgoKSA+IDAgPyB0cmlnZ2VyV2lkdGgoKSA6ICdhdXRvJ1wiXG5cdFx0XHQoYmFja2Ryb3BDbGljayk9XCJjbG9zZSgpXCJcblx0XHRcdChkZXRhY2gpPVwiY2xvc2UoKVwiXG5cdFx0XHQocG9zaXRpb25DaGFuZ2UpPVwiX3Bvc2l0aW9uQ2hhbmdlcyQubmV4dCgkZXZlbnQpXCJcblx0XHQ+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmctdGVtcGxhdGU+XG5cdGAsXG59KVxuZXhwb3J0IGNsYXNzIEJyblNlbGVjdENvbXBvbmVudDxUID0gdW5rbm93bj5cblx0aW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJDb250ZW50SW5pdCwgRG9DaGVjaywgRXhwb3Nlc1NpZGUsIEV4cG9zZXNTdGF0ZSwgQnJuRm9ybUZpZWxkQ29udHJvbFxue1xuXHRwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3RTZXJ2aWNlID0gaW5qZWN0KEJyblNlbGVjdFNlcnZpY2UpO1xuXG5cdHB1YmxpYyByZWFkb25seSB0cmlnZ2VyV2lkdGggPSB0aGlzLl9zZWxlY3RTZXJ2aWNlLnRyaWdnZXJXaWR0aDtcblxuXHRwdWJsaWMgcmVhZG9ubHkgbXVsdGlwbGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cdHB1YmxpYyByZWFkb25seSBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZz4oJycpO1xuXHRwdWJsaWMgcmVhZG9ubHkgZGlzYWJsZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cdHB1YmxpYyByZWFkb25seSBkaXIgPSBpbnB1dDxCcm5SZWFkRGlyZWN0aW9uPignbHRyJyk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2Rpc2FibGVkRnJvbVNldERpc2FibGVkU3RhdGUgPSBzaWduYWwoZmFsc2UpO1xuXG5cdHByb3RlY3RlZCBzZWxlY3RMYWJlbCA9IGNvbnRlbnRDaGlsZChCcm5MYWJlbERpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogZmFsc2UgfSk7XG5cdC8qKiBPdmVybGF5IHBhbmUgY29udGFpbmluZyB0aGUgb3B0aW9ucy4gKi9cblx0cHJvdGVjdGVkIHNlbGVjdENvbnRlbnQgPSBjb250ZW50Q2hpbGQucmVxdWlyZWQoQnJuU2VsZWN0Q29udGVudENvbXBvbmVudCk7XG5cblx0cHJvdGVjdGVkIG9wdGlvbnMgPSBjb250ZW50Q2hpbGRyZW4oQ2RrT3B0aW9uLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pO1xuXHRwcm90ZWN0ZWQgb3B0aW9ucyQgPSB0b09ic2VydmFibGUodGhpcy5vcHRpb25zKTtcblx0cHJvdGVjdGVkIG9wdGlvbnNBbmRJbmRleCQgPSB0aGlzLm9wdGlvbnMkLnBpcGUobWFwKChvcHRpb25zLCBpbmRleCkgPT4gW29wdGlvbnMsIGluZGV4XSBhcyBjb25zdCkpO1xuXG5cdC8qKiBPdmVybGF5IHBhbmUgY29udGFpbmluZyB0aGUgb3B0aW9ucy4gKi9cblx0cHJvdGVjdGVkIF9vdmVybGF5RGlyID0gdmlld0NoaWxkKENka0Nvbm5lY3RlZE92ZXJsYXkpO1xuXG5cdHB1YmxpYyByZWFkb25seSBvcGVuZWRDaGFuZ2UgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgY2xvc2VEZWxheSA9IGlucHV0PG51bWJlcj4oMTAwKTtcblx0cHVibGljIHJlYWRvbmx5IGlzRXhwYW5kZWQgPSB0aGlzLl9zZWxlY3RTZXJ2aWNlLmlzRXhwYW5kZWQ7XG5cdHByb3RlY3RlZCByZWFkb25seSBfZGVsYXllZEV4cGFuZGVkID0gdG9TaWduYWwoXG5cdFx0dG9PYnNlcnZhYmxlKHRoaXMuaXNFeHBhbmRlZCkucGlwZShcblx0XHRcdHN3aXRjaE1hcCgoZXhwYW5kZWQpID0+ICghZXhwYW5kZWQgPyBvZihleHBhbmRlZCkucGlwZShkZWxheSh0aGlzLmNsb3NlRGVsYXkoKSkpIDogb2YoZXhwYW5kZWQpKSksXG5cdFx0XHR0YWtlVW50aWxEZXN0cm95ZWQoKSxcblx0XHQpLFxuXHRcdHsgaW5pdGlhbFZhbHVlOiBmYWxzZSB9LFxuXHQpO1xuXHRwdWJsaWMgcmVhZG9ubHkgc3RhdGUgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5pc0V4cGFuZGVkKCkgPyAnb3BlbicgOiAnY2xvc2VkJykpO1xuXG5cdHByb3RlY3RlZCByZWFkb25seSBfcG9zaXRpb25DaGFuZ2VzJCA9IG5ldyBTdWJqZWN0PENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZT4oKTtcblx0cHVibGljIHJlYWRvbmx5IHNpZGU6IFNpZ25hbDwndG9wJyB8ICdib3R0b20nIHwgJ2xlZnQnIHwgJ3JpZ2h0Jz4gPSB0b1NpZ25hbChcblx0XHR0aGlzLl9wb3NpdGlvbkNoYW5nZXMkLnBpcGUoXG5cdFx0XHRtYXA8Q29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlLCAndG9wJyB8ICdib3R0b20nIHwgJ2xlZnQnIHwgJ3JpZ2h0Jz4oKGNoYW5nZSkgPT5cblx0XHRcdFx0Ly8gdG9kbzogYmV0dGVyIHRyYW5zbGF0aW9uIG9yIGFkanVzdGluZyBobG0gdG8gdGFrZSB0aGF0IGludG8gYWNjb3VudFxuXHRcdFx0XHRjaGFuZ2UuY29ubmVjdGlvblBhaXIub3JpZ2luWSA9PT0gJ2NlbnRlcidcblx0XHRcdFx0XHQ/IGNoYW5nZS5jb25uZWN0aW9uUGFpci5vcmlnaW5YID09PSAnc3RhcnQnXG5cdFx0XHRcdFx0XHQ/ICdsZWZ0J1xuXHRcdFx0XHRcdFx0OiAncmlnaHQnXG5cdFx0XHRcdFx0OiBjaGFuZ2UuY29ubmVjdGlvblBhaXIub3JpZ2luWSxcblx0XHRcdCksXG5cdFx0KSxcblx0XHR7IGluaXRpYWxWYWx1ZTogJ2JvdHRvbScgfSxcblx0KTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgYmFja3VwTGFiZWxJZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX3NlbGVjdFNlcnZpY2UubGFiZWxJZCgpKTtcblx0cHVibGljIHJlYWRvbmx5IGxhYmVsUHJvdmlkZWQgPSBzaWduYWwoZmFsc2UpO1xuXG5cdHB1YmxpYyByZWFkb25seSBuZ0NvbnRyb2wgPSBpbmplY3QoTmdDb250cm9sLCB7IG9wdGlvbmFsOiB0cnVlLCBzZWxmOiB0cnVlIH0pO1xuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cblx0cHJpdmF0ZSBfb25DaGFuZ2U6IENoYW5nZUZuPFQ+ID0gKCkgPT4ge307XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cblx0cHJpdmF0ZSBfb25Ub3VjaGVkOiBUb3VjaEZuID0gKCkgPT4ge307XG5cblx0cHJpdmF0ZSByZWFkb25seSBfc2hvdWxkRW1pdFZhbHVlQ2hhbmdlID0gc2lnbmFsKGZhbHNlKTtcblxuXHQvKlxuXHQgKiBUaGlzIHBvc2l0aW9uIGNvbmZpZyBlbnN1cmVzIHRoYXQgdGhlIHRvcCBcInN0YXJ0XCIgY29ybmVyIG9mIHRoZSBvdmVybGF5XG5cdCAqIGlzIGFsaWduZWQgd2l0aCB3aXRoIHRoZSB0b3AgXCJzdGFydFwiIG9mIHRoZSBvcmlnaW4gYnkgZGVmYXVsdCAob3ZlcmxhcHBpbmdcblx0ICogdGhlIHRyaWdnZXIgY29tcGxldGVseSkuIElmIHRoZSBwYW5lbCBjYW5ub3QgZml0IGJlbG93IHRoZSB0cmlnZ2VyLCBpdFxuXHQgKiB3aWxsIGZhbGwgYmFjayB0byBhIHBvc2l0aW9uIGFib3ZlIHRoZSB0cmlnZ2VyLlxuXHQgKi9cblx0cHJvdGVjdGVkIF9wb3NpdGlvbnM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSBbXG5cdFx0e1xuXHRcdFx0b3JpZ2luWDogJ3N0YXJ0Jyxcblx0XHRcdG9yaWdpblk6ICdib3R0b20nLFxuXHRcdFx0b3ZlcmxheVg6ICdzdGFydCcsXG5cdFx0XHRvdmVybGF5WTogJ3RvcCcsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRvcmlnaW5YOiAnZW5kJyxcblx0XHRcdG9yaWdpblk6ICdib3R0b20nLFxuXHRcdFx0b3ZlcmxheVg6ICdlbmQnLFxuXHRcdFx0b3ZlcmxheVk6ICd0b3AnLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0b3JpZ2luWDogJ3N0YXJ0Jyxcblx0XHRcdG9yaWdpblk6ICd0b3AnLFxuXHRcdFx0b3ZlcmxheVg6ICdzdGFydCcsXG5cdFx0XHRvdmVybGF5WTogJ2JvdHRvbScsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRvcmlnaW5YOiAnZW5kJyxcblx0XHRcdG9yaWdpblk6ICd0b3AnLFxuXHRcdFx0b3ZlcmxheVg6ICdlbmQnLFxuXHRcdFx0b3ZlcmxheVk6ICdib3R0b20nLFxuXHRcdH0sXG5cdF07XG5cblx0cHVibGljIGVycm9yU3RhdGVUcmFja2VyOiBFcnJvclN0YXRlVHJhY2tlcjtcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIgPSBpbmplY3QoRXJyb3JTdGF0ZU1hdGNoZXIpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9wYXJlbnRGb3JtID0gaW5qZWN0KE5nRm9ybSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblx0cHJpdmF0ZSByZWFkb25seSBfcGFyZW50Rm9ybUdyb3VwID0gaW5qZWN0KEZvcm1Hcm91cERpcmVjdGl2ZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuXHRwdWJsaWMgZXJyb3JTdGF0ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZXJyb3JTdGF0ZVRyYWNrZXIuZXJyb3JTdGF0ZSgpKTtcblxuXHRwdWJsaWMgd3JpdGVWYWx1ZSQgPSBuZXcgU3ViamVjdDxUPigpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuX3NlbGVjdFNlcnZpY2Uuc3RhdGUudXBkYXRlKChzdGF0ZSkgPT4gKHtcblx0XHRcdC4uLnN0YXRlLFxuXHRcdFx0bXVsdGlwbGU6IHRoaXMubXVsdGlwbGUsXG5cdFx0XHRwbGFjZWhvbGRlcjogdGhpcy5wbGFjZWhvbGRlcixcblx0XHRcdGRpc2FibGVkOiB0aGlzLmRpc2FibGVkLFxuXHRcdFx0ZGlzYWJsZWRCeVNldERpc2FibGVkOiB0aGlzLl9kaXNhYmxlZEZyb21TZXREaXNhYmxlZFN0YXRlLFxuXHRcdFx0ZGlyOiB0aGlzLmRpcixcblx0XHR9KSk7XG5cdFx0dGhpcy5oYW5kbGVPcHRpb25DaGFuZ2VzKCk7XG5cdFx0dGhpcy5oYW5kbGVJbml0aWFsT3B0aW9uU2VsZWN0KCk7XG5cblx0XHR0aGlzLl9zZWxlY3RTZXJ2aWNlLnN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG5cdFx0XHQuLi5zdGF0ZSxcblx0XHRcdGlkOiBgYnJuLXNlbGVjdC0ke25leHRJZCsrfWAsXG5cdFx0fSkpO1xuXHRcdGlmICh0aGlzLm5nQ29udHJvbCAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gV2F0Y2ggZm9yIExpc3Rib3ggU2VsZWN0aW9uIENoYW5nZXMgdG8gdHJpZ2dlciBDb2xsYXBzZSBhbmQgVmFsdWUgQ2hhbmdlXG5cdFx0dGhpcy5fc2VsZWN0U2VydmljZS5saXN0Qm94VmFsdWVDaGFuZ2VFdmVudCQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdGlmICghdGhpcy5tdWx0aXBsZSgpKSB7XG5cdFx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gd2Ugc2V0IHNob3VsZEVtaXRWYWx1ZUNoYW5nZSB0byB0cnVlIGJlY2F1c2Ugd2Ugd2FudCB0byBwcm9wYWdhdGUgdGhlIHZhbHVlIGNoYW5nZVxuXHRcdFx0Ly8gYXMgYSByZXN1bHQgb2YgdXNlciBpbnRlcmFjdGlvblxuXHRcdFx0dGhpcy5fc2hvdWxkRW1pdFZhbHVlQ2hhbmdlLnNldCh0cnVlKTtcblx0XHR9KTtcblxuXHRcdC8qKlxuXHRcdCAqIExpc3RlbmluZyB0byB2YWx1ZSBjaGFuZ2VzIGluIG9yZGVyIHRvIHRyaWdnZXIgZm9ybXMgYXBpIG9uIGNoYW5nZVxuXHRcdCAqIFNob3VsZEVtaXRWYWx1ZUNoYW5nZSBzaW1wbHkgZW5zdXJlcyB3ZSBvbmx5IHByb3BhZ2F0ZSB2YWx1ZSBjaGFuZ2Ugd2hlbiBhIHVzZXIgbWFrZXMgYSBzZWxlY3Rpb25cblx0XHQgKiB3ZSBkb24ndCBwcm9wYWdhdGUgY2hhbmdlcyBtYWRlIGZyb20gb3V0c2lkZSB0aGUgY29tcG9uZW50IChleC4gcGF0Y2ggdmFsdWUgb3IgaW5pdGlhbCB2YWx1ZSBmcm9tIGZvcm0gY29udHJvbClcblx0XHQgKi9cblx0XHR0b09ic2VydmFibGUodGhpcy5fc2VsZWN0U2VydmljZS52YWx1ZSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuX3Nob3VsZEVtaXRWYWx1ZUNoYW5nZSgpKSB7XG5cdFx0XHRcdHRoaXMuX29uQ2hhbmdlKCh2YWx1ZSA/PyBudWxsKSBhcyBUKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3Nob3VsZEVtaXRWYWx1ZUNoYW5nZS5zZXQodHJ1ZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmVycm9yU3RhdGVUcmFja2VyID0gbmV3IEVycm9yU3RhdGVUcmFja2VyKFxuXHRcdFx0dGhpcy5fZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyLFxuXHRcdFx0dGhpcy5uZ0NvbnRyb2wsXG5cdFx0XHR0aGlzLl9wYXJlbnRGb3JtR3JvdXAsXG5cdFx0XHR0aGlzLl9wYXJlbnRGb3JtLFxuXHRcdCk7XG5cdH1cblxuXHRwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuXHRcdC8vIENoZWNrIGlmIExhYmVsIERpcmVjdGl2ZSBQcm92aWRlZCBhbmQgcGFzcyB0byBzZXJ2aWNlXG5cdFx0Y29uc3QgbGFiZWwgPSB0aGlzLnNlbGVjdExhYmVsKCk7XG5cdFx0aWYgKGxhYmVsKSB7XG5cdFx0XHR0aGlzLmxhYmVsUHJvdmlkZWQuc2V0KHRydWUpO1xuXHRcdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0XHQuLi5zdGF0ZSxcblx0XHRcdFx0bGFiZWxJZDogbGFiZWwuaWQoKSxcblx0XHRcdH0pKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMucGxhY2Vob2xkZXIoKSkge1xuXHRcdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0XHQuLi5zdGF0ZSxcblx0XHRcdFx0bGFiZWxJZDogYCR7c3RhdGUuaWR9LS1sYWJlbGAsXG5cdFx0XHR9KSk7XG5cdFx0fVxuXHR9XG5cblx0bmdEb0NoZWNrKCkge1xuXHRcdHRoaXMuZXJyb3JTdGF0ZVRyYWNrZXIudXBkYXRlRXJyb3JTdGF0ZSgpO1xuXHR9XG5cblx0cHVibGljIHRvZ2dsZSgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5pc0V4cGFuZGVkKCkpIHtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5vcGVuKCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIG9wZW4oKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLl9jYW5PcGVuKCkpIHJldHVybjtcblx0XHR0aGlzLl9zZWxlY3RTZXJ2aWNlLnN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG5cdFx0XHQuLi5zdGF0ZSxcblx0XHRcdGlzRXhwYW5kZWQ6IHRydWUsXG5cdFx0fSkpO1xuXHRcdHRoaXMub3BlbmVkQ2hhbmdlLmVtaXQodHJ1ZSk7XG5cdFx0dGhpcy5fbW92ZUZvY3VzVG9DREtMaXN0KCk7XG5cdH1cblxuXHRwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmlzRXhwYW5kZWQoKSkgcmV0dXJuO1xuXG5cdFx0aWYgKHRoaXMuX3NlbGVjdFNlcnZpY2Uuc2VsZWN0VHJpZ2dlcikge1xuXHRcdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zZWxlY3RUcmlnZ2VyLmZvY3VzKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5vcGVuZWRDaGFuZ2UuZW1pdChmYWxzZSk7XG5cdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0Li4uc3RhdGUsXG5cdFx0XHRpc0V4cGFuZGVkOiBmYWxzZSxcblx0XHR9KSk7XG5cdFx0dGhpcy5fb25Ub3VjaGVkKCk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgX2Nhbk9wZW4oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICF0aGlzLmlzRXhwYW5kZWQoKSAmJiAhdGhpcy5kaXNhYmxlZCgpICYmIHRoaXMub3B0aW9ucygpPy5sZW5ndGggPiAwO1xuXHR9XG5cblx0cHJpdmF0ZSBfbW92ZUZvY3VzVG9DREtMaXN0KCk6IHZvaWQge1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5zZWxlY3RDb250ZW50KCk/LmZvY3VzTGlzdCgpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIHdyaXRlVmFsdWUodmFsdWU6IFQpOiB2b2lkIHtcblx0XHR0aGlzLndyaXRlVmFsdWUkLm5leHQodmFsdWUpO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IENoYW5nZUZuPFQ+KTogdm9pZCB7XG5cdFx0dGhpcy5fb25DaGFuZ2UgPSBmbjtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogVG91Y2hGbik6IHZvaWQge1xuXHRcdHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuXHR9XG5cblx0cHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuXHRcdHRoaXMuX2Rpc2FibGVkRnJvbVNldERpc2FibGVkU3RhdGUuc2V0KGlzRGlzYWJsZWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE9uY2Ugd3JpdGVWYWx1ZSBpcyBjYWxsZWQgYW5kIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3ZSBjYW4gaGFuZGxlIHNldHRpbmcgdGhlIGluaXRpYWwgb3B0aW9uc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBoYW5kbGVJbml0aWFsT3B0aW9uU2VsZWN0KCkge1xuXHRcdC8vIFdyaXRlIHZhbHVlIGNhbm5vdCBiZSBoYW5kbGVkIHVudGlsIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgc28gd2Ugd2FpdCB1bnRpbCBib3RoIGFyZSBhdmFpbGFibGUgd2l0aCBhIGNvbWJpbmVMYXRlc3Rcblx0XHRjb21iaW5lTGF0ZXN0KFt0aGlzLndyaXRlVmFsdWUkLCB0aGlzLm9wdGlvbnMkXSlcblx0XHRcdC5waXBlKFxuXHRcdFx0XHRtYXAoKHZhbHVlcywgaW5kZXgpID0+IFsuLi52YWx1ZXMsIGluZGV4XSksXG5cdFx0XHRcdHRha2VVbnRpbERlc3Ryb3llZCgpLFxuXHRcdFx0KVxuXHRcdFx0LnN1YnNjcmliZSgoW3ZhbHVlLCBfLCBpbmRleF0pID0+IHtcblx0XHRcdFx0dGhpcy5fc2hvdWxkRW1pdFZhbHVlQ2hhbmdlLnNldChmYWxzZSk7XG5cdFx0XHRcdHRoaXMuX3NlbGVjdFNlcnZpY2Uuc2V0SW5pdGlhbFNlbGVjdGVkT3B0aW9ucyh2YWx1ZSk7XG5cdFx0XHRcdC8vIHRoZSBmaXJzdCB0aW1lIHRoaXMgb2JzZXJ2YWJsZSBlbWl0cyBhIHZhbHVlIHdlIGFyZSBzaW1wbHkgc2V0dGluZyB0aGUgaW5pdGlhbCBzdGF0ZVxuXHRcdFx0XHQvLyB0aGlzIGNoYW5nZSBzaG91bGQgbm90IGNvdW50IGFzIGNoYW5naW5nIHRoZSBzdGF0ZSBvZiB0aGUgc2VsZWN0LCBzbyB3ZSBuZWVkIHRvIG1hcmsgYXMgcHJpc3RpbmVcblx0XHRcdFx0aWYgKGluZGV4ID09PSAwKSB7XG5cdFx0XHRcdFx0dGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2w/Lm1hcmtBc1ByaXN0aW5lKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZW4gb3B0aW9ucyBjaGFuZ2UsIG91ciBjdXJyZW50IHNlbGVjdGVkIG9wdGlvbnMgbWF5IGJlY29tZSBpbnZhbGlkXG5cdCAqIEhlcmUgd2Ugd2lsbCBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBvdXIgY3VycmVudCBzZWxlY3RlZCBvcHRpb25zIHNvIHRoYXQgdGhleSBhcmUgYWx3YXlzIGlubGluZSB3aXRoIHRoZSBwb3NzaWJsZU9wdGlvbnNcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByaXZhdGUgaGFuZGxlT3B0aW9uQ2hhbmdlcygpIHtcblx0XHR0aGlzLm9wdGlvbnNBbmRJbmRleCQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKChbb3B0aW9ucywgaW5kZXhdKSA9PiB7XG5cdFx0XHRpZiAoaW5kZXggPiAwKSB7XG5cdFx0XHRcdHRoaXMuaGFuZGxlSW52YWxpZE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnVwZGF0ZVBvc3NpYmxlT3B0aW9ucyhvcHRpb25zKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayB0aGF0IG91ciBcInNlbGVjdGVkT3B0aW9uc1wiIGFyZSBzdGlsbCB2YWxpZCB3aGVuIFwicG9zc2libGVPcHRpb25zXCIgaXMgYWJvdXQgdG8gYmUgdXBkYXRlZFxuXHQgKi9cblx0cHJpdmF0ZSBoYW5kbGVJbnZhbGlkT3B0aW9ucyhvcHRpb25zOiByZWFkb25seSBDZGtPcHRpb25bXSkge1xuXHRcdGNvbnN0IHNlbGVjdGVkT3B0aW9ucyA9IHRoaXMuX3NlbGVjdFNlcnZpY2Uuc2VsZWN0ZWRPcHRpb25zKCk7XG5cdFx0Y29uc3QgYXZhaWxhYmxlT3B0aW9uU2V0ID0gbmV3IFNldDxDZGtPcHRpb24gfCBudWxsPihvcHRpb25zKTtcblx0XHRpZiAodGhpcy5fc2VsZWN0U2VydmljZS5tdWx0aXBsZSgpKSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSBzZWxlY3RlZE9wdGlvbnMuZmlsdGVyKChvKSA9PiBhdmFpbGFibGVPcHRpb25TZXQuaGFzKG8pKTtcblx0XHRcdC8vIG9ubHkgdXBkYXRlIGlmIHRoZXJlIHdhcyBhbiBhY3R1YWwgY2hhbmdlXG5cdFx0XHRpZiAoc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCAhPT0gZmlsdGVyZWRPcHRpb25zLmxlbmd0aCkge1xuXHRcdFx0XHQvLyB1cGRhdGUgc2hvdWxkIHJlc3VsdCBpbiBhIHZhbHVlIGNoYW5nZSBzaW5jZSB3ZSBhcmUgZGVzZWxlY3RpbmcgYSB2YWx1ZVxuXHRcdFx0XHR0aGlzLl9zaG91bGRFbWl0VmFsdWVDaGFuZ2Uuc2V0KHRydWUpO1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGZpbHRlcmVkT3B0aW9ucy5tYXAoKG8pID0+IChvPy52YWx1ZSBhcyBzdHJpbmcpID8/ICcnKTtcblx0XHRcdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0XHRcdC4uLnN0YXRlLFxuXHRcdFx0XHRcdHNlbGVjdGVkT3B0aW9uczogZmlsdGVyZWRPcHRpb25zLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdFx0fSkpO1xuXHRcdFx0XHR0aGlzLl9vbkNoYW5nZSgodmFsdWUgPz8gbnVsbCkgYXMgVCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gc2VsZWN0ZWRPcHRpb25zWzBdID8/IG51bGw7XG5cdFx0XHRpZiAoc2VsZWN0ZWRPcHRpb24gIT09IG51bGwgJiYgIWF2YWlsYWJsZU9wdGlvblNldC5oYXMoc2VsZWN0ZWRPcHRpb24pKSB7XG5cdFx0XHRcdHRoaXMuX3Nob3VsZEVtaXRWYWx1ZUNoYW5nZS5zZXQodHJ1ZSk7XG5cdFx0XHRcdHRoaXMuX3NlbGVjdFNlcnZpY2Uuc3RhdGUudXBkYXRlKChzdGF0ZSkgPT4gKHtcblx0XHRcdFx0XHQuLi5zdGF0ZSxcblx0XHRcdFx0XHRzZWxlY3RlZE9wdGlvbnM6IFtdLFxuXHRcdFx0XHRcdHZhbHVlOiAnJyxcblx0XHRcdFx0fSkpO1xuXHRcdFx0XHR0aGlzLl9vbkNoYW5nZSgnJyBhcyBUKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU3luYyB0aGUgdXBkYXRlZCBvcHRpb25zIHdpdGggXCJwb3NzaWJsZU9wdGlvbnNcIiBpbiB0aGUgc2VsZWN0IHNlcnZpY2Vcblx0ICovXG5cdHByaXZhdGUgdXBkYXRlUG9zc2libGVPcHRpb25zKG9wdGlvbnM6IHJlYWRvbmx5IENka09wdGlvbltdKSB7XG5cdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0Li4uc3RhdGUsXG5cdFx0XHRwb3NzaWJsZU9wdGlvbnM6IG9wdGlvbnMgYXMgQ2RrT3B0aW9uW10sXG5cdFx0fSkpO1xuXHR9XG59XG4iXX0=