@fluentui/web-components 3.0.0-rc.12 → 3.0.0-rc.14

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 (43) hide show
  1. package/CHANGELOG.md +20 -2
  2. package/custom-elements.json +968 -164
  3. package/dist/esm/accordion/accordion.d.ts +5 -0
  4. package/dist/esm/accordion/accordion.js +28 -27
  5. package/dist/esm/accordion/accordion.js.map +1 -1
  6. package/dist/esm/dropdown/dropdown.base.d.ts +5 -0
  7. package/dist/esm/dropdown/dropdown.base.js +23 -10
  8. package/dist/esm/dropdown/dropdown.base.js.map +1 -1
  9. package/dist/esm/dropdown/dropdown.styles.js +1 -0
  10. package/dist/esm/dropdown/dropdown.styles.js.map +1 -1
  11. package/dist/esm/index.d.ts +2 -2
  12. package/dist/esm/index.js +2 -2
  13. package/dist/esm/index.js.map +1 -1
  14. package/dist/esm/menu/menu.d.ts +25 -16
  15. package/dist/esm/menu/menu.js +61 -67
  16. package/dist/esm/menu/menu.js.map +1 -1
  17. package/dist/esm/menu-list/index.d.ts +1 -0
  18. package/dist/esm/menu-list/index.js +1 -0
  19. package/dist/esm/menu-list/index.js.map +1 -1
  20. package/dist/esm/menu-list/menu-list.base.d.ts +76 -0
  21. package/dist/esm/menu-list/menu-list.base.js +251 -0
  22. package/dist/esm/menu-list/menu-list.base.js.map +1 -0
  23. package/dist/esm/menu-list/menu-list.d.ts +3 -70
  24. package/dist/esm/menu-list/menu-list.js +3 -244
  25. package/dist/esm/menu-list/menu-list.js.map +1 -1
  26. package/dist/esm/radio-group/index.d.ts +1 -0
  27. package/dist/esm/radio-group/index.js +1 -0
  28. package/dist/esm/radio-group/index.js.map +1 -1
  29. package/dist/esm/radio-group/radio-group.base.d.ts +285 -0
  30. package/dist/esm/radio-group/radio-group.base.js +497 -0
  31. package/dist/esm/radio-group/radio-group.base.js.map +1 -0
  32. package/dist/esm/radio-group/radio-group.d.ts +4 -280
  33. package/dist/esm/radio-group/radio-group.js +4 -491
  34. package/dist/esm/radio-group/radio-group.js.map +1 -1
  35. package/dist/esm/tablist/tablist.base.js +3 -3
  36. package/dist/esm/tablist/tablist.base.js.map +1 -1
  37. package/dist/esm/utils/request-idle-callback.d.ts +15 -0
  38. package/dist/esm/utils/request-idle-callback.js +8 -2
  39. package/dist/esm/utils/request-idle-callback.js.map +1 -1
  40. package/dist/web-components.d.ts +1970 -1932
  41. package/dist/web-components.js +165 -124
  42. package/dist/web-components.min.js +114 -114
  43. package/package.json +1 -1
@@ -3,7 +3,6 @@ import { attr, FASTElement, observable, Updates } from '@microsoft/fast-element'
3
3
  import { keyEnter, keyEscape, keySpace, keyTab } from '@microsoft/fast-web-utilities';
4
4
  import { MenuItem } from '../menu-item/menu-item.js';
5
5
  import { MenuItemRole } from '../menu-item/menu-item.options.js';
6
- import { waitForConnectedDescendants } from '../utils/request-idle-callback.js';
7
6
  /**
8
7
  * A Menu component that provides a customizable menu element.
9
8
  *
@@ -150,7 +149,33 @@ export class Menu extends FASTElement {
150
149
  * @internal
151
150
  */
