@agorapulse/ui-components 18.1.10 → 20.0.0-beta.1

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 (523) hide show
  1. package/action-dropdown/index.d.ts +111 -3
  2. package/add-comment/index.d.ts +24 -5
  3. package/agorapulse-ui-components-20.0.0-beta.1.tgz +0 -0
  4. package/autocomplete/index.d.ts +43 -5
  5. package/avatar/index.d.ts +64 -5
  6. package/badge/index.d.ts +11 -5
  7. package/button/index.d.ts +54 -5
  8. package/checkbox/index.d.ts +54 -5
  9. package/close-button/index.d.ts +14 -5
  10. package/confirm-modal/index.d.ts +32 -5
  11. package/counter/index.d.ts +17 -5
  12. package/datepicker/index.d.ts +99 -5
  13. package/directives/index.d.ts +149 -3
  14. package/dot-stepper/index.d.ts +23 -5
  15. package/fesm2022/agorapulse-ui-components-action-dropdown.mjs +18 -18
  16. package/fesm2022/agorapulse-ui-components-action-dropdown.mjs.map +1 -1
  17. package/fesm2022/agorapulse-ui-components-add-comment.mjs +5 -5
  18. package/fesm2022/agorapulse-ui-components-add-comment.mjs.map +1 -1
  19. package/fesm2022/agorapulse-ui-components-autocomplete.mjs +8 -8
  20. package/fesm2022/agorapulse-ui-components-autocomplete.mjs.map +1 -1
  21. package/fesm2022/agorapulse-ui-components-avatar.mjs +24 -24
  22. package/fesm2022/agorapulse-ui-components-avatar.mjs.map +1 -1
  23. package/fesm2022/agorapulse-ui-components-badge.mjs +4 -4
  24. package/fesm2022/agorapulse-ui-components-badge.mjs.map +1 -1
  25. package/fesm2022/agorapulse-ui-components-button.mjs +5 -5
  26. package/fesm2022/agorapulse-ui-components-button.mjs.map +1 -1
  27. package/fesm2022/agorapulse-ui-components-checkbox.mjs +4 -4
  28. package/fesm2022/agorapulse-ui-components-checkbox.mjs.map +1 -1
  29. package/fesm2022/agorapulse-ui-components-close-button.mjs +7 -7
  30. package/fesm2022/agorapulse-ui-components-close-button.mjs.map +1 -1
  31. package/fesm2022/agorapulse-ui-components-confirm-modal.mjs +4 -4
  32. package/fesm2022/agorapulse-ui-components-confirm-modal.mjs.map +1 -1
  33. package/fesm2022/agorapulse-ui-components-counter.mjs +9 -9
  34. package/fesm2022/agorapulse-ui-components-counter.mjs.map +1 -1
  35. package/fesm2022/agorapulse-ui-components-datepicker.mjs +6 -6
  36. package/fesm2022/agorapulse-ui-components-datepicker.mjs.map +1 -1
  37. package/fesm2022/agorapulse-ui-components-directives.mjs +26 -28
  38. package/fesm2022/agorapulse-ui-components-directives.mjs.map +1 -1
  39. package/fesm2022/agorapulse-ui-components-dot-stepper.mjs +4 -4
  40. package/fesm2022/agorapulse-ui-components-dot-stepper.mjs.map +1 -1
  41. package/fesm2022/agorapulse-ui-components-form-field.mjs +3 -3
  42. package/fesm2022/agorapulse-ui-components-form-field.mjs.map +1 -1
  43. package/fesm2022/agorapulse-ui-components-form-message.mjs +6 -6
  44. package/fesm2022/agorapulse-ui-components-form-message.mjs.map +1 -1
  45. package/fesm2022/agorapulse-ui-components-icon-button.mjs +5 -5
  46. package/fesm2022/agorapulse-ui-components-icon-button.mjs.map +1 -1
  47. package/fesm2022/agorapulse-ui-components-infobox.mjs +4 -4
  48. package/fesm2022/agorapulse-ui-components-infobox.mjs.map +1 -1
  49. package/fesm2022/agorapulse-ui-components-input-group.mjs +6 -6
  50. package/fesm2022/agorapulse-ui-components-input-group.mjs.map +1 -1
  51. package/fesm2022/agorapulse-ui-components-input-search.mjs +13 -10
  52. package/fesm2022/agorapulse-ui-components-input-search.mjs.map +1 -1
  53. package/fesm2022/agorapulse-ui-components-input.mjs +3 -3
  54. package/fesm2022/agorapulse-ui-components-labels-selector.mjs +4 -4
  55. package/fesm2022/agorapulse-ui-components-labels-selector.mjs.map +1 -1
  56. package/fesm2022/agorapulse-ui-components-labels.mjs +8 -8
  57. package/fesm2022/agorapulse-ui-components-labels.mjs.map +1 -1
  58. package/fesm2022/agorapulse-ui-components-legacy-input.mjs +5 -5
  59. package/fesm2022/agorapulse-ui-components-legacy-input.mjs.map +1 -1
  60. package/fesm2022/agorapulse-ui-components-legacy-select.mjs +17 -17
  61. package/fesm2022/agorapulse-ui-components-legacy-select.mjs.map +1 -1
  62. package/fesm2022/agorapulse-ui-components-legacy-textarea.mjs +5 -5
  63. package/fesm2022/agorapulse-ui-components-legacy-textarea.mjs.map +1 -1
  64. package/fesm2022/agorapulse-ui-components-media-display-overlay.mjs +4 -4
  65. package/fesm2022/agorapulse-ui-components-media-display-overlay.mjs.map +1 -1
  66. package/fesm2022/agorapulse-ui-components-modal.mjs +4 -4
  67. package/fesm2022/agorapulse-ui-components-modal.mjs.map +1 -1
  68. package/fesm2022/agorapulse-ui-components-nav-selector.mjs +151 -150
  69. package/fesm2022/agorapulse-ui-components-nav-selector.mjs.map +1 -1
  70. package/fesm2022/agorapulse-ui-components-neo-datepicker.mjs +8 -8
  71. package/fesm2022/agorapulse-ui-components-neo-datepicker.mjs.map +1 -1
  72. package/fesm2022/agorapulse-ui-components-notification.mjs +4 -4
  73. package/fesm2022/agorapulse-ui-components-notification.mjs.map +1 -1
  74. package/fesm2022/agorapulse-ui-components-paginator.mjs +7 -7
  75. package/fesm2022/agorapulse-ui-components-paginator.mjs.map +1 -1
  76. package/fesm2022/agorapulse-ui-components-password-input.mjs +4 -4
  77. package/fesm2022/agorapulse-ui-components-password-input.mjs.map +1 -1
  78. package/fesm2022/agorapulse-ui-components-phone-number-input.mjs +16 -16
  79. package/fesm2022/agorapulse-ui-components-phone-number-input.mjs.map +1 -1
  80. package/fesm2022/agorapulse-ui-components-popmenu.mjs +11 -11
  81. package/fesm2022/agorapulse-ui-components-popmenu.mjs.map +1 -1
  82. package/fesm2022/agorapulse-ui-components-radio.mjs +6 -6
  83. package/fesm2022/agorapulse-ui-components-radio.mjs.map +1 -1
  84. package/fesm2022/agorapulse-ui-components-range-slider.mjs +4 -4
  85. package/fesm2022/agorapulse-ui-components-range-slider.mjs.map +1 -1
  86. package/fesm2022/agorapulse-ui-components-select.mjs +65 -65
  87. package/fesm2022/agorapulse-ui-components-select.mjs.map +1 -1
  88. package/fesm2022/agorapulse-ui-components-slide-toggle.mjs +4 -4
  89. package/fesm2022/agorapulse-ui-components-slide-toggle.mjs.map +1 -1
  90. package/fesm2022/agorapulse-ui-components-snackbars-thread.mjs +8 -8
  91. package/fesm2022/agorapulse-ui-components-snackbars-thread.mjs.map +1 -1
  92. package/fesm2022/agorapulse-ui-components-social-button.mjs +4 -4
  93. package/fesm2022/agorapulse-ui-components-social-button.mjs.map +1 -1
  94. package/fesm2022/agorapulse-ui-components-split-button.mjs +5 -5
  95. package/fesm2022/agorapulse-ui-components-split-button.mjs.map +1 -1
  96. package/fesm2022/agorapulse-ui-components-status-card.mjs +3 -3
  97. package/fesm2022/agorapulse-ui-components-status-card.mjs.map +1 -1
  98. package/fesm2022/agorapulse-ui-components-status.mjs +4 -4
  99. package/fesm2022/agorapulse-ui-components-status.mjs.map +1 -1
  100. package/fesm2022/agorapulse-ui-components-stepper.mjs +4 -4
  101. package/fesm2022/agorapulse-ui-components-stepper.mjs.map +1 -1
  102. package/fesm2022/agorapulse-ui-components-tag.mjs +9 -9
  103. package/fesm2022/agorapulse-ui-components-tag.mjs.map +1 -1
  104. package/fesm2022/agorapulse-ui-components-text-measurement.mjs +3 -3
  105. package/fesm2022/agorapulse-ui-components-textarea.mjs +3 -3
  106. package/fesm2022/agorapulse-ui-components-toggle.mjs +4 -4
  107. package/fesm2022/agorapulse-ui-components-toggle.mjs.map +1 -1
  108. package/fesm2022/agorapulse-ui-components-tooltip.mjs +15 -15
  109. package/fesm2022/agorapulse-ui-components-tooltip.mjs.map +1 -1
  110. package/fesm2022/agorapulse-ui-components.mjs +4 -4
  111. package/fesm2022/agorapulse-ui-components.mjs.map +1 -1
  112. package/form-field/index.d.ts +8 -5
  113. package/form-message/index.d.ts +16 -5
  114. package/icon-button/index.d.ts +44 -5
  115. package/index.d.ts +50 -25
  116. package/infobox/index.d.ts +29 -5
  117. package/input/index.d.ts +10 -5
  118. package/input-group/index.d.ts +14 -5
  119. package/input-search/index.d.ts +35 -5
  120. package/labels/index.d.ts +59 -5
  121. package/labels-selector/index.d.ts +46 -5
  122. package/legacy/input/index.d.ts +64 -3
  123. package/legacy/select/index.d.ts +124 -3
  124. package/legacy/textarea/index.d.ts +54 -3
  125. package/media-display-overlay/index.d.ts +46 -5
  126. package/modal/index.d.ts +58 -5
  127. package/nav-selector/index.d.ts +361 -3
  128. package/neo-datepicker/index.d.ts +74 -5
  129. package/notification/index.d.ts +9 -5
  130. package/package.json +38 -138
  131. package/paginator/index.d.ts +57 -5
  132. package/password-input/index.d.ts +36 -5
  133. package/phone-number-input/index.d.ts +54 -5
  134. package/popmenu/index.d.ts +212 -3
  135. package/radio/index.d.ts +80 -5
  136. package/range-slider/index.d.ts +39 -5
  137. package/select/index.d.ts +214 -5
  138. package/slide-toggle/index.d.ts +23 -5
  139. package/snackbars-thread/index.d.ts +73 -3
  140. package/social-button/index.d.ts +34 -5
  141. package/split-button/index.d.ts +47 -5
  142. package/status/index.d.ts +13 -5
  143. package/status-card/index.d.ts +17 -5
  144. package/stepper/index.d.ts +26 -5
  145. package/tag/index.d.ts +28 -5
  146. package/text-measurement/index.d.ts +11 -5
  147. package/textarea/index.d.ts +14 -5
  148. package/toggle/index.d.ts +55 -5
  149. package/tooltip/index.d.ts +62 -5
  150. package/action-dropdown/action-dropdown-trigger.directive.d.ts +0 -17
  151. package/action-dropdown/action-dropdown.component.d.ts +0 -87
  152. package/action-dropdown/providers.d.ts +0 -8
  153. package/action-dropdown/public_api.d.ts +0 -3
  154. package/add-comment/add-comment.component.d.ts +0 -21
  155. package/add-comment/public_api.d.ts +0 -1
  156. package/agorapulse-ui-components-18.1.10.tgz +0 -0
  157. package/autocomplete/autocomplete.component.d.ts +0 -40
  158. package/autocomplete/public_api.d.ts +0 -1
  159. package/avatar/avatar.component.d.ts +0 -61
  160. package/avatar/public_api.d.ts +0 -1
  161. package/badge/badge.component.d.ts +0 -7
  162. package/badge/public_api.d.ts +0 -1
  163. package/button/button.component.d.ts +0 -52
  164. package/button/public_api.d.ts +0 -1
  165. package/checkbox/checkbox.component.d.ts +0 -51
  166. package/checkbox/public_api.d.ts +0 -1
  167. package/close-button/close-button.component.d.ts +0 -11
  168. package/close-button/public_api.d.ts +0 -1
  169. package/confirm-modal/confirm-modal-texts.model.d.ts +0 -8
  170. package/confirm-modal/confirm-modal.component.d.ts +0 -20
  171. package/confirm-modal/public_api.d.ts +0 -2
  172. package/counter/counter.component.d.ts +0 -13
  173. package/counter/public_api.d.ts +0 -1
  174. package/datepicker/datepicker.component.d.ts +0 -100
  175. package/datepicker/public_api.d.ts +0 -1
  176. package/directives/autosize-textarea.directive.d.ts +0 -12
  177. package/directives/base-button.directive.d.ts +0 -13
  178. package/directives/checkbox.directive.d.ts +0 -32
  179. package/directives/default-image.directive.d.ts +0 -8
  180. package/directives/ellipsis.directive.d.ts +0 -29
  181. package/directives/equal-validator.directive.d.ts +0 -13
  182. package/directives/frozen-gif.directive.d.ts +0 -30
  183. package/directives/multi-style-text.directive.d.ts +0 -16
  184. package/directives/public_api.d.ts +0 -8
  185. package/dot-stepper/dot-stepper.component.d.ts +0 -20
  186. package/dot-stepper/public_api.d.ts +0 -1
  187. package/esm2022/action-dropdown/action-dropdown-trigger.directive.mjs +0 -54
  188. package/esm2022/action-dropdown/action-dropdown.component.mjs +0 -272
  189. package/esm2022/action-dropdown/agorapulse-ui-components-action-dropdown.mjs +0 -5
  190. package/esm2022/action-dropdown/providers.mjs +0 -12
  191. package/esm2022/action-dropdown/public_api.mjs +0 -4
  192. package/esm2022/add-comment/add-comment.component.mjs +0 -72
  193. package/esm2022/add-comment/agorapulse-ui-components-add-comment.mjs +0 -5
  194. package/esm2022/add-comment/public_api.mjs +0 -2
  195. package/esm2022/agorapulse-ui-components.mjs +0 -5
  196. package/esm2022/autocomplete/agorapulse-ui-components-autocomplete.mjs +0 -5
  197. package/esm2022/autocomplete/autocomplete.component.mjs +0 -125
  198. package/esm2022/autocomplete/public_api.mjs +0 -2
  199. package/esm2022/avatar/agorapulse-ui-components-avatar.mjs +0 -5
  200. package/esm2022/avatar/avatar.component.mjs +0 -161
  201. package/esm2022/avatar/public_api.mjs +0 -2
  202. package/esm2022/badge/agorapulse-ui-components-badge.mjs +0 -5
  203. package/esm2022/badge/badge.component.mjs +0 -17
  204. package/esm2022/badge/public_api.mjs +0 -2
  205. package/esm2022/button/agorapulse-ui-components-button.mjs +0 -5
  206. package/esm2022/button/button.component.mjs +0 -105
  207. package/esm2022/button/public_api.mjs +0 -2
  208. package/esm2022/checkbox/agorapulse-ui-components-checkbox.mjs +0 -5
  209. package/esm2022/checkbox/checkbox.component.mjs +0 -177
  210. package/esm2022/checkbox/public_api.mjs +0 -2
  211. package/esm2022/close-button/agorapulse-ui-components-close-button.mjs +0 -5
  212. package/esm2022/close-button/close-button.component.mjs +0 -20
  213. package/esm2022/close-button/public_api.mjs +0 -2
  214. package/esm2022/confirm-modal/agorapulse-ui-components-confirm-modal.mjs +0 -5
  215. package/esm2022/confirm-modal/confirm-modal-texts.model.mjs +0 -2
  216. package/esm2022/confirm-modal/confirm-modal.component.mjs +0 -61
  217. package/esm2022/confirm-modal/public_api.mjs +0 -3
  218. package/esm2022/counter/agorapulse-ui-components-counter.mjs +0 -5
  219. package/esm2022/counter/counter.component.mjs +0 -32
  220. package/esm2022/counter/public_api.mjs +0 -2
  221. package/esm2022/datepicker/agorapulse-ui-components-datepicker.mjs +0 -5
  222. package/esm2022/datepicker/datepicker.component.mjs +0 -288
  223. package/esm2022/datepicker/public_api.mjs +0 -2
  224. package/esm2022/directives/agorapulse-ui-components-directives.mjs +0 -5
  225. package/esm2022/directives/autosize-textarea.directive.mjs +0 -45
  226. package/esm2022/directives/base-button.directive.mjs +0 -47
  227. package/esm2022/directives/checkbox.directive.mjs +0 -283
  228. package/esm2022/directives/default-image.directive.mjs +0 -37
  229. package/esm2022/directives/ellipsis.directive.mjs +0 -90
  230. package/esm2022/directives/equal-validator.directive.mjs +0 -73
  231. package/esm2022/directives/frozen-gif.directive.mjs +0 -125
  232. package/esm2022/directives/multi-style-text.directive.mjs +0 -61
  233. package/esm2022/directives/public_api.mjs +0 -9
  234. package/esm2022/dot-stepper/agorapulse-ui-components-dot-stepper.mjs +0 -5
  235. package/esm2022/dot-stepper/dot-stepper.component.mjs +0 -46
  236. package/esm2022/dot-stepper/public_api.mjs +0 -2
  237. package/esm2022/form-field/agorapulse-ui-components-form-field.mjs +0 -5
  238. package/esm2022/form-field/form-field.component.mjs +0 -11
  239. package/esm2022/form-field/public_api.mjs +0 -2
  240. package/esm2022/form-message/agorapulse-ui-components-form-message.mjs +0 -5
  241. package/esm2022/form-message/form-message.component.mjs +0 -34
  242. package/esm2022/form-message/public_api.mjs +0 -2
  243. package/esm2022/icon-button/agorapulse-ui-components-icon-button.mjs +0 -5
  244. package/esm2022/icon-button/icon-button.component.mjs +0 -123
  245. package/esm2022/icon-button/public_api.mjs +0 -2
  246. package/esm2022/index.mjs +0 -49
  247. package/esm2022/infobox/agorapulse-ui-components-infobox.mjs +0 -5
  248. package/esm2022/infobox/infobox.component.mjs +0 -72
  249. package/esm2022/infobox/public_api.mjs +0 -2
  250. package/esm2022/input/agorapulse-ui-components-input.mjs +0 -5
  251. package/esm2022/input/input.directive.mjs +0 -19
  252. package/esm2022/input/public_api.mjs +0 -2
  253. package/esm2022/input-group/agorapulse-ui-components-input-group.mjs +0 -5
  254. package/esm2022/input-group/input-group.component.mjs +0 -14
  255. package/esm2022/input-group/input-prefix/input-prefix.component.mjs +0 -11
  256. package/esm2022/input-group/public_api.mjs +0 -3
  257. package/esm2022/input-search/agorapulse-ui-components-input-search.mjs +0 -5
  258. package/esm2022/input-search/input-search.component.mjs +0 -78
  259. package/esm2022/input-search/public_api.mjs +0 -2
  260. package/esm2022/labels/agorapulse-ui-components-labels.mjs +0 -5
  261. package/esm2022/labels/label-list.component.mjs +0 -108
  262. package/esm2022/labels/label.component.mjs +0 -56
  263. package/esm2022/labels/public_api.mjs +0 -3
  264. package/esm2022/labels-selector/agorapulse-ui-components-labels-selector.mjs +0 -5
  265. package/esm2022/labels-selector/labels-selector.component.mjs +0 -122
  266. package/esm2022/labels-selector/public_api.mjs +0 -2
  267. package/esm2022/legacy/input/agorapulse-ui-components-legacy-input.mjs +0 -5
  268. package/esm2022/legacy/input/input.component.mjs +0 -189
  269. package/esm2022/legacy/input/public_api.mjs +0 -2
  270. package/esm2022/legacy/select/agorapulse-ui-components-legacy-select.mjs +0 -5
  271. package/esm2022/legacy/select/public_api.mjs +0 -2
  272. package/esm2022/legacy/select/select.component.mjs +0 -451
  273. package/esm2022/legacy/textarea/agorapulse-ui-components-legacy-textarea.mjs +0 -5
  274. package/esm2022/legacy/textarea/public_api.mjs +0 -2
  275. package/esm2022/legacy/textarea/textarea.component.mjs +0 -154
  276. package/esm2022/media-display-overlay/agorapulse-ui-components-media-display-overlay.mjs +0 -5
  277. package/esm2022/media-display-overlay/media-display-overlay-dialog.component.mjs +0 -122
  278. package/esm2022/media-display-overlay/public_api.mjs +0 -2
  279. package/esm2022/modal/agorapulse-ui-components-modal.mjs +0 -5
  280. package/esm2022/modal/modal.component.mjs +0 -116
  281. package/esm2022/modal/public_api.mjs +0 -2
  282. package/esm2022/nav-selector/agorapulse-ui-components-nav-selector.mjs +0 -5
  283. package/esm2022/nav-selector/directives/nav-selector-popover-trigger.directive.mjs +0 -71
  284. package/esm2022/nav-selector/directives/tree-node-accessibility.directive.mjs +0 -30
  285. package/esm2022/nav-selector/nav-selector-category/nav-selector-category.component.mjs +0 -129
  286. package/esm2022/nav-selector/nav-selector-category/nav-selector-category.presenter.mjs +0 -28
  287. package/esm2022/nav-selector/nav-selector-group/nav-selector-group.component.mjs +0 -174
  288. package/esm2022/nav-selector/nav-selector-group/nav-selector-group.presenter.mjs +0 -30
  289. package/esm2022/nav-selector/nav-selector-leaf/nav-selector-leaf.component.mjs +0 -242
  290. package/esm2022/nav-selector/nav-selector-leaf/nav-selector-leaf.presenter.mjs +0 -36
  291. package/esm2022/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.component.mjs +0 -43
  292. package/esm2022/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.presenter.mjs +0 -20
  293. package/esm2022/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.component.mjs +0 -95
  294. package/esm2022/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.presenter.mjs +0 -31
  295. package/esm2022/nav-selector/nav-selector-popover/nav-selector-popover-item.component.mjs +0 -65
  296. package/esm2022/nav-selector/nav-selector-popover/nav-selector-popover.component.mjs +0 -132
  297. package/esm2022/nav-selector/nav-selector.component.mjs +0 -200
  298. package/esm2022/nav-selector/nav-selector.mjs +0 -9
  299. package/esm2022/nav-selector/nav-selector.state.mjs +0 -209
  300. package/esm2022/nav-selector/public_api.mjs +0 -3
  301. package/esm2022/nav-selector/utils/leaf.utils.mjs +0 -44
  302. package/esm2022/nav-selector/utils/nav-selector.accessibility.mjs +0 -179
  303. package/esm2022/nav-selector/utils/nav-selector.builder.mjs +0 -271
  304. package/esm2022/nav-selector/utils/nav-selector.filter.mjs +0 -141
  305. package/esm2022/nav-selector/utils/nav-selector.folding.mjs +0 -284
  306. package/esm2022/nav-selector/utils/nav-selector.merger.mjs +0 -76
  307. package/esm2022/nav-selector/utils/nav-selector.minifying.mjs +0 -59
  308. package/esm2022/nav-selector/utils/nav-selector.multi-select.mjs +0 -208
  309. package/esm2022/nav-selector/utils/nav-selector.single-select.mjs +0 -113
  310. package/esm2022/nav-selector/utils/nav-selector.view-more.mjs +0 -98
  311. package/esm2022/neo-datepicker/agorapulse-ui-components-neo-datepicker.mjs +0 -5
  312. package/esm2022/neo-datepicker/day-detail.model.mjs +0 -2
  313. package/esm2022/neo-datepicker/day-disabled.pipe.mjs +0 -21
  314. package/esm2022/neo-datepicker/neo-datepicker.component.mjs +0 -241
  315. package/esm2022/neo-datepicker/public_api.mjs +0 -4
  316. package/esm2022/notification/agorapulse-ui-components-notification.mjs +0 -5
  317. package/esm2022/notification/notification.component.mjs +0 -15
  318. package/esm2022/notification/public_api.mjs +0 -2
  319. package/esm2022/paginator/agorapulse-ui-components-paginator.mjs +0 -5
  320. package/esm2022/paginator/paginator-button/paginator-button.component.mjs +0 -51
  321. package/esm2022/paginator/paginator.component.mjs +0 -114
  322. package/esm2022/paginator/public_api.mjs +0 -3
  323. package/esm2022/password-input/agorapulse-ui-components-password-input.mjs +0 -5
  324. package/esm2022/password-input/password-input.component.mjs +0 -78
  325. package/esm2022/password-input/public_api.mjs +0 -2
  326. package/esm2022/phone-number-input/agorapulse-ui-components-phone-number-input.mjs +0 -5
  327. package/esm2022/phone-number-input/phone-number-input.component.mjs +0 -195
  328. package/esm2022/phone-number-input/public_api.mjs +0 -2
  329. package/esm2022/popmenu/agorapulse-ui-components-popmenu.mjs +0 -5
  330. package/esm2022/popmenu/options.mjs +0 -17
  331. package/esm2022/popmenu/popmenu-options.interface.mjs +0 -2
  332. package/esm2022/popmenu/popmenu-options.service.mjs +0 -7
  333. package/esm2022/popmenu/popmenu.component.mjs +0 -383
  334. package/esm2022/popmenu/popmenu.directive.mjs +0 -296
  335. package/esm2022/popmenu/popmenu.module.mjs +0 -29
  336. package/esm2022/popmenu/public_api.mjs +0 -5
  337. package/esm2022/radio/agorapulse-ui-components-radio.mjs +0 -5
  338. package/esm2022/radio/public_api.mjs +0 -2
  339. package/esm2022/radio/radio.component.mjs +0 -319
  340. package/esm2022/range-slider/agorapulse-ui-components-range-slider.mjs +0 -5
  341. package/esm2022/range-slider/public_api.mjs +0 -2
  342. package/esm2022/range-slider/range-slider.component.mjs +0 -154
  343. package/esm2022/select/agorapulse-ui-components-select.mjs +0 -5
  344. package/esm2022/select/ap-select.module.mjs +0 -78
  345. package/esm2022/select/dropdown-group-item/dropdown-group-item.component.mjs +0 -51
  346. package/esm2022/select/dropdown-item-multiple-one-line/dropdown-item-multiple-one-line.component.mjs +0 -75
  347. package/esm2022/select/dropdown-item-multiple-two-lines/dropdown-item-multiple-two-lines.component.mjs +0 -79
  348. package/esm2022/select/dropdown-item-single-one-line/dropdown-item-single-one-line.component.mjs +0 -59
  349. package/esm2022/select/dropdown-item-single-two-lines/dropdown-item-single-two-lines.component.mjs +0 -60
  350. package/esm2022/select/dropdown-search-form/dropdown-search-form.component.mjs +0 -98
  351. package/esm2022/select/public_api.mjs +0 -13
  352. package/esm2022/select/select-base.directive.mjs +0 -69
  353. package/esm2022/select/select-label-multiple/select-label-multiple.component.mjs +0 -95
  354. package/esm2022/select/select-label-single/select-label-single.component.mjs +0 -33
  355. package/esm2022/select/select-multiple.directive.mjs +0 -35
  356. package/esm2022/select/select-single.directive.mjs +0 -34
  357. package/esm2022/slide-toggle/agorapulse-ui-components-slide-toggle.mjs +0 -5
  358. package/esm2022/slide-toggle/public_api.mjs +0 -2
  359. package/esm2022/slide-toggle/slide-toggle.component.mjs +0 -66
  360. package/esm2022/snackbars-thread/agorapulse-ui-components-snackbars-thread.mjs +0 -5
  361. package/esm2022/snackbars-thread/component/snackbars-thread.component.mjs +0 -93
  362. package/esm2022/snackbars-thread/model/snackbars-thread.model.mjs +0 -44
  363. package/esm2022/snackbars-thread/public_api.mjs +0 -4
  364. package/esm2022/snackbars-thread/service/snackbars-thread.service.mjs +0 -47
  365. package/esm2022/snackbars-thread/utils/const/snackbars-thread.const.mjs +0 -13
  366. package/esm2022/social-button/agorapulse-ui-components-social-button.mjs +0 -5
  367. package/esm2022/social-button/public_api.mjs +0 -2
  368. package/esm2022/social-button/social-button.component.mjs +0 -164
  369. package/esm2022/split-button/agorapulse-ui-components-split-button.mjs +0 -5
  370. package/esm2022/split-button/public_api.mjs +0 -2
  371. package/esm2022/split-button/split-button.component.mjs +0 -122
  372. package/esm2022/src/lib/agorapulse-ui-components.module.mjs +0 -200
  373. package/esm2022/status/agorapulse-ui-components-status.mjs +0 -5
  374. package/esm2022/status/public_api.mjs +0 -2
  375. package/esm2022/status/status.component.mjs +0 -21
  376. package/esm2022/status-card/agorapulse-ui-components-status-card.mjs +0 -5
  377. package/esm2022/status-card/public_api.mjs +0 -2
  378. package/esm2022/status-card/status-card.component.mjs +0 -23
  379. package/esm2022/stepper/agorapulse-ui-components-stepper.mjs +0 -5
  380. package/esm2022/stepper/public_api.mjs +0 -3
  381. package/esm2022/stepper/step.model.mjs +0 -2
  382. package/esm2022/stepper/stepper.component.mjs +0 -38
  383. package/esm2022/tag/agorapulse-ui-components-tag.mjs +0 -5
  384. package/esm2022/tag/public_api.mjs +0 -2
  385. package/esm2022/tag/tag.component.mjs +0 -35
  386. package/esm2022/text-measurement/agorapulse-ui-components-text-measurement.mjs +0 -5
  387. package/esm2022/text-measurement/public_api.mjs +0 -2
  388. package/esm2022/text-measurement/text-measurement.service.mjs +0 -29
  389. package/esm2022/textarea/agorapulse-ui-components-textarea.mjs +0 -5
  390. package/esm2022/textarea/public_api.mjs +0 -2
  391. package/esm2022/textarea/textarea.directive.mjs +0 -37
  392. package/esm2022/toggle/agorapulse-ui-components-toggle.mjs +0 -5
  393. package/esm2022/toggle/public_api.mjs +0 -2
  394. package/esm2022/toggle/toggle.component.mjs +0 -208
  395. package/esm2022/tooltip/agorapulse-ui-components-tooltip.mjs +0 -5
  396. package/esm2022/tooltip/public_api.mjs +0 -2
  397. package/esm2022/tooltip/tooltip.directive.mjs +0 -401
  398. package/esm2022/tooltip/tooltip.service.mjs +0 -29
  399. package/form-field/form-field.component.d.ts +0 -5
  400. package/form-field/public_api.d.ts +0 -1
  401. package/form-message/form-message.component.d.ts +0 -12
  402. package/form-message/public_api.d.ts +0 -1
  403. package/icon-button/icon-button.component.d.ts +0 -40
  404. package/icon-button/public_api.d.ts +0 -1
  405. package/infobox/infobox.component.d.ts +0 -26
  406. package/infobox/public_api.d.ts +0 -1
  407. package/input/input.directive.d.ts +0 -7
  408. package/input/public_api.d.ts +0 -1
  409. package/input-group/input-group.component.d.ts +0 -6
  410. package/input-group/input-prefix/input-prefix.component.d.ts +0 -5
  411. package/input-group/public_api.d.ts +0 -2
  412. package/input-search/input-search.component.d.ts +0 -32
  413. package/input-search/public_api.d.ts +0 -1
  414. package/labels/label-list.component.d.ts +0 -34
  415. package/labels/label.component.d.ts +0 -23
  416. package/labels/public_api.d.ts +0 -2
  417. package/labels-selector/labels-selector.component.d.ts +0 -42
  418. package/labels-selector/public_api.d.ts +0 -1
  419. package/legacy/input/input.component.d.ts +0 -64
  420. package/legacy/input/public_api.d.ts +0 -1
  421. package/legacy/select/public_api.d.ts +0 -1
  422. package/legacy/select/select.component.d.ts +0 -122
  423. package/legacy/textarea/public_api.d.ts +0 -1
  424. package/legacy/textarea/textarea.component.d.ts +0 -53
  425. package/media-display-overlay/media-display-overlay-dialog.component.d.ts +0 -42
  426. package/media-display-overlay/public_api.d.ts +0 -1
  427. package/modal/modal.component.d.ts +0 -54
  428. package/modal/public_api.d.ts +0 -1
  429. package/nav-selector/directives/nav-selector-popover-trigger.directive.d.ts +0 -25
  430. package/nav-selector/directives/tree-node-accessibility.directive.d.ts +0 -9
  431. package/nav-selector/nav-selector-category/nav-selector-category.component.d.ts +0 -28
  432. package/nav-selector/nav-selector-category/nav-selector-category.presenter.d.ts +0 -13
  433. package/nav-selector/nav-selector-group/nav-selector-group.component.d.ts +0 -37
  434. package/nav-selector/nav-selector-group/nav-selector-group.presenter.d.ts +0 -16
  435. package/nav-selector/nav-selector-leaf/nav-selector-leaf.component.d.ts +0 -48
  436. package/nav-selector/nav-selector-leaf/nav-selector-leaf.presenter.d.ts +0 -18
  437. package/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.component.d.ts +0 -13
  438. package/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.presenter.d.ts +0 -10
  439. package/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.component.d.ts +0 -24
  440. package/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.presenter.d.ts +0 -14
  441. package/nav-selector/nav-selector-popover/nav-selector-popover-item.component.d.ts +0 -14
  442. package/nav-selector/nav-selector-popover/nav-selector-popover.component.d.ts +0 -40
  443. package/nav-selector/nav-selector.component.d.ts +0 -39
  444. package/nav-selector/nav-selector.d.ts +0 -268
  445. package/nav-selector/nav-selector.state.d.ts +0 -48
  446. package/nav-selector/public_api.d.ts +0 -3
  447. package/nav-selector/utils/leaf.utils.d.ts +0 -20
  448. package/nav-selector/utils/nav-selector.accessibility.d.ts +0 -52
  449. package/nav-selector/utils/nav-selector.builder.d.ts +0 -32
  450. package/nav-selector/utils/nav-selector.filter.d.ts +0 -32
  451. package/nav-selector/utils/nav-selector.folding.d.ts +0 -73
  452. package/nav-selector/utils/nav-selector.merger.d.ts +0 -23
  453. package/nav-selector/utils/nav-selector.minifying.d.ts +0 -29
  454. package/nav-selector/utils/nav-selector.multi-select.d.ts +0 -54
  455. package/nav-selector/utils/nav-selector.single-select.d.ts +0 -17
  456. package/nav-selector/utils/nav-selector.view-more.d.ts +0 -30
  457. package/neo-datepicker/day-detail.model.d.ts +0 -9
  458. package/neo-datepicker/day-disabled.pipe.d.ts +0 -8
  459. package/neo-datepicker/neo-datepicker.component.d.ts +0 -61
  460. package/neo-datepicker/public_api.d.ts +0 -3
  461. package/notification/notification.component.d.ts +0 -6
  462. package/notification/public_api.d.ts +0 -1
  463. package/paginator/paginator-button/paginator-button.component.d.ts +0 -17
  464. package/paginator/paginator.component.d.ts +0 -38
  465. package/paginator/public_api.d.ts +0 -2
  466. package/password-input/password-input.component.d.ts +0 -33
  467. package/password-input/public_api.d.ts +0 -1
  468. package/phone-number-input/phone-number-input.component.d.ts +0 -50
  469. package/phone-number-input/public_api.d.ts +0 -1
  470. package/popmenu/options.d.ts +0 -16
  471. package/popmenu/popmenu-options.interface.d.ts +0 -48
  472. package/popmenu/popmenu-options.service.d.ts +0 -7
  473. package/popmenu/popmenu.component.d.ts +0 -66
  474. package/popmenu/popmenu.directive.d.ts +0 -90
  475. package/popmenu/popmenu.module.d.ts +0 -11
  476. package/popmenu/public_api.d.ts +0 -4
  477. package/radio/public_api.d.ts +0 -1
  478. package/radio/radio.component.d.ts +0 -77
  479. package/range-slider/public_api.d.ts +0 -1
  480. package/range-slider/range-slider.component.d.ts +0 -35
  481. package/select/ap-select.module.d.ts +0 -17
  482. package/select/dropdown-group-item/dropdown-group-item.component.d.ts +0 -16
  483. package/select/dropdown-item-multiple-one-line/dropdown-item-multiple-one-line.component.d.ts +0 -25
  484. package/select/dropdown-item-multiple-two-lines/dropdown-item-multiple-two-lines.component.d.ts +0 -26
  485. package/select/dropdown-item-single-one-line/dropdown-item-single-one-line.component.d.ts +0 -20
  486. package/select/dropdown-item-single-two-lines/dropdown-item-single-two-lines.component.d.ts +0 -20
  487. package/select/dropdown-search-form/dropdown-search-form.component.d.ts +0 -32
  488. package/select/public_api.d.ts +0 -12
  489. package/select/select-base.directive.d.ts +0 -18
  490. package/select/select-label-multiple/select-label-multiple.component.d.ts +0 -27
  491. package/select/select-label-single/select-label-single.component.d.ts +0 -12
  492. package/select/select-multiple.directive.d.ts +0 -10
  493. package/select/select-single.directive.d.ts +0 -10
  494. package/slide-toggle/public_api.d.ts +0 -1
  495. package/slide-toggle/slide-toggle.component.d.ts +0 -20
  496. package/snackbars-thread/component/snackbars-thread.component.d.ts +0 -24
  497. package/snackbars-thread/model/snackbars-thread.model.d.ts +0 -36
  498. package/snackbars-thread/public_api.d.ts +0 -3
  499. package/snackbars-thread/service/snackbars-thread.service.d.ts +0 -15
  500. package/snackbars-thread/utils/const/snackbars-thread.const.d.ts +0 -10
  501. package/social-button/public_api.d.ts +0 -1
  502. package/social-button/social-button.component.d.ts +0 -32
  503. package/split-button/public_api.d.ts +0 -1
  504. package/split-button/split-button.component.d.ts +0 -45
  505. package/src/lib/agorapulse-ui-components.module.d.ts +0 -29
  506. package/status/public_api.d.ts +0 -1
  507. package/status/status.component.d.ts +0 -9
  508. package/status-card/public_api.d.ts +0 -1
  509. package/status-card/status-card.component.d.ts +0 -13
  510. package/stepper/public_api.d.ts +0 -2
  511. package/stepper/step.model.d.ts +0 -6
  512. package/stepper/stepper.component.d.ts +0 -16
  513. package/tag/public_api.d.ts +0 -1
  514. package/tag/tag.component.d.ts +0 -24
  515. package/text-measurement/public_api.d.ts +0 -1
  516. package/text-measurement/text-measurement.service.d.ts +0 -8
  517. package/textarea/public_api.d.ts +0 -1
  518. package/textarea/textarea.directive.d.ts +0 -11
  519. package/toggle/public_api.d.ts +0 -1
  520. package/toggle/toggle.component.d.ts +0 -52
  521. package/tooltip/public_api.d.ts +0 -1
  522. package/tooltip/tooltip.directive.d.ts +0 -59
  523. package/tooltip/tooltip.service.d.ts +0 -11
