@radix-solid-js/menubar 0.1.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.
package/dist/index.cjs ADDED
@@ -0,0 +1,477 @@
1
+ 'use strict';
2
+
3
+ var solidJs = require('solid-js');
4
+ var collection = require('@radix-solid-js/collection');
5
+ var direction = require('@radix-solid-js/direction');
6
+ var primitive = require('@radix-solid-js/primitive');
7
+ var composeRefs = require('@radix-solid-js/compose-refs');
8
+ var context = require('@radix-solid-js/context');
9
+ var id = require('@radix-solid-js/id');
10
+ var MenuPrimitive = require('@radix-solid-js/menu');
11
+ var rovingFocus = require('@radix-solid-js/roving-focus');
12
+ var primitiveComponent = require('@radix-solid-js/primitive-component');
13
+ var useControllableState = require('@radix-solid-js/use-controllable-state');
14
+
15
+ function _interopNamespace(e) {
16
+ if (e && e.__esModule) return e;
17
+ var n = Object.create(null);
18
+ if (e) {
19
+ Object.keys(e).forEach(function (k) {
20
+ if (k !== 'default') {
21
+ var d = Object.getOwnPropertyDescriptor(e, k);
22
+ Object.defineProperty(n, k, d.get ? d : {
23
+ enumerable: true,
24
+ get: function () { return e[k]; }
25
+ });
26
+ }
27
+ });
28
+ }
29
+ n.default = e;
30
+ return Object.freeze(n);
31
+ }
32
+
33
+ var MenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(MenuPrimitive);
34
+
35
+ // src/menubar.tsx
36
+ var MENUBAR_NAME = "Menubar";
37
+ var [Collection, useCollection, createCollectionScope] = collection.createCollection(MENUBAR_NAME);
38
+ var [createMenubarContext, createMenubarScope] = context.createContextScope(MENUBAR_NAME, [
39
+ createCollectionScope,
40
+ rovingFocus.createRovingFocusGroupScope
41
+ ]);
42
+ var useMenuScope = MenuPrimitive.createMenuScope();
43
+ var useRovingFocusGroupScope = rovingFocus.createRovingFocusGroupScope();
44
+ var [MenubarContextProvider, useMenubarContext] = createMenubarContext(MENUBAR_NAME);
45
+ function Menubar(inProps) {
46
+ const [local, rest] = solidJs.splitProps(inProps, [
47
+ "__scopeMenubar",
48
+ "value",
49
+ "onValueChange",
50
+ "defaultValue",
51
+ "loop",
52
+ "dir",
53
+ "ref"
54
+ ]);
55
+ const direction$1 = direction.useDirection(local.dir);
56
+ const rovingFocusGroupScope = useRovingFocusGroupScope(local.__scopeMenubar);
57
+ const [value, setValue] = useControllableState.createControllableSignal({
58
+ prop: () => local.value,
59
+ onChange: local.onValueChange,
60
+ defaultProp: local.defaultValue ?? "",
61
+ caller: MENUBAR_NAME
62
+ });
63
+ const loop = () => local.loop ?? true;
64
+ const [currentTabStopId, setCurrentTabStopId] = solidJs.createSignal(null);
65
+ return /* @__PURE__ */ React.createElement(
66
+ MenubarContextProvider,
67
+ {
68
+ scope: local.__scopeMenubar,
69
+ value: value(),
70
+ onMenuOpen: (menuValue) => {
71
+ setValue(menuValue);
72
+ setCurrentTabStopId(menuValue);
73
+ },
74
+ onMenuClose: () => setValue(""),
75
+ onMenuToggle: (menuValue) => {
76
+ setValue((prevValue) => prevValue ? "" : menuValue);
77
+ setCurrentTabStopId(menuValue);
78
+ },
79
+ dir: direction$1,
80
+ loop: loop()
81
+ },
82
+ /* @__PURE__ */ React.createElement(Collection.Provider, { scope: local.__scopeMenubar }, /* @__PURE__ */ React.createElement(Collection.Slot, { scope: local.__scopeMenubar }, /* @__PURE__ */ React.createElement(
83
+ rovingFocus.RovingFocusGroup,
84
+ {
85
+ ...rovingFocusGroupScope,
86
+ orientation: "horizontal",
87
+ loop: loop(),
88
+ dir: direction$1,
89
+ currentTabStopId: currentTabStopId(),
90
+ onCurrentTabStopIdChange: setCurrentTabStopId
91
+ },
92
+ /* @__PURE__ */ React.createElement(primitiveComponent.Primitive.div, { role: "menubar", ...rest, ref: local.ref })
93
+ )))
94
+ );
95
+ }
96
+ Menubar.displayName = MENUBAR_NAME;
97
+ var MENU_NAME = "MenubarMenu";
98
+ var [MenubarMenuProvider, useMenubarMenuContext] = createMenubarContext(MENU_NAME);
99
+ function MenubarMenu(inProps) {
100
+ const [local] = solidJs.splitProps(inProps, ["__scopeMenubar", "value", "children"]);
101
+ const autoValue = id.createId();
102
+ const value = () => local.value || autoValue;
103
+ const context = useMenubarContext(MENU_NAME, local.__scopeMenubar);
104
+ const menuScope = useMenuScope(local.__scopeMenubar);
105
+ const [triggerRef, setTriggerRef] = solidJs.createSignal(void 0);
106
+ let wasKeyboardTriggerOpen = false;
107
+ const open = () => context.value === value();
108
+ solidJs.createEffect(() => {
109
+ if (!open()) wasKeyboardTriggerOpen = false;
110
+ });
111
+ return /* @__PURE__ */ React.createElement(
112
+ MenubarMenuProvider,
113
+ {
114
+ scope: local.__scopeMenubar,
115
+ value: value(),
116
+ triggerId: id.createId(),
117
+ triggerRef: triggerRef(),
118
+ onTriggerRefChange: setTriggerRef,
119
+ contentId: id.createId(),
120
+ wasKeyboardTriggerOpen,
121
+ setWasKeyboardTriggerOpen: (v) => {
122
+ wasKeyboardTriggerOpen = v;
123
+ }
124
+ },
125
+ /* @__PURE__ */ React.createElement(
126
+ MenuPrimitive__namespace.Menu,
127
+ {
128
+ ...menuScope,
129
+ open: open(),
130
+ onOpenChange: (openValue) => {
131
+ if (!openValue) context.onMenuClose();
132
+ },
133
+ modal: false,
134
+ dir: context.dir
135
+ },
136
+ local.children
137
+ )
138
+ );
139
+ }
140
+ MenubarMenu.displayName = MENU_NAME;
141
+ var TRIGGER_NAME = "MenubarTrigger";
142
+ function MenubarTrigger(inProps) {
143
+ const [local, rest] = solidJs.splitProps(inProps, [
144
+ "__scopeMenubar",
145
+ "ref",
146
+ "disabled",
147
+ "onPointerDown",
148
+ "onPointerEnter",
149
+ "onKeyDown",
150
+ "onFocus",
151
+ "onBlur"
152
+ ]);
153
+ const rovingFocusGroupScope = useRovingFocusGroupScope(local.__scopeMenubar);
154
+ const menuScope = useMenuScope(local.__scopeMenubar);
155
+ const context = useMenubarContext(TRIGGER_NAME, local.__scopeMenubar);
156
+ const menuContext = useMenubarMenuContext(TRIGGER_NAME, local.__scopeMenubar);
157
+ let triggerRef;
158
+ const [isFocused, setIsFocused] = solidJs.createSignal(false);
159
+ const disabled = () => local.disabled ?? false;
160
+ const open = () => context.value === menuContext.value;
161
+ return /* @__PURE__ */ React.createElement(Collection.ItemSlot, { scope: local.__scopeMenubar, value: menuContext.value, disabled: disabled() }, /* @__PURE__ */ React.createElement(
162
+ rovingFocus.RovingFocusGroupItem,
163
+ {
164
+ ...rovingFocusGroupScope,
165
+ focusable: !disabled(),
166
+ tabStopId: menuContext.value
167
+ },
168
+ /* @__PURE__ */ React.createElement(MenuPrimitive__namespace.MenuAnchor, { ...menuScope }, /* @__PURE__ */ React.createElement(
169
+ primitiveComponent.Primitive.button,
170
+ {
171
+ type: "button",
172
+ role: "menuitem",
173
+ id: menuContext.triggerId,
174
+ "aria-haspopup": "menu",
175
+ "aria-expanded": open(),
176
+ "aria-controls": open() ? menuContext.contentId : void 0,
177
+ "data-highlighted": isFocused() ? "" : void 0,
178
+ "data-state": open() ? "open" : "closed",
179
+ "data-disabled": disabled() ? "" : void 0,
180
+ disabled: disabled(),
181
+ ...rest,
182
+ ref: composeRefs.mergeRefs(local.ref, (el) => {
183
+ triggerRef = el;
184
+ menuContext.onTriggerRefChange(el);
185
+ }),
186
+ onPointerDown: primitive.composeEventHandlers(local.onPointerDown, (event) => {
187
+ if (!disabled() && event.button === 0 && event.ctrlKey === false) {
188
+ context.onMenuOpen(menuContext.value);
189
+ if (!open()) event.preventDefault();
190
+ }
191
+ }),
192
+ onPointerEnter: primitive.composeEventHandlers(local.onPointerEnter, () => {
193
+ const menubarOpen = Boolean(context.value);
194
+ if (menubarOpen && !open()) {
195
+ context.onMenuOpen(menuContext.value);
196
+ triggerRef?.focus();
197
+ }
198
+ }),
199
+ onKeyDown: primitive.composeEventHandlers(local.onKeyDown, (event) => {
200
+ if (disabled()) return;
201
+ if (["Enter", " "].includes(event.key)) context.onMenuToggle(menuContext.value);
202
+ if (event.key === "ArrowDown") context.onMenuOpen(menuContext.value);
203
+ if (["Enter", " ", "ArrowDown"].includes(event.key)) {
204
+ menuContext.setWasKeyboardTriggerOpen(true);
205
+ event.preventDefault();
206
+ }
207
+ }),
208
+ onFocus: primitive.composeEventHandlers(local.onFocus, () => setIsFocused(true)),
209
+ onBlur: primitive.composeEventHandlers(local.onBlur, () => setIsFocused(false))
210
+ }
211
+ ))
212
+ ));
213
+ }
214
+ MenubarTrigger.displayName = TRIGGER_NAME;
215
+ var PORTAL_NAME = "MenubarPortal";
216
+ function MenubarPortal(inProps) {
217
+ const [local, rest] = solidJs.splitProps(inProps, ["__scopeMenubar"]);
218
+ const menuScope = useMenuScope(local.__scopeMenubar);
219
+ return /* @__PURE__ */ React.createElement(MenuPrimitive__namespace.MenuPortal, { ...menuScope, ...rest });
220
+ }
221
+ MenubarPortal.displayName = PORTAL_NAME;
222
+ var CONTENT_NAME = "MenubarContent";
223
+ function MenubarContent(inProps) {
224
+ const [local, rest] = solidJs.splitProps(inProps, [
225
+ "__scopeMenubar",
226
+ "ref",
227
+ "align",
228
+ "style",
229
+ "onCloseAutoFocus",
230
+ "onFocusOutside",
231
+ "onInteractOutside",
232
+ "onKeyDown"
233
+ ]);
234
+ const menuScope = useMenuScope(local.__scopeMenubar);
235
+ const context = useMenubarContext(CONTENT_NAME, local.__scopeMenubar);
236
+ const menuContext = useMenubarMenuContext(CONTENT_NAME, local.__scopeMenubar);
237
+ const getItems = useCollection(local.__scopeMenubar);
238
+ let hasInteractedOutside = false;
239
+ const align = () => local.align ?? "start";
240
+ return /* @__PURE__ */ React.createElement(
241
+ MenuPrimitive__namespace.MenuContent,
242
+ {
243
+ id: menuContext.contentId,
244
+ "aria-labelledby": menuContext.triggerId,
245
+ "data-radix-menubar-content": "",
246
+ ...menuScope,
247
+ ...rest,
248
+ ref: local.ref,
249
+ align: align(),
250
+ onCloseAutoFocus: primitive.composeEventHandlers(local.onCloseAutoFocus, (event) => {
251
+ const menubarOpen = Boolean(context.value);
252
+ if (!menubarOpen && !hasInteractedOutside) {
253
+ menuContext.triggerRef?.focus();
254
+ }
255
+ hasInteractedOutside = false;
256
+ event.preventDefault();
257
+ }),
258
+ onFocusOutside: primitive.composeEventHandlers(local.onFocusOutside, (event) => {
259
+ const target = event.target;
260
+ const isMenubarTrigger = getItems().some((item) => item.ref?.contains(target));
261
+ if (isMenubarTrigger) event.preventDefault();
262
+ }),
263
+ onInteractOutside: primitive.composeEventHandlers(local.onInteractOutside, () => {
264
+ hasInteractedOutside = true;
265
+ }),
266
+ onEntryFocus: (event) => {
267
+ if (!menuContext.wasKeyboardTriggerOpen) event.preventDefault();
268
+ },
269
+ onKeyDown: primitive.composeEventHandlers(local.onKeyDown, (event) => {
270
+ if (["ArrowRight", "ArrowLeft"].includes(event.key)) {
271
+ const target = event.target;
272
+ const targetIsSubTrigger = target.hasAttribute("data-radix-menubar-subtrigger");
273
+ const isKeyDownInsideSubMenu = target.closest("[data-radix-menubar-content]") !== event.currentTarget;
274
+ const prevMenuKey = context.dir === "rtl" ? "ArrowRight" : "ArrowLeft";
275
+ const isPrevKey = prevMenuKey === event.key;
276
+ const isNextKey = !isPrevKey;
277
+ if (isNextKey && targetIsSubTrigger) return;
278
+ if (isKeyDownInsideSubMenu && isPrevKey) return;
279
+ const items = getItems().filter((item) => !item.disabled);
280
+ let candidateValues = items.map((item) => item.value);
281
+ if (isPrevKey) candidateValues.reverse();
282
+ const currentIndex = candidateValues.indexOf(menuContext.value);
283
+ candidateValues = context.loop ? wrapArray(candidateValues, currentIndex + 1) : candidateValues.slice(currentIndex + 1);
284
+ const [nextValue] = candidateValues;
285
+ if (nextValue) context.onMenuOpen(nextValue);
286
+ }
287
+ }),
288
+ style: {
289
+ ...local.style,
290
+ "--radix-menubar-content-transform-origin": "var(--radix-popper-transform-origin)",
291
+ "--radix-menubar-content-available-width": "var(--radix-popper-available-width)",
292
+ "--radix-menubar-content-available-height": "var(--radix-popper-available-height)",
293
+ "--radix-menubar-trigger-width": "var(--radix-popper-anchor-width)",
294
+ "--radix-menubar-trigger-height": "var(--radix-popper-anchor-height)"
295
+ }
296
+ }
297
+ );
298
+ }
299
+ MenubarContent.displayName = CONTENT_NAME;
300
+ var GROUP_NAME = "MenubarGroup";
301
+ function MenubarGroup(inProps) {
302
+ const [local, rest] = solidJs.splitProps(inProps, ["__scopeMenubar", "ref"]);
303
+ const menuScope = useMenuScope(local.__scopeMenubar);
304
+ return /* @__PURE__ */ React.createElement(MenuPrimitive__namespace.MenuGroup, { ...menuScope, ...rest, ref: local.ref });
305
+ }
306
+ MenubarGroup.displayName = GROUP_NAME;
307
+ var LABEL_NAME = "MenubarLabel";
308
+ function MenubarLabel(inProps) {
309
+ const [local, rest] = solidJs.splitProps(inProps, ["__scopeMenubar", "ref"]);
310
+ const menuScope = useMenuScope(local.__scopeMenubar);
311
+ return /* @__PURE__ */ React.createElement(MenuPrimitive__namespace.MenuLabel, { ...menuScope, ...rest, ref: local.ref });
312
+ }
313
+ MenubarLabel.displayName = LABEL_NAME;
314
+ var ITEM_NAME = "MenubarItem";
315
+ function MenubarItem(inProps) {
316
+ const [local, rest] = solidJs.splitProps(inProps, ["__scopeMenubar", "ref"]);
317
+ const menuScope = useMenuScope(local.__scopeMenubar);
318
+ return /* @__PURE__ */ React.createElement(MenuPrimitive__namespace.MenuItem, { ...menuScope, ...rest, ref: local.ref });
319
+ }
320
+ MenubarItem.displayName = ITEM_NAME;
321
+ var CHECKBOX_ITEM_NAME = "MenubarCheckboxItem";
322
+ function MenubarCheckboxItem(inProps) {
323
+ const [local, rest] = solidJs.splitProps(inProps, ["__scopeMenubar", "ref"]);
324
+ const menuScope = useMenuScope(local.__scopeMenubar);
325
+ return /* @__PURE__ */ React.createElement(MenuPrimitive__namespace.MenuCheckboxItem, { ...menuScope, ...rest, ref: local.ref });
326
+ }
327
+ MenubarCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
328
+ var RADIO_GROUP_NAME = "MenubarRadioGroup";
329
+ function MenubarRadioGroup(inProps) {
330
+ const [local, rest] = solidJs.splitProps(inProps, ["__scopeMenubar", "ref"]);
331
+ const menuScope = useMenuScope(local.__scopeMenubar);
332
+ return /* @__PURE__ */ React.createElement(MenuPrimitive__namespace.MenuRadioGroup, { ...menuScope, ...rest, ref: local.ref });
333
+ }
334
+ MenubarRadioGroup.displayName = RADIO_GROUP_NAME;
335
+ var RADIO_ITEM_NAME = "MenubarRadioItem";
336
+ function MenubarRadioItem(inProps) {
337
+ const [local, rest] = solidJs.splitProps(inProps, ["__scopeMenubar", "ref"]);
338
+ const menuScope = useMenuScope(local.__scopeMenubar);
339
+ return /* @__PURE__ */ React.createElement(MenuPrimitive__namespace.MenuRadioItem, { ...menuScope, ...rest, ref: local.ref });
340
+ }
341
+ MenubarRadioItem.displayName = RADIO_ITEM_NAME;
342
+ var INDICATOR_NAME = "MenubarItemIndicator";
343
+ function MenubarItemIndicator(inProps) {
344
+ const [local, rest] = solidJs.splitProps(inProps, ["__scopeMenubar", "ref"]);
345
+ const menuScope = useMenuScope(local.__scopeMenubar);
346
+ return /* @__PURE__ */ React.createElement(MenuPrimitive__namespace.MenuItemIndicator, { ...menuScope, ...rest, ref: local.ref });
347
+ }
348
+ MenubarItemIndicator.displayName = INDICATOR_NAME;
349
+ var SEPARATOR_NAME = "MenubarSeparator";
350
+ function MenubarSeparator(inProps) {
351
+ const [local, rest] = solidJs.splitProps(inProps, ["__scopeMenubar", "ref"]);
352
+ const menuScope = useMenuScope(local.__scopeMenubar);
353
+ return /* @__PURE__ */ React.createElement(MenuPrimitive__namespace.MenuSeparator, { ...menuScope, ...rest, ref: local.ref });
354
+ }
355
+ MenubarSeparator.displayName = SEPARATOR_NAME;
356
+ var ARROW_NAME = "MenubarArrow";
357
+ function MenubarArrow(inProps) {
358
+ const [local, rest] = solidJs.splitProps(inProps, ["__scopeMenubar", "ref"]);
359
+ const menuScope = useMenuScope(local.__scopeMenubar);
360
+ return /* @__PURE__ */ React.createElement(MenuPrimitive__namespace.MenuArrow, { ...menuScope, ...rest, ref: local.ref });
361
+ }
362
+ MenubarArrow.displayName = ARROW_NAME;
363
+ var SUB_NAME = "MenubarSub";
364
+ function MenubarSub(inProps) {
365
+ const [local] = solidJs.splitProps(inProps, [
366
+ "__scopeMenubar",
367
+ "children",
368
+ "open",
369
+ "defaultOpen",
370
+ "onOpenChange"
371
+ ]);
372
+ const menuScope = useMenuScope(local.__scopeMenubar);
373
+ const [open, setOpen] = useControllableState.createControllableSignal({
374
+ prop: () => local.open,
375
+ defaultProp: local.defaultOpen ?? false,
376
+ onChange: local.onOpenChange,
377
+ caller: SUB_NAME
378
+ });
379
+ return /* @__PURE__ */ React.createElement(MenuPrimitive__namespace.MenuSub, { ...menuScope, open: open(), onOpenChange: setOpen }, local.children);
380
+ }
381
+ MenubarSub.displayName = SUB_NAME;
382
+ var SUB_TRIGGER_NAME = "MenubarSubTrigger";
383
+ function MenubarSubTrigger(inProps) {
384
+ const [local, rest] = solidJs.splitProps(inProps, ["__scopeMenubar", "ref"]);
385
+ const menuScope = useMenuScope(local.__scopeMenubar);
386
+ return /* @__PURE__ */ React.createElement(
387
+ MenuPrimitive__namespace.MenuSubTrigger,
388
+ {
389
+ "data-radix-menubar-subtrigger": "",
390
+ ...menuScope,
391
+ ...rest,
392
+ ref: local.ref
393
+ }
394
+ );
395
+ }
396
+ MenubarSubTrigger.displayName = SUB_TRIGGER_NAME;
397
+ var SUB_CONTENT_NAME = "MenubarSubContent";
398
+ function MenubarSubContent(inProps) {
399
+ const [local, rest] = solidJs.splitProps(inProps, ["__scopeMenubar", "ref", "style"]);
400
+ const menuScope = useMenuScope(local.__scopeMenubar);
401
+ return /* @__PURE__ */ React.createElement(
402
+ MenuPrimitive__namespace.MenuSubContent,
403
+ {
404
+ ...menuScope,
405
+ "data-radix-menubar-content": "",
406
+ ...rest,
407
+ ref: local.ref,
408
+ style: {
409
+ ...local.style,
410
+ "--radix-menubar-content-transform-origin": "var(--radix-popper-transform-origin)",
411
+ "--radix-menubar-content-available-width": "var(--radix-popper-available-width)",
412
+ "--radix-menubar-content-available-height": "var(--radix-popper-available-height)",
413
+ "--radix-menubar-trigger-width": "var(--radix-popper-anchor-width)",
414
+ "--radix-menubar-trigger-height": "var(--radix-popper-anchor-height)"
415
+ }
416
+ }
417
+ );
418
+ }
419
+ MenubarSubContent.displayName = SUB_CONTENT_NAME;
420
+ function wrapArray(array, startIndex) {
421
+ return array.map((_, index) => array[(startIndex + index) % array.length]);
422
+ }
423
+ var Root = Menubar;
424
+ var Menu2 = MenubarMenu;
425
+ var Trigger = MenubarTrigger;
426
+ var Portal = MenubarPortal;
427
+ var Content = MenubarContent;
428
+ var Group = MenubarGroup;
429
+ var Label = MenubarLabel;
430
+ var Item = MenubarItem;
431
+ var CheckboxItem = MenubarCheckboxItem;
432
+ var RadioGroup = MenubarRadioGroup;
433
+ var RadioItem = MenubarRadioItem;
434
+ var ItemIndicator = MenubarItemIndicator;
435
+ var Separator = MenubarSeparator;
436
+ var Arrow = MenubarArrow;
437
+ var Sub = MenubarSub;
438
+ var SubTrigger = MenubarSubTrigger;
439
+ var SubContent = MenubarSubContent;
440
+
441
+ exports.Arrow = Arrow;
442
+ exports.CheckboxItem = CheckboxItem;
443
+ exports.Content = Content;
444
+ exports.Group = Group;
445
+ exports.Item = Item;
446
+ exports.ItemIndicator = ItemIndicator;
447
+ exports.Label = Label;
448
+ exports.Menu = Menu2;
449
+ exports.Menubar = Menubar;
450
+ exports.MenubarArrow = MenubarArrow;
451
+ exports.MenubarCheckboxItem = MenubarCheckboxItem;
452
+ exports.MenubarContent = MenubarContent;
453
+ exports.MenubarGroup = MenubarGroup;
454
+ exports.MenubarItem = MenubarItem;
455
+ exports.MenubarItemIndicator = MenubarItemIndicator;
456
+ exports.MenubarLabel = MenubarLabel;
457
+ exports.MenubarMenu = MenubarMenu;
458
+ exports.MenubarPortal = MenubarPortal;
459
+ exports.MenubarRadioGroup = MenubarRadioGroup;
460
+ exports.MenubarRadioItem = MenubarRadioItem;
461
+ exports.MenubarSeparator = MenubarSeparator;
462
+ exports.MenubarSub = MenubarSub;
463
+ exports.MenubarSubContent = MenubarSubContent;
464
+ exports.MenubarSubTrigger = MenubarSubTrigger;
465
+ exports.MenubarTrigger = MenubarTrigger;
466
+ exports.Portal = Portal;
467
+ exports.RadioGroup = RadioGroup;
468
+ exports.RadioItem = RadioItem;
469
+ exports.Root = Root;
470
+ exports.Separator = Separator;
471
+ exports.Sub = Sub;
472
+ exports.SubContent = SubContent;
473
+ exports.SubTrigger = SubTrigger;
474
+ exports.Trigger = Trigger;
475
+ exports.createMenubarScope = createMenubarScope;
476
+ //# sourceMappingURL=index.cjs.map
477
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/menubar.tsx"],"names":["createCollection","createContextScope","createRovingFocusGroupScope","createMenuScope","splitProps","direction","useDirection","createControllableSignal","createSignal","RovingFocusGroup","Primitive","createId","createEffect","MenuPrimitive","RovingFocusGroupItem","mergeRefs","composeEventHandlers","Menu"],"mappings":"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","file":"index.cjs","sourcesContent":["import { type JSX, splitProps, createSignal, createEffect } from 'solid-js';\nimport { createCollection } from '@radix-solid-js/collection';\nimport { useDirection } from '@radix-solid-js/direction';\nimport { composeEventHandlers } from '@radix-solid-js/primitive';\nimport { mergeRefs } from '@radix-solid-js/compose-refs';\nimport { createContextScope, type Scope } from '@radix-solid-js/context';\nimport { createId } from '@radix-solid-js/id';\nimport * as MenuPrimitive from '@radix-solid-js/menu';\nimport { createMenuScope } from '@radix-solid-js/menu';\nimport { RovingFocusGroup, RovingFocusGroupItem, createRovingFocusGroupScope } from '@radix-solid-js/roving-focus';\nimport { Primitive } from '@radix-solid-js/primitive-component';\nimport { createControllableSignal } from '@radix-solid-js/use-controllable-state';\n\nimport type { Direction } from '@radix-solid-js/direction';\n\n/* -------------------------------------------------------------------------------------------------\n * Menubar\n * -----------------------------------------------------------------------------------------------*/\n\nconst MENUBAR_NAME = 'Menubar';\n\ntype ItemData = { value: string; disabled: boolean };\nconst [Collection, useCollection, createCollectionScope] = createCollection<\n HTMLButtonElement,\n ItemData\n>(MENUBAR_NAME);\n\ntype ScopedProps<P> = P & { __scopeMenubar?: Scope };\nconst [createMenubarContext, createMenubarScope] = createContextScope(MENUBAR_NAME, [\n createCollectionScope,\n createRovingFocusGroupScope,\n]);\n\nconst useMenuScope = createMenuScope();\nconst useRovingFocusGroupScope = createRovingFocusGroupScope();\n\ntype MenubarContextValue = {\n value: string;\n dir: Direction;\n loop: boolean;\n onMenuOpen(value: string): void;\n onMenuClose(): void;\n onMenuToggle(value: string): void;\n};\n\nconst [MenubarContextProvider, useMenubarContext] =\n createMenubarContext<MenubarContextValue>(MENUBAR_NAME);\n\ninterface MenubarProps extends JSX.HTMLAttributes<HTMLDivElement> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n loop?: boolean;\n dir?: Direction;\n ref?: (el: HTMLElement) => void;\n}\n\nfunction Menubar(inProps: ScopedProps<MenubarProps>) {\n const [local, rest] = splitProps(inProps, [\n '__scopeMenubar',\n 'value',\n 'onValueChange',\n 'defaultValue',\n 'loop',\n 'dir',\n 'ref',\n ]);\n const direction = useDirection(local.dir);\n const rovingFocusGroupScope = useRovingFocusGroupScope(local.__scopeMenubar);\n const [value, setValue] = createControllableSignal({\n prop: () => local.value,\n onChange: local.onValueChange,\n defaultProp: local.defaultValue ?? '',\n caller: MENUBAR_NAME,\n });\n const loop = () => local.loop ?? true;\n\n // We need to manage tab stop id manually as `RovingFocusGroup` updates the stop\n // based on focus, and in some situations our triggers won't ever be given focus\n // (e.g. click to open and then outside to close)\n const [currentTabStopId, setCurrentTabStopId] = createSignal<string | null>(null);\n\n return (\n <MenubarContextProvider\n scope={local.__scopeMenubar}\n value={value()}\n onMenuOpen={(menuValue: string) => {\n setValue(menuValue);\n setCurrentTabStopId(menuValue);\n }}\n onMenuClose={() => setValue('')}\n onMenuToggle={(menuValue: string) => {\n setValue((prevValue) => (prevValue ? '' : menuValue));\n // `onMenuOpen` and `onMenuToggle` are called exclusively so we\n // need to update the id in either case.\n setCurrentTabStopId(menuValue);\n }}\n dir={direction}\n loop={loop()}\n >\n <Collection.Provider scope={local.__scopeMenubar}>\n <Collection.Slot scope={local.__scopeMenubar}>\n <RovingFocusGroup\n {...rovingFocusGroupScope}\n orientation=\"horizontal\"\n loop={loop()}\n dir={direction}\n currentTabStopId={currentTabStopId()}\n onCurrentTabStopIdChange={setCurrentTabStopId}\n >\n <Primitive.div role=\"menubar\" {...rest} ref={local.ref} />\n </RovingFocusGroup>\n </Collection.Slot>\n </Collection.Provider>\n </MenubarContextProvider>\n );\n}\n\nMenubar.displayName = MENUBAR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenubarMenu\n * -----------------------------------------------------------------------------------------------*/\n\nconst MENU_NAME = 'MenubarMenu';\n\ntype MenubarMenuContextValue = {\n value: string;\n triggerId: string;\n triggerRef: HTMLButtonElement | undefined;\n onTriggerRefChange: (el: HTMLButtonElement | undefined) => void;\n contentId: string;\n wasKeyboardTriggerOpen: boolean;\n setWasKeyboardTriggerOpen: (v: boolean) => void;\n};\n\nconst [MenubarMenuProvider, useMenubarMenuContext] =\n createMenubarContext<MenubarMenuContextValue>(MENU_NAME);\n\ninterface MenubarMenuProps {\n value?: string;\n children?: JSX.Element;\n}\n\nfunction MenubarMenu(inProps: ScopedProps<MenubarMenuProps>) {\n const [local] = splitProps(inProps, ['__scopeMenubar', 'value', 'children']);\n const autoValue = createId();\n const value = () => local.value || autoValue;\n const context = useMenubarContext(MENU_NAME, local.__scopeMenubar);\n const menuScope = useMenuScope(local.__scopeMenubar);\n const [triggerRef, setTriggerRef] = createSignal<HTMLButtonElement | undefined>(undefined);\n let wasKeyboardTriggerOpen = false;\n\n const open = () => context.value === value();\n\n createEffect(() => {\n if (!open()) wasKeyboardTriggerOpen = false;\n });\n\n return (\n <MenubarMenuProvider\n scope={local.__scopeMenubar}\n value={value()}\n triggerId={createId()}\n triggerRef={triggerRef()}\n onTriggerRefChange={setTriggerRef}\n contentId={createId()}\n wasKeyboardTriggerOpen={wasKeyboardTriggerOpen}\n setWasKeyboardTriggerOpen={(v: boolean) => { wasKeyboardTriggerOpen = v; }}\n >\n <MenuPrimitive.Menu\n {...menuScope}\n open={open()}\n onOpenChange={(openValue: boolean) => {\n // Menu only calls `onOpenChange` when dismissing so we\n // want to close our MenuBar based on the same events.\n if (!openValue) context.onMenuClose();\n }}\n modal={false}\n dir={context.dir}\n >\n {local.children}\n </MenuPrimitive.Menu>\n </MenubarMenuProvider>\n );\n}\n\nMenubarMenu.displayName = MENU_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenubarTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'MenubarTrigger';\n\ninterface MenubarTriggerProps extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {\n ref?: (el: HTMLElement) => void;\n}\n\nfunction MenubarTrigger(inProps: ScopedProps<MenubarTriggerProps>) {\n const [local, rest] = splitProps(inProps, [\n '__scopeMenubar',\n 'ref',\n 'disabled',\n 'onPointerDown',\n 'onPointerEnter',\n 'onKeyDown',\n 'onFocus',\n 'onBlur',\n ]);\n const rovingFocusGroupScope = useRovingFocusGroupScope(local.__scopeMenubar);\n const menuScope = useMenuScope(local.__scopeMenubar);\n const context = useMenubarContext(TRIGGER_NAME, local.__scopeMenubar);\n const menuContext = useMenubarMenuContext(TRIGGER_NAME, local.__scopeMenubar);\n let triggerRef: HTMLButtonElement | undefined;\n const [isFocused, setIsFocused] = createSignal(false);\n const disabled = () => local.disabled ?? false;\n const open = () => context.value === menuContext.value;\n\n return (\n <Collection.ItemSlot scope={local.__scopeMenubar} value={menuContext.value} disabled={disabled()}>\n <RovingFocusGroupItem\n {...rovingFocusGroupScope}\n focusable={!disabled()}\n tabStopId={menuContext.value}\n >\n <MenuPrimitive.MenuAnchor {...menuScope}>\n <Primitive.button\n type=\"button\"\n role=\"menuitem\"\n id={menuContext.triggerId}\n aria-haspopup=\"menu\"\n aria-expanded={open()}\n aria-controls={open() ? menuContext.contentId : undefined}\n data-highlighted={isFocused() ? '' : undefined}\n data-state={open() ? 'open' : 'closed'}\n data-disabled={disabled() ? '' : undefined}\n disabled={disabled()}\n {...rest}\n ref={mergeRefs(local.ref, (el: HTMLElement) => {\n triggerRef = el as HTMLButtonElement;\n menuContext.onTriggerRefChange(el as HTMLButtonElement);\n })}\n onPointerDown={composeEventHandlers(local.onPointerDown as any, (event: PointerEvent) => {\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click)\n if (!disabled() && event.button === 0 && event.ctrlKey === false) {\n context.onMenuOpen(menuContext.value);\n // prevent trigger focusing when opening\n // this allows the content to be given focus without competition\n if (!open()) event.preventDefault();\n }\n })}\n onPointerEnter={composeEventHandlers(local.onPointerEnter as any, () => {\n const menubarOpen = Boolean(context.value);\n if (menubarOpen && !open()) {\n context.onMenuOpen(menuContext.value);\n triggerRef?.focus();\n }\n })}\n onKeyDown={composeEventHandlers(local.onKeyDown as any, (event: KeyboardEvent) => {\n if (disabled()) return;\n if (['Enter', ' '].includes(event.key)) context.onMenuToggle(menuContext.value);\n if (event.key === 'ArrowDown') context.onMenuOpen(menuContext.value);\n // prevent keydown from scrolling window / first focused item to execute\n // that keydown (inadvertently closing the menu)\n if (['Enter', ' ', 'ArrowDown'].includes(event.key)) {\n menuContext.setWasKeyboardTriggerOpen(true);\n event.preventDefault();\n }\n })}\n onFocus={composeEventHandlers(local.onFocus as any, () => setIsFocused(true))}\n onBlur={composeEventHandlers(local.onBlur as any, () => setIsFocused(false))}\n />\n </MenuPrimitive.MenuAnchor>\n </RovingFocusGroupItem>\n </Collection.ItemSlot>\n );\n}\n\nMenubarTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenubarPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'MenubarPortal';\n\ninterface MenubarPortalProps extends MenuPrimitive.MenuPortalProps {}\n\nfunction MenubarPortal(inProps: ScopedProps<MenubarPortalProps>) {\n const [local, rest] = splitProps(inProps, ['__scopeMenubar']);\n const menuScope = useMenuScope(local.__scopeMenubar);\n return <MenuPrimitive.MenuPortal {...menuScope} {...rest} />;\n}\n\nMenubarPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenubarContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'MenubarContent';\n\ninterface MenubarContentProps extends Omit<MenuPrimitive.MenuContentProps, 'onEntryFocus'> {\n ref?: (el: HTMLElement) => void;\n style?: JSX.CSSProperties;\n}\n\nfunction MenubarContent(inProps: ScopedProps<MenubarContentProps>) {\n const [local, rest] = splitProps(inProps, [\n '__scopeMenubar',\n 'ref',\n 'align',\n 'style',\n 'onCloseAutoFocus',\n 'onFocusOutside',\n 'onInteractOutside',\n 'onKeyDown',\n ]);\n const menuScope = useMenuScope(local.__scopeMenubar);\n const context = useMenubarContext(CONTENT_NAME, local.__scopeMenubar);\n const menuContext = useMenubarMenuContext(CONTENT_NAME, local.__scopeMenubar);\n const getItems = useCollection(local.__scopeMenubar);\n let hasInteractedOutside = false;\n const align = () => local.align ?? 'start';\n\n return (\n <MenuPrimitive.MenuContent\n id={menuContext.contentId}\n aria-labelledby={menuContext.triggerId}\n data-radix-menubar-content=\"\"\n {...menuScope}\n {...rest}\n ref={local.ref}\n align={align()}\n onCloseAutoFocus={composeEventHandlers(local.onCloseAutoFocus, (event: Event) => {\n const menubarOpen = Boolean(context.value);\n if (!menubarOpen && !hasInteractedOutside) {\n menuContext.triggerRef?.focus();\n }\n\n hasInteractedOutside = false;\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n })}\n onFocusOutside={composeEventHandlers(local.onFocusOutside, (event: any) => {\n const target = event.target as HTMLElement;\n const isMenubarTrigger = getItems().some((item) => item.ref?.contains(target));\n if (isMenubarTrigger) event.preventDefault();\n })}\n onInteractOutside={composeEventHandlers(local.onInteractOutside, () => {\n hasInteractedOutside = true;\n })}\n onEntryFocus={(event: Event) => {\n if (!menuContext.wasKeyboardTriggerOpen) event.preventDefault();\n }}\n onKeyDown={composeEventHandlers(local.onKeyDown as any, (event: KeyboardEvent) => {\n if (['ArrowRight', 'ArrowLeft'].includes(event.key)) {\n const target = event.target as HTMLElement;\n const targetIsSubTrigger = target.hasAttribute('data-radix-menubar-subtrigger');\n const isKeyDownInsideSubMenu =\n target.closest('[data-radix-menubar-content]') !== event.currentTarget;\n\n const prevMenuKey = context.dir === 'rtl' ? 'ArrowRight' : 'ArrowLeft';\n const isPrevKey = prevMenuKey === event.key;\n const isNextKey = !isPrevKey;\n\n // Prevent navigation when we're opening a submenu\n if (isNextKey && targetIsSubTrigger) return;\n // or we're inside a submenu and are moving backwards to close it\n if (isKeyDownInsideSubMenu && isPrevKey) return;\n\n const items = getItems().filter((item) => !item.disabled);\n let candidateValues = items.map((item) => item.value);\n if (isPrevKey) candidateValues.reverse();\n\n const currentIndex = candidateValues.indexOf(menuContext.value);\n\n candidateValues = context.loop\n ? wrapArray(candidateValues, currentIndex + 1)\n : candidateValues.slice(currentIndex + 1);\n\n const [nextValue] = candidateValues;\n if (nextValue) context.onMenuOpen(nextValue);\n }\n })}\n style={{\n ...(local.style as JSX.CSSProperties),\n '--radix-menubar-content-transform-origin': 'var(--radix-popper-transform-origin)',\n '--radix-menubar-content-available-width': 'var(--radix-popper-available-width)',\n '--radix-menubar-content-available-height': 'var(--radix-popper-available-height)',\n '--radix-menubar-trigger-width': 'var(--radix-popper-anchor-width)',\n '--radix-menubar-trigger-height': 'var(--radix-popper-anchor-height)',\n } as JSX.CSSProperties}\n />\n );\n}\n\nMenubarContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenubarGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'MenubarGroup';\n\ninterface MenubarGroupProps extends MenuPrimitive.MenuGroupProps {\n ref?: (el: HTMLElement) => void;\n}\n\nfunction MenubarGroup(inProps: ScopedProps<MenubarGroupProps>) {\n const [local, rest] = splitProps(inProps, ['__scopeMenubar', 'ref']);\n const menuScope = useMenuScope(local.__scopeMenubar);\n return <MenuPrimitive.MenuGroup {...menuScope} {...rest} ref={local.ref} />;\n}\n\nMenubarGroup.displayName = GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenubarLabel\n * -----------------------------------------------------------------------------------------------*/\n\nconst LABEL_NAME = 'MenubarLabel';\n\ninterface MenubarLabelProps extends MenuPrimitive.MenuLabelProps {\n ref?: (el: HTMLElement) => void;\n}\n\nfunction MenubarLabel(inProps: ScopedProps<MenubarLabelProps>) {\n const [local, rest] = splitProps(inProps, ['__scopeMenubar', 'ref']);\n const menuScope = useMenuScope(local.__scopeMenubar);\n return <MenuPrimitive.MenuLabel {...menuScope} {...rest} ref={local.ref} />;\n}\n\nMenubarLabel.displayName = LABEL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenubarItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'MenubarItem';\n\ninterface MenubarItemProps extends MenuPrimitive.MenuItemProps {\n ref?: (el: HTMLElement) => void;\n}\n\nfunction MenubarItem(inProps: ScopedProps<MenubarItemProps>) {\n const [local, rest] = splitProps(inProps, ['__scopeMenubar', 'ref']);\n const menuScope = useMenuScope(local.__scopeMenubar);\n return <MenuPrimitive.MenuItem {...menuScope} {...rest} ref={local.ref} />;\n}\n\nMenubarItem.displayName = ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenubarCheckboxItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst CHECKBOX_ITEM_NAME = 'MenubarCheckboxItem';\n\ninterface MenubarCheckboxItemProps extends MenuPrimitive.MenuCheckboxItemProps {\n ref?: (el: HTMLElement) => void;\n}\n\nfunction MenubarCheckboxItem(inProps: ScopedProps<MenubarCheckboxItemProps>) {\n const [local, rest] = splitProps(inProps, ['__scopeMenubar', 'ref']);\n const menuScope = useMenuScope(local.__scopeMenubar);\n return <MenuPrimitive.MenuCheckboxItem {...menuScope} {...rest} ref={local.ref} />;\n}\n\nMenubarCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenubarRadioGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_GROUP_NAME = 'MenubarRadioGroup';\n\ninterface MenubarRadioGroupProps extends MenuPrimitive.MenuRadioGroupProps {\n ref?: (el: HTMLElement) => void;\n}\n\nfunction MenubarRadioGroup(inProps: ScopedProps<MenubarRadioGroupProps>) {\n const [local, rest] = splitProps(inProps, ['__scopeMenubar', 'ref']);\n const menuScope = useMenuScope(local.__scopeMenubar);\n return <MenuPrimitive.MenuRadioGroup {...menuScope} {...rest} ref={local.ref} />;\n}\n\nMenubarRadioGroup.displayName = RADIO_GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenubarRadioItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_ITEM_NAME = 'MenubarRadioItem';\n\ninterface MenubarRadioItemProps extends MenuPrimitive.MenuRadioItemProps {\n ref?: (el: HTMLElement) => void;\n}\n\nfunction MenubarRadioItem(inProps: ScopedProps<MenubarRadioItemProps>) {\n const [local, rest] = splitProps(inProps, ['__scopeMenubar', 'ref']);\n const menuScope = useMenuScope(local.__scopeMenubar);\n return <MenuPrimitive.MenuRadioItem {...menuScope} {...rest} ref={local.ref} />;\n}\n\nMenubarRadioItem.displayName = RADIO_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenubarItemIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst INDICATOR_NAME = 'MenubarItemIndicator';\n\ninterface MenubarItemIndicatorProps extends MenuPrimitive.MenuItemIndicatorProps {\n ref?: (el: HTMLElement) => void;\n}\n\nfunction MenubarItemIndicator(inProps: ScopedProps<MenubarItemIndicatorProps>) {\n const [local, rest] = splitProps(inProps, ['__scopeMenubar', 'ref']);\n const menuScope = useMenuScope(local.__scopeMenubar);\n return <MenuPrimitive.MenuItemIndicator {...menuScope} {...rest} ref={local.ref} />;\n}\n\nMenubarItemIndicator.displayName = INDICATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenubarSeparator\n * -----------------------------------------------------------------------------------------------*/\n\nconst SEPARATOR_NAME = 'MenubarSeparator';\n\ninterface MenubarSeparatorProps extends MenuPrimitive.MenuSeparatorProps {\n ref?: (el: HTMLElement) => void;\n}\n\nfunction MenubarSeparator(inProps: ScopedProps<MenubarSeparatorProps>) {\n const [local, rest] = splitProps(inProps, ['__scopeMenubar', 'ref']);\n const menuScope = useMenuScope(local.__scopeMenubar);\n return <MenuPrimitive.MenuSeparator {...menuScope} {...rest} ref={local.ref} />;\n}\n\nMenubarSeparator.displayName = SEPARATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenubarArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'MenubarArrow';\n\ninterface MenubarArrowProps extends MenuPrimitive.MenuArrowProps {\n ref?: (el: SVGSVGElement) => void;\n}\n\nfunction MenubarArrow(inProps: ScopedProps<MenubarArrowProps>) {\n const [local, rest] = splitProps(inProps, ['__scopeMenubar', 'ref']);\n const menuScope = useMenuScope(local.__scopeMenubar);\n return <MenuPrimitive.MenuArrow {...menuScope} {...rest} ref={local.ref} />;\n}\n\nMenubarArrow.displayName = ARROW_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenubarSub\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_NAME = 'MenubarSub';\n\ninterface MenubarSubProps {\n children?: JSX.Element;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n}\n\nfunction MenubarSub(inProps: ScopedProps<MenubarSubProps>) {\n const [local] = splitProps(inProps, [\n '__scopeMenubar',\n 'children',\n 'open',\n 'defaultOpen',\n 'onOpenChange',\n ]);\n const menuScope = useMenuScope(local.__scopeMenubar);\n const [open, setOpen] = createControllableSignal({\n prop: () => local.open,\n defaultProp: local.defaultOpen ?? false,\n onChange: local.onOpenChange,\n caller: SUB_NAME,\n });\n\n return (\n <MenuPrimitive.MenuSub {...menuScope} open={open()} onOpenChange={setOpen}>\n {local.children}\n </MenuPrimitive.MenuSub>\n );\n}\n\nMenubarSub.displayName = SUB_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenubarSubTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_TRIGGER_NAME = 'MenubarSubTrigger';\n\ninterface MenubarSubTriggerProps extends MenuPrimitive.MenuSubTriggerProps {\n ref?: (el: HTMLElement) => void;\n}\n\nfunction MenubarSubTrigger(inProps: ScopedProps<MenubarSubTriggerProps>) {\n const [local, rest] = splitProps(inProps, ['__scopeMenubar', 'ref']);\n const menuScope = useMenuScope(local.__scopeMenubar);\n return (\n <MenuPrimitive.MenuSubTrigger\n data-radix-menubar-subtrigger=\"\"\n {...menuScope}\n {...rest}\n ref={local.ref}\n />\n );\n}\n\nMenubarSubTrigger.displayName = SUB_TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenubarSubContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_CONTENT_NAME = 'MenubarSubContent';\n\ninterface MenubarSubContentProps extends MenuPrimitive.MenuSubContentProps {\n ref?: (el: HTMLElement) => void;\n style?: JSX.CSSProperties;\n}\n\nfunction MenubarSubContent(inProps: ScopedProps<MenubarSubContentProps>) {\n const [local, rest] = splitProps(inProps, ['__scopeMenubar', 'ref', 'style']);\n const menuScope = useMenuScope(local.__scopeMenubar);\n\n return (\n <MenuPrimitive.MenuSubContent\n {...menuScope}\n data-radix-menubar-content=\"\"\n {...rest}\n ref={local.ref}\n style={{\n ...(local.style as JSX.CSSProperties),\n '--radix-menubar-content-transform-origin': 'var(--radix-popper-transform-origin)',\n '--radix-menubar-content-available-width': 'var(--radix-popper-available-width)',\n '--radix-menubar-content-available-height': 'var(--radix-popper-available-height)',\n '--radix-menubar-trigger-width': 'var(--radix-popper-anchor-width)',\n '--radix-menubar-trigger-height': 'var(--radix-popper-anchor-height)',\n } as JSX.CSSProperties}\n />\n );\n}\n\nMenubarSubContent.displayName = SUB_CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * Helpers\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Wraps an array around itself at a given start index\n * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`\n */\nfunction wrapArray<T>(array: T[], startIndex: number) {\n return array.map<T>((_, index) => array[(startIndex + index) % array.length]!);\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Exports\n * -----------------------------------------------------------------------------------------------*/\n\nconst Root = Menubar;\nconst Menu = MenubarMenu;\nconst Trigger = MenubarTrigger;\nconst Portal = MenubarPortal;\nconst Content = MenubarContent;\nconst Group = MenubarGroup;\nconst Label = MenubarLabel;\nconst Item = MenubarItem;\nconst CheckboxItem = MenubarCheckboxItem;\nconst RadioGroup = MenubarRadioGroup;\nconst RadioItem = MenubarRadioItem;\nconst ItemIndicator = MenubarItemIndicator;\nconst Separator = MenubarSeparator;\nconst Arrow = MenubarArrow;\nconst Sub = MenubarSub;\nconst SubTrigger = MenubarSubTrigger;\nconst SubContent = MenubarSubContent;\n\nexport {\n createMenubarScope,\n //\n Menubar,\n MenubarMenu,\n MenubarTrigger,\n MenubarPortal,\n MenubarContent,\n MenubarGroup,\n MenubarLabel,\n MenubarItem,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarItemIndicator,\n MenubarSeparator,\n MenubarArrow,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n //\n Root,\n Menu,\n Trigger,\n Portal,\n Content,\n Group,\n Label,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n ItemIndicator,\n Separator,\n Arrow,\n Sub,\n SubTrigger,\n SubContent,\n};\nexport type {\n MenubarProps,\n MenubarMenuProps,\n MenubarTriggerProps,\n MenubarPortalProps,\n MenubarContentProps,\n MenubarGroupProps,\n MenubarLabelProps,\n MenubarItemProps,\n MenubarCheckboxItemProps,\n MenubarRadioGroupProps,\n MenubarRadioItemProps,\n MenubarItemIndicatorProps,\n MenubarSeparatorProps,\n MenubarArrowProps,\n MenubarSubProps,\n MenubarSubTriggerProps,\n MenubarSubContentProps,\n};\n"]}