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

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.
@@ -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":";AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EACV,MAAM,EACN,QAAQ,EACR,OAAO,EACP,QAAQ,GACT,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9F,MAAM,OAAO,IAAK,SAAQ,WAAW;IAsBnC;QACE,KAAK,EAAE,CAAC;QAtBV;;;WAGG;QAEI,oBAAe,GAAuB,IAAI,CAAC;QAElD;;;;WAIG;QACK,mBAAc,GAAuB,IAAI,CAAC;QAElD;;;;WAIG;QACI,qBAAgB,GAAqB,IAAI,CAAC,eAAe,EAAE,CAAC;QAOnE;;;;WAIG;QAEI,SAAI,GAAiB,YAAY,CAAC,KAAK,CAAC;QAK/C;;;;WAIG;QAEI,eAAU,GAAuB,kBAAkB,CAAC,MAAM,CAAC;QAMlE,mBAAc,GAAe,EAAE,CAAC;QA1B9B,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,MAAM,CAAC;IACtC,CAAC;IASO,WAAW;QACjB,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACjC,CAAC;IASO,iBAAiB;QACvB,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACjC,CAAC;IAIS,qBAAqB;QAC7B,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACK,uBAAuB;QAC7B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,yBAAyB;QACzB,8BAA8B;QAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAc,wBAAwB,CAAC,CAAC;QAC/E,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC;QAEpC,+DAA+D;QAC/D,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACxE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,cAAc,CAAC,CAAgB;QACpC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,CAAC,MAAqB,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAExC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;YACd,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACpB,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;gBACtB,CAAC;gBACD,OAAO;YACT,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACpB,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;gBACxC,CAAC;gBACD,OAAO;YACT,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,IAAI,IAAI,EAAE,cAAc,EAAE,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACxB,CAAC;qBAAM,IAAI,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC1C,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;gBAC7B,CAAC;gBACD,OAAO;YACT,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,IAAI,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;oBACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACvB,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;oBAC9B,CAAC;gBACH,CAAC;gBACD,OAAO;YACT,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC7B,OAAO;YACT,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,iFAAiF;gBACjF,8DAA8D;gBAC9D,IAAI,CAAC,YAAY,CAAC,CAAU,CAAC,CAAC;gBAC9B,OAAO;YACT,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,OAAO;YACT,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,CAAa;QAC/B,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,gCAAgC;YAChC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;gBACjC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACrD,CAAC;YAED,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;gBACjC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YAC9B,CAAC;YAED,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAc,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,MAAqB,CAAC;QAChD,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,WAAW,CAAC,CAAa;QAC9B,IAAI,CAAC,CAAC,MAAM,YAAY,WAAW,IAAI,CAAC,CAAC,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAqB,CAAC,CAAC,EAAE,CAAC;YAC7G,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;;;OAIG;IAEI,YAAY,CAAC,CAAQ;QAC1B,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACvB,sBAAsB;YACtB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAqB,CAAC,EAAE,CAAC;YACzC,0BAA0B;YAC1B,sCAAsC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,CAAC,MAAkB,CAAC;QAClC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED;;;;;OAKG;IACI,aAAa,CAAC,CAAQ;QAC3B,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAqB,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,CAAC,MAAkB,CAAC;QAElC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,uCAAuC;YACvC,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,IAAI,IAAI,CAAC,eAAe,YAAY,QAAQ,EAAE,CAAC;gBACtG,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,KAAK,CAAC;YACxC,CAAC;YACD,oBAAoB;YACpB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;YAC3D,2BAA2B;YAC3B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,MAAM,QAAQ,GAAyB,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9D,8CAA8C;QAC9C,IAAI,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAE,EAAU,CAAC,QAAQ,CAAC,CAAC;QAChE,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,sCAAsC;YACtC,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,QAAQ,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,eAAe;QACrB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CACtC,CAAC;IACrB,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,KAAa,EAAE,IAAc;QACjD,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACnE,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;CACF;AA5RQ;IADN,UAAU;6CACuC;AA2B3C;IADN,IAAI;kCAC0C;AAWxC;IADN,IAAI;wCAC6D;AAMlE;IADC,UAAU;4CACqB"}
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"}
@@ -1,4 +1,5 @@
1
- import { children, elements, html } from '@microsoft/fast-element';
1
+ import { children, html } from '@microsoft/fast-element';
2
+ import { isTreeItem } from '../tree-item/tree-item.options';
2
3
  export const template = html `
3
4
  <template
4
5
  tabindex="0"
@@ -9,7 +10,7 @@ export const template = html `
9
10
  @change="${(x, c) => x.changeHandler(c.event)}"