@@ -1,141 +0,0 @@
1
- import { isInternalNavSelectorEntryACategory, isInternalNavSelectorEntryAGroup, isInternalNavSelectorEntryALeaf, isInternalNavSelectorEntryANode, } from '../nav-selector';
2
- import { isInternalNavSelectorEntryALeafFocusable } from '../utils/leaf.utils';
3
- import { NavSelectorAccessibility } from '../utils/nav-selector.accessibility';
4
- /**
5
- * NavSelectorFilter is a utility class that provides methods to filter entries
6
- */
7
- export class NavSelectorFilter {
8
- /**
9
- * Filters the entries based on the search string
10
- *
11
- * The search string is normalized and lowercase and trimmed.
12
- *
13
- * If a category matches the search string, all its children are unfolded, marked as focusable, and not hidden.
14
- *
15
- * If a group matches the search string, the group is unfolded and all its children are unfolded, marked as focusable, and not hidden.
16
- *
17
- * If a leaf matches the search string, it is marked as not hidden and focusable.
18
- *
19
- * Else the entry marked as hidden and not focusable.
20
- *
21
- * It also determines whenever counter and token invalid should be displayed on groups and leaves.
22
- *
23
- * @param entries The entries to filter.
24
- * @param search The search string.
25
- * @param multipleMode to update the focusable state of leaves correctly.
26
- * @returns The filtered entries.
27
- */
28
- static filter(entries, search, multipleMode) {
29
- const formattedSearch = this.cleanValue(search);
30
- if (!formattedSearch) {
31
- return this.resetState(entries);
32
- }
33
- return this.filterEntries(entries, formattedSearch, multipleMode);
34
- }
35
- static filterEntries(entries, formattedSearch, multipleMode) {
36
- const newEntries = entries.map(entry => {
37
- if (this.matches(entry.alias, formattedSearch)) {
38
- return this.recursivelyUnfoldEntry(entry, multipleMode);
39
- }
40
- if (isInternalNavSelectorEntryANode(entry)) {
41
- const children = this.filterEntries(entry.children, formattedSearch, multipleMode);
42
- if (children.every(({ hidden }) => hidden)) {
43
- return {
44
- ...entry,
45
- children,
46
- focusable: false,
47
- hidden: true,
48
- };
49
- }
50
- return {
51
- ...entry,
52
- hidden: false,
53
- focusable: true,
54
- displayCounter: false,
55
- displayTokenInvalid: false,
56
- folded: false,
57
- children,
58
- };
59
- }
60
- if (isInternalNavSelectorEntryALeaf(entry)) {
61
- return {
62
- ...entry,
63
- focusable: false,
64
- hidden: true,
65
- details: entry.details.map(detail => ({
66
- ...detail,
67
- focusable: false,
68
- })),
69
- };
70
- }
71
- return {
72
- ...entry,
73
- focusable: false,
74
- hidden: true,
75
- };
76
- });
77
- return NavSelectorAccessibility.resetFocus(newEntries);
78
- }
79
- static recursivelyUnfoldEntry(entry, multipleMode) {
80
- if (isInternalNavSelectorEntryAGroup(entry)) {
81
- const children = entry.children.map(child => this.recursivelyUnfoldEntry(child, multipleMode));
82
- return {
83
- ...entry,
84
- hidden: false,
85
- folded: false,
86
- focusable: true,
87
- children,
88
- displayCounter: false,
89
- displayTokenInvalid: false,
90
- };
91
- }
92
- else if (isInternalNavSelectorEntryALeaf(entry)) {
93
- const leafFocusable = isInternalNavSelectorEntryALeafFocusable(entry, { parentFolded: false, multipleMode });
94
- return {
95
- ...entry,
96
- hidden: false,
97
- focusable: leafFocusable,
98
- displayCounter: entry.folded && entry.counterDisplayable,
99
- details: entry.details.map(detail => ({
100
- ...detail,
101
- focusable: !entry.folded,
102
- })),
103
- };
104
- }
105
- else if (isInternalNavSelectorEntryACategory(entry)) {
106
- const children = entry.children.map(child => this.recursivelyUnfoldEntry(child, multipleMode));
107
- return {
108
- ...entry,
109
- focusable: true,
110
- folded: false,
111
- hidden: false,
112
- children,
113
- };
114
- }
115
- return entry;
116
- }
117
- static matches(alias, formattedSearch) {
118
- return this.cleanValue(alias).includes(formattedSearch);
119
- }
120
- static cleanValue(value) {
121
- return value.trim().normalize('NFKC').toLowerCase();
122
- }
123
- static resetState(entries, parentFolded = false) {
124
- return entries.map(entry => {
125
- if (isInternalNavSelectorEntryANode(entry)) {
126
- return {
127
- ...entry,
128
- hidden: false,
129
- focusable: !parentFolded,
130
- children: this.resetState(entry.children, entry.folded),
131
- };
132
- }
133
- return {
134
- ...entry,
135
- focusable: !parentFolded,
136
- hidden: false,
137
- };
138
- });
139
- }
140
- }
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LXNlbGVjdG9yLmZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWktY29tcG9uZW50cy9uYXYtc2VsZWN0b3Ivc3JjL3V0aWxzL25hdi1zZWxlY3Rvci5maWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlILG1DQUFtQyxFQUNuQyxnQ0FBZ0MsRUFDaEMsK0JBQStCLEVBQy9CLCtCQUErQixHQUNsQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRS9FOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUMxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW1CRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBbUMsRUFBRSxNQUFjLEVBQUUsWUFBcUI7UUFDcEYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU8sTUFBTSxDQUFDLGFBQWEsQ0FDeEIsT0FBWSxFQUNaLGVBQXVCLEVBQ3ZCLFlBQXFCO1FBRXJCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDN0MsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENB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LENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5LFxuICAgIEludGVybmFsTmF2U2VsZWN0b3JHcm91cCxcbiAgICBJbnRlcm5hbE5hdlNlbGVjdG9yTGVhZixcbiAgICBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFDYXRlZ29yeSxcbiAgICBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFHcm91cCxcbiAgICBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmLFxuICAgIGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QU5vZGUsXG59IGZyb20gJy4uL25hdi1zZWxlY3Rvcic7XG5pbXBvcnQgeyBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmRm9jdXNhYmxlIH0gZnJvbSAnLi4vdXRpbHMvbGVhZi51dGlscyc7XG5pbXBvcnQgeyBOYXZTZWxlY3RvckFjY2Vzc2liaWxpdHkgfSBmcm9tICcuLi91dGlscy9uYXYtc2VsZWN0b3IuYWNjZXNzaWJpbGl0eSc7XG5cbi8qKlxuICogTmF2U2VsZWN0b3JGaWx0ZXIgaXMgYSB1dGlsaXR5IGNsYXNzIHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBmaWx0ZXIgZW50cmllc1xuICovXG5leHBvcnQgY2xhc3MgTmF2U2VsZWN0b3JGaWx0ZXIge1xuICAgIC8qKlxuICAgICAqIEZpbHRlcnMgdGhlIGVudHJpZXMgYmFzZWQgb24gdGhlIHNlYXJjaCBzdHJpbmdcbiAgICAgKlxuICAgICAqIFRoZSBzZWFyY2ggc3RyaW5nIGlzIG5vcm1hbGl6ZWQgYW5kIGxvd2VyY2FzZSBhbmQgdHJpbW1lZC5cbiAgICAgKlxuICAgICAqIElmIGEgY2F0ZWdvcnkgbWF0Y2hlcyB0aGUgc2VhcmNoIHN0cmluZywgYWxsIGl0cyBjaGlsZHJlbiBhcmUgdW5mb2xkZWQsIG1hcmtlZCBhcyBmb2N1c2FibGUsIGFuZCBub3QgaGlkZGVuLlxuICAgICAqXG4gICAgICogSWYgYSBncm91cCBtYXRjaGVzIHRoZSBzZWFyY2ggc3RyaW5nLCB0aGUgZ3JvdXAgaXMgdW5mb2xkZWQgYW5kIGFsbCBpdHMgY2hpbGRyZW4gYXJlIHVuZm9sZGVkLCBtYXJrZWQgYXMgZm9jdXNhYmxlLCBhbmQgbm90IGhpZGRlbi5cbiAgICAgKlxuICAgICAqIElmIGEgbGVhZiBtYXRjaGVzIHRoZSBzZWFyY2ggc3RyaW5nLCBpdCBpcyBtYXJrZWQgYXMgbm90IGhpZGRlbiBhbmQgZm9jdXNhYmxlLlxuICAgICAqXG4gICAgICogRWxzZSB0aGUgZW50cnkgbWFya2VkIGFzIGhpZGRlbiBhbmQgbm90IGZvY3VzYWJsZS5cbiAgICAgKlxuICAgICAqIEl0IGFsc28gZGV0ZXJtaW5lcyB3aGVuZXZlciBjb3VudGVyIGFuZCB0b2tlbiBpbnZhbGlkIHNob3VsZCBiZSBkaXNwbGF5ZWQgb24gZ3JvdXBzIGFuZCBsZWF2ZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZW50cmllcyBUaGUgZW50cmllcyB0byBmaWx0ZXIuXG4gICAgICogQHBhcmFtIHNlYXJjaCBUaGUgc2VhcmNoIHN0cmluZy5cbiAgICAgKiBAcGFyYW0gbXVsdGlwbGVNb2RlIHRvIHVwZGF0ZSB0aGUgZm9jdXNhYmxlIHN0YXRlIG9mIGxlYXZlcyBjb3JyZWN0bHkuXG4gICAgICogQHJldHVybnMgVGhlIGZpbHRlcmVkIGVudHJpZXMuXG4gICAgICovXG4gICAgc3RhdGljIGZpbHRlcihlbnRyaWVzOiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlbXSwgc2VhcmNoOiBzdHJpbmcsIG11bHRpcGxlTW9kZTogYm9vbGVhbik6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeVtdIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkU2VhcmNoID0gdGhpcy5jbGVhblZhbHVlKHNlYXJjaCk7XG4gICAgICAgIGlmICghZm9ybWF0dGVkU2VhcmNoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNldFN0YXRlKGVudHJpZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlckVudHJpZXMoZW50cmllcywgZm9ybWF0dGVkU2VhcmNoLCBtdWx0aXBsZU1vZGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGZpbHRlckVudHJpZXM8VCBleHRlbmRzIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeT4oXG4gICAgICAgIGVudHJpZXM6IFRbXSxcbiAgICAgICAgZm9ybWF0dGVkU2VhcmNoOiBzdHJpbmcsXG4gICAgICAgIG11bHRpcGxlTW9kZTogYm9vbGVhblxuICAgICk6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeVtdIHtcbiAgICAgICAgY29uc3QgbmV3RW50cmllcyA9IGVudHJpZXMubWFwKGVudHJ5ID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoZXMoZW50cnkuYWxpYXMsIGZvcm1hdHRlZFNlYXJjaCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWN1cnNpdmVseVVuZm9sZEVudHJ5KGVudHJ5LCBtdWx0aXBsZU1vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QU5vZGUoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmZpbHRlckVudHJpZXMoZW50cnkuY2hpbGRyZW4sIGZvcm1hdHRlZFNlYXJjaCwgbXVsdGlwbGVNb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW4uZXZlcnkoKHsgaGlkZGVuIH0pID0+IGhpZGRlbikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2FibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Q291bnRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlUb2tlbkludmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmb2xkZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZihlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiBlbnRyeS5kZXRhaWxzLm1hcChkZXRhaWwgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRldGFpbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgICAgIGZvY3VzYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBOYXZTZWxlY3RvckFjY2Vzc2liaWxpdHkucmVzZXRGb2N1cyhuZXdFbnRyaWVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZWN1cnNpdmVseVVuZm9sZEVudHJ5KGVudHJ5OiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnksIG11bHRpcGxlTW9kZTogYm9vbGVhbik6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeSB7XG4gICAgICAgIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFHcm91cChlbnRyeSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZW50cnkuY2hpbGRyZW4ubWFwKGNoaWxkID0+IHRoaXMucmVjdXJzaXZlbHlVbmZvbGRFbnRyeShjaGlsZCwgbXVsdGlwbGVNb2RlKSBhcyBJbnRlcm5hbE5hdlNlbGVjdG9yTGVhZik7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgICAgIGhpZGRlbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgZm9sZGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmb2N1c2FibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgZGlzcGxheUNvdW50ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlUb2tlbkludmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmKGVudHJ5KSkge1xuICAgICAgICAgICAgY29uc3QgbGVhZkZvY3VzYWJsZSA9IGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWZGb2N1c2FibGUoZW50cnksIHsgcGFyZW50Rm9sZGVkOiBmYWxzZSwgbXVsdGlwbGVNb2RlIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZvY3VzYWJsZTogbGVhZkZvY3VzYWJsZSxcbiAgICAgICAgICAgICAgICBkaXNwbGF5Q291bnRlcjogZW50cnkuZm9sZGVkICYmIGVudHJ5LmNvdW50ZXJEaXNwbGF5YWJsZSxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiBlbnRyeS5kZXRhaWxzLm1hcChkZXRhaWwgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZGV0YWlsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c2FibGU6ICFlbnRyeS5mb2xkZWQsXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFDYXRlZ29yeShlbnRyeSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZW50cnkuY2hpbGRyZW4ubWFwKFxuICAgICAgICAgICAgICAgIGNoaWxkID0+IHRoaXMucmVjdXJzaXZlbHlVbmZvbGRFbnRyeShjaGlsZCwgbXVsdGlwbGVNb2RlKSBhcyBJbnRlcm5hbE5hdlNlbGVjdG9yR3JvdXAgfCBJbnRlcm5hbE5hdlNlbGVjdG9yTGVhZlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgZm9jdXNhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZvbGRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIG1hdGNoZXMoYWxpYXM6IHN0cmluZywgZm9ybWF0dGVkU2VhcmNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5WYWx1ZShhbGlhcykuaW5jbHVkZXMoZm9ybWF0dGVkU2VhcmNoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjbGVhblZhbHVlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWUudHJpbSgpLm5vcm1hbGl6ZSgnTkZLQycpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVzZXRTdGF0ZTxUIGV4dGVuZHMgSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5PihlbnRyaWVzOiBUW10sIHBhcmVudEZvbGRlZDogYm9vbGVhbiA9IGZhbHNlKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gZW50cmllcy5tYXAoZW50cnkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QU5vZGUoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZTogIXBhcmVudEZvbGRlZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMucmVzZXRTdGF0ZShlbnRyeS5jaGlsZHJlbiwgZW50cnkuZm9sZGVkKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICBmb2N1c2FibGU6ICFwYXJlbnRGb2xkZWQsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,284 +0,0 @@
1
- import { isInternalNavSelectorEntryACategory, isInternalNavSelectorEntryAGroup, isInternalNavSelectorEntryALeaf, } from '../nav-selector';
2
- import { isInternalNavSelectorEntryALeafFocusable } from '../utils/leaf.utils';
3
- /**
4
- * Class to handle the folding and unfolding of nav selector entries.
5
- */
6
- export class NavSelectorFolding {
7
- /**
8
- * Unfolds all parents of the entry with the given uid until the root.
9
- * @param entries nav selector entries
10
- * @param entryUid the entry uid to unfold parents for
11
- * @param options options for folding operations
12
- */
13
- static unfoldParents(entries, entryUid, options) {
14
- return this.unfoldParentsOfEntry(entries, entryUid, options).entries;
15
- }
16
- /**
17
- * Toggle the folding state of an entry.
18
- *
19
- * @see {@link NavSelectorFolding.fold} and {@link NavSelectorFolding.unfold} for more information on folding and unfolding.
20
- *
21
- * @param entries nav selector entries
22
- * @param entryUid the entry uid to toggle
23
- * @param options options for folding operations
24
- */
25
- static toggleFolding(entries, entryUid, options) {
26
- return this.toggleEntryFolding(entries, entryUid, options);
27
- }
28
- /**
29
- * Fold an entry.
30
- *
31
- * Set unfocusable on all children of the folded entry.
32
- * Compute whenever the counter and token invalid should be displayed on groups and leaves.
33
- *
34
- * @param entries nav selector entries
35
- * @param entryUid the entry uid to fold
36
- * @param options options for folding operations
37
- */
38
- static fold(entries, entryUid, options) {
39
- return this.foldEntry(entries, entryUid, options);
40
- }
41
- /**
42
- * Unfold an entry.
43
- *
44
- * Set focusable on all children of the folded entry.
45
- * Compute whenever the counter and token invalid should be displayed on groups and leaves.
46
- *
47
- * @param entries nav selector entries
48
- * @param entryUid the entry uid to unfold
49
- * @param options options for folding operations
50
- */
51
- static unfold(entries, entryUid, options) {
52
- return this.unfoldEntry(entries, entryUid, options);
53
- }
54
- static toggleEntryFolding(entries, entryUid, options, parentFolded = false) {
55
- return entries.map(entry => {
56
- if (isInternalNavSelectorEntryACategory(entry)) {
57
- if (entry.uid === entryUid) {
58
- const folded = !entry.folded;
59
- if (folded) {
60
- return this.foldCategory(entry, options);
61
- }
62
- else {
63
- return this.unfoldCategory(entry, options);
64
- }
65
- }
66
- return {
67
- ...entry,
68
- children: this.toggleEntryFolding(entry.children, entryUid, options, entry.folded),
69
- };
70
- }
71
- if (isInternalNavSelectorEntryAGroup(entry)) {
72
- if (entry.uid === entryUid) {
73
- const folded = !entry.folded;
74
- if (folded) {
75
- return this.foldGroup(entry, options);
76
- }
77
- else {
78
- return this.unfoldGroup(entry, options);
79
- }
80
- }
81
- return {
82
- ...entry,
83
- children: this.toggleEntryFolding(entry.children, entryUid, options, parentFolded || entry.folded),
84
- };
85
- }
86
- if (isInternalNavSelectorEntryALeaf(entry)) {
87
- if (entry.uid === entryUid) {
88
- const folded = !entry.folded;
89
- if (folded) {
90
- return this.foldLeaf(entry, options.minified);
91
- }
92
- else {
93
- return this.unfoldLeaf(entry, options.minified);
94
- }
95
- }
96
- return {
97
- ...entry,
98
- focusable: isInternalNavSelectorEntryALeafFocusable(entry, { parentFolded, multipleMode: options.multipleMode }),
99
- };
100
- }
101
- return { ...entry, focusable: !parentFolded };
102
- });
103
- }
104
- static foldEntry(entries, entryUid, options, parentFolded = false) {
105
- return entries.map(entry => {
106
- if (isInternalNavSelectorEntryACategory(entry)) {
107
- if (entry.uid === entryUid) {
108
- return this.foldCategory(entry, options);
109
- }
110
- return {
111
- ...entry,
112
- children: this.foldEntry(entry.children, entryUid, options, entry.folded),
113
- };
114
- }
115
- if (isInternalNavSelectorEntryAGroup(entry)) {
116
- if (entry.uid === entryUid) {
117
- return this.foldGroup(entry, options);
118
- }
119
- return {
120
- ...entry,
121
- focusable: !parentFolded,
122
- children: this.foldEntry(entry.children, entryUid, options, parentFolded || entry.folded),
123
- };
124
- }
125
- if (isInternalNavSelectorEntryALeaf(entry)) {
126
- if (entry.uid === entryUid) {
127
- return this.foldLeaf(entry, options.minified);
128
- }
129
- return {
130
- ...entry,
131
- focusable: isInternalNavSelectorEntryALeafFocusable(entry, { parentFolded, multipleMode: options.multipleMode }),
132
- };
133
- }
134
- return { ...entry, focusable: !parentFolded };
135
- });
136
- }
137
- static unfoldEntry(entries, entryUid, options, parentFolded = false) {
138
- return entries.map(entry => {
139
- if (isInternalNavSelectorEntryACategory(entry)) {
140
- if (entry.uid === entryUid) {
141
- return this.unfoldCategory(entry, options);
142
- }
143
- return {
144
- ...entry,
145
- children: this.unfoldEntry(entry.children, entryUid, options, entry.folded),
146
- };
147
- }
148
- if (isInternalNavSelectorEntryAGroup(entry)) {
149
- if (entry.uid === entryUid) {
150
- return this.unfoldGroup(entry, options);
151
- }
152
- return {
153
- ...entry,
154
- children: this.unfoldEntry(entry.children, entryUid, options, parentFolded || entry.folded),
155
- focusable: !parentFolded,
156
- };
157
- }
158
- if (isInternalNavSelectorEntryALeaf(entry)) {
159
- if (entry.uid === entryUid) {
160
- return this.unfoldLeaf(entry, options.minified);
161
- }
162
- return {
163
- ...entry,
164
- focusable: isInternalNavSelectorEntryALeafFocusable(entry, { parentFolded, multipleMode: options.multipleMode }),
165
- };
166
- }
167
- return { ...entry, focusable: !parentFolded };
168
- });
169
- }
170
- static foldCategory(category, options) {
171
- return {
172
- ...category,
173
- folded: true,
174
- children: this.foldEntry(category.children, category.uid, options, true),
175
- };
176
- }
177
- static unfoldCategory(category, options) {
178
- return {
179
- ...category,
180
- folded: false,
181
- children: this.unfoldEntry(category.children, category.uid, options, false),
182
- };
183
- }
184
- static foldGroup(group, options) {
185
- return {
186
- ...group,
187
- folded: true,
188
- children: this.foldEntry(group.children, group.uid, options, true),
189
- displayCounter: !!group.counter,
190
- displayTokenInvalid: group.children.some(({ displayTokenInvalid }) => displayTokenInvalid),
191
- };
192
- }
193
- static unfoldGroup(group, options) {
194
- return {
195
- ...group,
196
- folded: false,
197
- children: this.unfoldEntry(group.children, group.uid, options, false),
198
- displayCounter: false,
199
- displayTokenInvalid: false,
200
- };
201
- }
202
- static foldLeaf(leaf, minified) {
203
- if (!leaf.foldable || minified) {
204
- return leaf;
205
- }
206
- return {
207
- ...leaf,
208
- displayCounter: leaf.counterDisplayable,
209
- folded: true,
210
- details: leaf.details.map(detail => ({ ...detail, focusable: false })),
211
- };
212
- }
213
- static unfoldLeaf(leaf, minified) {
214
- if (!leaf.foldable || minified) {
215
- return leaf;
216
- }
217
- return {
218
- ...leaf,
219
- displayCounter: false,
220
- folded: false,
221
- details: leaf.details.map((detail, idx) => ({
222
- ...detail,
223
- focusable: idx < leaf.viewMoreDetailsDisplayedLimit && !detail.displayError,
224
- })),
225
- };
226
- }
227
- /**
228
- * Unfolds all parents of the entry with the given uid until the root.
229
- * @param entries nav selector entries
230
- * @param entryUid the entry uid to unfold parents for
231
- * @param options options for folding operations
232
- */
233
- static unfoldParentsOfEntry(entries, entryUid, options) {
234
- let found = false;
235
- const newEntries = entries.map(entry => {
236
- if (isInternalNavSelectorEntryACategory(entry)) {
237
- const entryFound = entry.children.some(({ uid }) => uid === entryUid);
238
- if (entryFound) {
239
- found = true;
240
- return this.unfoldCategory(entry, options);
241
- }
242
- const result = this.unfoldParentsOfEntry(entry.children, entryUid, options);
243
- found ||= result.found;
244
- if (result.found) {
245
- return {
246
- ...entry,
247
- children: result.entries,
248
- folded: false,
249
- focusable: true,
250
- };
251
- }
252
- }
253
- else if (isInternalNavSelectorEntryAGroup(entry)) {
254
- const entryFound = entry.children.some(({ uid }) => uid === entryUid);
255
- if (entryFound) {
256
- found = true;
257
- return { ...this.unfoldGroup(entry, options), focusable: true };
258
- }
259
- const result = this.unfoldParentsOfEntry(entry.children, entryUid, options);
260
- found ||= result.found;
261
- if (result.found) {
262
- return {
263
- ...entry,
264
- children: result.entries,
265
- folded: false,
266
- displayCounter: false,
267
- displayTokenInvalid: false,
268
- focusable: true,
269
- };
270
- }
271
- }
272
- else if (isInternalNavSelectorEntryALeaf(entry)) {
273
- const entryFound = entry.details.some(({ uid }) => uid === entryUid);
274
- if (entryFound) {
275
- found = true;
276
- return { ...this.unfoldLeaf(entry, options.minified), focusable: true };
277
- }
278
- }
279
- return entry;
280
- });
281
- return { found, entries: newEntries };
282
- }
283
- }
284
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LXNlbGVjdG9yLmZvbGRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3VpLWNvbXBvbmVudHMvbmF2LXNlbGVjdG9yL3NyYy91dGlscy9uYXYtc2VsZWN0b3IuZm9sZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBS0gsbUNBQW1DLEVBQ25DLGdDQUFnQyxFQUNoQywrQkFBK0IsR0FDbEMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVkvRTs7R0FFRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7SUFDM0I7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUNoQixPQUFZLEVBQ1osUUFBZ0IsRUFDaEIsT0FBa0M7UUFFbEMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDekUsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLGFBQWEsQ0FDaEIsT0FBWSxFQUNaLFFBQWdCLEVBQ2hCLE9BQWtDO1FBRWxDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILE1BQU0sQ0FBQyxJQUFJLENBQ1AsT0FBWSxFQUNaLFFBQWdCLEVBQ2hCLE9BQWtDO1FBRWxDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUNULE9BQVksRUFDWixRQUFnQixFQUNoQixPQUFrQztRQUVsQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFFB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QUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDO2dCQUNyRSxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUNiLEtBQUssR0FBRyxJQUFJLENBQUM7b0JBQ2IsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDNUUsQ0FBQztZQUNMLENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQzFDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgSW50ZXJuYWxOYXZTZWxlY3RvckNhdGVnb3J5LFxuICAgIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeSxcbiAgICBJbnRlcm5hbE5hdlNlbGVjdG9yR3JvdXAsXG4gICAgSW50ZXJuYWxOYXZTZWxlY3RvckxlYWYsXG4gICAgaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBQ2F0ZWdvcnksXG4gICAgaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBR3JvdXAsXG4gICAgaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZixcbn0gZnJvbSAnLi4vbmF2LXNlbGVjdG9yJztcbmltcG9ydCB7IGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWZGb2N1c2FibGUgfSBmcm9tICcuLi91dGlscy9sZWFmLnV0aWxzJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBmb2xkaW5nIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYXZTZWxlY3RvckZvbGRpbmdPcHRpb25zIHtcbiAgICAvKiogVG8gdXBkYXRlIHRoZSBmb2N1c2FibGUgc3RhdGUgb2YgbGVhdmVzIGFuZCBkZXRhaWxzIGNvcnJlY3RseSAqL1xuICAgIG11bHRpcGxlTW9kZTogYm9vbGVhbjtcbiAgICAvKiogVHJ1ZSBpZiB0aGUgbmF2IHNlbGVjdG9yIGlzIG1pbmlmaWVkLiBOZWVkZWQgZm9yIGxlYWYgYXMgdGhleSBhcmUgbm90IGZvbGRhYmxlIGluIG1pbmlmaWVkIG1vZGUgKi9cbiAgICBtaW5pZmllZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDbGFzcyB0byBoYW5kbGUgdGhlIGZvbGRpbmcgYW5kIHVuZm9sZGluZyBvZiBuYXYgc2VsZWN0b3IgZW50cmllcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE5hdlNlbGVjdG9yRm9sZGluZyB7XG4gICAgLyoqXG4gICAgICogVW5mb2xkcyBhbGwgcGFyZW50cyBvZiB0aGUgZW50cnkgd2l0aCB0aGUgZ2l2ZW4gdWlkIHVudGlsIHRoZSByb290LlxuICAgICAqIEBwYXJhbSBlbnRyaWVzIG5hdiBzZWxlY3RvciBlbnRyaWVzXG4gICAgICogQHBhcmFtIGVudHJ5VWlkIHRoZSBlbnRyeSB1aWQgdG8gdW5mb2xkIHBhcmVudHMgZm9yXG4gICAgICogQHBhcmFtIG9wdGlvbnMgb3B0aW9ucyBmb3IgZm9sZGluZyBvcGVyYXRpb25zXG4gICAgICovXG4gICAgc3RhdGljIHVuZm9sZFBhcmVudHM8VCBleHRlbmRzIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeT4oXG4gICAgICAgIGVudHJpZXM6IFRbXSxcbiAgICAgICAgZW50cnlVaWQ6IHN0cmluZyxcbiAgICAgICAgb3B0aW9uczogTmF2U2VsZWN0b3JGb2xkaW5nT3B0aW9uc1xuICAgICk6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5mb2xkUGFyZW50c09mRW50cnkoZW50cmllcywgZW50cnlVaWQsIG9wdGlvbnMpLmVudHJpZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlIHRoZSBmb2xkaW5nIHN0YXRlIG9mIGFuIGVudHJ5LlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgTmF2U2VsZWN0b3JGb2xkaW5nLmZvbGR9IGFuZCB7QGxpbmsgTmF2U2VsZWN0b3JGb2xkaW5nLnVuZm9sZH0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZm9sZGluZyBhbmQgdW5mb2xkaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudHJpZXMgbmF2IHNlbGVjdG9yIGVudHJpZXNcbiAgICAgKiBAcGFyYW0gZW50cnlVaWQgdGhlIGVudHJ5IHVpZCB0byB0b2dnbGVcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBvcHRpb25zIGZvciBmb2xkaW5nIG9wZXJhdGlvbnNcbiAgICAgKi9cbiAgICBzdGF0aWMgdG9nZ2xlRm9sZGluZzxUIGV4dGVuZHMgSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5PihcbiAgICAgICAgZW50cmllczogVFtdLFxuICAgICAgICBlbnRyeVVpZDogc3RyaW5nLFxuICAgICAgICBvcHRpb25zOiBOYXZTZWxlY3RvckZvbGRpbmdPcHRpb25zXG4gICAgKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2dnbGVFbnRyeUZvbGRpbmcoZW50cmllcywgZW50cnlVaWQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvbGQgYW4gZW50cnkuXG4gICAgICpcbiAgICAgKiBTZXQgdW5mb2N1c2FibGUgb24gYWxsIGNoaWxkcmVuIG9mIHRoZSBmb2xkZWQgZW50cnkuXG4gICAgICogQ29tcHV0ZSB3aGVuZXZlciB0aGUgY291bnRlciBhbmQgdG9rZW4gaW52YWxpZCBzaG91bGQgYmUgZGlzcGxheWVkIG9uIGdyb3VwcyBhbmQgbGVhdmVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudHJpZXMgbmF2IHNlbGVjdG9yIGVudHJpZXNcbiAgICAgKiBAcGFyYW0gZW50cnlVaWQgdGhlIGVudHJ5IHVpZCB0byBmb2xkXG4gICAgICogQHBhcmFtIG9wdGlvbnMgb3B0aW9ucyBmb3IgZm9sZGluZyBvcGVyYXRpb25zXG4gICAgICovXG4gICAgc3RhdGljIGZvbGQ8VCBleHRlbmRzIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeT4oXG4gICAgICAgIGVudHJpZXM6IFRbXSxcbiAgICAgICAgZW50cnlVaWQ6IHN0cmluZyxcbiAgICAgICAgb3B0aW9uczogTmF2U2VsZWN0b3JGb2xkaW5nT3B0aW9uc1xuICAgICk6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9sZEVudHJ5KGVudHJpZXMsIGVudHJ5VWlkLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbmZvbGQgYW4gZW50cnkuXG4gICAgICpcbiAgICAgKiBTZXQgZm9jdXNhYmxlIG9uIGFsbCBjaGlsZHJlbiBvZiB0aGUgZm9sZGVkIGVudHJ5LlxuICAgICAqIENvbXB1dGUgd2hlbmV2ZXIgdGhlIGNvdW50ZXIgYW5kIHRva2VuIGludmFsaWQgc2hvdWxkIGJlIGRpc3BsYXllZCBvbiBncm91cHMgYW5kIGxlYXZlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbnRyaWVzIG5hdiBzZWxlY3RvciBlbnRyaWVzXG4gICAgICogQHBhcmFtIGVudHJ5VWlkIHRoZSBlbnRyeSB1aWQgdG8gdW5mb2xkXG4gICAgICogQHBhcmFtIG9wdGlvbnMgb3B0aW9ucyBmb3IgZm9sZGluZyBvcGVyYXRpb25zXG4gICAgICovXG4gICAgc3RhdGljIHVuZm9sZDxUIGV4dGVuZHMgSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5PihcbiAgICAgICAgZW50cmllczogVFtdLFxuICAgICAgICBlbnRyeVVpZDogc3RyaW5nLFxuICAgICAgICBvcHRpb25zOiBOYXZTZWxlY3RvckZvbGRpbmdPcHRpb25zXG4gICAgKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy51bmZvbGRFbnRyeShlbnRyaWVzLCBlbnRyeVVpZCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgdG9nZ2xlRW50cnlGb2xkaW5nPFQgZXh0ZW5kcyBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnk+KFxuICAgICAgICBlbnRyaWVzOiBUW10sXG4gICAgICAgIGVudHJ5VWlkOiBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnM6IE5hdlNlbGVjdG9yRm9sZGluZ09wdGlvbnMsXG4gICAgICAgIHBhcmVudEZvbGRlZCA9IGZhbHNlXG4gICAgKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gZW50cmllcy5tYXAoZW50cnkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUNhdGVnb3J5KGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS51aWQgPT09IGVudHJ5VWlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvbGRlZCA9ICFlbnRyeS5mb2xkZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb2xkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZvbGRDYXRlZ29yeShlbnRyeSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51bmZvbGRDYXRlZ29yeShlbnRyeSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLnRvZ2dsZUVudHJ5Rm9sZGluZyhlbnRyeS5jaGlsZHJlbiwgZW50cnlVaWQsIG9wdGlvbnMsIGVudHJ5LmZvbGRlZCksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFHcm91cChlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkudWlkID09PSBlbnRyeVVpZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb2xkZWQgPSAhZW50cnkuZm9sZGVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mb2xkR3JvdXAoZW50cnksIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5mb2xkR3JvdXAoZW50cnksIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy50b2dnbGVFbnRyeUZvbGRpbmcoZW50cnkuY2hpbGRyZW4sIGVudHJ5VWlkLCBvcHRpb25zLCBwYXJlbnRGb2xkZWQgfHwgZW50cnkuZm9sZGVkKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWYoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LnVpZCA9PT0gZW50cnlVaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9sZGVkID0gIWVudHJ5LmZvbGRlZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9sZExlYWYoZW50cnksIG9wdGlvbnMubWluaWZpZWQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5mb2xkTGVhZihlbnRyeSwgb3B0aW9ucy5taW5pZmllZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZTogaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZkZvY3VzYWJsZShlbnRyeSwgeyBwYXJlbnRGb2xkZWQsIG11bHRpcGxlTW9kZTogb3B0aW9ucy5tdWx0aXBsZU1vZGUgfSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IC4uLmVudHJ5LCBmb2N1c2FibGU6ICFwYXJlbnRGb2xkZWQgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZm9sZEVudHJ5PFQgZXh0ZW5kcyBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnk+KFxuICAgICAgICBlbnRyaWVzOiBUW10sXG4gICAgICAgIGVudHJ5VWlkOiBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnM6IE5hdlNlbGVjdG9yRm9sZGluZ09wdGlvbnMsXG4gICAgICAgIHBhcmVudEZvbGRlZCA9IGZhbHNlXG4gICAgKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gZW50cmllcy5tYXAoZW50cnkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUNhdGVnb3J5KGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS51aWQgPT09IGVudHJ5VWlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZvbGRDYXRlZ29yeShlbnRyeSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy5mb2xkRW50cnkoZW50cnkuY2hpbGRyZW4sIGVudHJ5VWlkLCBvcHRpb25zLCBlbnRyeS5mb2xkZWQpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBR3JvdXAoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LnVpZCA9PT0gZW50cnlVaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9sZEdyb3VwKGVudHJ5LCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZTogIXBhcmVudEZvbGRlZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuZm9sZEVudHJ5KGVudHJ5LmNoaWxkcmVuLCBlbnRyeVVpZCwgb3B0aW9ucywgcGFyZW50Rm9sZGVkIHx8IGVudHJ5LmZvbGRlZCksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS51aWQgPT09IGVudHJ5VWlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZvbGRMZWFmKGVudHJ5LCBvcHRpb25zLm1pbmlmaWVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZTogaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZkZvY3VzYWJsZShlbnRyeSwgeyBwYXJlbnRGb2xkZWQsIG11bHRpcGxlTW9kZTogb3B0aW9ucy5tdWx0aXBsZU1vZGUgfSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IC4uLmVudHJ5LCBmb2N1c2FibGU6ICFwYXJlbnRGb2xkZWQgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgdW5mb2xkRW50cnk8VCBleHRlbmRzIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeT4oXG4gICAgICAgIGVudHJpZXM6IFRbXSxcbiAgICAgICAgZW50cnlVaWQ6IHN0cmluZyxcbiAgICAgICAgb3B0aW9uczogTmF2U2VsZWN0b3JGb2xkaW5nT3B0aW9ucyxcbiAgICAgICAgcGFyZW50Rm9sZGVkID0gZmFsc2VcbiAgICApOiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlbXSB7XG4gICAgICAgIHJldHVybiBlbnRyaWVzLm1hcChlbnRyeSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBQ2F0ZWdvcnkoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LnVpZCA9PT0gZW50cnlVaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5mb2xkQ2F0ZWdvcnkoZW50cnksIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMudW5mb2xkRW50cnkoZW50cnkuY2hpbGRyZW4sIGVudHJ5VWlkLCBvcHRpb25zLCBlbnRyeS5mb2xkZWQpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBR3JvdXAoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LnVpZCA9PT0gZW50cnlVaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5mb2xkR3JvdXAoZW50cnksIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMudW5mb2xkRW50cnkoZW50cnkuY2hpbGRyZW4sIGVudHJ5VWlkLCBvcHRpb25zLCBwYXJlbnRGb2xkZWQgfHwgZW50cnkuZm9sZGVkKSxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNhYmxlOiAhcGFyZW50Rm9sZGVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZihlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkudWlkID09PSBlbnRyeVVpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51bmZvbGRMZWFmKGVudHJ5LCBvcHRpb25zLm1pbmlmaWVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZTogaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZkZvY3VzYWJsZShlbnRyeSwgeyBwYXJlbnRGb2xkZWQsIG11bHRpcGxlTW9kZTogb3B0aW9ucy5tdWx0aXBsZU1vZGUgfSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IC4uLmVudHJ5LCBmb2N1c2FibGU6ICFwYXJlbnRGb2xkZWQgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZm9sZENhdGVnb3J5KGNhdGVnb3J5OiBJbnRlcm5hbE5hdlNlbGVjdG9yQ2F0ZWdvcnksIG9wdGlvbnM6IE5hdlNlbGVjdG9yRm9sZGluZ09wdGlvbnMpOiBJbnRlcm5hbE5hdlNlbGVjdG9yQ2F0ZWdvcnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY2F0ZWdvcnksXG4gICAgICAgICAgICBmb2xkZWQ6IHRydWUsXG4gICAgICAgICAgICBjaGlsZHJlbjogdGhpcy5mb2xkRW50cnkoY2F0ZWdvcnkuY2hpbGRyZW4sIGNhdGVnb3J5LnVpZCwgb3B0aW9ucywgdHJ1ZSkgYXMgKFxuICAgICAgICAgICAgICAgIHwgSW50ZXJuYWxOYXZTZWxlY3RvckxlYWZcbiAgICAgICAgICAgICAgICB8IEludGVybmFsTmF2U2VsZWN0b3JHcm91cFxuICAgICAgICAgICAgKVtdLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHVuZm9sZENhdGVnb3J5KGNhdGVnb3J5OiBJbnRlcm5hbE5hdlNlbGVjdG9yQ2F0ZWdvcnksIG9wdGlvbnM6IE5hdlNlbGVjdG9yRm9sZGluZ09wdGlvbnMpOiBJbnRlcm5hbE5hdlNlbGVjdG9yQ2F0ZWdvcnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY2F0ZWdvcnksXG4gICAgICAgICAgICBmb2xkZWQ6IGZhbHNlLFxuICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMudW5mb2xkRW50cnkoY2F0ZWdvcnkuY2hpbGRyZW4sIGNhdGVnb3J5LnVpZCwgb3B0aW9ucywgZmFsc2UpIGFzIChcbiAgICAgICAgICAgICAgICB8IEludGVybmFsTmF2U2VsZWN0b3JMZWFmXG4gICAgICAgICAgICAgICAgfCBJbnRlcm5hbE5hdlNlbGVjdG9yR3JvdXBcbiAgICAgICAgICAgIClbXSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBmb2xkR3JvdXAoZ3JvdXA6IEludGVybmFsTmF2U2VsZWN0b3JHcm91cCwgb3B0aW9uczogTmF2U2VsZWN0b3JGb2xkaW5nT3B0aW9ucyk6IEludGVybmFsTmF2U2VsZWN0b3JHcm91cCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICAgIGZvbGRlZDogdHJ1ZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLmZvbGRFbnRyeShncm91cC5jaGlsZHJlbiwgZ3JvdXAudWlkLCBvcHRpb25zLCB0cnVlKSBhcyBJbnRlcm5hbE5hdlNlbGVjdG9yTGVhZltdLFxuICAgICAgICAgICAgZGlzcGxheUNvdW50ZXI6ICEhZ3JvdXAuY291bnRlcixcbiAgICAgICAgICAgIGRpc3BsYXlUb2tlbkludmFsaWQ6IGdyb3VwLmNoaWxkcmVuLnNvbWUoKHsgZGlzcGxheVRva2VuSW52YWxpZCB9KSA9PiBkaXNwbGF5VG9rZW5JbnZhbGlkKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyB1bmZvbGRHcm91cChncm91cDogSW50ZXJuYWxOYXZTZWxlY3Rvckdyb3VwLCBvcHRpb25zOiBOYXZTZWxlY3RvckZvbGRpbmdPcHRpb25zKTogSW50ZXJuYWxOYXZTZWxlY3Rvckdyb3VwIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgICAgZm9sZGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLnVuZm9sZEVudHJ5KGdyb3VwLmNoaWxkcmVuLCBncm91cC51aWQsIG9wdGlvbnMsIGZhbHNlKSBhcyBJbnRlcm5hbE5hdlNlbGVjdG9yTGVhZltdLFxuICAgICAgICAgICAgZGlzcGxheUNvdW50ZXI6IGZhbHNlLFxuICAgICAgICAgICAgZGlzcGxheVRva2VuSW52YWxpZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZm9sZExlYWYobGVhZjogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWYsIG1pbmlmaWVkOiBib29sZWFuKTogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWYge1xuICAgICAgICBpZiAoIWxlYWYuZm9sZGFibGUgfHwgbWluaWZpZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBsZWFmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5sZWFmLFxuICAgICAgICAgICAgZGlzcGxheUNvdW50ZXI6IGxlYWYuY291bnRlckRpc3BsYXlhYmxlLFxuICAgICAgICAgICAgZm9sZGVkOiB0cnVlLFxuICAgICAgICAgICAgZGV0YWlsczogbGVhZi5kZXRhaWxzLm1hcChkZXRhaWwgPT4gKHsgLi4uZGV0YWlsLCBmb2N1c2FibGU6IGZhbHNlIH0pKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyB1bmZvbGRMZWFmKGxlYWY6IEludGVybmFsTmF2U2VsZWN0b3JMZWFmLCBtaW5pZmllZDogYm9vbGVhbik6IEludGVybmFsTmF2U2VsZWN0b3JMZWFmIHtcbiAgICAgICAgaWYgKCFsZWFmLmZvbGRhYmxlIHx8IG1pbmlmaWVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbGVhZjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ubGVhZixcbiAgICAgICAgICAgIGRpc3BsYXlDb3VudGVyOiBmYWxzZSxcbiAgICAgICAgICAgIGZvbGRlZDogZmFsc2UsXG4gICAgICAgICAgICBkZXRhaWxzOiBsZWFmLmRldGFpbHMubWFwKChkZXRhaWwsIGlkeCkgPT4gKHtcbiAgICAgICAgICAgICAgICAuLi5kZXRhaWwsXG4gICAgICAgICAgICAgICAgZm9jdXNhYmxlOiBpZHggPCBsZWFmLnZpZXdNb3JlRGV0YWlsc0Rpc3BsYXllZExpbWl0ICYmICFkZXRhaWwuZGlzcGxheUVycm9yLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVuZm9sZHMgYWxsIHBhcmVudHMgb2YgdGhlIGVudHJ5IHdpdGggdGhlIGdpdmVuIHVpZCB1bnRpbCB0aGUgcm9vdC5cbiAgICAgKiBAcGFyYW0gZW50cmllcyBuYXYgc2VsZWN0b3IgZW50cmllc1xuICAgICAqIEBwYXJhbSBlbnRyeVVpZCB0aGUgZW50cnkgdWlkIHRvIHVuZm9sZCBwYXJlbnRzIGZvclxuICAgICAqIEBwYXJhbSBvcHRpb25zIG9wdGlvbnMgZm9yIGZvbGRpbmcgb3BlcmF0aW9uc1xuICAgICAqL1xuICAgIHN0YXRpYyB1bmZvbGRQYXJlbnRzT2ZFbnRyeTxUIGV4dGVuZHMgSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5PihcbiAgICAgICAgZW50cmllczogVFtdLFxuICAgICAgICBlbnRyeVVpZDogc3RyaW5nLFxuICAgICAgICBvcHRpb25zOiBOYXZTZWxlY3RvckZvbGRpbmdPcHRpb25zXG4gICAgKTogeyBmb3VuZDogYm9vbGVhbjsgZW50cmllczogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10gfSB7XG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBuZXdFbnRyaWVzID0gZW50cmllcy5tYXAoZW50cnkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUNhdGVnb3J5KGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudHJ5Rm91bmQgPSBlbnRyeS5jaGlsZHJlbi5zb21lKCh7IHVpZCB9KSA9PiB1aWQgPT09IGVudHJ5VWlkKTtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnlGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVuZm9sZENhdGVnb3J5KGVudHJ5LCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy51bmZvbGRQYXJlbnRzT2ZFbnRyeShlbnRyeS5jaGlsZHJlbiwgZW50cnlVaWQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGZvdW5kIHx8PSByZXN1bHQuZm91bmQ7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5mb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogcmVzdWx0LmVudHJpZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb2xkZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBR3JvdXAoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW50cnlGb3VuZCA9IGVudHJ5LmNoaWxkcmVuLnNvbWUoKHsgdWlkIH0pID0+IHVpZCA9PT0gZW50cnlVaWQpO1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeUZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4udGhpcy51bmZvbGRHcm91cChlbnRyeSwgb3B0aW9ucyksIGZvY3VzYWJsZTogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnVuZm9sZFBhcmVudHNPZkVudHJ5KGVudHJ5LmNoaWxkcmVuLCBlbnRyeVVpZCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgZm91bmQgfHw9IHJlc3VsdC5mb3VuZDtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiByZXN1bHQuZW50cmllcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Q291bnRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5VG9rZW5JbnZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWYoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW50cnlGb3VuZCA9IGVudHJ5LmRldGFpbHMuc29tZSgoeyB1aWQgfSkgPT4gdWlkID09PSBlbnRyeVVpZCk7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi50aGlzLnVuZm9sZExlYWYoZW50cnksIG9wdGlvbnMubWluaWZpZWQpLCBmb2N1c2FibGU6IHRydWUgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyBmb3VuZCwgZW50cmllczogbmV3RW50cmllcyB9O1xuICAgIH1cbn1cbiJdfQ==
@@ -1,76 +0,0 @@
1
- import { associateBy } from '..//utils/leaf.utils';
2
- import { isInternalNavSelectorEntryAGroup, isInternalNavSelectorEntryALeaf, isInternalNavSelectorEntryANode, } from '../nav-selector';
3
- /**
4
- * NavSelectorMerger is a utility class that merges old entries into new entries.
5
- * It is used to keep some previous properties of the previous state. Ex: folded, selected, focused, etc.
6
- */
7
- export class NavSelectorMerger {
8
- /**
9
- * Merges the old entries into the new entries.
10
- *
11
- * Modify directly the new entries as new entries are generated from scratch so no need to destructure them to have a new reference.
12
- *
13
- * @param newEntries
14
- * @param oldEntries
15
- *
16
- * @returns the new entries with the old entries merged into them
17
- */
18
- static mergeInternalNavSelectorEntries(newEntries, oldEntries) {
19
- const oldEntryByUid = associateBy(oldEntries, 'uid');
20
- for (const newEntry of newEntries) {
21
- if (!oldEntryByUid[newEntry.uid]) {
22
- continue;
23
- }
24
- this.merge(newEntry, oldEntryByUid[newEntry.uid]);
25
- }
26
- return newEntries;
27
- }
28
- static merge(newEntry, oldEntry) {
29
- if (isInternalNavSelectorEntryALeaf(newEntry) && isInternalNavSelectorEntryALeaf(oldEntry)) {
30
- this.mergeLeaf(newEntry, oldEntry);
31
- }
32
- else if (isInternalNavSelectorEntryANode(newEntry) && isInternalNavSelectorEntryANode(oldEntry)) {
33
- this.mergeInternalNavSelectorEntries(newEntry.children, oldEntry.children);
34
- this.mergeNode(newEntry, oldEntry);
35
- }
36
- }
37
- static mergeNode(newNode, oldNode) {
38
- newNode.folded = oldNode.folded;
39
- newNode.accessibility.tabIndex = oldNode.accessibility.tabIndex;
40
- if (isInternalNavSelectorEntryAGroup(newNode) && isInternalNavSelectorEntryAGroup(oldNode)) {
41
- this.mergeGroup(newNode, oldNode);
42
- }
43
- }
44
- static mergeGroup(newGroup, oldGroup) {
45
- newGroup.displayCounter = oldGroup.displayCounter;
46
- newGroup.displayTokenInvalid = oldGroup.displayTokenInvalid;
47
- }
48
- static mergeLeaf(newLeaf, oldLeaf) {
49
- if (this.isInternalLeafLogicValid(newLeaf)) {
50
- newLeaf.viewMoreDisplayable = newLeaf.details.length > newLeaf.viewMoreDetailsDisplayedLimit;
51
- newLeaf.viewMoreDisplayed = oldLeaf.viewMoreDisplayed;
52
- newLeaf.displayCounter = oldLeaf.displayCounter;
53
- newLeaf.folded = oldLeaf.folded;
54
- newLeaf.selected = oldLeaf.selected;
55
- newLeaf.accessibility.tabIndex = oldLeaf.accessibility.tabIndex;
56
- const oldDetailByUId = associateBy(oldLeaf.details, 'uid');
57
- newLeaf.details.forEach(newDetail => {
58
- if (!oldDetailByUId[newDetail.uid] || newDetail.errorReason) {
59
- return;
60
- }
61
- newDetail.selected = oldDetailByUId[newDetail.uid].selected;
62
- newDetail.accessibility.tabIndex = oldDetailByUId[newDetail.uid].accessibility.tabIndex;
63
- });
64
- }
65
- else {
66
- const oldDetailHasFocused = oldLeaf.details.some(oldDetail => oldDetail.accessibility.tabIndex === 0);
67
- if (oldDetailHasFocused) {
68
- newLeaf.accessibility.tabIndex = 0;
69
- }
70
- }
71
- }
72
- static isInternalLeafLogicValid(leaf) {
73
- return !leaf.disabled && !leaf.displayTokenInvalid && !leaf.displayFeatureLocked;
74
- }
75
- }
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LXNlbGVjdG9yLm1lcmdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWktY29tcG9uZW50cy9uYXYtc2VsZWN0b3Ivc3JjL3V0aWxzL25hdi1zZWxlY3Rvci5tZXJnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFLSCxnQ0FBZ0MsRUFDaEMsK0JBQStCLEVBQy9CLCtCQUErQixHQUNsQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpCOzs7R0FHRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFDMUI7Ozs7Ozs7OztPQVNHO0lBQ0ksTUFBTSxDQUFDLCtCQUErQixDQUN6QyxVQUFzQyxFQUN0QyxVQUFzQztRQUV0QyxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXJELEtBQUssTUFBTSxRQUFRLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsU0FBUztZQUNiLENBQUM7WUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQWtDLEVBQUUsUUFBa0M7UUFDdkYsSUFBSSwrQkFBK0IsQ0FBQyxRQUFRLENBQUMsSUFBSSwrQkFBK0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3pGLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7YUFBTSxJQUFJLCtCQUErQixDQUFDLFFBQVEsQ0FBQyxJQUFJLCtCQUEr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QUMsb0JBQW9CLENBQUM7SUFDckYsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzb2NpYXRlQnkgfSBmcm9tICcuLi8vdXRpbHMvbGVhZi51dGlscyc7XG5pbXBvcnQge1xuICAgIEludGVybmFsTmF2U2VsZWN0b3JDYXRlZ29yeSxcbiAgICBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnksXG4gICAgSW50ZXJuYWxOYXZTZWxlY3Rvckdyb3VwLFxuICAgIEludGVybmFsTmF2U2VsZWN0b3JMZWFmLFxuICAgIGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUdyb3VwLFxuICAgIGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWYsXG4gICAgaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTm9kZSxcbn0gZnJvbSAnLi4vbmF2LXNlbGVjdG9yJztcblxuLyoqXG4gKiBOYXZTZWxlY3Rvck1lcmdlciBpcyBhIHV0aWxpdHkgY2xhc3MgdGhhdCBtZXJnZXMgb2xkIGVudHJpZXMgaW50byBuZXcgZW50cmllcy5cbiAqIEl0IGlzIHVzZWQgdG8ga2VlcCBzb21lIHByZXZpb3VzIHByb3BlcnRpZXMgb2YgdGhlIHByZXZpb3VzIHN0YXRlLiBFeDogZm9sZGVkLCBzZWxlY3RlZCwgZm9jdXNlZCwgZXRjLlxuICovXG5leHBvcnQgY2xhc3MgTmF2U2VsZWN0b3JNZXJnZXIge1xuICAgIC8qKlxuICAgICAqIE1lcmdlcyB0aGUgb2xkIGVudHJpZXMgaW50byB0aGUgbmV3IGVudHJpZXMuXG4gICAgICpcbiAgICAgKiBNb2RpZnkgZGlyZWN0bHkgdGhlIG5ldyBlbnRyaWVzIGFzIG5ldyBlbnRyaWVzIGFyZSBnZW5lcmF0ZWQgZnJvbSBzY3JhdGNoIHNvIG5vIG5lZWQgdG8gZGVzdHJ1Y3R1cmUgdGhlbSB0byBoYXZlIGEgbmV3IHJlZmVyZW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXdFbnRyaWVzXG4gICAgICogQHBhcmFtIG9sZEVudHJpZXNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHRoZSBuZXcgZW50cmllcyB3aXRoIHRoZSBvbGQgZW50cmllcyBtZXJnZWQgaW50byB0aGVtXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBtZXJnZUludGVybmFsTmF2U2VsZWN0b3JFbnRyaWVzKFxuICAgICAgICBuZXdFbnRyaWVzOiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlbXSxcbiAgICAgICAgb2xkRW50cmllczogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W11cbiAgICApOiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlbXSB7XG4gICAgICAgIGNvbnN0IG9sZEVudHJ5QnlVaWQgPSBhc3NvY2lhdGVCeShvbGRFbnRyaWVzLCAndWlkJyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBuZXdFbnRyeSBvZiBuZXdFbnRyaWVzKSB7XG4gICAgICAgICAgICBpZiAoIW9sZEVudHJ5QnlVaWRbbmV3RW50cnkudWlkXSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5tZXJnZShuZXdFbnRyeSwgb2xkRW50cnlCeVVpZFtuZXdFbnRyeS51aWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdFbnRyaWVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIG1lcmdlKG5ld0VudHJ5OiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnksIG9sZEVudHJ5OiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnkpIHtcbiAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWYobmV3RW50cnkpICYmIGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWYob2xkRW50cnkpKSB7XG4gICAgICAgICAgICB0aGlzLm1lcmdlTGVhZihuZXdFbnRyeSwgb2xkRW50cnkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QU5vZGUobmV3RW50cnkpICYmIGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QU5vZGUob2xkRW50cnkpKSB7XG4gICAgICAgICAgICB0aGlzLm1lcmdlSW50ZXJuYWxOYXZTZWxlY3RvckVudHJpZXMobmV3RW50cnkuY2hpbGRyZW4sIG9sZEVudHJ5LmNoaWxkcmVuKTtcbiAgICAgICAgICAgIHRoaXMubWVyZ2VOb2RlKG5ld0VudHJ5LCBvbGRFbnRyeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBtZXJnZU5vZGUoXG4gICAgICAgIG5ld05vZGU6IEludGVybmFsTmF2U2VsZWN0b3JHcm91cCB8IEludGVybmFsTmF2U2VsZWN0b3JDYXRlZ29yeSxcbiAgICAgICAgb2xkTm9kZTogSW50ZXJuYWxOYXZTZWxlY3Rvckdyb3VwIHwgSW50ZXJuYWxOYXZTZWxlY3RvckNhdGVnb3J5XG4gICAgKSB7XG4gICAgICAgIG5ld05vZGUuZm9sZGVkID0gb2xkTm9kZS5mb2xkZWQ7XG4gICAgICAgIG5ld05vZGUuYWNjZXNzaWJpbGl0eS50YWJJbmRleCA9IG9sZE5vZGUuYWNjZXNzaWJpbGl0eS50YWJJbmRleDtcblxuICAgICAgICBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBR3JvdXAobmV3Tm9kZSkgJiYgaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBR3JvdXAob2xkTm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMubWVyZ2VHcm91cChuZXdOb2RlLCBvbGROb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIG1lcmdlR3JvdXAobmV3R3JvdXA6IEludGVybmFsTmF2U2VsZWN0b3JHcm91cCwgb2xkR3JvdXA6IEludGVybmFsTmF2U2VsZWN0b3JHcm91cCkge1xuICAgICAgICBuZXdHcm91cC5kaXNwbGF5Q291bnRlciA9IG9sZEdyb3VwLmRpc3BsYXlDb3VudGVyO1xuICAgICAgICBuZXdHcm91cC5kaXNwbGF5VG9rZW5JbnZhbGlkID0gb2xkR3JvdXAuZGlzcGxheVRva2VuSW52YWxpZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBtZXJnZUxlYWYobmV3TGVhZjogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWYsIG9sZExlYWY6IEludGVybmFsTmF2U2VsZWN0b3JMZWFmKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW50ZXJuYWxMZWFmTG9naWNWYWxpZChuZXdMZWFmKSkge1xuICAgICAgICAgICAgbmV3TGVhZi52aWV3TW9yZURpc3BsYXlhYmxlID0gbmV3TGVhZi5kZXRhaWxzLmxlbmd0aCA+IG5ld0xlYWYudmlld01vcmVEZXRhaWxzRGlzcGxheWVkTGltaXQ7XG4gICAgICAgICAgICBuZXdMZWFmLnZpZXdNb3JlRGlzcGxheWVkID0gb2xkTGVhZi52aWV3TW9yZURpc3BsYXllZDtcblxuICAgICAgICAgICAgbmV3TGVhZi5kaXNwbGF5Q291bnRlciA9IG9sZExlYWYuZGlzcGxheUNvdW50ZXI7XG4gICAgICAgICAgICBuZXdMZWFmLmZvbGRlZCA9IG9sZExlYWYuZm9sZGVkO1xuICAgICAgICAgICAgbmV3TGVhZi5zZWxlY3RlZCA9IG9sZExlYWYuc2VsZWN0ZWQ7XG5cbiAgICAgICAgICAgIG5ld0xlYWYuYWNjZXNzaWJpbGl0eS50YWJJbmRleCA9IG9sZExlYWYuYWNjZXNzaWJpbGl0eS50YWJJbmRleDtcblxuICAgICAgICAgICAgY29uc3Qgb2xkRGV0YWlsQnlVSWQgPSBhc3NvY2lhdGVCeShvbGRMZWFmLmRldGFpbHMsICd1aWQnKTtcbiAgICAgICAgICAgIG5ld0xlYWYuZGV0YWlscy5mb3JFYWNoKG5ld0RldGFpbCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFvbGREZXRhaWxCeVVJZFtuZXdEZXRhaWwudWlkXSB8fCBuZXdEZXRhaWwuZXJyb3JSZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXdEZXRhaWwuc2VsZWN0ZWQgPSBvbGREZXRhaWxCeVVJZFtuZXdEZXRhaWwudWlkXS5zZWxlY3RlZDtcbiAgICAgICAgICAgICAgICBuZXdEZXRhaWwuYWNjZXNzaWJpbGl0eS50YWJJbmRleCA9IG9sZERldGFpbEJ5VUlkW25ld0RldGFpbC51aWRdLmFjY2Vzc2liaWxpdHkudGFiSW5kZXg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZERldGFpbEhhc0ZvY3VzZWQgPSBvbGRMZWFmLmRldGFpbHMuc29tZShvbGREZXRhaWwgPT4gb2xkRGV0YWlsLmFjY2Vzc2liaWxpdHkudGFiSW5kZXggPT09IDApO1xuICAgICAgICAgICAgaWYgKG9sZERldGFpbEhhc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICBuZXdMZWFmLmFjY2Vzc2liaWxpdHkudGFiSW5kZXggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXNJbnRlcm5hbExlYWZMb2dpY1ZhbGlkKGxlYWY6IEludGVybmFsTmF2U2VsZWN0b3JMZWFmKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhbGVhZi5kaXNhYmxlZCAmJiAhbGVhZi5kaXNwbGF5VG9rZW5JbnZhbGlkICYmICFsZWFmLmRpc3BsYXlGZWF0dXJlTG9ja2VkO1xuICAgIH1cbn1cbiJdfQ==