@fluentui/web-components 3.0.0-beta.85 → 3.0.0-beta.87

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 (36) hide show
  1. package/CHANGELOG.md +21 -2
  2. package/dist/dts/dropdown/dropdown.base.d.ts +23 -0
  3. package/dist/dts/dropdown/dropdown.d.ts +0 -32
  4. package/dist/dts/tree/index.d.ts +1 -0
  5. package/dist/dts/tree/tree.base.d.ts +68 -0
  6. package/dist/dts/tree/tree.d.ts +7 -67
  7. package/dist/dts/tree-item/index.d.ts +1 -0
  8. package/dist/dts/tree-item/tree-item.base.d.ts +99 -0
  9. package/dist/dts/tree-item/tree-item.d.ts +5 -88
  10. package/dist/dts/tree-item/tree-item.options.d.ts +2 -2
  11. package/dist/esm/dropdown/dropdown.base.js +50 -0
  12. package/dist/esm/dropdown/dropdown.base.js.map +1 -1
  13. package/dist/esm/dropdown/dropdown.js +12 -72
  14. package/dist/esm/dropdown/dropdown.js.map +1 -1
  15. package/dist/esm/tree/index.js +1 -0
  16. package/dist/esm/tree/index.js.map +1 -1
  17. package/dist/esm/tree/tree.base.js +232 -0
  18. package/dist/esm/tree/tree.base.js.map +1 -0
  19. package/dist/esm/tree/tree.js +10 -229
  20. package/dist/esm/tree/tree.js.map +1 -1
  21. package/dist/esm/tree/tree.template.js +3 -2
  22. package/dist/esm/tree/tree.template.js.map +1 -1
  23. package/dist/esm/tree-item/index.js +1 -0
  24. package/dist/esm/tree-item/index.js.map +1 -1
  25. package/dist/esm/tree-item/tree-item.base.js +165 -0
  26. package/dist/esm/tree-item/tree-item.base.js.map +1 -0
  27. package/dist/esm/tree-item/tree-item.js +13 -149
  28. package/dist/esm/tree-item/tree-item.js.map +1 -1
  29. package/dist/esm/tree-item/tree-item.styles.js +8 -21
  30. package/dist/esm/tree-item/tree-item.styles.js.map +1 -1
  31. package/dist/esm/tree-item/tree-item.template.js +5 -7
  32. package/dist/esm/tree-item/tree-item.template.js.map +1 -1
  33. package/dist/web-components.d.ts +127 -120
  34. package/dist/web-components.js +981 -940
  35. package/dist/web-components.min.js +229 -229
  36. package/package.json +1 -1
@@ -1,7 +1,6 @@
1
1
  import { __decorate } from "tslib";
2
2
  import { attr } from '@microsoft/fast-element';
3
- import { isListbox } from '../listbox/listbox.options.js';
4
- import { swapStates, toggleState } from '../utils/element-internals.js';
3
+ import { swapStates } from '../utils/element-internals.js';
5
4
  import { BaseDropdown } from './dropdown.base.js';
6
5
  import { DropdownAppearance, DropdownSize } from './dropdown.options.js';
7
6
  /**
@@ -14,32 +13,8 @@ import { DropdownAppearance, DropdownSize } from './dropdown.options.js';
14
13
  * @public
15
14
  */