10
11
  ${children({
11
12
  property: 'childTreeItems',
12
- filter: elements(),
13
+ filter: node => isTreeItem(node),
13
14
  })}
14
15
  >
15
16
  <slot></slot>
@@ -1 +1 @@
1
- {"version":3,"file":"tree.template.js","sourceRoot":"","sources":["../../../src/tree/tree.template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAGnE,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAM;;;cAGpB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC/B,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAmB,CAAC;iBAC9C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAmB,CAAC;gBAC/C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAsB,CAAC;eACrD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;MAC3C,QAAQ,CAAC;IACT,QAAQ,EAAE,gBAAgB;IAC1B,MAAM,EAAE,QAAQ,EAAE;CACnB,CAAC;;;;CAIL,CAAC"}
1
+ {"version":3,"file":"tree.template.js","sourceRoot":"","sources":["../../../src/tree/tree.template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAY,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAG5D,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAM;;;cAGpB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC/B,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAmB,CAAC;iBAC9C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAmB,CAAC;gBAC/C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAsB,CAAC;eACrD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;MAC3C,QAAQ,CAAC;IACT,QAAQ,EAAE,gBAAgB;IAC1B,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;CACjC,CAAC;;;;CAIL,CAAC"}
@@ -1,3 +1,4 @@
1
+ export { BaseTreeItem } from './tree-item.base.js';
1
2
  export { TreeItem } from './tree-item.js';
2
3
  export { template as TreeItemTemplate } from './tree-item.template.js';
3
4
  export { styles as TreeItemStyles } from './tree-item.styles.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tree-item/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,UAAU,IAAI,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tree-item/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,UAAU,IAAI,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,165 @@
1
+ import { __decorate } from "tslib";
2
+ import { attr, css, FASTElement, observable } from '@microsoft/fast-element';
3
+ import { toggleState } from '../utils/element-internals.js';
4
+ import { isTreeItem } from './tree-item.options.js';
5
+ export class BaseTreeItem extends FASTElement {
6
+ constructor() {
7
+ super();
8
+ /**
9
+ * The internal {@link https://developer.mozilla.org/docs/Web/API/ElementInternals | `ElementInternals`} instance for the component.
10
+ *
11
+ * @internal
12
+ */
13
+ this.elementInternals = this.attachInternals();
14
+ /**
15
+ * When true, the control will be appear expanded by user interaction.
16
+ * @public
17
+ * HTML Attribute: `expanded`
18
+ */
19
+ this.expanded = false;
20
+ /**
21
+ * When true, the control will appear selected by user interaction.
22
+ * @public
23
+ * @remarks
24
+ * HTML Attribute: selected
25
+ */
26
+ this.selected = false;
27
+ /**
28
+ * When true, the control has no child tree items
29
+ * @public
30
+ * HTML Attribute: empty
31
+ */
32
+ this.empty = false;
33
+ this.childTreeItems = [];
34
+ this.elementInternals.role = 'treeitem';
35
+ }
36
+ /**
37
+ * Handles changes to the expanded attribute
38
+ * @param prev - the previous state
39
+ * @param next - the next state
40
+ *
41
+ * @public
42
+ */
43
+ expandedChanged(prev, next) {
44
+ toggleState(this.elementInternals, 'expanded', next);
45
+ if (this.childTreeItems && this.childTreeItems.length > 0) {
46
+ this.elementInternals.ariaExpanded = next ? 'true' : 'false';
47
+ }
48
+ }
49
+ /**
50
+ * Handles changes to the selected attribute
51
+ * @param prev - the previous state
52
+ * @param next - the next state
53
+ *
54
+ * @internal
55
+ */
56
+ selectedChanged(prev, next) {
57
+ this.$emit('change');
58
+ toggleState(this.elementInternals, 'selected', next);
59
+ this.elementInternals.ariaSelected = next ? 'true' : 'false';
60
+ }
61
+ dataIndentChanged(prev, next) {
62
+ if (this.styles !== undefined) {
63
+ this.$fastController.removeStyles(this.styles);
64
+ }
65
+ this.styles = css `
66
+ :host {
67
+ --indent: ${next};
68
+ }
69
+ `;
70
+ this.$fastController.addStyles(this.styles);
71
+ }
72
+ /**
73
+ * Handles changes to the child tree items
74
+ *
75
+ * @public
76
+ */
77
+ childTreeItemsChanged() {
78
+ this.empty = this.childTreeItems?.length === 0;
79
+ this.updateChildTreeItems();
80
+ }
81
+ /**
82
+ * Updates the childrens indent
83
+ *
84
+ * @public
85
+ */
86
+ updateChildTreeItems() {
87
+ if (!this.childTreeItems?.length) {
88
+ return;
89
+ }
90
+ this.childTreeItems.forEach(item => {
91
+ this.setIndent(item);
92
+ });
93
+ }
94
+ /**
95
+ * Sets the indent for each item
96
+ */
97
+ setIndent(item) {
98
+ const indent = this.dataIndent ?? 0;
99
+ item.dataIndent = indent + 1;
100
+ }
101
+ /**
102
+ * Handle focus events
103
+ *
104
+ * @public
105
+ */
106
+ focusHandler(e) {
107
+ if (e.target === this ||
108
+ // In case where the tree-item contains a focusable element, we should not set the tabindex to 0 when the focus is on its child focusable element,
109
+ // so users can shift+tab to navigate to the tree-item from its child focusable element.
110
+ this.contains(e.target)) {
111
+ this.setAttribute('tabindex', '0');
112
+ }
113
+ }
114
+ /**
115
+ * Handle blur events
116
+ *
117
+ * @public
118
+ */
119
+ blurHandler(e) {
120
+ if (e.target === this) {
121
+ this.setAttribute('tabindex', '-1');
122
+ }
123
+ }
124
+ /**
125
+ * Toggle the expansion state of the tree item
126
+ *
127
+ * @public
128
+ */
129
+ toggleExpansion() {
130
+ if (this.childTreeItems?.length) {
131
+ this.expanded = !this.expanded;
132
+ }
133
+ }
134
+ /**
135
+ * Toggle the single selection state of the tree item
136
+ *
137
+ * @public
138
+ */
139
+ toggleSelection() {
140
+ this.selected = !this.selected;
141
+ }
142
+ /**
143
+ * Whether the tree is nested
144
+ * @internal
145
+ */
146
+ get isNestedItem() {
147
+ return isTreeItem(this.parentElement);
148
+ }
149
+ }
150
+ __decorate([
151
+ attr({ mode: 'boolean' })
152
+ ], BaseTreeItem.prototype, "expanded", void 0);
153
+ __decorate([
154
+ attr({ mode: 'boolean' })
155
+ ], BaseTreeItem.prototype, "selected", void 0);
156
+ __decorate([
157
+ attr({ mode: 'boolean' })
158
+ ], BaseTreeItem.prototype, "empty", void 0);
159
+ __decorate([
160
+ attr({ attribute: 'data-indent' })
161
+ ], BaseTreeItem.prototype, "dataIndent", void 0);
162
+ __decorate([
163
+ observable
164
+ ], BaseTreeItem.prototype, "childTreeItems", void 0);
165
+ //# sourceMappingURL=tree-item.base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-item.base.js","sourceRoot":"","sources":["../../../src/tree-item/tree-item.base.ts"],"names":[],"mappings":"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"}