@daffodil/design 0.60.0 → 0.62.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/accordion/examples/package.json +1 -1
  2. package/article/examples/package.json +1 -1
  3. package/atoms/button/button.component.d.ts +18 -2
  4. package/atoms/button/button.module.d.ts +2 -1
  5. package/atoms/form/error-message/error-message.component.d.ts +1 -0
  6. package/atoms/form/form-label/form-label.directive.d.ts +6 -0
  7. package/atoms/form/form-label/form-label.module.d.ts +7 -0
  8. package/atoms/form/form-label/public_api.d.ts +2 -0
  9. package/atoms/form/{select/select/select.component.d.ts → native-select/native-select.component.d.ts} +1 -1
  10. package/atoms/form/{select/select.module.d.ts → native-select/native-select.module.d.ts} +1 -1
  11. package/atoms/form/native-select/public_api.d.ts +2 -0
  12. package/atoms/form/quantity-field/quantity-field.module.d.ts +1 -1
  13. package/atoms/form/quantity-field/quantity-select/quantity-select.component.d.ts +1 -1
  14. package/atoms/loading-icon/loading-icon.component.d.ts +3 -3
  15. package/button/examples/examples.d.ts +4 -0
  16. package/button/examples/flat-button/flat-button.component.d.ts +7 -0
  17. package/button/examples/flat-button/flat-button.module.d.ts +9 -0
  18. package/button/examples/package.json +1 -1
  19. package/button/examples/public_api.d.ts +10 -9
  20. package/callout/examples/package.json +1 -1
  21. package/card/examples/package.json +1 -1
  22. package/checkbox/examples/package.json +1 -1
  23. package/container/examples/package.json +1 -1
  24. package/core/animation/animation-state-with-params.d.ts +8 -0
  25. package/core/public_api.d.ts +3 -2
  26. package/core/statusable/public_api.d.ts +2 -0
  27. package/esm2020/atoms/button/button.component.mjs +62 -5
  28. package/esm2020/atoms/button/button.module.mjs +6 -2
  29. package/esm2020/atoms/form/error-message/error-message.component.mjs +10 -4
  30. package/esm2020/atoms/form/form-label/form-label.directive.mjs +19 -0
  31. package/esm2020/atoms/form/form-label/form-label.module.mjs +20 -0
  32. package/esm2020/atoms/form/form-label/public_api.mjs +3 -0
  33. package/esm2020/atoms/form/native-select/native-select.component.mjs +64 -0
  34. package/esm2020/atoms/form/{select/select.module.mjs → native-select/native-select.module.mjs} +2 -2
  35. package/esm2020/atoms/form/native-select/public_api.mjs +3 -0
  36. package/esm2020/atoms/form/quantity-field/quantity-field.module.mjs +2 -2
  37. package/esm2020/atoms/form/quantity-field/quantity-select/quantity-select.component.mjs +3 -3
  38. package/esm2020/atoms/image/image.component.mjs +2 -2
  39. package/esm2020/atoms/loading-icon/loading-icon.component.mjs +4 -5
  40. package/esm2020/button/examples/basic-button/basic-button.component.mjs +7 -6
  41. package/esm2020/button/examples/examples.mjs +19 -0
  42. package/esm2020/button/examples/flat-button/flat-button.component.mjs +24 -0
  43. package/esm2020/button/examples/flat-button/flat-button.module.mjs +30 -0
  44. package/esm2020/button/examples/icon-button/icon-button.component.mjs +6 -5
  45. package/esm2020/button/examples/public_api.mjs +11 -18
  46. package/esm2020/button/examples/raised-button/raised-button.component.mjs +7 -6
  47. package/esm2020/button/examples/sizeable-button/sizeable-button.component.mjs +3 -7
  48. package/esm2020/button/examples/statusable-button/statusable-button.component.mjs +3 -11
  49. package/esm2020/button/examples/stroked-button/stroked-button.component.mjs +7 -6
  50. package/esm2020/button/examples/underline-button/underline-button.component.mjs +7 -6
  51. package/esm2020/button/examples/underline-button/underline-button.module.mjs +1 -1
  52. package/esm2020/callout/examples/callout-text-alignment/callout-text-alignment.component.mjs +1 -1
  53. package/esm2020/callout/examples/callout-theming/callout-theming.component.mjs +1 -1
  54. package/esm2020/callout/examples/callout-with-grid/callout-with-grid.component.mjs +1 -1
  55. package/esm2020/callout/examples/compact-callout/compact-callout.component.mjs +1 -1
  56. package/esm2020/card/examples/basic-card/basic-card.component.mjs +1 -1
  57. package/esm2020/card/examples/card-orientation/card-orientation.component.mjs +1 -1
  58. package/esm2020/checkbox/examples/basic-checkbox/basic-checkbox.component.mjs +1 -1
  59. package/esm2020/checkbox/examples/checkbox-set/checkbox-set.component.mjs +1 -1
  60. package/esm2020/core/animation/animation-state-with-params.mjs +2 -0
  61. package/esm2020/core/public_api.mjs +4 -3
  62. package/esm2020/core/statusable/public_api.mjs +3 -0
  63. package/esm2020/hero/examples/compact-hero/compact-hero.component.mjs +1 -1
  64. package/esm2020/hero/examples/hero-text-alignment/hero-text-alignment.component.mjs +1 -1
  65. package/esm2020/hero/examples/hero-theming/hero-theming.component.mjs +1 -1
  66. package/esm2020/hero/examples/hero-with-grid/hero-with-grid.component.mjs +1 -1
  67. package/esm2020/menu/examples/basic-menu/basic-menu.component.mjs +1 -1
  68. package/esm2020/modal/examples/basic-modal/basic-modal.component.mjs +1 -1
  69. package/esm2020/modal/examples/basic-modal/modal-content.component.mjs +1 -1
  70. package/esm2020/molecules/backdrop/animation/backdrop-animation-state.mjs +2 -0
  71. package/esm2020/molecules/backdrop/animation/backdrop-animation.mjs +6 -2
  72. package/esm2020/molecules/backdrop/backdrop/backdrop.component.mjs +40 -5
  73. package/esm2020/molecules/media-gallery/media-gallery.component.mjs +2 -2
  74. package/esm2020/molecules/qty-dropdown/qty-dropdown.component.mjs +1 -1
  75. package/esm2020/molecules/qty-dropdown/qty-dropdown.module.mjs +2 -2
  76. package/esm2020/molecules/sidebar/animation/sidebar-animation-state.mjs +2 -2
  77. package/esm2020/molecules/sidebar/animation/sidebar-animation-width.mjs +2 -0
  78. package/esm2020/molecules/sidebar/animation/sidebar-animation.mjs +21 -4
  79. package/esm2020/molecules/sidebar/animation/sidebar-viewport-animation-state.mjs +3 -0
  80. package/esm2020/molecules/sidebar/helper/sidebar-mode.mjs +1 -1
  81. package/esm2020/molecules/sidebar/helper/sidebar-side.mjs +2 -0
  82. package/esm2020/molecules/sidebar/public_api.mjs +1 -2
  83. package/esm2020/molecules/sidebar/sidebar/sidebar.component.mjs +62 -10
  84. package/esm2020/molecules/sidebar/sidebar-viewport/backdrop-interactable.mjs +5 -0
  85. package/esm2020/molecules/sidebar/sidebar-viewport/content-pad.mjs +17 -0
  86. package/esm2020/molecules/sidebar/sidebar-viewport/content-shift.mjs +21 -0
  87. package/esm2020/molecules/sidebar/sidebar-viewport/sidebar-viewport.component.mjs +83 -81
  88. package/esm2020/navbar/examples/basic-navbar/basic-navbar.component.mjs +1 -1
  89. package/esm2020/navbar/examples/contained-navbar/contained-navbar.component.mjs +1 -1
  90. package/esm2020/navbar/examples/navbar-theming/navbar-theming.component.mjs +1 -1
  91. package/esm2020/navbar/examples/raised-navbar/raised-navbar.component.mjs +1 -1
  92. package/esm2020/public_api.mjs +3 -2
  93. package/esm2020/sidebar/examples/basic-sidebar/basic-sidebar.component.mjs +12 -0
  94. package/esm2020/sidebar/examples/basic-sidebar/basic-sidebar.module.mjs +29 -0
  95. package/esm2020/sidebar/examples/daffodil-design-sidebar-examples.mjs +5 -0
  96. package/esm2020/sidebar/examples/fixed-and-over-sidebar/fixed-and-over-sidebar.component.mjs +21 -0
  97. package/esm2020/sidebar/examples/fixed-and-over-sidebar/fixed-and-over-sidebar.module.mjs +32 -0
  98. package/esm2020/sidebar/examples/index.mjs +2 -0
  99. package/esm2020/sidebar/examples/public_api.mjs +18 -0
  100. package/esm2020/sidebar/examples/sidebar-with-sticky/sidebar-with-sticky.component.mjs +12 -0
  101. package/esm2020/sidebar/examples/sidebar-with-sticky/sidebar-with-sticky.module.mjs +29 -0
  102. package/esm2020/sidebar/examples/two-fixed-sidebars-either-side/two-fixed-sidebars-either-side.component.mjs +12 -0
  103. package/esm2020/sidebar/examples/two-fixed-sidebars-either-side/two-fixed-sidebars-either-side.module.mjs +29 -0
  104. package/esm2020/sidebar/examples/under-sidebar/under-sidebar.component.mjs +26 -0
  105. package/esm2020/sidebar/examples/under-sidebar/under-sidebar.module.mjs +32 -0
  106. package/esm2020/tree/daffodil-design-tree.mjs +5 -0
  107. package/esm2020/tree/examples/basic-tree/basic-tree.component.mjs +39 -0
  108. package/esm2020/tree/examples/basic-tree/basic-tree.module.mjs +34 -0
  109. package/esm2020/tree/examples/daffodil-design-tree-examples.mjs +5 -0
  110. package/esm2020/tree/examples/index.mjs +2 -0
  111. package/esm2020/tree/examples/public_api.mjs +7 -0
  112. package/esm2020/tree/index.mjs +2 -0
  113. package/esm2020/tree/interfaces/recursive-key.mjs +2 -0
  114. package/esm2020/tree/interfaces/tree-data.mjs +2 -0
  115. package/esm2020/tree/interfaces/tree-ui.mjs +2 -0
  116. package/esm2020/tree/public_api.mjs +5 -0
  117. package/esm2020/tree/tree/tree-notifier.service.mjs +45 -0
  118. package/esm2020/tree/tree/tree.component.mjs +106 -0
  119. package/esm2020/tree/tree-item/tree-item.directive.mjs +154 -0
  120. package/esm2020/tree/tree.module.mjs +31 -0
  121. package/esm2020/tree/utils/flatten-tree.mjs +47 -0
  122. package/esm2020/tree/utils/hydrate-tree.mjs +31 -0
  123. package/esm2020/tree/utils/transform-in-place.mjs +23 -0
  124. package/esm2020/tree/utils/traverse-tree.mjs +21 -0
  125. package/fesm2015/daffodil-design-button-examples.mjs +160 -122
  126. package/fesm2015/daffodil-design-button-examples.mjs.map +1 -1
  127. package/fesm2015/daffodil-design-callout-examples.mjs +4 -4
  128. package/fesm2015/daffodil-design-callout-examples.mjs.map +1 -1
  129. package/fesm2015/daffodil-design-card-examples.mjs +2 -2
  130. package/fesm2015/daffodil-design-card-examples.mjs.map +1 -1
  131. package/fesm2015/daffodil-design-checkbox-examples.mjs +2 -2
  132. package/fesm2015/daffodil-design-checkbox-examples.mjs.map +1 -1
  133. package/fesm2015/daffodil-design-hero-examples.mjs +4 -4
  134. package/fesm2015/daffodil-design-hero-examples.mjs.map +1 -1
  135. package/fesm2015/daffodil-design-menu-examples.mjs +1 -1
  136. package/fesm2015/daffodil-design-menu-examples.mjs.map +1 -1
  137. package/fesm2015/daffodil-design-modal-examples.mjs +2 -2
  138. package/fesm2015/daffodil-design-modal-examples.mjs.map +1 -1
  139. package/fesm2015/daffodil-design-navbar-examples.mjs +4 -4
  140. package/fesm2015/daffodil-design-navbar-examples.mjs.map +1 -1
  141. package/fesm2015/daffodil-design-sidebar-examples.mjs +218 -0
  142. package/fesm2015/daffodil-design-sidebar-examples.mjs.map +1 -0
  143. package/fesm2015/daffodil-design-tree-examples.mjs +81 -0
  144. package/fesm2015/daffodil-design-tree-examples.mjs.map +1 -0
  145. package/fesm2015/daffodil-design-tree.mjs +443 -0
  146. package/fesm2015/daffodil-design-tree.mjs.map +1 -0
  147. package/fesm2015/daffodil-design.mjs +440 -191
  148. package/fesm2015/daffodil-design.mjs.map +1 -1
  149. package/fesm2020/daffodil-design-button-examples.mjs +160 -122
  150. package/fesm2020/daffodil-design-button-examples.mjs.map +1 -1
  151. package/fesm2020/daffodil-design-callout-examples.mjs +4 -4
  152. package/fesm2020/daffodil-design-callout-examples.mjs.map +1 -1
  153. package/fesm2020/daffodil-design-card-examples.mjs +2 -2
  154. package/fesm2020/daffodil-design-card-examples.mjs.map +1 -1
  155. package/fesm2020/daffodil-design-checkbox-examples.mjs +2 -2
  156. package/fesm2020/daffodil-design-checkbox-examples.mjs.map +1 -1
  157. package/fesm2020/daffodil-design-hero-examples.mjs +4 -4
  158. package/fesm2020/daffodil-design-hero-examples.mjs.map +1 -1
  159. package/fesm2020/daffodil-design-menu-examples.mjs +1 -1
  160. package/fesm2020/daffodil-design-menu-examples.mjs.map +1 -1
  161. package/fesm2020/daffodil-design-modal-examples.mjs +2 -2
  162. package/fesm2020/daffodil-design-modal-examples.mjs.map +1 -1
  163. package/fesm2020/daffodil-design-navbar-examples.mjs +4 -4
  164. package/fesm2020/daffodil-design-navbar-examples.mjs.map +1 -1
  165. package/fesm2020/daffodil-design-sidebar-examples.mjs +218 -0
  166. package/fesm2020/daffodil-design-sidebar-examples.mjs.map +1 -0
  167. package/fesm2020/daffodil-design-tree-examples.mjs +81 -0
  168. package/fesm2020/daffodil-design-tree-examples.mjs.map +1 -0
  169. package/fesm2020/daffodil-design-tree.mjs +448 -0
  170. package/fesm2020/daffodil-design-tree.mjs.map +1 -0
  171. package/fesm2020/daffodil-design.mjs +440 -191
  172. package/fesm2020/daffodil-design.mjs.map +1 -1
  173. package/hero/examples/package.json +1 -1
  174. package/image/examples/package.json +1 -1
  175. package/input/examples/package.json +1 -1
  176. package/list/examples/package.json +1 -1
  177. package/loading-icon/examples/package.json +1 -1
  178. package/media-gallery/examples/package.json +1 -1
  179. package/menu/examples/package.json +1 -1
  180. package/modal/examples/package.json +1 -1
  181. package/molecules/backdrop/animation/backdrop-animation-state.d.ts +2 -0
  182. package/molecules/backdrop/backdrop/backdrop.component.d.ts +17 -3
  183. package/molecules/qty-dropdown/qty-dropdown.module.d.ts +1 -1
  184. package/molecules/sidebar/animation/sidebar-animation-state.d.ts +2 -1
  185. package/molecules/sidebar/animation/sidebar-animation-width.d.ts +2 -0
  186. package/molecules/sidebar/animation/sidebar-animation.d.ts +3 -1
  187. package/molecules/sidebar/animation/sidebar-viewport-animation-state.d.ts +6 -0
  188. package/molecules/sidebar/helper/sidebar-mode.d.ts +27 -1
  189. package/molecules/sidebar/helper/sidebar-side.d.ts +12 -0
  190. package/molecules/sidebar/public_api.d.ts +2 -1
  191. package/molecules/sidebar/sidebar/sidebar.component.d.ts +37 -5
  192. package/molecules/sidebar/sidebar-viewport/backdrop-interactable.d.ts +6 -0
  193. package/molecules/sidebar/sidebar-viewport/content-pad.d.ts +7 -0
  194. package/molecules/sidebar/sidebar-viewport/content-shift.d.ts +8 -0
  195. package/molecules/sidebar/sidebar-viewport/sidebar-viewport.component.d.ts +47 -44
  196. package/navbar/examples/package.json +1 -1
  197. package/package.json +1 -1
  198. package/paginator/examples/package.json +1 -1
  199. package/public_api.d.ts +2 -1
  200. package/quantity-field/examples/package.json +1 -1
  201. package/radio/examples/package.json +1 -1
  202. package/scss/global.scss +1 -0
  203. package/scss/state/skeleton/_mixins.scss +1 -0
  204. package/scss/theme.scss +4 -2
  205. package/scss/theming/_color-palettes.scss +5 -5
  206. package/sidebar/examples/basic-sidebar/basic-sidebar.component.d.ts +5 -0
  207. package/sidebar/examples/basic-sidebar/basic-sidebar.module.d.ts +8 -0
  208. package/sidebar/examples/daffodil-design-sidebar-examples.d.ts +5 -0
  209. package/sidebar/examples/fixed-and-over-sidebar/fixed-and-over-sidebar.component.d.ts +8 -0
  210. package/sidebar/examples/fixed-and-over-sidebar/fixed-and-over-sidebar.module.d.ts +8 -0
  211. package/sidebar/examples/index.d.ts +1 -0
  212. package/sidebar/examples/package.json +1 -0
  213. package/sidebar/examples/public_api.d.ts +2 -0
  214. package/sidebar/examples/sidebar-with-sticky/sidebar-with-sticky.component.d.ts +5 -0
  215. package/sidebar/examples/sidebar-with-sticky/sidebar-with-sticky.module.d.ts +8 -0
  216. package/sidebar/examples/two-fixed-sidebars-either-side/two-fixed-sidebars-either-side.component.d.ts +5 -0
  217. package/sidebar/examples/two-fixed-sidebars-either-side/two-fixed-sidebars-either-side.module.d.ts +8 -0
  218. package/sidebar/examples/under-sidebar/under-sidebar.component.d.ts +10 -0
  219. package/sidebar/examples/under-sidebar/under-sidebar.module.d.ts +8 -0
  220. package/src/atoms/button/button-theme-variants/button.scss +9 -18
  221. package/src/atoms/button/button-theme-variants/flat.scss +25 -0
  222. package/src/atoms/button/button-theme-variants/raised.scss +6 -26
  223. package/src/atoms/button/button-theme-variants/stroked.scss +12 -20
  224. package/src/atoms/button/button-theme.scss +121 -117
  225. package/src/atoms/form/{select → native-select}/README.md +1 -1
  226. package/src/atoms/form/{select/select/select-theme.scss → native-select/native-select-theme.scss} +3 -3
  227. package/src/atoms/loading-icon/loading-icon-theme.scss +4 -0
  228. package/src/molecules/sidebar/README.md +10 -0
  229. package/src/molecules/sidebar/helper/_variables.scss +7 -0
  230. package/src/molecules/sidebar/sidebar/sidebar-theme.scss +3 -3
  231. package/src/molecules/sidebar/sidebar-viewport/sidebar-viewport-theme.scss +5 -0
  232. package/tree/README.md +38 -0
  233. package/tree/daffodil-design-tree.d.ts +5 -0
  234. package/tree/examples/basic-tree/basic-tree.component.d.ts +7 -0
  235. package/tree/examples/basic-tree/basic-tree.module.d.ts +10 -0
  236. package/tree/examples/daffodil-design-tree-examples.d.ts +5 -0
  237. package/tree/examples/index.d.ts +1 -0
  238. package/tree/examples/package.json +1 -0
  239. package/tree/examples/public_api.d.ts +4 -0
  240. package/tree/index.d.ts +1 -0
  241. package/tree/interfaces/recursive-key.d.ts +3 -0
  242. package/tree/interfaces/tree-data.d.ts +13 -0
  243. package/tree/interfaces/tree-ui.d.ts +11 -0
  244. package/tree/package.json +1 -0
  245. package/tree/public_api.d.ts +6 -0
  246. package/tree/src/tree-theme.scss +38 -0
  247. package/tree/tree/tree-notifier.service.d.ts +32 -0
  248. package/tree/tree/tree.component.d.ts +75 -0
  249. package/tree/tree-item/tree-item.directive.d.ts +102 -0
  250. package/tree/tree.module.d.ts +9 -0
  251. package/tree/utils/flatten-tree.d.ts +19 -0
  252. package/tree/utils/hydrate-tree.d.ts +8 -0
  253. package/tree/utils/transform-in-place.d.ts +15 -0
  254. package/tree/utils/traverse-tree.d.ts +5 -0
  255. package/atoms/form/select/public_api.d.ts +0 -2
  256. package/esm2020/atoms/form/select/public_api.mjs +0 -3
  257. package/esm2020/atoms/form/select/select/select.component.mjs +0 -64
  258. package/src/atoms/button/button-theme-variants/focus.scss +0 -6