152
151
  slottedMenuListChanged(prev, next) {
153
- this.setComponent();
152
+ this._menuListAbortController?.abort();
153
+ if (!next?.length) {
154
+ return;
155
+ }
156
+ this._menuList = next[0];
157
+ this._menuList.popover = this.openOnContext ? 'manual' : '';
158
+ this.addMenuListListeners();
159
+ }
160
+ /**
161
+ * Ensures the trigger is properly set up when the slotted triggers change.
162
+ * This includes setting ARIA attributes and adding event listeners based on the current property values.
163
+ *
164
+ * @param prev - The previous items in the slotted triggers list.
165
+ * @param next - The current items in the slotted triggers list.
166
+ * @internal
167
+ */
168
+ slottedTriggersChanged(prev, next) {
169
+ this._triggerAbortController?.abort();
170
+ if (next?.length) {
171
+ const trigger = next[0];
172
+ this._trigger = trigger;
173
+ if (this._trigger?.isConnected) {
174
+ this._trigger.setAttribute('aria-haspopup', 'true');
175
+ this._trigger.setAttribute('aria-expanded', `${this._open}`);
176
+ this.addTriggerListeners();
177
+ }
178
+ }
154
179
  }
155
180
  /**
156
181
  * Called when the element is connected to the DOM.
@@ -159,6 +184,8 @@ export class Menu extends FASTElement {
159
184
  */
160
185
  connectedCallback() {
161
186
  super.connectedCallback();
187
+ // Retained for backward compatibility. The trigger and menu list listeners are now managed by their respective
188
+ // slot-changed callbacks, so this method is no longer responsible for setting up the component. However, it is left in place to avoid breaking changes for any existing implementations that may be relying on it.
162
189
  this.setComponent();
163
190
  }
164
191
  /**
@@ -168,30 +195,16 @@ export class Menu extends FASTElement {
168
195
  */
169
196
  disconnectedCallback() {
170
197
  super.disconnectedCallback();
171
- this.removeListeners();
198
+ this._triggerAbortController?.abort();
199
+ this._menuListAbortController?.abort();
172
200
  }
173
201
  /**
174
202
  * Sets the component.
175
- * Sets the trigger and menu list elements and adds event listeners.
203
+ * @deprecated This method is no longer used. Trigger and menu-list listeners are now
204
+ * managed by their respective slot-changed callbacks.
176
205
  * @public
177
206
  */
178
- setComponent() {
179
- waitForConnectedDescendants(this, () => {
180
- const trigger = this.slottedTriggers?.[0];
181
- const menuList = this.slottedMenuList?.[0];
182
- if (!trigger || !menuList) {
183
- this.removeListeners();
184
- return;
185
- }
186
- this._trigger = trigger;
187
- this._menuList = menuList;
188
- this._trigger.setAttribute('aria-haspopup', 'true');
189
- this._trigger.setAttribute('aria-expanded', `${this._open}`);
190
- this._menuList.setAttribute('popover', this.openOnContext ? 'manual' : '');
191
- this.removeListeners();
192
- this.addListeners();
193
- }, { shallow: true });
194
- }
207
+ setComponent() { }
195
208
  /**
196
209
  * Focuses on the menu list.
197
210
  * @public
@@ -219,11 +232,9 @@ export class Menu extends FASTElement {
219
232
  * @public
220
233
  */