16
15
  export class Dropdown extends BaseDropdown {
17
- /**
18
- * Swaps appearance states when the appearance property changes.
19
- *
20
- * @param prev - the previous appearance state
21
- * @param next - the current appearance state
22
- * @internal
23
- */
24
- appearanceChanged(prev, next) {
25
- swapStates(this.elementInternals, prev, next, DropdownAppearance);
26
- }
27
- /**
28
- * Swaps size states when the size property changes.
29
- *
30
- * @param prev - the previous size state
31
- * @param next - the current size state
32
- * @internal
33
- */
34
- sizeChanged(prev, next) {
35
- swapStates(this.elementInternals, prev, next, DropdownSize);
36
- }
37
- connectedCallback() {
38
- super.connectedCallback();
39
- this.anchorPositionFallback();
40
- }
41
16
  constructor() {
42
- super();
17
+ super(...arguments);
43
18
  /**
44
19
  * The appearance of the dropdown.
45
20
  *
@@ -48,61 +23,26 @@ export class Dropdown extends BaseDropdown {
48
23
  * HTML Attribute: `appearance`
49
24
  */
50
25
  this.appearance = DropdownAppearance.outline;
51
- this.addEventListener('connected', this.listboxConnectedHandler);
52
- }
53
- disconnectedCallback() {
54
- Dropdown.AnchorPositionFallbackObserver?.unobserve(this.listbox);
55
- super.disconnectedCallback();
56
26
  }
57
27
  /**
58
- * Handles the connected event for the listbox.
59
- *
60
- * @param e - the event object
61
- * @internal
62
- */
63
- listboxConnectedHandler(e) {
64
- const target = e.target;
65
- if (isListbox(target)) {
66
- this.listbox = target;
67
- }
68
- }
69
- /**
70
- * Adds or removes the window event listener based on the open state.
28
+ * Swaps appearance states when the appearance property changes.
71
29
  *
72
- * @param prev - the previous open state
73
- * @param next - the current open state
30
+ * @param prev - the previous appearance state
31
+ * @param next - the current appearance state
74
32
  * @internal
75
33
  */
76
- openChanged(prev, next) {
77
- super.openChanged(prev, next);
78
- if (next) {
79
- Dropdown.AnchorPositionFallbackObserver?.observe(this.listbox);
80
- return;
81
- }
82
- Dropdown.AnchorPositionFallbackObserver?.unobserve(this.listbox);
34
+ appearanceChanged(prev, next) {
35
+ swapStates(this.elementInternals, prev, next, DropdownAppearance);
83
36
  }
84
37
  /**
85
- * When anchor positioning isn't supported, an intersection observer is used to flip the listbox when it hits the
86
- * viewport bounds. One static observer is used for all dropdowns.
38
+ * Swaps size states when the size property changes.
87
39
  *
40
+ * @param prev - the previous size state
41
+ * @param next - the current size state
88
42
  * @internal
89
43
  */
90
- anchorPositionFallback() {
91
- Dropdown.AnchorPositionFallbackObserver =
92
- Dropdown.AnchorPositionFallbackObserver ??
93
- new IntersectionObserver((entries) => {
94
- entries.forEach(({ boundingClientRect, isIntersecting, target }) => {
95
- if (isListbox(target) && !isIntersecting) {
96
- if (boundingClientRect.bottom > window.innerHeight) {
97
- toggleState(target.dropdown.elementInternals, 'flip-block', true);
98
- return;
99
- }
100
- if (boundingClientRect.top < 0) {
101
- toggleState(target.dropdown.elementInternals, 'flip-block', false);
102
- }
103
- }
104
- });
105
- }, { threshold: 1 });
44
+ sizeChanged(prev, next) {
45
+ swapStates(this.elementInternals, prev, next, DropdownSize);
106
46
  }
107
47
  }
108
48
  __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown.js","sourceRoot":"","sources":["../../../src/dropdown/dropdown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dropdown.js","sourceRoot":"","sources":["../../../src/dropdown/dropdown.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAEzE;;;;;;;;GAQG;AACH,MAAM,OAAO,QAAS,SAAQ,YAAY;IAA1C;;QACE;;;;;;WAMG;QAEI,eAAU,GAAuB,kBAAkB,CAAC,OAAO,CAAC;IAgCrE,CAAC;IA9BC;;;;;;OAMG;IACI,iBAAiB,CAAC,IAAoC,EAAE,IAAoC;QACjG,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;IACpE,CAAC;IAWD;;;;;;OAMG;IACI,WAAW,CAAC,IAA8B,EAAE,IAA8B;QAC/E,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAC9D,CAAC;CACF;AAhCQ;IADN,IAAI;4CAC8D;AAoB5D;IADN,IAAI;sCACsB"}
@@ -1,3 +1,4 @@
1
+ export { BaseTree } from './tree.base.js';
1
2
  export { Tree } from './tree.js';
2
3
  export { template as TreeTemplate } from './tree.template.js';
3
4
  export { styles as TreeStyles } from './tree.styles.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tree/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tree/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,232 @@
1
+ import { __decorate } from "tslib";
2
+ import { FASTElement, observable } from '@microsoft/fast-element';
3
+ import { isHTMLElement, keyArrowDown, keyArrowLeft, keyArrowRight, keyArrowUp, keyEnd, keyEnter, keyHome, keySpace, } from '@microsoft/fast-web-utilities';
4
+ import { isTreeItem } from '../tree-item/tree-item.options';
5
+ export class BaseTree extends FASTElement {
6
+ constructor() {
7
+ super();
8
+ /**
9
+ * The currently selected tree item
10
+ * @public
11
+ */
12
+ this.currentSelected = null;
13
+ /**
14
+ * The tree item that is designated to be in the tab queue.
15
+ *
16
+ * @internal
17
+ */
18
+ this.currentFocused = null;
19
+ /**
20
+ * The internal {@link https://developer.mozilla.org/docs/Web/API/ElementInternals | `ElementInternals`} instance for the component.
21
+ *
22
+ * @internal
23
+ */
24
+ this.elementInternals = this.attachInternals();
25
+ this.childTreeItems = [];
26
+ this.elementInternals.role = 'tree';
27
+ }
28
+ childTreeItemsChanged() {
29
+ this.updateCurrentSelected();
30
+ }
31
+ /**
32
+ * Updates current selected when slottedTreeItems changes
33
+ */
34
+ updateCurrentSelected() {
35
+ // force single selection
36
+ // defaults to first one found
37
+ const selectedItem = this.querySelector(`[aria-selected='true']`);
38
+ this.currentSelected = selectedItem;
39
+ // invalidate the current focused item if it is no longer valid
40
+ if (this.currentFocused === null || !this.contains(this.currentFocused)) {
41
+ this.currentFocused = this.getValidFocusableItem();
42
+ }
43
+ }
44
+ /**
45
+ * KeyDown handler
46
+ *
47
+ * @internal
48
+ */
49
+ keydownHandler(e) {
50
+ if (e.defaultPrevented) {
51
+ return;
52
+ }
53
+ const item = e.target;
54
+ if (!isTreeItem(item) || this.childTreeItems.length < 1) {
55
+ return true;
56
+ }
57
+ const elements = this.getVisibleNodes();
58
+ switch (e.key) {
59
+ case keyHome: {
60
+ if (elements.length) {
61
+ elements[0].focus();
62
+ }
63
+ return;
64
+ }
65
+ case keyEnd: {
66
+ if (elements.length) {
67
+ elements[elements.length - 1].focus();
68
+ }
69
+ return;
70
+ }
71
+ case keyArrowLeft: {
72
+ if (item?.childTreeItems?.length && item.expanded) {
73
+ item.expanded = false;
74
+ }
75
+ else if (isTreeItem(item.parentElement)) {
76
+ item.parentElement.focus();
77
+ }
78
+ return;
79
+ }
80
+ case keyArrowRight: {
81
+ if (item?.childTreeItems?.length) {
82
+ if (!item.expanded) {
83
+ item.expanded = true;
84
+ }
85
+ else {
86
+ this.focusNextNode(1, item);
87
+ }
88
+ }
89
+ return;
90
+ }
91
+ case keyArrowDown: {
92
+ this.focusNextNode(1, item);
93
+ return;
94
+ }
95
+ case keyArrowUp: {
96
+ this.focusNextNode(-1, item);
97
+ return;
98
+ }
99
+ case keyEnter: {
100
+ // In single-select trees where selection does not follow focus (see note below),
101
+ // the default action is typically to select the focused node.
102
+ this.clickHandler(e);
103
+ return;
104
+ }
105
+ case keySpace: {
106
+ item.toggleSelection();
107
+ return;
108
+ }
109
+ }
110
+ // don't prevent default if we took no action
111
+ return true;
112
+ }
113
+ /**
114
+ * Handle focus events
115
+ *
116
+ * @internal
117
+ */
118
+ focusHandler(e) {
119
+ if (this.childTreeItems.length < 1) {
120
+ // no child items, nothing to do
121
+ return;
122
+ }
123
+ if (e.target === this) {
124
+ if (this.currentFocused === null) {
125
+ this.currentFocused = this.getValidFocusableItem();
126
+ }
127
+ if (this.currentFocused !== null) {
128
+ this.currentFocused.focus();
129
+ }
130
+ return;
131
+ }
132
+ if (this.contains(e.target)) {
133
+ this.setAttribute('tabindex', '-1');
134
+ this.currentFocused = e.target;
135
+ }
136
+ }
137
+ /**
138
+ * Handle blur events
139
+ *
140
+ * @internal
141
+ */
142
+ blurHandler(e) {
143
+ if (e.target instanceof HTMLElement && (e.relatedTarget === null || !this.contains(e.relatedTarget))) {
144
+ this.setAttribute('tabindex', '0');
145
+ }
146
+ }
147
+ /**
148
+ * Handles click events bubbling up
149
+ *
150
+ * @internal
151
+ */
152
+ clickHandler(e) {
153
+ if (e.defaultPrevented) {
154
+ // handled, do nothing
155
+ return;
156
+ }
157
+ if (!isTreeItem(e.target)) {
158
+ // not a tree item, ignore
159
+ // return true, do not prevent default
160
+ return true;
161
+ }
162
+ const item = e.target;
163
+ item.toggleExpansion();
164
+ item.toggleSelection();
165
+ }
166
+ /**
167
+ * Handles the selected-changed events bubbling up
168
+ * from child tree items
169
+ *
170
+ * @internal
171
+ */
172
+ changeHandler(e) {
173
+ if (e.defaultPrevented) {
174
+ return;
175
+ }
176
+ if (!isTreeItem(e.target)) {
177
+ return true;
178
+ }
179
+ const item = e.target;
180
+ if (item.selected) {
181
+ // Deselect the prevously selected item
182
+ if (this.currentSelected && this.currentSelected !== item && isTreeItem(this.currentSelected)) {
183
+ this.currentSelected.selected = false;
184
+ }
185
+ // New selected item
186
+ this.currentSelected = item;
187
+ }
188
+ else if (!item.selected && this.currentSelected === item) {
189
+ // Selected item deselected
190
+ this.currentSelected = null;
191
+ }
192
+ }
193
+ /**
194
+ * checks if there are any nested tree items
195
+ */
196
+ getValidFocusableItem() {
197
+ const elements = this.getVisibleNodes();
198
+ // default to selected element if there is one
199
+ let focusIndex = elements.findIndex(el => el.selected);
200
+ if (focusIndex === -1) {
201
+ // otherwise first focusable tree item
202
+ focusIndex = elements.findIndex(el => isTreeItem(el));
203
+ }
204
+ if (focusIndex !== -1) {
205
+ return elements[focusIndex];
206
+ }
207
+ return null;
208
+ }
209
+ getVisibleNodes() {
210
+ return Array.from(this.querySelectorAll('*')).filter(node => isTreeItem(node) && node.offsetParent !== null);
211
+ }
212
+ /**
213
+ * Move focus to a tree item based on its offset from the provided item
214
+ */
215
+ focusNextNode(delta, item) {
216
+ const visibleNodes = this.getVisibleNodes();
217
+ if (!visibleNodes.length) {
218
+ return;
219
+ }
220
+ const focusItem = visibleNodes[visibleNodes.indexOf(item) + delta];
221
+ if (isHTMLElement(focusItem)) {
222
+ focusItem.focus();
223
+ }
224
+ }
225
+ }
226
+ __decorate([
227
+ observable
228
+ ], BaseTree.prototype, "currentSelected", void 0);
229
+ __decorate([
230
+ observable
231
+ ], BaseTree.prototype, "childTreeItems", void 0);
232
+ //# sourceMappingURL=tree.base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.base.js","sourceRoot":"","sources":["../../../src/tree/tree.base.ts"],"names":[],"mappings":"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"}
@@ -1,28 +1,10 @@
1
1
  import { __decorate } from "tslib";
2
- import { attr, FASTElement, observable } from '@microsoft/fast-element';
3
- import { isHTMLElement, keyArrowDown, keyArrowLeft, keyArrowRight, keyArrowUp, keyEnd, keyEnter, keyHome, keySpace, } from '@microsoft/fast-web-utilities';
4
- import { TreeItem } from '../tree-item/index.js';
5
- import { isTreeItem, TreeItemAppearance, TreeItemSize } from '../tree-item/tree-item.options';
6
- export class Tree extends FASTElement {
2
+ import { attr } from '@microsoft/fast-element';
3
+ import { TreeItemAppearance, TreeItemSize } from '../tree-item/tree-item.options';
4
+ import { BaseTree } from './tree.base';
5
+ export class Tree extends BaseTree {
7
6
  constructor() {
8
- super();
9
- /**
10
- * The currently selected tree item
11
- * @public
12
- */
13
- this.currentSelected = null;
14
- /**
15
- * The tree item that is designated to be in the tab queue.
16
- *
17
- * @internal
18
- */
19
- this.currentFocused = null;
20
- /**
21
- * The internal {@link https://developer.mozilla.org/docs/Web/API/ElementInternals | `ElementInternals`} instance for the component.
22
- *
23
- * @internal
24
- */
25
- this.elementInternals = this.attachInternals();
7
+ super(...arguments);
26
8
  /**
27
9
  * The size of the tree item element
28
10
  * @public
@@ -35,8 +17,6 @@ export class Tree extends FASTElement {
35
17
  * HTML Attribute: appearance
36
18
  */
37
19
  this.appearance = TreeItemAppearance.subtle;
38
- this.childTreeItems = [];
39
- this.elementInternals.role = 'tree';
40
20
  }
41
21
  sizeChanged() {
42
22
  this.updateSizeAndAppearance();
@@ -44,9 +24,13 @@ export class Tree extends FASTElement {
44
24
  appearanceChanged() {
45
25
  this.updateSizeAndAppearance();
46
26
  }
27
+ /**
28
+ * child tree items supered change event
29
+ * @internal
30
+ */
47
31
  childTreeItemsChanged() {
32
+ super.childTreeItemsChanged();
48
33
  this.updateSizeAndAppearance();
49
- this.updateCurrentSelected();
50
34
  }
51
35
  /**
52
36
  * 1. Update the child items' size based on the tree's size
@@ -57,218 +41,15 @@ export class Tree extends FASTElement {
57
41
  return;
58
42
  }
59
43
  this.childTreeItems.forEach(item => {
60
- if (!isTreeItem(item)) {
61
- return;
62
- }
63
44
  item.size = this.size;
64
45
  item.appearance = this.appearance;
65
46
  });
66
47
  }
67
- /**
68
- * Updates current selected when slottedTreeItems changes
69
- */
70
- updateCurrentSelected() {
71
- // force single selection
72
- // defaults to first one found
73
- const selectedItem = this.querySelector(`[aria-selected='true']`);
74
- this.currentSelected = selectedItem;
75
- // invalidate the current focused item if it is no longer valid
76
- if (this.currentFocused === null || !this.contains(this.currentFocused)) {
77
- this.currentFocused = this.getValidFocusableItem();
78
- }
79
- }
80
- /**
81
- * KeyDown handler
82
- *
83
- * @internal
84
- */
85
- keydownHandler(e) {
86
- if (e.defaultPrevented) {
87
- return;
88
- }
89
- const item = e.target;
90
- if (!isTreeItem(item) || this.childTreeItems.length < 1) {
91
- return true;
92
- }
93
- const elements = this.getVisibleNodes();
94
- switch (e.key) {
95
- case keyHome: {
96
- if (elements.length) {
97
- elements[0].focus();
98
- }
99
- return;
100
- }
101
- case keyEnd: {
102
- if (elements.length) {
103
- elements[elements.length - 1].focus();
104
- }
105
- return;
106
- }
107
- case keyArrowLeft: {
108
- if (item?.childTreeItems?.length && item.expanded) {
109
- item.expanded = false;
110
- }
111
- else if (isTreeItem(item.parentElement)) {
112
- item.parentElement.focus();
113
- }
114
- return;
115
- }
116
- case keyArrowRight: {
117
- if (item?.childTreeItems?.length) {
118
- if (!item.expanded) {
119
- item.expanded = true;
120
- }
121
- else {
122
- this.focusNextNode(1, item);
123
- }
124
- }
125
- return;
126
- }
127
- case keyArrowDown: {
128
- this.focusNextNode(1, item);
129
- return;
130
- }
131
- case keyArrowUp: {
132
- this.focusNextNode(-1, item);
133
- return;
134
- }
135
- case keyEnter: {
136
- // In single-select trees where selection does not follow focus (see note below),
137
- // the default action is typically to select the focused node.
138
- this.clickHandler(e);
139
- return;
140
- }
141
- case keySpace: {
142
- item.toggleSelection();
143
- return;
144
- }
145
- }
146
- // don't prevent default if we took no action
147
- return true;
148
- }
149
- /**
150
- * Handle focus events
151
- *
152
- * @internal
153
- */
154
- focusHandler(e) {
155
- if (this.childTreeItems.length < 1) {
156
- // no child items, nothing to do
157
- return;
158
- }
159
- if (e.target === this) {
160
- if (this.currentFocused === null) {
161
- this.currentFocused = this.getValidFocusableItem();
162
- }
163
- if (this.currentFocused !== null) {
164
- this.currentFocused.focus();
165
- }
166
- return;
167
- }
168
- if (this.contains(e.target)) {
169
- this.setAttribute('tabindex', '-1');
170
- this.currentFocused = e.target;
171
- }
172
- }
173
- /**
174
- * Handle blur events
175
- *
176
- * @internal
177
- */
178
- blurHandler(e) {
179
- if (e.target instanceof HTMLElement && (e.relatedTarget === null || !this.contains(e.relatedTarget))) {
180
- this.setAttribute('tabindex', '0');
181
- }
182
- }
183
- /**
184
- * Handles click events bubbling up
185
- *
186
- * @internal
187
- */
188
- clickHandler(e) {
189
- if (e.defaultPrevented) {
190
- // handled, do nothing
191
- return;
192
- }
193
- if (!isTreeItem(e.target)) {
194
- // not a tree item, ignore
195
- // return true, do not prevent default
196
- return true;
197
- }
198
- const item = e.target;
199
- item.toggleExpansion();
200
- item.toggleSelection();
201
- }
202
- /**
203
- * Handles the selected-changed events bubbling up
204
- * from child tree items
205
- *
206
- * @internal
207
- */
208
- changeHandler(e) {
209
- if (e.defaultPrevented) {
210
- return;
211
- }
212
- if (!isTreeItem(e.target)) {
213
- return true;
214
- }
215
- const item = e.target;
216
- if (item.selected) {
217
- // Deselect the prevously selected item
218
- if (this.currentSelected && this.currentSelected !== item && this.currentSelected instanceof TreeItem) {
219
- this.currentSelected.selected = false;
220
- }
221
- // New selected item
222
- this.currentSelected = item;
223
- }
224
- else if (!item.selected && this.currentSelected === item) {
225
- // Selected item deselected
226
- this.currentSelected = null;
227
- }
228
- }
229
- /**
230
- * checks if there are any nested tree items
231
- */
232
- getValidFocusableItem() {
233
- const elements = this.getVisibleNodes();
234
- // default to selected element if there is one
235
- let focusIndex = elements.findIndex(el => el.selected);
236
- if (focusIndex === -1) {
237
- // otherwise first focusable tree item
238
- focusIndex = elements.findIndex(el => el instanceof TreeItem);
239
- }
240
- if (focusIndex !== -1) {
241
- return elements[focusIndex];
242
- }
243
- return null;
244
- }
245
- getVisibleNodes() {
246
- return Array.from(this.querySelectorAll('*')).filter(node => isTreeItem(node) && node.offsetParent !== null);
247
- }
248
- /**
249
- * Move focus to a tree item based on its offset from the provided item
250
- */
251
- focusNextNode(delta, item) {
252
- const visibleNodes = this.getVisibleNodes();
253
- if (!visibleNodes.length) {
254
- return;
255
- }
256
- const focusItem = visibleNodes[visibleNodes.indexOf(item) + delta];
257
- if (isHTMLElement(focusItem)) {
258
- focusItem.focus();
259
- }
260
- }
261
48
  }
262
- __decorate([
263
- observable
264
- ], Tree.prototype, "currentSelected", void 0);
265
49
  __decorate([
266
50
  attr
267
51
  ], Tree.prototype, "size", void 0);
268
52
  __decorate([
269
53
  attr
270
54
  ], Tree.prototype, "appearance", void 0);
271
- __decorate([
272
- observable
273
- ], Tree.prototype, "childTreeItems", void 0);
274
55
  //# sourceMappingURL=tree.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tree.js","sourceRoot":"","sources":["../../../src/tree/tree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tree.js","sourceRoot":"","sources":["../../../src/tree/tree.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAElF,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,OAAO,IAAK,SAAQ,QAAQ;IAAlC;;QACE;;;;WAIG;QAEI,SAAI,GAAiB,YAAY,CAAC,KAAK,CAAC;QAK/C;;;;WAIG;QAEI,eAAU,GAAuB,kBAAkB,CAAC,MAAM,CAAC;IA4BpE,CAAC;IAtCS,WAAW;QACjB,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACjC,CAAC;IASO,iBAAiB;QACvB,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACjC,CAAC;IAED;;;OAGG;IACI,qBAAqB;QAC1B,KAAK,CAAC,qBAAqB,EAAE,CAAC;QAC9B,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACjC,CAAC;IAED;;;OAGG;IACI,uBAAuB;QAC5B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAChC,IAAiB,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACnC,IAAiB,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAvCQ;IADN,IAAI;kCAC0C;AAWxC;IADN,IAAI;wCAC6D"}