MCPcopy
hub / github.com/angular/components / getMenuPattern

Function getMenuPattern

src/aria/private/menu/menu.spec.ts:104–157  ·  view source on GitHub ↗
(
  parent: undefined | MenuItemPattern<string> | MenuTriggerPattern<string>,
  values: string[],
  opts?: {textDirection: 'ltr' | 'rtl'},
)

Source from the content-addressed store, hash-verified

102}
103
104function getMenuPattern(
105 parent: undefined | MenuItemPattern<string> | MenuTriggerPattern<string>,
106 values: string[],
107 opts?: {textDirection: 'ltr' | 'rtl'},
108) {
109 const items = signal<TestMenuItem[]>([]);
110
111 const menu = new MenuPattern<string>({
112 id: signal('menu-1'),
113 items: items,
114 parent: signal(parent) as any,
115 activeItem: signal(undefined),
116 typeaheadDelay: signal(500),
117 wrap: signal(true),
118 softDisabled: signal(true),
119 multi: signal(false),
120 focusMode: signal('activedescendant'),
121 textDirection: signal(opts?.textDirection || 'ltr'),
122 orientation: signal('vertical'),
123 selectionMode: signal('explicit'),
124 element: signal(document.createElement('div')),
125 expansionDelay: signal(0),
126 disabled: signal(false),
127 });
128
129 items.set(
130 values.map((v, index) => {
131 const element = document.createElement('div');
132 element.role = 'menuitem';
133 menu.inputs.element()?.appendChild(element);
134 return new MenuItemPattern({
135 value: signal(v),
136 id: signal(`menuitem-${index}`),
137 disabled: signal(false),
138 searchTerm: signal(v),
139 parent: signal(menu),
140 element: signal(element),
141 submenu: signal(undefined),
142 role: signal('menuitem'),
143 }) as TestMenuItem;
144 }),
145 );
146
147 if (parent instanceof MenuTriggerPattern) {
148 (parent.menu as WritableSignalLike<MenuPattern<string>>).set(menu);
149 parent.inputs.element()?.appendChild(menu.inputs.element()!);
150 } else if (parent instanceof MenuItemPattern) {
151 (parent.submenu as WritableSignalLike<MenuPattern<string>>).set(menu);
152 parent.inputs.element()?.appendChild(menu.inputs.element()!);
153 }
154
155 menu.inputs.activeItem.set(items()[0]);
156 return menu;
157}
158
159describe('Standalone Menu Pattern', () => {
160 let menu: MenuPattern<string>;

Callers 1

menu.spec.tsFile · 0.85

Calls 3

signalFunction · 0.90
setMethod · 0.80
elementMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…