221
234
  openOnHoverChanged(oldValue, newValue) {
222
- if (newValue) {
223
- this._trigger?.addEventListener('mouseover', this.openMenu);
224
- }
225
- else {
226
- this._trigger?.removeEventListener('mouseover', this.openMenu);
235
+ if (this._trigger) {
236
+ this._triggerAbortController?.abort();
237
+ this.addTriggerListeners();
227
238
  }
228
239
  }
229
240
  /**
@@ -234,11 +245,9 @@ export class Menu extends FASTElement {
234
245
  * @param newValue - The new value of 'persistOnItemClick'.
235
246
  */
236
247
  persistOnItemClickChanged(oldValue, newValue) {
237
- if (!newValue) {
238
- this._menuList?.addEventListener('change', this.closeMenu);
239
- }
240
- else {
241
- this._menuList?.removeEventListener('change', this.closeMenu);
248
+ if (this._menuList) {
249
+ this._menuListAbortController?.abort();
250
+ this.addMenuListListeners();
242
251
  }
243
252
  }
244
253
  /**
@@ -250,10 +259,14 @@ export class Menu extends FASTElement {
250
259
  */
251
260
  openOnContextChanged(oldValue, newValue) {
252
261
  if (newValue) {
253
- this._trigger?.addEventListener('contextmenu', this.openMenu);
262
+ this._menuList?.setAttribute('popover', 'manual');
254
263
  }
255
264
  else {
256
- this._trigger?.removeEventListener('contextmenu', this.openMenu);
265
+ this._menuList?.setAttribute('popover', '');
266
+ }
267
+ if (this._trigger) {
268
+ this._triggerAbortController?.abort();
269
+ this.addTriggerListeners();
257
270
  }
258
271
  }
259
272
  /**
@@ -272,53 +285,34 @@ export class Menu extends FASTElement {
272
285
  }
273
286
  }
274
287
  /**
275
- * Adds event listeners.
276
- * Adds click and keydown event listeners to the trigger.
277
- * Adds a 'toggle' event listener to the menu list.
278
- * If 'openOnHover' is true, adds a 'mouseover' event listener to the trigger.
279
- * If 'openOnContext' is true, adds a 'contextmenu' event listener to the trigger and a document 'click' event listener.
288
+ * Adds trigger-related event listeners.
280
289
  * @internal
281
290
  */
282
- addListeners() {
283
- this._menuList?.addEventListener('toggle', this.toggleHandler);
284
- this._trigger?.addEventListener('keydown', this.triggerKeydownHandler);
285
- if (!this.persistOnItemClick) {
286
- this._menuList?.addEventListener('change', this.closeMenu);
287
- }
291
+ addTriggerListeners() {
292
+ this._triggerAbortController = new AbortController();
293
+ const { signal } = this._triggerAbortController;
294
+ this._trigger?.addEventListener('keydown', this.triggerKeydownHandler, { signal });
288
295
  if (this.openOnHover) {
289
- this._trigger?.addEventListener('mouseover', this.openMenu);
296
+ this._trigger?.addEventListener('mouseover', this.openMenu, { signal });
290
297
  }
291
298
  else if (this.openOnContext) {
292
- this._trigger?.addEventListener('contextmenu', this.openMenu);
293
- document.addEventListener('click', this.documentClickHandler);
299
+ this._trigger?.addEventListener('contextmenu', this.openMenu, { signal });
300
+ document.addEventListener('click', this.documentClickHandler, { signal });
294
301
  }
295
302
  else {
296
- this._trigger?.addEventListener('click', this.toggleMenu);
303
+ this._trigger?.addEventListener('click', this.toggleMenu, { signal });
297
304
  }
298
305
  }
299
306
  /**
300
- * Removes event listeners.
301
- * Removes click and keydown event listeners from the trigger.
302
- * Also removes toggle event listener from the menu list.
303
- * Also removes 'mouseover' event listeners from the trigger.
304
- * Also removes 'contextmenu' event listeners from the trigger and document 'click' event listeners.
307
+ * Adds menu-list event listeners.
305
308
  * @internal
306
309
  */
307
- removeListeners() {
308
- this._menuList?.removeEventListener('toggle', this.toggleHandler);
309
- this._trigger?.removeEventListener('keydown', this.triggerKeydownHandler);
310
+ addMenuListListeners() {
311
+ this._menuListAbortController = new AbortController();
312
+ const { signal } = this._menuListAbortController;
313
+ this._menuList?.addEventListener('toggle', this.toggleHandler, { signal });
310
314
  if (!this.persistOnItemClick) {
311
- this._menuList?.removeEventListener('change', this.closeMenu);
312
- }
313
- if (this.openOnHover) {
314
- this._trigger?.removeEventListener('mouseover', this.openMenu);
315
- }
316
- if (this.openOnContext) {
317
- this._trigger?.removeEventListener('contextmenu', this.openMenu);
318
- document.removeEventListener('click', this.documentClickHandler);
319
- }
320
- else {
321
- this._trigger?.removeEventListener('click', this.toggleMenu);
315
+ this._menuList?.addEventListener('change', this.closeMenu, { signal });
322
316
  }
323
317
  }
324
318
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../../src/menu/menu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../../src/menu/menu.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ export { BaseMenuList } from './menu-list.base.js';
1
2
  export { MenuList } from './menu-list.js';
2
3
  export { template as MenuListTemplate } from './menu-list.template.js';
3
4
  export { styles as MenuListStyles } from './menu-list.styles.js';
@@ -1,3 +1,4 @@
1
+ export { BaseMenuList } from './menu-list.base.js';
1
2
  export { MenuList } from './menu-list.js';
2
3
  export { template as MenuListTemplate } from './menu-list.template.js';
3
4
  export { styles as MenuListStyles } from './menu-list.styles.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/menu-list/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/menu-list/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,76 @@
1
+ import { FASTElement } from '@microsoft/fast-element';
2
+ /**
3
+ * A Base Menu List Custom HTML Element.
4
+ * Implements the {@link https://www.w3.org/TR/wai-aria-1.1/#menu | ARIA menu }.
5
+ *
6
+ * @public
7
+ */
8
+ export declare class BaseMenuList extends FASTElement {
9
+ /**
10
+ * The internal {@link https://developer.mozilla.org/docs/Web/API/ElementInternals | `ElementInternals`} instance for the component.
11
+ *
12
+ * @internal
13
+ */
14
+ elementInternals: ElementInternals;
15
+ /**
16
+ * @internal
17
+ */
18
+ items: HTMLElement[];
19
+ protected itemsChanged(oldValue: HTMLElement[], newValue: HTMLElement[]): void;
20
+ protected menuItems: Element[] | undefined;
21
+ /**
22
+ * The index of the focusable element in the items array
23
+ * defaults to -1
24
+ */
25
+ private focusIndex;
26
+ private static focusableElementRoles;
27
+ constructor();
28
+ /**
29
+ * @internal
30
+ */
31
+ connectedCallback(): void;
32
+ /**
33
+ * @internal
34
+ */
35
+ disconnectedCallback(): void;
36
+ /**
37
+ * @internal
38
+ */
39
+ readonly isNestedMenu: () => boolean;
40
+ /**
41
+ * Focuses the first item in the menu.
42
+ *
43
+ * @public
44
+ */
45
+ focus(): void;
46
+ /**
47
+ * @internal
48
+ */
49
+ handleMenuKeyDown(e: KeyboardEvent): void | boolean;
50
+ /**
51
+ * if focus is moving out of the menu, reset to a stable initial state
52
+ * @internal
53
+ */
54
+ handleFocusOut: (e: FocusEvent) => void;
55
+ private handleItemFocus;
56
+ private removeItemListeners;
57
+ private static elementIndent;
58
+ protected setItems(): void;
59
+ /**
60
+ * Method for Observable changes to the hidden attribute of child elements
61
+ */
62
+ handleChange(source: any, propertyName: string): void;
63
+ /**
64
+ * Handle change from child MenuItem element and set radio group behavior
65
+ */
66
+ private changedMenuItemHandler;
67
+ /**
68
+ * check if the item is a menu item
69
+ */
70
+ protected isMenuItemElement: (el: Element) => el is HTMLElement;
71
+ /**
72
+ * check if the item is focusable
73
+ */
74
+ private isFocusableElement;
75
+ private setFocus;
76
+ }
@@ -0,0 +1,251 @@
1
+ import { __decorate } from "tslib";
2
+ import { FASTElement, Observable, observable, Updates } from '@microsoft/fast-element';
3
+ import { isHTMLElement, keyArrowDown, keyArrowUp, keyEnd, keyHome } from '@microsoft/fast-web-utilities';
4
+ import { isMenuItem, MenuItemRole } from '../menu-item/menu-item.options.js';
5
+ /**
6
+ * A Base Menu List Custom HTML Element.
7
+ * Implements the {@link https://www.w3.org/TR/wai-aria-1.1/#menu | ARIA menu }.
8
+ *
9
+ * @public
10
+ */
11
+ export class BaseMenuList extends FASTElement {
12
+ itemsChanged(oldValue, newValue) {
13
+ // only update children after the component is connected and
14
+ // the setItems has run on connectedCallback
15
+ // (menuItems is undefined until then)
16
+ if (this.$fastController.isConnected && this.menuItems !== undefined) {
17
+ this.setItems();
18
+ }
19
+ }
20
+ static { this.focusableElementRoles = MenuItemRole; }
21
+ constructor() {
22
+ super();
23
+ /**
24
+ * The internal {@link https://developer.mozilla.org/docs/Web/API/ElementInternals | `ElementInternals`} instance for the component.
25
+ *
26
+ * @internal
27
+ */
28
+ this.elementInternals = this.attachInternals();
29
+ /**
30
+ * The index of the focusable element in the items array
31
+ * defaults to -1
32
+ */
33
+ this.focusIndex = -1;
34
+ /**
35
+ * @internal
36
+ */
37
+ this.isNestedMenu = () => {
38
+ return (this.parentElement !== null &&
39
+ isHTMLElement(this.parentElement) &&
40
+ this.parentElement.getAttribute('role') === 'menuitem');
41
+ };
42
+ /**
43
+ * if focus is moving out of the menu, reset to a stable initial state
44
+ * @internal
45
+ */
46
+ this.handleFocusOut = (e) => {
47
+ if (!this.contains(e.relatedTarget) && this.menuItems !== undefined) {
48
+ // find our first focusable element
49
+ const focusIndex = this.menuItems.findIndex(this.isFocusableElement);
50
+ // set the current focus index's tabindex to -1
51
+ this.menuItems[this.focusIndex].setAttribute('tabindex', '-1');
52
+ // set the first focusable element tabindex to 0
53
+ this.menuItems[focusIndex].setAttribute('tabindex', '0');
54
+ // set the focus index
55
+ this.focusIndex = focusIndex;
56
+ }
57
+ };
58
+ this.handleItemFocus = (e) => {
59
+ const targetItem = e.target;
60
+ if (this.menuItems !== undefined && targetItem !== this.menuItems[this.focusIndex]) {
61
+ this.menuItems[this.focusIndex].setAttribute('tabindex', '-1');
62
+ this.focusIndex = this.menuItems.indexOf(targetItem);
63
+ targetItem.setAttribute('tabindex', '0');
64
+ }
65
+ };
66
+ /**
67
+ * Handle change from child MenuItem element and set radio group behavior
68
+ */
69
+ this.changedMenuItemHandler = (e) => {
70
+ if (this.menuItems === undefined) {
71
+ return;
72
+ }
73
+ const changedMenuItem = e.target;
74
+ const changeItemIndex = this.menuItems.indexOf(changedMenuItem);
75
+ if (changeItemIndex === -1) {
76
+ return;
77
+ }
78
+ if (changedMenuItem.role === 'menuitemradio' && changedMenuItem.checked === true) {
79
+ for (let i = changeItemIndex - 1; i >= 0; --i) {
80
+ const item = this.menuItems[i];
81
+ const role = item.role;
82
+ if (role === MenuItemRole.menuitemradio) {
83
+ item.checked = false;
84
+ }
85
+ if (role === 'separator') {
86
+ break;
87
+ }
88
+ }
89
+ const maxIndex = this.menuItems.length - 1;
90
+ for (let i = changeItemIndex + 1; i <= maxIndex; ++i) {
91
+ const item = this.menuItems[i];
92
+ const role = item.role;
93
+ if (role === MenuItemRole.menuitemradio) {
94
+ item.checked = false;
95
+ }
96
+ if (role === 'separator') {
97
+ break;
98
+ }
99
+ }
100
+ }
101
+ };
102
+ /**
103
+ * check if the item is a menu item
104
+ */
105
+ this.isMenuItemElement = (el) => {
106
+ return isMenuItem(el) || (isHTMLElement(el) && !!el.role && el.role in BaseMenuList.focusableElementRoles);
107
+ };
108
+ /**
109
+ * check if the item is focusable
110
+ */
111
+ this.isFocusableElement = (el) => {
112
+ return this.isMenuItemElement(el);
113
+ };
114
+ this.elementInternals.role = 'menu';
115
+ }
116
+ /**
117
+ * @internal
118
+ */
119
+ connectedCallback() {
120
+ super.connectedCallback();
121
+ Updates.enqueue(() => {
122
+ // wait until children have had a chance to
123
+ // connect before setting/checking their props/attributes
124
+ this.setItems();
125
+ });
126
+ this.addEventListener('change', this.changedMenuItemHandler);
127
+ }
128
+ /**
129
+ * @internal
130
+ */
131
+ disconnectedCallback() {
132
+ super.disconnectedCallback();
133
+ this.removeItemListeners();
134
+ this.menuItems = undefined;
135
+ this.removeEventListener('change', this.changedMenuItemHandler);
136
+ }
137
+ /**
138
+ * Focuses the first item in the menu.
139
+ *
140
+ * @public
141
+ */
142
+ focus() {
143
+ this.setFocus(0, 1);
144
+ }
145
+ /**
146
+ * @internal
147
+ */
148
+ handleMenuKeyDown(e) {
149
+ if (e.defaultPrevented || this.menuItems === undefined) {
150
+ return;
151
+ }
152
+ switch (e.key) {
153
+ case keyArrowDown:
154
+ // go forward one index
155
+ this.setFocus(this.focusIndex + 1, 1);
156
+ return;
157
+ case keyArrowUp:
158
+ // go back one index
159
+ this.setFocus(this.focusIndex - 1, -1);
160
+ return;
161
+ case keyEnd:
162
+ // set focus on last item
163
+ this.setFocus(this.menuItems.length - 1, -1);
164
+ return;
165
+ case keyHome:
166
+ // set focus on first item
167
+ this.setFocus(0, 1);
168
+ return;
169
+ default:
170
+ // if we are not handling the event, do not prevent default
171
+ return true;
172
+ }
173
+ }
174
+ removeItemListeners(items = this.items) {
175
+ items.forEach(item => {
176
+ item.removeEventListener('focus', this.handleItemFocus);
177
+ Observable.getNotifier(item).unsubscribe(this, 'hidden');
178
+ });
179
+ }
180
+ static elementIndent(el) {
181
+ const role = el.role;
182
+ const startSlot = el.querySelector('[slot=start]');
183
+ if (role && role !== MenuItemRole.menuitem) {
184
+ return startSlot ? 2 : 1;
185
+ }
186
+ return startSlot ? 1 : 0;
187
+ }
188
+ setItems() {
189
+ const children = Array.from(this.children);
190
+ this.removeItemListeners(children);
191
+ children.forEach((child) => Observable.getNotifier(child).subscribe(this, 'hidden'));
192
+ const newItems = children.filter(child => !child.hasAttribute('hidden'));
193
+ this.menuItems = newItems;
194
+ const menuItems = this.menuItems.filter(this.isMenuItemElement);
195
+ // if our focus index is not -1 we have items
196
+ if (menuItems.length) {
197
+ this.focusIndex = 0;
198
+ }
199
+ menuItems.forEach((item, index) => {
200
+ item.setAttribute('tabindex', index === 0 ? '0' : '-1');
201
+ item.addEventListener('focus', this.handleItemFocus);
202
+ });
203
+ /**
204
+ * Set the indent attribute on MenuItem elements based on their
205
+ * position in the MenuList. Each MenuItem element has a data-indent attribute that is
206
+ * used to set the indent of the element's start slot content.
207
+ */
208
+ const filteredMenuListItems = this.menuItems?.filter(this.isMenuItemElement);
209
+ const indent = filteredMenuListItems?.reduce((accum, current) => {
210
+ const elementValue = BaseMenuList.elementIndent(current);
211
+ return Math.max(accum, elementValue);
212
+ }, 0);
213
+ filteredMenuListItems?.forEach((item) => {
214
+ item.dataset.indent = `${indent}`;
215
+ });
216
+ }
217
+ /**
218
+ * Method for Observable changes to the hidden attribute of child elements
219
+ */
220
+ handleChange(source, propertyName) {
221
+ if (propertyName === 'hidden') {
222
+ this.setItems();
223
+ }
224
+ }
225
+ setFocus(focusIndex, adjustment) {
226
+ if (this.menuItems === undefined) {
227
+ return;
228
+ }
229
+ while (focusIndex >= 0 && focusIndex < this.menuItems.length) {
230
+ const child = this.menuItems[focusIndex];
231
+ if (this.isFocusableElement(child)) {
232
+ // change the previous index to -1
233
+ if (this.focusIndex > -1 && this.menuItems.length >= this.focusIndex - 1) {
234
+ this.menuItems[this.focusIndex].setAttribute('tabindex', '-1');
235
+ }
236
+ // update the focus index
237
+ this.focusIndex = focusIndex;
238
+ // update the tabindex of next focusable element
239
+ child.setAttribute('tabindex', '0');
240
+ // focus the element
241
+ child.focus();
242
+ break;
243
+ }
244
+ focusIndex += adjustment;
245
+ }
246
+ }
247
+ }
248
+ __decorate([
249
+ observable
250
+ ], BaseMenuList.prototype, "items", void 0);
251
+ //# sourceMappingURL=menu-list.base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-list.base.js","sourceRoot":"","sources":["../../../src/menu-list/menu-list.base.ts"],"names":[],"mappings":"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"}