@@ -0,0 +1,106 @@
1
+ import { ChangeDetectionStrategy, Component, ContentChild, HostBinding, Input, TemplateRef, ViewEncapsulation, } from '@angular/core';
2
+ import { flattenTree, } from '../utils/flatten-tree';
3
+ import { hydrateTree } from '../utils/hydrate-tree';
4
+ import { DaffTreeNotifierService } from './tree-notifier.service';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./tree-notifier.service";
7
+ import * as i2 from "@angular/common";
8
+ /**
9
+ * The `DaffTreeComponent` allows you to render tree structures as interactable ui.
10
+ *
11
+ * They can be used like:
12
+ *
13
+ * ```html
14
+ * <ul daff-tree [tree]="tree">
15
+ * <ng-template #daffTreeItemWithChildrenTpl let-node>
16
+ * <button daffTreeItem [node]="node">{{ node.title }} </button>
17
+ * </ng-template>
18
+ *
19
+ * <ng-template #daffTreeItemTpl let-node>
20
+ * <a daffTreeItem [node]="node" [routerLink]="node.url">{{ node.title }}</a>
21
+ * </ng-template>
22
+ * </ul>
23
+ * ```
24
+ *
25
+ * where `tree` is a {@link DaffTreeData}.
26
+ *
27
+ */
28
+ export class DaffTreeComponent {
29
+ constructor(notifier) {
30
+ this.notifier = notifier;
31
+ /**
32
+ * The css class of the daff-tree.
33
+ *
34
+ * @docs-private
35
+ */
36
+ this.class = true;
37
+ /**
38
+ * The internal tree element.
39
+ */
40
+ this.tree = undefined;
41
+ /**
42
+ * The flattened tree data. You can iterate through this if you want to inspect
43
+ * the resulting array structure we computed to render the tree.
44
+ */
45
+ this.flatTree = [];
46
+ /**
47
+ * @docs-private
48
+ */
49
+ this._dataTree = undefined;
50
+ }
51
+ /**
52
+ * The tree data you would like to render.
53
+ */
54
+ get dataTree() {
55
+ return this._dataTree;
56
+ }
57
+ set dataTree(dataTree) {
58
+ if (!dataTree) {
59
+ this._dataTree = undefined;
60
+ this.tree = undefined;
61
+ this.flatTree = [];
62
+ return;
63
+ }
64
+ this._dataTree = dataTree;
65
+ this.tree = hydrateTree(this.dataTree);
66
+ this.flatTree = flattenTree(this.tree);
67
+ }
68
+ ;
69
+ /**
70
+ * The track-by function used to reduce tree-item re-renders
71
+ */
72
+ trackByTreeElement(index, el) {
73
+ return el.title;
74
+ }
75
+ /**
76
+ * @docs-private
77
+ */
78
+ ngOnInit() {
79
+ this.notifier.notice$.subscribe(() => {
80
+ this.flatTree = flattenTree(this.tree);
81
+ });
82
+ }
83
+ }
84
+ /** @nocollapse */ DaffTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DaffTreeComponent, deps: [{ token: i1.DaffTreeNotifierService }], target: i0.ɵɵFactoryTarget.Component });
85
+ /** @nocollapse */ DaffTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: DaffTreeComponent, selector: "ul[daff-tree]", inputs: { dataTree: ["tree", "dataTree"] }, host: { properties: { "class.daff-tree": "this.class" } }, providers: [
86
+ DaffTreeNotifierService,
87
+ ], queries: [{ propertyName: "withChildrenTemplate", first: true, predicate: ["daffTreeItemWithChildrenTpl"], descendants: true, static: true }, { propertyName: "treeItemTemplate", first: true, predicate: ["daffTreeItemTpl"], descendants: true, static: true }], ngImport: i0, template: "<ng-container *ngFor=\"let node of flatTree; trackBy: trackByTreeElement\">\n\t<li [attr.aria-level]=\"node.level\">\n\t\t<ng-container \n\t\t\t*ngTemplateOutlet=\"node.hasChildren ? withChildrenTemplate : treeItemTemplate; context: { $implicit: node }\">\n\t\t</ng-container>\t\n\t</li>\n</ng-container>", styles: [".daff-tree{margin:0;padding:0;list-style:none;--tree-padding: 16px}.daff-tree-item{cursor:pointer;-webkit-user-select:none;user-select:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;position:relative;background:none;border:0;padding:8px 16px 8px 0;line-height:1.5rem;font-weight:400;text-align:left;text-decoration:none;width:100%;padding-left:calc(var(--tree-padding) * (var(--depth)))}.daff-tree-item:before{content:\"\";position:absolute;top:0;bottom:0;left:0;width:4px}.daff-tree-item:focus,.daff-tree-item:focus-visible{z-index:1}.daff-tree-item.selected{font-weight:600}.daff-tree-item__parent{position:relative}.daff-tree-item__parent:after{content:\"\";position:absolute;top:48%;right:16px;display:inline-block;border-right:2px solid currentColor;border-bottom:2px solid currentColor;width:8px;height:8px;transform:translateY(-50%) rotate(45deg);transition:transform .15s}.daff-tree-item__parent.open:after{top:56%;transform:translateY(-50%) rotate(225deg)}\n"], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
88
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DaffTreeComponent, decorators: [{
89
+ type: Component,
90
+ args: [{ selector: 'ul[daff-tree]', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
91
+ DaffTreeNotifierService,
92
+ ], template: "<ng-container *ngFor=\"let node of flatTree; trackBy: trackByTreeElement\">\n\t<li [attr.aria-level]=\"node.level\">\n\t\t<ng-container \n\t\t\t*ngTemplateOutlet=\"node.hasChildren ? withChildrenTemplate : treeItemTemplate; context: { $implicit: node }\">\n\t\t</ng-container>\t\n\t</li>\n</ng-container>", styles: [".daff-tree{margin:0;padding:0;list-style:none;--tree-padding: 16px}.daff-tree-item{cursor:pointer;-webkit-user-select:none;user-select:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;position:relative;background:none;border:0;padding:8px 16px 8px 0;line-height:1.5rem;font-weight:400;text-align:left;text-decoration:none;width:100%;padding-left:calc(var(--tree-padding) * (var(--depth)))}.daff-tree-item:before{content:\"\";position:absolute;top:0;bottom:0;left:0;width:4px}.daff-tree-item:focus,.daff-tree-item:focus-visible{z-index:1}.daff-tree-item.selected{font-weight:600}.daff-tree-item__parent{position:relative}.daff-tree-item__parent:after{content:\"\";position:absolute;top:48%;right:16px;display:inline-block;border-right:2px solid currentColor;border-bottom:2px solid currentColor;width:8px;height:8px;transform:translateY(-50%) rotate(45deg);transition:transform .15s}.daff-tree-item__parent.open:after{top:56%;transform:translateY(-50%) rotate(225deg)}\n"] }]
93
+ }], ctorParameters: function () { return [{ type: i1.DaffTreeNotifierService }]; }, propDecorators: { class: [{
94
+ type: HostBinding,
95
+ args: ['class.daff-tree']
96
+ }], dataTree: [{
97
+ type: Input,
98
+ args: ['tree']
99
+ }], withChildrenTemplate: [{
100
+ type: ContentChild,
101
+ args: ['daffTreeItemWithChildrenTpl', { static: true }]
102
+ }], treeItemTemplate: [{
103
+ type: ContentChild,
104
+ args: ['daffTreeItemTpl', { static: true }]
105
+ }] } });
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2Rlc2lnbi90cmVlL3NyYy90cmVlL3RyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ24vdHJlZS9zcmMvdHJlZS90cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLFdBQVcsRUFDWCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUVMLFdBQVcsR0FDWixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQUVsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQVlILE1BQU0sT0FBTyxpQkFBaUI7SUEyRDVCLFlBQ1UsUUFBaUM7UUFBakMsYUFBUSxHQUFSLFFBQVEsQ0FBeUI7UUExRDNDOzs7O1dBSUc7UUFDNkIsVUFBSyxHQUFHLElBQUksQ0FBQztRQUU3Qzs7V0FFRztRQUNLLFNBQUksR0FBd0IsU0FBUyxDQUFDO1FBRTlDOzs7V0FHRztRQUNJLGFBQVEsR0FBdUIsRUFBRSxDQUFDO1FBRXpDOztXQUVHO1FBQ0ssY0FBUyxHQUEwQixTQUFTLENBQUM7SUFzQ2xELENBQUM7SUFwQ0o7O09BRUc7SUFDSCxJQUNJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLFFBQStCO1FBQzFDLElBQUcsQ0FBQyxRQUFRLEVBQUU7WUFDWixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztZQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNuQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFBQSxDQUFDO0lBcUJGOztPQUVHO0lBQ0gsa0JBQWtCLENBQUMsS0FBYSxFQUFFLEVBQU87UUFDdkMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O2lJQTdFVSxpQkFBaUI7cUhBQWpCLGlCQUFpQiwrSUFKakI7UUFDVCx1QkFBdUI7S0FDeEIsNlJDbERILGtUQU1lOzJGRDhDRixpQkFBaUI7a0JBWDdCLFNBQVM7K0JBRUUsZUFBZSxpQkFHVixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNULHVCQUF1QjtxQkFDeEI7OEdBUytCLEtBQUs7c0JBQXBDLFdBQVc7dUJBQUMsaUJBQWlCO2dCQXNCMUIsUUFBUTtzQkFEWCxLQUFLO3VCQUFDLE1BQU07Z0JBc0JiLG9CQUFvQjtzQkFEbkIsWUFBWTt1QkFBQyw2QkFBNkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBUVYsZ0JBQWdCO3NCQUFsRSxZQUFZO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IERhZmZUcmVlRGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdHJlZS1kYXRhJztcbmltcG9ydCB7IERhZmZUcmVlVWkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3RyZWUtdWknO1xuaW1wb3J0IHtcbiAgRGFmZlRyZWVGbGF0Tm9kZSxcbiAgZmxhdHRlblRyZWUsXG59IGZyb20gJy4uL3V0aWxzL2ZsYXR0ZW4tdHJlZSc7XG5pbXBvcnQgeyBoeWRyYXRlVHJlZSB9IGZyb20gJy4uL3V0aWxzL2h5ZHJhdGUtdHJlZSc7XG5pbXBvcnQgeyBEYWZmVHJlZU5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4vdHJlZS1ub3RpZmllci5zZXJ2aWNlJztcblxuLyoqXG4gKiBUaGUgYERhZmZUcmVlQ29tcG9uZW50YCBhbGxvd3MgeW91IHRvIHJlbmRlciB0cmVlIHN0cnVjdHVyZXMgYXMgaW50ZXJhY3RhYmxlIHVpLlxuICpcbiAqIFRoZXkgY2FuIGJlIHVzZWQgbGlrZTpcbiAqXG4gKiBgYGBodG1sXG4gKiA8dWwgZGFmZi10cmVlIFt0cmVlXT1cInRyZWVcIj5cbiAqICAgPG5nLXRlbXBsYXRlICNkYWZmVHJlZUl0ZW1XaXRoQ2hpbGRyZW5UcGwgbGV0LW5vZGU+XG4gKiAgICAgICA8YnV0dG9uIGRhZmZUcmVlSXRlbSBbbm9kZV09XCJub2RlXCI+e3sgbm9kZS50aXRsZSB9fSA8L2J1dHRvbj5cbiAqICAgPC9uZy10ZW1wbGF0ZT5cbiAqXG4gKiAgIDxuZy10ZW1wbGF0ZSAjZGFmZlRyZWVJdGVtVHBsIGxldC1ub2RlPlxuICogICAgICAgPGEgZGFmZlRyZWVJdGVtIFtub2RlXT1cIm5vZGVcIiBbcm91dGVyTGlua109XCJub2RlLnVybFwiPnt7IG5vZGUudGl0bGUgfX08L2E+XG4gKiAgIDwvbmctdGVtcGxhdGU+XG4gKiA8L3VsPlxuICogYGBgXG4gKlxuICogd2hlcmUgYHRyZWVgIGlzIGEge0BsaW5rIERhZmZUcmVlRGF0YX0uXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICd1bFtkYWZmLXRyZWVdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90cmVlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICBEYWZmVHJlZU5vdGlmaWVyU2VydmljZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRGFmZlRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBUaGUgY3NzIGNsYXNzIG9mIHRoZSBkYWZmLXRyZWUuXG4gICAqXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZGFmZi10cmVlJykgY2xhc3MgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUaGUgaW50ZXJuYWwgdHJlZSBlbGVtZW50LlxuICAgKi9cbiAgcHJpdmF0ZSB0cmVlOiBEYWZmVHJlZVVpPHVua25vd24+ID0gdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgZmxhdHRlbmVkIHRyZWUgZGF0YS4gWW91IGNhbiBpdGVyYXRlIHRocm91Z2ggdGhpcyBpZiB5b3Ugd2FudCB0byBpbnNwZWN0XG4gICAqIHRoZSByZXN1bHRpbmcgYXJyYXkgc3RydWN0dXJlIHdlIGNvbXB1dGVkIHRvIHJlbmRlciB0aGUgdHJlZS5cbiAgICovXG4gIHB1YmxpYyBmbGF0VHJlZTogRGFmZlRyZWVGbGF0Tm9kZVtdID0gW107XG5cbiAgLyoqXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2RhdGFUcmVlOiBEYWZmVHJlZURhdGE8dW5rbm93bj4gPSB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSB0cmVlIGRhdGEgeW91IHdvdWxkIGxpa2UgdG8gcmVuZGVyLlxuICAgKi9cbiAgQElucHV0KCd0cmVlJylcbiAgZ2V0IGRhdGFUcmVlKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhVHJlZTtcbiAgfVxuICBzZXQgZGF0YVRyZWUoZGF0YVRyZWU6IERhZmZUcmVlRGF0YTx1bmtub3duPil7XG4gICAgaWYoIWRhdGFUcmVlKSB7XG4gICAgICB0aGlzLl9kYXRhVHJlZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMudHJlZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZmxhdFRyZWUgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGF0YVRyZWUgPSBkYXRhVHJlZTtcbiAgICB0aGlzLnRyZWUgPSBoeWRyYXRlVHJlZSh0aGlzLmRhdGFUcmVlKTtcbiAgICB0aGlzLmZsYXRUcmVlID0gZmxhdHRlblRyZWUodGhpcy50cmVlKTtcbiAgfTtcblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gcmVuZGVyIHRyZWUtbm9kZXMgdGhhdCB0aGVtc2VsdmVzIGhhdmUgY2hpbGRyZW4uXG4gICAqXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ2RhZmZUcmVlSXRlbVdpdGhDaGlsZHJlblRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHdpdGhDaGlsZHJlblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byByZW5kZXIgdHJlZS1ub2RlcyB0aGF0IGhhdmUgbm8gY2hpbGRyZW4uXG4gICAqXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ2RhZmZUcmVlSXRlbVRwbCcsIHsgc3RhdGljOiB0cnVlIH0pIHRyZWVJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBub3RpZmllcjogRGFmZlRyZWVOb3RpZmllclNlcnZpY2UsXG4gICkge31cblxuICAvKipcbiAgICogVGhlIHRyYWNrLWJ5IGZ1bmN0aW9uIHVzZWQgdG8gcmVkdWNlIHRyZWUtaXRlbSByZS1yZW5kZXJzXG4gICAqL1xuICB0cmFja0J5VHJlZUVsZW1lbnQoaW5kZXg6IG51bWJlciwgZWw6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIGVsLnRpdGxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubm90aWZpZXIubm90aWNlJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5mbGF0VHJlZSA9IGZsYXR0ZW5UcmVlKHRoaXMudHJlZSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG5vZGUgb2YgZmxhdFRyZWU7IHRyYWNrQnk6IHRyYWNrQnlUcmVlRWxlbWVudFwiPlxuXHQ8bGkgW2F0dHIuYXJpYS1sZXZlbF09XCJub2RlLmxldmVsXCI+XG5cdFx0PG5nLWNvbnRhaW5lciBcblx0XHRcdCpuZ1RlbXBsYXRlT3V0bGV0PVwibm9kZS5oYXNDaGlsZHJlbiA/IHdpdGhDaGlsZHJlblRlbXBsYXRlIDogdHJlZUl0ZW1UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGUgfVwiPlxuXHRcdDwvbmctY29udGFpbmVyPlx0XG5cdDwvbGk+XG48L25nLWNvbnRhaW5lcj4iXX0=
@@ -0,0 +1,154 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { Directive, HostBinding, HostListener, Inject, Input, } from '@angular/core';
3
+ import { DaffTreeNotifierService } from '../tree/tree-notifier.service';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../tree/tree-notifier.service";
6
+ /**
7
+ * The `DaffTreeItemDirective` allows you to demarcate the elements which are
8
+ * tree-children that interact with the parent tree.
9
+ *
10
+ * They can be used like:
11
+ *
12
+ * ```html
13
+ * <ul daff-tree [tree]="tree">
14
+ * <ng-template #daffTreeItemWithChildrenTpl let-node>
15
+ * <button daffTreeItem [node]="node">{{ node.title }} </button>
16
+ * </ng-template>
17
+ *
18
+ * <ng-template #daffTreeItemTpl let-node>
19
+ * <a daffTreeItem [node]="node" [routerLink]="node.url">{{ node.title }}</a>
20
+ * </ng-template>
21
+ * </ul>
22
+ * ```
23
+ *
24
+ * where `tree` is a {@link DaffTreeData} and `daff-tree` is a {@link DaffTreeComponent}.
25
+ *
26
+ */
27
+ export class DaffTreeItemDirective {
28
+ constructor(document, treeNotifier) {
29
+ this.document = document;
30
+ this.treeNotifier = treeNotifier;
31
+ /**
32
+ * The css class of the daff-tree.
33
+ *
34
+ * @docs-private
35
+ */
36
+ this.class = true;
37
+ /**
38
+ * The css class of a DaffTreeItemDirective that has children.
39
+ *
40
+ * @docs-private
41
+ */
42
+ this.classParent = false;
43
+ /**
44
+ * The CSS class indicating whether or not the tree is `open`.
45
+ */
46
+ this.openClass = false;
47
+ /**
48
+ * Whether or not the tree item is the currently active item.
49
+ * Note that there is no requirement there there only be one active item at a time.
50
+ */
51
+ this.selected = false;
52
+ }
53
+ /**
54
+ * The CSS class indicating whether or not the tree is `selected`.
55
+ */
56
+ get selectedClass() {
57
+ return this.selected;
58
+ }
59
+ ;
60
+ /**
61
+ * The {@link DaffTreeFlatNode} associated with this specific tree item.
62
+ */
63
+ get node() {
64
+ return this._node;
65
+ }
66
+ ;
67
+ set node(val) {
68
+ this._node = val;
69
+ this.id = 'tree-' + this._node.id;
70
+ this.ariaExpanded = this._node._treeRef.open ? 'true' : 'false';
71
+ this.depth = this._node.level;
72
+ this.classParent = this._node.hasChildren;
73
+ this.openClass = this._node._treeRef.open;
74
+ }
75
+ /**
76
+ * @docs-private
77
+ */
78
+ onEscape() {
79
+ this.toggleParent(this.node);
80
+ }
81
+ /**
82
+ * @docs-private
83
+ */
84
+ onClick() {
85
+ if (this.node.hasChildren) {
86
+ this.toggleTree(this.node);
87
+ }
88
+ this.treeNotifier.notify();
89
+ }
90
+ /**
91
+ * Toggle the open state of the tree's parent.
92
+ */
93
+ toggleParent(node) {
94
+ if (node._treeRef?.parent.parent === undefined) {
95
+ return;
96
+ }
97
+ node._treeRef.parent.open = !node._treeRef.parent.open;
98
+ this.document.getElementById('tree-' + node._treeRef.parent.id).focus();
99
+ }
100
+ /**
101
+ * Toggle the open state of this specific subtree tree.
102
+ */
103
+ toggleTree(node) {
104
+ if (node._treeRef.open === false) {
105
+ node._treeRef.open = true;
106
+ }
107
+ else {
108
+ node._treeRef.open = false;
109
+ }
110
+ }
111
+ }
112
+ /** @nocollapse */ DaffTreeItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DaffTreeItemDirective, deps: [{ token: DOCUMENT }, { token: i1.DaffTreeNotifierService }], target: i0.ɵɵFactoryTarget.Directive });
113
+ /** @nocollapse */ DaffTreeItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: DaffTreeItemDirective, selector: "[daffTreeItem]", inputs: { node: "node", selected: "selected" }, host: { listeners: { "keydown.escape": "onEscape()", "click": "onClick()" }, properties: { "class.daff-tree-item": "this.class", "class.daff-tree-item__parent": "this.classParent", "attr.id": "this.id", "attr.aria-expanded": "this.ariaExpanded", "style.--depth": "this.depth", "class.selected": "this.selectedClass", "class.open": "this.openClass" } }, ngImport: i0 });
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DaffTreeItemDirective, decorators: [{
115
+ type: Directive,
116
+ args: [{
117
+ selector: '[daffTreeItem]',
118
+ }]
119
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
120
+ type: Inject,
121
+ args: [DOCUMENT]
122
+ }] }, { type: i1.DaffTreeNotifierService }]; }, propDecorators: { class: [{
123
+ type: HostBinding,
124
+ args: ['class.daff-tree-item']
125
+ }], classParent: [{
126
+ type: HostBinding,
127
+ args: ['class.daff-tree-item__parent']
128
+ }], id: [{
129
+ type: HostBinding,
130
+ args: ['attr.id']
131
+ }], ariaExpanded: [{
132
+ type: HostBinding,
133
+ args: ['attr.aria-expanded']
134
+ }], depth: [{
135
+ type: HostBinding,
136
+ args: ['style.--depth']
137
+ }], selectedClass: [{
138
+ type: HostBinding,
139
+ args: ['class.selected']
140
+ }], openClass: [{
141
+ type: HostBinding,
142
+ args: ['class.open']
143
+ }], node: [{
144
+ type: Input
145
+ }], selected: [{
146
+ type: Input
147
+ }], onEscape: [{
148
+ type: HostListener,
149
+ args: ['keydown.escape']
150
+ }], onClick: [{
151
+ type: HostListener,
152
+ args: ['click']
153
+ }] } });
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1pdGVtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduL3RyZWUvc3JjL3RyZWUtaXRlbS90cmVlLWl0ZW0uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7O0FBR3hFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUlILE1BQU0sT0FBTyxxQkFBcUI7SUErRWhDLFlBQzRCLFFBQWEsRUFDL0IsWUFBcUM7UUFEbkIsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUMvQixpQkFBWSxHQUFaLFlBQVksQ0FBeUI7UUEvRS9DOzs7O1dBSUc7UUFDa0MsVUFBSyxHQUFHLElBQUksQ0FBQztRQUVsRDs7OztXQUlHO1FBQzBDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBK0JqRTs7V0FFRztRQUN3QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBeUI3Qzs7O1dBR0c7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO0lBS3ZCLENBQUM7SUE1Q0o7O09BRUc7SUFDSCxJQUFtQyxhQUFhO1FBQzlDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBQUEsQ0FBQztJQWNGOztPQUVHO0lBQ0gsSUFDSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxJQUFJLENBQUMsR0FBcUI7UUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDakIsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUMxQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztJQUM1QyxDQUFDO0lBYUQ7O09BRUc7SUFFSCxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBRUgsT0FBTztRQUNMLElBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUI7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVksQ0FBQyxJQUFzQjtRQUNqQyxJQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDN0MsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQzVDLElBQUksQ0FBQyxRQUFTLENBQUMsY0FBYyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0RixDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVLENBQUMsSUFBc0I7UUFDL0IsSUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQzNCO2FBQU07WUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDNUI7SUFDSCxDQUFDOztxSUEzSFUscUJBQXFCLGtCQWdGdEIsUUFBUTt5SEFoRlAscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBSGpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtpQkFDM0I7OzBCQWlGSSxNQUFNOzJCQUFDLFFBQVE7a0ZBekVtQixLQUFLO3NCQUF6QyxXQUFXO3VCQUFDLHNCQUFzQjtnQkFPVSxXQUFXO3NCQUF2RCxXQUFXO3VCQUFDLDhCQUE4QjtnQkFPbkIsRUFBRTtzQkFBekIsV0FBVzt1QkFBQyxTQUFTO2dCQVFhLFlBQVk7c0JBQTlDLFdBQVc7dUJBQUMsb0JBQW9CO2dCQU9ILEtBQUs7c0JBQWxDLFdBQVc7dUJBQUMsZUFBZTtnQkFLTyxhQUFhO3NCQUEvQyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFPRixTQUFTO3NCQUFuQyxXQUFXO3VCQUFDLFlBQVk7Z0JBYXJCLElBQUk7c0JBRFAsS0FBSztnQkFpQkcsUUFBUTtzQkFBaEIsS0FBSztnQkFXTixRQUFRO3NCQURQLFlBQVk7dUJBQUMsZ0JBQWdCO2dCQVM5QixPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IERhZmZUcmVlTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vdHJlZS90cmVlLW5vdGlmaWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGFmZlRyZWVGbGF0Tm9kZSB9IGZyb20gJy4uL3V0aWxzL2ZsYXR0ZW4tdHJlZSc7XG5cbi8qKlxuICogVGhlIGBEYWZmVHJlZUl0ZW1EaXJlY3RpdmVgIGFsbG93cyB5b3UgdG8gZGVtYXJjYXRlIHRoZSBlbGVtZW50cyB3aGljaCBhcmVcbiAqIHRyZWUtY2hpbGRyZW4gdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBwYXJlbnQgdHJlZS5cbiAqXG4gKiBUaGV5IGNhbiBiZSB1c2VkIGxpa2U6XG4gKlxuICogYGBgaHRtbFxuICogPHVsIGRhZmYtdHJlZSBbdHJlZV09XCJ0cmVlXCI+XG4gKiAgIDxuZy10ZW1wbGF0ZSAjZGFmZlRyZWVJdGVtV2l0aENoaWxkcmVuVHBsIGxldC1ub2RlPlxuICogICAgICAgPGJ1dHRvbiBkYWZmVHJlZUl0ZW0gW25vZGVdPVwibm9kZVwiPnt7IG5vZGUudGl0bGUgfX0gPC9idXR0b24+XG4gKiAgIDwvbmctdGVtcGxhdGU+XG4gKlxuICogICA8bmctdGVtcGxhdGUgI2RhZmZUcmVlSXRlbVRwbCBsZXQtbm9kZT5cbiAqICAgICAgIDxhIGRhZmZUcmVlSXRlbSBbbm9kZV09XCJub2RlXCIgW3JvdXRlckxpbmtdPVwibm9kZS51cmxcIj57eyBub2RlLnRpdGxlIH19PC9hPlxuICogICA8L25nLXRlbXBsYXRlPlxuICogPC91bD5cbiAqIGBgYFxuICpcbiAqIHdoZXJlIGB0cmVlYCBpcyBhIHtAbGluayBEYWZmVHJlZURhdGF9IGFuZCBgZGFmZi10cmVlYCBpcyBhIHtAbGluayBEYWZmVHJlZUNvbXBvbmVudH0uXG4gKlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZGFmZlRyZWVJdGVtXScsXG59KVxuZXhwb3J0IGNsYXNzIERhZmZUcmVlSXRlbURpcmVjdGl2ZSB7XG5cbiAgLyoqXG4gICAqIFRoZSBjc3MgY2xhc3Mgb2YgdGhlIGRhZmYtdHJlZS5cbiAgICpcbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kYWZmLXRyZWUtaXRlbScpIGNsYXNzID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIGNzcyBjbGFzcyBvZiBhIERhZmZUcmVlSXRlbURpcmVjdGl2ZSB0aGF0IGhhcyBjaGlsZHJlbi5cbiAgICpcbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kYWZmLXRyZWUtaXRlbV9fcGFyZW50JykgY2xhc3NQYXJlbnQgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIGh0bWwgYGlkYCBvZiB0aGUgdHJlZSBpdGVtLiBUaGlzIGlzIGRlcml2ZWQgZnJvbSB0aGUge0BsaW5rIERhZmZUcmVlRGF0YX0uXG4gICAqXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5pZCcpIGlkO1xuXG4gIC8qKlxuICAgKiBBY2Nlc3NpYmlsaXR5IHByb3BlcnR5LCBub3RpZnlpbmcgdXNlcnMgYWJvdXQgd2hldGhlclxuICAgKiBvciBub3QgdGhlIHRyZWUgaXRlbSBpcyBvcGVuLlxuICAgKlxuICAgKiBAZG9jcy1wcml2YXRlXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1leHBhbmRlZCcpIGFyaWFFeHBhbmRlZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGNzcyB2YXJpYWJsZSBpbmRpY2F0aW5nIHRoZSBkZXB0aCBvZiB0aGUgdHJlZS5cbiAgICogWW91IGNhbiB1c2UgdGhpcyB0byBzdHlsZSB5b3VyIHRlbXBsYXRlcyBpZiB5b3Ugd2FudCB0b1xuICAgKiB1c2UgZGlmZmVyZW50IGRlc2lnbnMgYXQgZGlmZmVyZW50IGRlcHRocy5cbiAgICovXG4gIEBIb3N0QmluZGluZygnc3R5bGUuLS1kZXB0aCcpIGRlcHRoOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBDU1MgY2xhc3MgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgdHJlZSBpcyBgc2VsZWN0ZWRgLlxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZWxlY3RlZCcpIGdldCBzZWxlY3RlZENsYXNzKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgQ1NTIGNsYXNzIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdGhlIHRyZWUgaXMgYG9wZW5gLlxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5vcGVuJykgb3BlbkNsYXNzID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSB7QGxpbmsgRGFmZlRyZWVGbGF0Tm9kZX0gYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3BlY2lmaWMgdHJlZSBpdGVtLlxuICAgKlxuICAgKiBAZG9jcy1wcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9ub2RlOiBEYWZmVHJlZUZsYXROb2RlO1xuXG4gIC8qKlxuICAgKiBUaGUge0BsaW5rIERhZmZUcmVlRmxhdE5vZGV9IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNwZWNpZmljIHRyZWUgaXRlbS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBub2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9ub2RlO1xuICB9O1xuICBzZXQgbm9kZSh2YWw6IERhZmZUcmVlRmxhdE5vZGUpIHtcbiAgICB0aGlzLl9ub2RlID0gdmFsO1xuICAgIHRoaXMuaWQgPSAndHJlZS0nICsgdGhpcy5fbm9kZS5pZDtcbiAgICB0aGlzLmFyaWFFeHBhbmRlZCA9IHRoaXMuX25vZGUuX3RyZWVSZWYub3BlbiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgdGhpcy5kZXB0aCA9IHRoaXMuX25vZGUubGV2ZWw7XG4gICAgdGhpcy5jbGFzc1BhcmVudCA9IHRoaXMuX25vZGUuaGFzQ2hpbGRyZW47XG4gICAgdGhpcy5vcGVuQ2xhc3MgPSB0aGlzLl9ub2RlLl90cmVlUmVmLm9wZW47XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIHRyZWUgaXRlbSBpcyB0aGUgY3VycmVudGx5IGFjdGl2ZSBpdGVtLlxuICAgKiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gcmVxdWlyZW1lbnQgdGhlcmUgdGhlcmUgb25seSBiZSBvbmUgYWN0aXZlIGl0ZW0gYXQgYSB0aW1lLlxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBhbnksXG4gICAgcHJpdmF0ZSB0cmVlTm90aWZpZXI6IERhZmZUcmVlTm90aWZpZXJTZXJ2aWNlLFxuICApIHt9XG5cbiAgLyoqXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZXNjYXBlJylcbiAgb25Fc2NhcGUoKSB7XG4gICAgdGhpcy50b2dnbGVQYXJlbnQodGhpcy5ub2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZG9jcy1wcml2YXRlXG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIG9uQ2xpY2soKSB7XG4gICAgaWYodGhpcy5ub2RlLmhhc0NoaWxkcmVuKSB7XG4gICAgICB0aGlzLnRvZ2dsZVRyZWUodGhpcy5ub2RlKTtcbiAgICB9XG4gICAgdGhpcy50cmVlTm90aWZpZXIubm90aWZ5KCk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSBvcGVuIHN0YXRlIG9mIHRoZSB0cmVlJ3MgcGFyZW50LlxuICAgKi9cbiAgdG9nZ2xlUGFyZW50KG5vZGU6IERhZmZUcmVlRmxhdE5vZGUpIHtcbiAgICBpZihub2RlLl90cmVlUmVmPy5wYXJlbnQucGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbm9kZS5fdHJlZVJlZi5wYXJlbnQub3BlbiA9ICFub2RlLl90cmVlUmVmLnBhcmVudC5vcGVuO1xuICAgICg8RG9jdW1lbnQ+dGhpcy5kb2N1bWVudCkuZ2V0RWxlbWVudEJ5SWQoJ3RyZWUtJyArIG5vZGUuX3RyZWVSZWYucGFyZW50LmlkKS5mb2N1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgb3BlbiBzdGF0ZSBvZiB0aGlzIHNwZWNpZmljIHN1YnRyZWUgdHJlZS5cbiAgICovXG4gIHRvZ2dsZVRyZWUobm9kZTogRGFmZlRyZWVGbGF0Tm9kZSkge1xuICAgIGlmKG5vZGUuX3RyZWVSZWYub3BlbiA9PT0gZmFsc2UpIHtcbiAgICAgIG5vZGUuX3RyZWVSZWYub3BlbiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuX3RyZWVSZWYub3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,31 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { DaffTreeItemDirective } from './tree-item/tree-item.directive';
4
+ import { DaffTreeComponent } from './tree/tree.component';
5
+ import * as i0 from "@angular/core";
6
+ export class DaffTreeModule {
7
+ }
8
+ /** @nocollapse */ DaffTreeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DaffTreeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ /** @nocollapse */ DaffTreeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DaffTreeModule, declarations: [DaffTreeComponent,
10
+ DaffTreeItemDirective], imports: [CommonModule], exports: [DaffTreeComponent,
11
+ DaffTreeItemDirective] });
12
+ /** @nocollapse */ DaffTreeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DaffTreeModule, imports: [[
13
+ CommonModule,
14
+ ]] });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DaffTreeModule, decorators: [{
16
+ type: NgModule,
17
+ args: [{
18
+ declarations: [
19
+ DaffTreeComponent,
20
+ DaffTreeItemDirective,
21
+ ],
22
+ imports: [
23
+ CommonModule,
24
+ ],
25
+ exports: [
26
+ DaffTreeComponent,
27
+ DaffTreeItemDirective,
28
+ ],
29
+ }]
30
+ }] });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2Rlc2lnbi90cmVlL3NyYy90cmVlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFlMUQsTUFBTSxPQUFPLGNBQWM7OzhIQUFkLGNBQWM7K0hBQWQsY0FBYyxpQkFYdkIsaUJBQWlCO1FBQ2pCLHFCQUFxQixhQUdyQixZQUFZLGFBR1osaUJBQWlCO1FBQ2pCLHFCQUFxQjsrSEFHWixjQUFjLFlBUmhCO1lBQ1AsWUFBWTtTQUNiOzJGQU1VLGNBQWM7a0JBYjFCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLGlCQUFpQjt3QkFDakIscUJBQXFCO3FCQUN0QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTtxQkFDYjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsaUJBQWlCO3dCQUNqQixxQkFBcUI7cUJBQ3RCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IERhZmZUcmVlSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4vdHJlZS1pdGVtL3RyZWUtaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGFmZlRyZWVDb21wb25lbnQgfSBmcm9tICcuL3RyZWUvdHJlZS5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBEYWZmVHJlZUNvbXBvbmVudCxcbiAgICBEYWZmVHJlZUl0ZW1EaXJlY3RpdmUsXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBEYWZmVHJlZUNvbXBvbmVudCxcbiAgICBEYWZmVHJlZUl0ZW1EaXJlY3RpdmUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERhZmZUcmVlTW9kdWxlIHsgfVxuIl19
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Flatten a DaffTreeUi<unknown> into an array, removing elements from the array
3
+ * below nodes in the tree that are not open.
4
+ */
5
+ export const flattenTree = (daffUiTree) => {
6
+ const tree = [];
7
+ let items = [
8
+ {
9
+ ...daffUiTree,
10
+ title: 'Root',
11
+ level: 0,
12
+ url: '/',
13
+ data: undefined,
14
+ open: true,
15
+ _treeRef: daffUiTree,
16
+ },
17
+ ];
18
+ while (items) {
19
+ const el = items.pop();
20
+ if (!el) {
21
+ break;
22
+ }
23
+ if (el.open) {
24
+ items = [
25
+ ...items,
26
+ ...el.items.map((i) => ({
27
+ ...i,
28
+ level: el.level + 1,
29
+ _treeRef: i,
30
+ })).reverse(),
31
+ ];
32
+ }
33
+ if (el._treeRef.parent?.open) {
34
+ tree.push({
35
+ id: el.id,
36
+ title: el.title,
37
+ level: el.level,
38
+ url: el.url,
39
+ hasChildren: el.items.length > 0,
40
+ data: undefined,
41
+ _treeRef: el._treeRef,
42
+ });
43
+ }
44
+ }
45
+ return tree;
46
+ };
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdHRlbi10cmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ24vdHJlZS9zcmMvdXRpbHMvZmxhdHRlbi10cmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdCQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxVQUErQixFQUFzQixFQUFFO0lBQ2pGLE1BQU0sSUFBSSxHQUF1QixFQUFFLENBQUM7SUFFcEMsSUFBSSxLQUFLLEdBQUc7UUFDVjtZQUNFLEdBQUcsVUFBVTtZQUNiLEtBQUssRUFBRSxNQUFNO1lBQ2IsS0FBSyxFQUFFLENBQUM7WUFDUixHQUFHLEVBQUUsR0FBRztZQUNSLElBQUksRUFBRSxTQUFTO1lBQ2YsSUFBSSxFQUFFLElBQUk7WUFDVixRQUFRLEVBQUUsVUFBVTtTQUNyQjtLQUNGLENBQUM7SUFHRixPQUFNLEtBQUssRUFBRTtRQUNYLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFHLENBQUMsRUFBRSxFQUFFO1lBQ04sTUFBTTtTQUNQO1FBRUQsSUFBRyxFQUFFLENBQUMsSUFBSSxFQUFFO1lBQ1YsS0FBSyxHQUFHO2dCQUNOLEdBQUcsS0FBSztnQkFDUixHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUN0QixHQUFHLENBQUM7b0JBQ0osS0FBSyxFQUNMLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQztvQkFDWixRQUFRLEVBQUUsQ0FBQztpQkFDWixDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7YUFDZCxDQUFDO1NBQ0g7UUFFRCxJQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRTtZQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNSLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtnQkFDVCxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUs7Z0JBQ2YsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLO2dCQUNmLEdBQUcsRUFBRyxFQUFFLENBQUMsR0FBRztnQkFDWixXQUFXLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDaEMsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRO2FBQ3RCLENBQUMsQ0FBQztTQUNKO0tBQ0Y7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhZmZUcmVlVWkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3RyZWUtdWknO1xuXG4vKipcbiAqIEEgZmxhdHRlbmVkIG5vZGUgb2YgYSB0cmVlLiBUaGlzIGlzIHVzZWQgd2hlbiB0cmFuc2xhdGluZyB0aGUgdHJlZSBkYXRhXG4gKiBzdHJ1Y3R1cmUgaW50byBhbiBhcnJheS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYWZmVHJlZUZsYXROb2RlIHtcbiAgaWQ6IG51bWJlciB8IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGxldmVsOiBudW1iZXI7XG4gIGhhc0NoaWxkcmVuOiBib29sZWFuO1xuICBkYXRhOiB1bmtub3duO1xuICBfdHJlZVJlZjogRGFmZlRyZWVVaTx1bmtub3duPjtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGEgRGFmZlRyZWVVaTx1bmtub3duPiBpbnRvIGFuIGFycmF5LCByZW1vdmluZyBlbGVtZW50cyBmcm9tIHRoZSBhcnJheVxuICogYmVsb3cgbm9kZXMgaW4gdGhlIHRyZWUgdGhhdCBhcmUgbm90IG9wZW4uXG4gKi9cbmV4cG9ydCBjb25zdCBmbGF0dGVuVHJlZSA9IChkYWZmVWlUcmVlOiBEYWZmVHJlZVVpPHVua25vd24+KTogRGFmZlRyZWVGbGF0Tm9kZVtdID0+ICB7XG4gIGNvbnN0IHRyZWU6IERhZmZUcmVlRmxhdE5vZGVbXSA9IFtdO1xuXG4gIGxldCBpdGVtcyA9IFtcbiAgICB7XG4gICAgICAuLi5kYWZmVWlUcmVlLFxuICAgICAgdGl0bGU6ICdSb290JyxcbiAgICAgIGxldmVsOiAwLFxuICAgICAgdXJsOiAnLycsXG4gICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICBvcGVuOiB0cnVlLFxuICAgICAgX3RyZWVSZWY6IGRhZmZVaVRyZWUsXG4gICAgfSxcbiAgXTtcblxuXG4gIHdoaWxlKGl0ZW1zKSB7XG4gICAgY29uc3QgZWwgPSBpdGVtcy5wb3AoKTtcbiAgICBpZighZWwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmKGVsLm9wZW4pIHtcbiAgICAgIGl0ZW1zID0gW1xuICAgICAgICAuLi5pdGVtcyxcbiAgICAgICAgLi4uZWwuaXRlbXMubWFwKChpKSA9PiAoe1xuICAgICAgICAgIC4uLmksXG4gICAgICAgICAgbGV2ZWw6XG4gICAgICAgICAgZWwubGV2ZWwgKyAxLFxuICAgICAgICAgIF90cmVlUmVmOiBpLFxuICAgICAgICB9KSkucmV2ZXJzZSgpLFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBpZihlbC5fdHJlZVJlZi5wYXJlbnQ/Lm9wZW4pIHtcbiAgICAgIHRyZWUucHVzaCh7XG4gICAgICAgIGlkOiBlbC5pZCxcbiAgICAgICAgdGl0bGU6IGVsLnRpdGxlLFxuICAgICAgICBsZXZlbDogZWwubGV2ZWwsXG4gICAgICAgIHVybCA6IGVsLnVybCxcbiAgICAgICAgaGFzQ2hpbGRyZW46IGVsLml0ZW1zLmxlbmd0aCA+IDAsXG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgX3RyZWVSZWY6IGVsLl90cmVlUmVmLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRyZWU7XG59O1xuIl19
@@ -0,0 +1,31 @@
1
+ import { traverse } from './traverse-tree';
2
+ export const daffDataTreeToUiTree = (data, parent, open = false) => ({
3
+ id: data.id ?? data.title,
4
+ title: data.title,
5
+ url: data.url,
6
+ data: data.data,
7
+ open,
8
+ parent,
9
+ items: [],
10
+ });
11
+ /**
12
+ * This function translates the original data given to us by the client
13
+ * to the internal representation of the tree used by the {@link DaffTreeComponent}
14
+ */
15
+ export const hydrateTree = (data) => {
16
+ const tree = daffDataTreeToUiTree(data, undefined, true);
17
+ let treeStack = [
18
+ tree,
19
+ ];
20
+ traverse(data, (el) => {
21
+ const treeEl = treeStack.pop();
22
+ treeEl.items = el.items.map((i) => daffDataTreeToUiTree(i, treeEl, false));
23
+ treeStack = [
24
+ ...treeStack,
25
+ ...treeEl.items,
26
+ ];
27
+ return el;
28
+ }, 'items');
29
+ return tree;
30
+ };
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlkcmF0ZS10cmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ24vdHJlZS9zcmMvdXRpbHMvaHlkcmF0ZS10cmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFJLElBQXFCLEVBQUUsTUFBcUIsRUFBRSxPQUFnQixLQUFLLEVBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQzlILEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLO0lBQ3pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztJQUNqQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7SUFDYixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7SUFDZixJQUFJO0lBQ0osTUFBTTtJQUNOLEtBQUssRUFBRSxFQUFFO0NBQ1YsQ0FBQyxDQUFDO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUksSUFBcUIsRUFBaUIsRUFBRTtJQUNyRSxNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRXpELElBQUksU0FBUyxHQUFHO1FBQ2QsSUFBSTtLQUNMLENBQUM7SUFFRixRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7UUFDcEIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFFLG9CQUFvQixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM1RSxTQUFTLEdBQUc7WUFDVixHQUFHLFNBQVM7WUFDWixHQUFHLE1BQU0sQ0FBQyxLQUFLO1NBQ2hCLENBQUM7UUFDRixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVaLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGFmZlRyZWVEYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90cmVlLWRhdGEnO1xuaW1wb3J0IHsgRGFmZlRyZWVVaSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdHJlZS11aSc7XG5pbXBvcnQgeyB0cmF2ZXJzZSB9IGZyb20gJy4vdHJhdmVyc2UtdHJlZSc7XG5cbmV4cG9ydCBjb25zdCBkYWZmRGF0YVRyZWVUb1VpVHJlZSA9IDxUPihkYXRhOiBEYWZmVHJlZURhdGE8VD4sIHBhcmVudDogRGFmZlRyZWVVaTxUPiwgb3BlbjogYm9vbGVhbiA9IGZhbHNlKTogRGFmZlRyZWVVaTxUPiA9PiAoe1xuICBpZDogZGF0YS5pZCA/PyBkYXRhLnRpdGxlLFxuICB0aXRsZTogZGF0YS50aXRsZSxcbiAgdXJsOiBkYXRhLnVybCxcbiAgZGF0YTogZGF0YS5kYXRhLFxuICBvcGVuLFxuICBwYXJlbnQsXG4gIGl0ZW1zOiBbXSxcbn0pO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gdHJhbnNsYXRlcyB0aGUgb3JpZ2luYWwgZGF0YSBnaXZlbiB0byB1cyBieSB0aGUgY2xpZW50XG4gKiB0byB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRyZWUgdXNlZCBieSB0aGUge0BsaW5rIERhZmZUcmVlQ29tcG9uZW50fVxuICovXG5leHBvcnQgY29uc3QgaHlkcmF0ZVRyZWUgPSA8VD4oZGF0YTogRGFmZlRyZWVEYXRhPFQ+KTogRGFmZlRyZWVVaTxUPiA9PiB7XG4gIGNvbnN0IHRyZWUgPSBkYWZmRGF0YVRyZWVUb1VpVHJlZShkYXRhLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gIGxldCB0cmVlU3RhY2sgPSBbXG4gICAgdHJlZSxcbiAgXTtcblxuICB0cmF2ZXJzZShkYXRhLCAoZWwpID0+IHtcbiAgICBjb25zdCB0cmVlRWwgPSB0cmVlU3RhY2sucG9wKCk7XG4gICAgdHJlZUVsLml0ZW1zID0gZWwuaXRlbXMubWFwKChpKSA9PiAgZGFmZkRhdGFUcmVlVG9VaVRyZWUoaSwgdHJlZUVsLCBmYWxzZSkpO1xuICAgIHRyZWVTdGFjayA9IFtcbiAgICAgIC4uLnRyZWVTdGFjayxcbiAgICAgIC4uLnRyZWVFbC5pdGVtcyxcbiAgICBdO1xuICAgIHJldHVybiBlbDtcbiAgfSwgJ2l0ZW1zJyk7XG5cbiAgcmV0dXJuIHRyZWU7XG59O1xuIl19
@@ -0,0 +1,23 @@
1
+ import { traverse } from './traverse-tree';
2
+ /**
3
+ * Transform a tree-like structure in-place into a {@link DaffTreeData}.
4
+ *
5
+ * This will mutate the original object, hydrating with additional properties.
6
+ *
7
+ * @param tree - The data structure representing tree-like data.
8
+ * @param transformFn - A user-supplied function that will transform the user
9
+ * type into a {@link DaffTreeData}
10
+ * @param key - The property of the your tree that indicates which
11
+ * key contains the "children" of your tree structure.
12
+ *
13
+ */
14
+ export const daffTransformTreeInPlace = (tree, transformFn, key) => traverse(tree, (el) => {
15
+ const r = Object.assign(el, transformFn(el));
16
+ r.items = el[key];
17
+ el = r;
18
+ return el;
19
+ },
20
+ // This type is confusing. I don't understand why it has to be here,
21
+ // the associated error message is incomprehensible.
22
+ key);
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLWluLXBsYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ24vdHJlZS9zcmMvdXRpbHMvdHJhbnNmb3JtLWluLXBsYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBSXRDLElBQU8sRUFDUCxXQUFtRCxFQUNuRCxHQUE4QixFQUNQLEVBQUUsQ0FBQyxRQUFRLENBQ2xDLElBQUksRUFDSixDQUFDLEVBQUUsRUFBRSxFQUFFO0lBQ0wsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNQLE9BQWtDLEVBQUUsQ0FBQztBQUN2QyxDQUFDO0FBQ0Msb0VBQW9FO0FBQ3BFLG9EQUFvRDtBQUNaLEdBQUcsQ0FDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlY3Vyc2l2ZVRyZWVLZXlPZlR5cGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlY3Vyc2l2ZS1rZXknO1xuaW1wb3J0IHsgRGFmZlRyZWVEYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90cmVlLWRhdGEnO1xuaW1wb3J0IHsgdHJhdmVyc2UgfSBmcm9tICcuL3RyYXZlcnNlLXRyZWUnO1xuXG4vKipcbiAqIFRyYW5zZm9ybSBhIHRyZWUtbGlrZSBzdHJ1Y3R1cmUgaW4tcGxhY2UgaW50byBhIHtAbGluayBEYWZmVHJlZURhdGF9LlxuICpcbiAqIFRoaXMgd2lsbCBtdXRhdGUgdGhlIG9yaWdpbmFsIG9iamVjdCwgaHlkcmF0aW5nIHdpdGggYWRkaXRpb25hbCBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSB0cmVlIC0gVGhlIGRhdGEgc3RydWN0dXJlIHJlcHJlc2VudGluZyB0cmVlLWxpa2UgZGF0YS5cbiAqIEBwYXJhbSB0cmFuc2Zvcm1GbiAtIEEgdXNlci1zdXBwbGllZCBmdW5jdGlvbiB0aGF0IHdpbGwgdHJhbnNmb3JtIHRoZSB1c2VyXG4gKiAgdHlwZSBpbnRvIGEge0BsaW5rIERhZmZUcmVlRGF0YX1cbiAqIEBwYXJhbSBrZXkgLSBUaGUgcHJvcGVydHkgb2YgdGhlIHlvdXIgdHJlZSB0aGF0IGluZGljYXRlcyB3aGljaFxuICogIGtleSBjb250YWlucyB0aGUgXCJjaGlsZHJlblwiIG9mIHlvdXIgdHJlZSBzdHJ1Y3R1cmUuXG4gKlxuICovXG5leHBvcnQgY29uc3QgZGFmZlRyYW5zZm9ybVRyZWVJblBsYWNlID0gPFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuICBUIGV4dGVuZHMgUmVjb3JkPGFueSxhbnk+LFxuPihcbiAgdHJlZTogVCxcbiAgdHJhbnNmb3JtRm46ICh0eXBlOiBUKSA9PiBUICYgRGFmZlRyZWVEYXRhPHVua25vd24+LFxuICBrZXk6IFJlY3Vyc2l2ZVRyZWVLZXlPZlR5cGU8VD4sXG4pOiBEYWZmVHJlZURhdGE8dW5rbm93bj4gPT4gdHJhdmVyc2U8VCwgVCAmIERhZmZUcmVlRGF0YTx1bmtub3duPj4oXG4gIHRyZWUsXG4gIChlbCkgPT4ge1xuICAgIGNvbnN0IHIgPSBPYmplY3QuYXNzaWduKGVsLCB0cmFuc2Zvcm1GbihlbCkpO1xuICAgIHIuaXRlbXMgPSBlbFtrZXldO1xuICAgIGVsID0gcjtcbiAgICByZXR1cm4gPFQgJiBEYWZmVHJlZURhdGE8dW5rbm93bj4+ZWw7XG4gIH0sXG4gICAgLy8gVGhpcyB0eXBlIGlzIGNvbmZ1c2luZy4gSSBkb24ndCB1bmRlcnN0YW5kIHdoeSBpdCBoYXMgdG8gYmUgaGVyZSxcbiAgICAvLyB0aGUgYXNzb2NpYXRlZCBlcnJvciBtZXNzYWdlIGlzIGluY29tcHJlaGVuc2libGUuXG4gICAgPFRbc3RyaW5nXSBleHRlbmRzIFRbXSA/IHN0cmluZyA6IG5ldmVyPmtleSxcbik7XG4iXX0=
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Traverse the tree, pre-order, right-to-left
3
+ */
4
+ export const traverse = (tree, visit, key) => {
5
+ let stack = [
6
+ tree,
7
+ ];
8
+ while (stack) {
9
+ const el = stack.pop();
10
+ if (!el) {
11
+ break;
12
+ }
13
+ visit(el);
14
+ stack = [
15
+ ...stack,
16
+ ...el[key],
17
+ ];
18
+ }
19
+ return tree;
20
+ };
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhdmVyc2UtdHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduL3RyZWUvc3JjL3V0aWxzL3RyYXZlcnNlLXRyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FDdEIsSUFBTyxFQUNQLEtBQXFCLEVBQ3JCLEdBQThCLEVBQzNCLEVBQUU7SUFDTCxJQUFJLEtBQUssR0FBRztRQUNWLElBQUk7S0FDTCxDQUFDO0lBRUYsT0FBTSxLQUFLLEVBQUU7UUFDWCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBRyxDQUFDLEVBQUUsRUFBRTtZQUNOLE1BQU07U0FDUDtRQUVELEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVWLEtBQUssR0FBRztZQUNOLEdBQUcsS0FBSztZQUNSLEdBQWlCLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDekIsQ0FBQztLQUNIO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWN1cnNpdmVUcmVlS2V5T2ZUeXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZWN1cnNpdmUta2V5JztcblxuLyoqXG4gKiBUcmF2ZXJzZSB0aGUgdHJlZSwgcHJlLW9yZGVyLCByaWdodC10by1sZWZ0XG4gKi9cbmV4cG9ydCBjb25zdCB0cmF2ZXJzZSA9IDxUIGV4dGVuZHMgUmVjb3JkPGFueSwgYW55PiwgViBleHRlbmRzIFJlY29yZDxhbnksIGFueT4gPSBUPihcbiAgdHJlZTogVCxcbiAgdmlzaXQ6ICh0cmVlOiBUKSA9PiBWLFxuICBrZXk6IFJlY3Vyc2l2ZVRyZWVLZXlPZlR5cGU8VD4sXG4pOiBWID0+IHtcbiAgbGV0IHN0YWNrID0gW1xuICAgIHRyZWUsXG4gIF07XG5cbiAgd2hpbGUoc3RhY2spIHtcbiAgICBjb25zdCBlbCA9IHN0YWNrLnBvcCgpO1xuICAgIGlmKCFlbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmlzaXQoZWwpO1xuXG4gICAgc3RhY2sgPSBbXG4gICAgICAuLi5zdGFjayxcbiAgICAgIC4uLjxUW10+PHVua25vd24+ZWxba2V5XSxcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRyZWU7XG59O1xuIl19