@moneyforward/mfui-components 4.1.1 → 4.2.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.
Files changed (65) hide show
  1. package/dist/src/DropdownMenu/DropdownMenu.js +11 -45
  2. package/dist/src/DropdownMenu/DropdownMenuItem/DropdownMenuItem.js +2 -2
  3. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenu.d.ts +34 -0
  4. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenu.js +57 -0
  5. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenu.types.d.ts +79 -0
  6. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenuDivider/ApplicationMenuDivider.d.ts +7 -0
  7. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenuDivider/ApplicationMenuDivider.js +13 -0
  8. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenuDivider/ApplicationMenuDivider.types.d.ts +6 -0
  9. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenuDivider/ApplicationMenuDivider.types.js +1 -0
  10. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenuDivider/index.d.ts +2 -0
  11. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenuDivider/index.js +1 -0
  12. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenuGroup/ApplicationMenuGroup.d.ts +11 -0
  13. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenuGroup/ApplicationMenuGroup.js +20 -0
  14. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenuGroup/ApplicationMenuGroup.types.d.ts +18 -0
  15. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenuGroup/ApplicationMenuGroup.types.js +1 -0
  16. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenuGroup/index.d.ts +2 -0
  17. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenuGroup/index.js +1 -0
  18. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenuItem/ApplicationMenuItem.d.ts +14 -0
  19. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenuItem/ApplicationMenuItem.js +21 -0
  20. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenuItem/ApplicationMenuItem.types.d.ts +9 -0
  21. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenuItem/ApplicationMenuItem.types.js +1 -0
  22. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenuItem/index.d.ts +2 -0
  23. package/dist/src/GlobalHeader/ApplicationMenu/ApplicationMenuItem/index.js +1 -0
  24. package/dist/src/GlobalHeader/ApplicationMenu/index.d.ts +2 -0
  25. package/dist/src/GlobalHeader/ApplicationMenu/index.js +1 -0
  26. package/dist/src/GlobalHeader/GlobalHeader.d.ts +7 -0
  27. package/dist/src/GlobalHeader/GlobalHeader.js +10 -1
  28. package/dist/src/GlobalHeader/GlobalHeader.types.d.ts +47 -7
  29. package/dist/src/GlobalHeader/index.d.ts +1 -0
  30. package/dist/src/MainNavigation/MainNavigation.d.ts +3 -0
  31. package/dist/src/MainNavigation/MainNavigation.js +3 -0
  32. package/dist/src/MultipleSelectBox/MultipleSelectBoxTrigger/MultipleSelectBoxTrigger.js +1 -1
  33. package/dist/src/SelectBox/SelectBox.js +1 -1
  34. package/dist/src/SidePane/hooks/useSidePaneStateController.js +5 -1
  35. package/dist/src/Sidebar/Sidebar.d.ts +3 -0
  36. package/dist/src/Sidebar/Sidebar.js +3 -0
  37. package/dist/src/shared/Menu/MenuCloseContext.d.ts +10 -0
  38. package/dist/src/shared/Menu/MenuCloseContext.js +7 -0
  39. package/dist/src/shared/Menu/MenuContainer.d.ts +10 -0
  40. package/dist/src/{DropdownMenu/DropdownMenuContainer/DropdownMenuContainer.js → shared/Menu/MenuContainer.js} +8 -7
  41. package/dist/src/{DropdownMenu/DropdownMenuContainer/DropdownMenuContainer.types.d.ts → shared/Menu/MenuContainer.types.d.ts} +6 -9
  42. package/dist/src/shared/Menu/MenuContainer.types.js +1 -0
  43. package/dist/src/shared/Menu/index.d.ts +5 -0
  44. package/dist/src/shared/Menu/index.js +3 -0
  45. package/dist/src/shared/Menu/useMenuTriggerActivation.d.ts +35 -0
  46. package/dist/src/shared/Menu/useMenuTriggerActivation.js +69 -0
  47. package/dist/styled-system/recipes/application-menu-divider-slot-recipe.d.ts +33 -0
  48. package/dist/styled-system/recipes/application-menu-divider-slot-recipe.js +32 -0
  49. package/dist/styled-system/recipes/application-menu-group-slot-recipe.d.ts +33 -0
  50. package/dist/styled-system/recipes/application-menu-group-slot-recipe.js +28 -0
  51. package/dist/styled-system/recipes/application-menu-item-slot-recipe.d.ts +33 -0
  52. package/dist/styled-system/recipes/application-menu-item-slot-recipe.js +28 -0
  53. package/dist/styled-system/recipes/application-menu-slot-recipe.d.ts +33 -0
  54. package/dist/styled-system/recipes/application-menu-slot-recipe.js +32 -0
  55. package/dist/styled-system/recipes/index.d.ts +4 -0
  56. package/dist/styled-system/recipes/index.js +4 -0
  57. package/dist/styles.css +47 -0
  58. package/dist/tsconfig.build.tsbuildinfo +1 -1
  59. package/package.json +3 -3
  60. package/dist/src/DropdownMenu/DropdownMenuContainer/DropdownMenuContainer.d.ts +0 -6
  61. package/dist/src/DropdownMenu/DropdownMenuContainer/index.d.ts +0 -2
  62. package/dist/src/DropdownMenu/DropdownMenuContainer/index.js +0 -1
  63. package/dist/src/DropdownMenu/DropdownMenuContext.d.ts +0 -10
  64. package/dist/src/DropdownMenu/DropdownMenuContext.js +0 -7
  65. /package/dist/src/{DropdownMenu/DropdownMenuContainer/DropdownMenuContainer.types.js → GlobalHeader/ApplicationMenu/ApplicationMenu.types.js} +0 -0
@@ -48,6 +48,6 @@ placeholder, renderDisplayValue, updateSelectedValues, clearButtonProps, disable
48
48
  .map((option) => option.value)
49
49
  .filter((v) => v != null)
50
50
  .map(String);
51
- return (_jsx(FocusIndicator, { children: _jsxs("div", { ref: wrapperRef, className: cx(classes.wrapper, 'mfui-MultipleSelectBoxTrigger__wrapper', triggerWrapperProps?.className), children: [_jsx("button", { ref: mergeRefs(ref, triggerRef), type: "button", role: "combobox", "aria-controls": listBoxId, "aria-expanded": isOptionPanelOpen, "aria-haspopup": "listbox", "aria-invalid": invalid, "aria-required": required || undefined, "data-mfui-caution": caution && !invalid ? true : undefined, value: selectedValues, disabled: disabled, onKeyDown: onKeyDown, onBlur: onBlur, ...rest, ...triggerProps, className: cx(classes.trigger, 'mfui-MultipleSelectBoxTrigger__trigger', triggerProps?.className) }), _jsx("input", { type: "hidden", name: name, value: selectedValues }), _jsx("div", { className: cx(classes.displayValues, 'mfui-MultipleSelectBoxTrigger__displayValues'), "data-mfui-content": "multiple-select-box-trigger-display-values", children: renderer() }), selectedOptions.length > 0 && !disabled && !disableClearButton ? (_jsx("div", { className: cx(classes.clearButtonContainer, 'mfui-MultipleSelectBoxTrigger__clearButtonContainer'), children: _jsx(ClearButton, { size: size === 'small' ? 'small' : 'default', className: cx(classes.clearButton, 'mfui-MultipleSelectBoxTrigger__clearButton'), "aria-label": clearButtonProps?.['aria-label'] ?? '値をクリアする', "data-mfui-content": "multiple-select-box-clear-button", onClick: handleClearValue }) })) : null, _jsx("div", { className: cx(classes.dropdownIconContainer, 'mfui-MultipleSelectBoxTrigger__dropdownIconContainer'), children: _jsx(DropdownIcon, { "aria-hidden": "true", className: cx(classes.dropdownIcon, 'mfui-MultipleSelectBoxTrigger__dropdownIcon') }) })] }) }));
51
+ return (_jsx(FocusIndicator, { children: _jsxs("div", { ref: wrapperRef, className: cx(classes.wrapper, 'mfui-MultipleSelectBoxTrigger__wrapper', triggerWrapperProps?.className), children: [_jsx("button", { ref: mergeRefs(ref, triggerRef), type: "button", role: "combobox", "aria-controls": isOptionPanelOpen ? listBoxId : undefined, "aria-expanded": isOptionPanelOpen, "aria-haspopup": "listbox", "aria-invalid": invalid, "aria-required": required || undefined, "data-mfui-caution": caution && !invalid ? true : undefined, value: selectedValues, disabled: disabled, onKeyDown: onKeyDown, onBlur: onBlur, ...rest, ...triggerProps, className: cx(classes.trigger, 'mfui-MultipleSelectBoxTrigger__trigger', triggerProps?.className) }), _jsx("input", { type: "hidden", name: name, value: selectedValues }), _jsx("div", { className: cx(classes.displayValues, 'mfui-MultipleSelectBoxTrigger__displayValues'), "data-mfui-content": "multiple-select-box-trigger-display-values", children: renderer() }), selectedOptions.length > 0 && !disabled && !disableClearButton ? (_jsx("div", { className: cx(classes.clearButtonContainer, 'mfui-MultipleSelectBoxTrigger__clearButtonContainer'), children: _jsx(ClearButton, { size: size === 'small' ? 'small' : 'default', className: cx(classes.clearButton, 'mfui-MultipleSelectBoxTrigger__clearButton'), "aria-label": clearButtonProps?.['aria-label'] ?? '値をクリアする', "data-mfui-content": "multiple-select-box-clear-button", onClick: handleClearValue }) })) : null, _jsx("div", { className: cx(classes.dropdownIconContainer, 'mfui-MultipleSelectBoxTrigger__dropdownIconContainer'), children: _jsx(DropdownIcon, { "aria-hidden": "true", className: cx(classes.dropdownIcon, 'mfui-MultipleSelectBoxTrigger__dropdownIcon') }) })] }) }));
52
52
  }
53
53
  export const MultipleSelectBoxTrigger = forwardRef(MultipleSelectBoxTriggerInner);
@@ -377,7 +377,7 @@ export const SelectBox = forwardRef((props, ref) => {
377
377
  const hasSelectedValue = value !== undefined || localSelectedOption !== null;
378
378
  const showClearButton = enableClearButton && hasSelectedValue;
379
379
  // Use Popover's centralized blur handling instead of custom logic
380
- return (_jsx(Popover, { open: isOptionPanelOpen, targetDOMNode: targetDOMNode, minWidth: popoverContentProps?.minWidth, maxHeight: popoverWrapperProps?.maxHeight, allowedPlacements: popoverContentProps?.allowedPlacements, enableConstrainedContentWidth: enableConstrainedPopoverWidth, renderContent: () => (_jsx("div", { ref: optionPanelRef, id: listBoxId, className: cx(classes.optionPanel, 'mfui-SelectBox__optionPanel', popoverContentProps?.className), tabIndex: -1, onKeyDown: handleKeyDownMenu, children: renderPopoverContent ? (renderPopoverContent({ searchNode, optionsNode })) : (_jsxs(_Fragment, { children: [searchNode, optionsNode] })) })), renderTrigger: ({ setTriggerRef, togglePopover, isPopoverOpen, handleTriggerKeyDown, handleTriggerBlur }) => (_jsxs("div", { ref: setTriggerRef, ...triggerWrapperProps, className: cx(classes.triggerWrapper, 'mfui-SelectBox__triggerWrapper', triggerWrapperProps?.className), children: [_jsx(FocusIndicator, { children: _jsxs("button", { ref: triggerRef, id: id, type: "button", role: "combobox", disabled: disabled, "aria-label": triggerProps?.['aria-label'], "aria-controls": listBoxId, "aria-describedby": triggerProps?.['aria-describedby'], "aria-expanded": isPopoverOpen, "aria-haspopup": "listbox", "aria-invalid": invalid, "aria-required": required, className: cx(classes.trigger, 'mfui-SelectBox__trigger', triggerProps?.className), "data-placeholder": !!placeholder && !localSelectedOption, "data-selected": !!localSelectedOption, "data-mfui-has-clear-button": showClearButton, "data-mfui-caution": caution && !invalid ? true : undefined, onClick: togglePopover, onKeyDown: (event) => {
380
+ return (_jsx(Popover, { open: isOptionPanelOpen, targetDOMNode: targetDOMNode, minWidth: popoverContentProps?.minWidth, maxHeight: popoverWrapperProps?.maxHeight, allowedPlacements: popoverContentProps?.allowedPlacements, enableConstrainedContentWidth: enableConstrainedPopoverWidth, renderContent: () => (_jsx("div", { ref: optionPanelRef, className: cx(classes.optionPanel, 'mfui-SelectBox__optionPanel', popoverContentProps?.className), tabIndex: -1, onKeyDown: handleKeyDownMenu, children: renderPopoverContent ? (renderPopoverContent({ searchNode, optionsNode })) : (_jsxs(_Fragment, { children: [searchNode, optionsNode] })) })), renderTrigger: ({ setTriggerRef, togglePopover, handleTriggerKeyDown, handleTriggerBlur }) => (_jsxs("div", { ref: setTriggerRef, ...triggerWrapperProps, className: cx(classes.triggerWrapper, 'mfui-SelectBox__triggerWrapper', triggerWrapperProps?.className), children: [_jsx(FocusIndicator, { children: _jsxs("button", { ref: triggerRef, id: id, type: "button", role: "combobox", disabled: disabled, "aria-label": triggerProps?.['aria-label'], "aria-controls": isOptionPanelOpen ? listBoxId : undefined, "aria-describedby": triggerProps?.['aria-describedby'], "aria-expanded": isOptionPanelOpen, "aria-haspopup": "listbox", "aria-invalid": invalid, "aria-required": required, className: cx(classes.trigger, 'mfui-SelectBox__trigger', triggerProps?.className), "data-placeholder": !!placeholder && !localSelectedOption, "data-selected": !!localSelectedOption, "data-mfui-has-clear-button": showClearButton, "data-mfui-caution": caution && !invalid ? true : undefined, onClick: togglePopover, onKeyDown: (event) => {
381
381
  handleTypeAhead(event.nativeEvent);
382
382
  handleTriggerKeyDown(event);
383
383
  }, onBlur: handleTriggerBlur, children: [_jsx("span", { "data-mfui-content": "select-box-trigger-display-value", children: renderTriggerLabel() }), _jsx(DropdownIcon, { "aria-hidden": "true", focusable: false }), _jsx("input", { ref: ref, type: "hidden", value: localSelectedOption?.value ?? '', name: name, disabled: disabled })] }) }), showClearButton ? (_jsx("div", { className: cx(classes.clearButtonWrapper, 'mfui-SelectBox__clearButtonWrapper'), children: _jsx(ClearButton, { size: size === 'small' ? 'small' : size === 'large' ? 'large' : 'default', "aria-label": clearButtonProps?.['aria-label'] ?? '値をクリアする', "data-mfui-content": "select-box-clear-button", onClick: (event) => {
@@ -56,10 +56,14 @@ export function useSidePaneStateController({ open, onClose, ref, insideElement }
56
56
  // Autofocus to the pane window (`role="dialog"` element) when it opens.
57
57
  // Screen readers honor `aria-modal` only when focus is on the `role="dialog"`
58
58
  // element or its descendants, so the root wrapper must not be the focus target.
59
+ // `preventScroll` is required because the pane window starts outside its container
60
+ // (the slide-in animation begins at `right: -100%`). Without it the browser scrolls
61
+ // the container to reveal the pane, which shifts the surrounding content and hides
62
+ // the animation — `overflow: hidden` containers are still programmatically scrollable.
59
63
  useEffect(() => {
60
64
  if (!localOpen)
61
65
  return;
62
- (insideElement ?? sidePaneElement)?.focus();
66
+ (insideElement ?? sidePaneElement)?.focus({ preventScroll: true });
63
67
  }, [insideElement, sidePaneElement, localOpen]);
64
68
  return {
65
69
  localOpen,
@@ -10,6 +10,9 @@ declare function SidebarBase({ className, logoSlot, mainNavigationItems, extraNa
10
10
  * A navigation layout component that combines a logo header, a navigation area,
11
11
  * and a footer with icon menu and user information.
12
12
  *
13
+ * `Sidebar` is a self-contained alternative to `GlobalHeader` and `MainNavigation`, since it
14
+ * already includes both header and navigation features.
15
+ *
13
16
  * The width is resizable via the drag handle on the right edge. See the `WidthPersistence` story for
14
17
  * an example of persisting the width across reloads via `onWidthChange` and `defaultWidth`.
15
18
  *
@@ -51,6 +51,9 @@ function SidebarToggleButton({ isCollapsed, ariaLabel, navId, onClick, }) {
51
51
  * A navigation layout component that combines a logo header, a navigation area,
52
52
  * and a footer with icon menu and user information.
53
53
  *
54
+ * `Sidebar` is a self-contained alternative to `GlobalHeader` and `MainNavigation`, since it
55
+ * already includes both header and navigation features.
56
+ *
54
57
  * The width is resizable via the drag handle on the right edge. See the `WidthPersistence` story for
55
58
  * an example of persisting the width across reloads via `onWidthChange` and `defaultWidth`.
56
59
  *
@@ -0,0 +1,10 @@
1
+ type MenuCloseContextValue = {
2
+ /**
3
+ * The function to close the menu popover.
4
+ * This function is provided by the menu component (e.g. `DropdownMenu`, `ApplicationMenu`).
5
+ */
6
+ closeMenuPopover?: () => void;
7
+ };
8
+ export declare const useMenuCloseContext: () => MenuCloseContextValue;
9
+ export declare const MenuCloseProvider: import("react").Provider<MenuCloseContextValue>;
10
+ export {};
@@ -0,0 +1,7 @@
1
+ 'use client';
2
+ import { createContext, useContext } from 'react';
3
+ const MenuCloseContext = createContext({
4
+ closeMenuPopover: undefined,
5
+ });
6
+ export const useMenuCloseContext = () => useContext(MenuCloseContext);
7
+ export const MenuCloseProvider = MenuCloseContext.Provider;
@@ -0,0 +1,10 @@
1
+ import { type MenuContainerProps } from './MenuContainer.types';
2
+ /**
3
+ * The shared root component for menu-button components (e.g. `DropdownMenu`, `ApplicationMenu`).
4
+ * Put focusable menu item components (marked with `data-mfui-menu-item` /
5
+ * `data-mfui-focusable="true"`) inside this component.
6
+ *
7
+ * Owns the roving focus of the menu items: Escape / Tab close the menu, ArrowDown / ArrowUp
8
+ * move the focus between the items.
9
+ */
10
+ export declare const MenuContainer: import("react").ForwardRefExoticComponent<MenuContainerProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -1,15 +1,16 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { forwardRef, useCallback, useEffect, useRef } from 'react';
4
- import { cx } from '../../../styled-system/css';
5
4
  import { mergeRefs } from '../../utilities/dom/mergeRefs';
6
- import { dropdownMenuContainerSlotRecipe } from '../../../styled-system/recipes';
7
5
  /**
8
- * The root component for the dropdown menu.
9
- * Put the `DropdownMenuItem` or `DropdownMenuDivider` components inside this component.
6
+ * The shared root component for menu-button components (e.g. `DropdownMenu`, `ApplicationMenu`).
7
+ * Put focusable menu item components (marked with `data-mfui-menu-item` /
8
+ * `data-mfui-focusable="true"`) inside this component.
9
+ *
10
+ * Owns the roving focus of the menu items: Escape / Tab close the menu, ArrowDown / ArrowUp
11
+ * move the focus between the items.
10
12
  */
11
- export const DropdownMenuContainer = forwardRef(({ children, className, defaultFocusItem: defaultFocus = 'first', style, onClose }, ref) => {
12
- const classes = dropdownMenuContainerSlotRecipe();
13
+ export const MenuContainer = forwardRef(({ children, className, defaultFocusItem: defaultFocus = 'first', style, onClose }, ref) => {
13
14
  const menuContainerRef = useRef(null);
14
15
  const getFocusableItems = useCallback(() => menuContainerRef.current?.querySelectorAll('[data-mfui-menu-item]:is([data-mfui-focusable=true])'), []);
15
16
  useEffect(() => {
@@ -54,5 +55,5 @@ export const DropdownMenuContainer = forwardRef(({ children, className, defaultF
54
55
  }
55
56
  }
56
57
  }, [onClose, getFocusableItems]);
57
- return (_jsx("div", { ref: mergeRefs(ref, menuContainerRef), "data-mfui-menu-container": true, role: "menu", className: cx(classes.root, 'mfui-DropdownMenuContainer__root', className), tabIndex: -1, style: style, onKeyDown: handleKeyDown, children: children }));
58
+ return (_jsx("div", { ref: mergeRefs(ref, menuContainerRef), "data-mfui-menu-container": true, role: "menu", className: className, tabIndex: -1, style: style, onKeyDown: handleKeyDown, children: children }));
58
59
  });
@@ -1,12 +1,9 @@
1
- /**
2
- * The default focus position of the menu.
3
- */
4
- export type DropdownMenuDefaultFocusItem = 'first' | 'last' | 'none';
5
- export type DropdownMenuContainerProps = {
1
+ import { type MenuDefaultFocusItem } from './useMenuTriggerActivation';
2
+ export type MenuContainerProps = {
6
3
  /**
7
4
  * The content of the component.
8
5
  *
9
- * It should be a collection of `DropdownMenuItem`, `DropdownMenuDivider` components.
6
+ * It should be a collection of menu item / divider / heading components.
10
7
  */
11
8
  children: React.ReactNode;
12
9
  /**
@@ -14,7 +11,7 @@ export type DropdownMenuContainerProps = {
14
11
  */
15
12
  className?: string;
16
13
  /**
17
- * The default focus position of the dropdown menu.
14
+ * The default focus position of the menu.
18
15
  *
19
16
  * It should be either 'first', 'last' or 'none'.
20
17
  *
@@ -26,7 +23,7 @@ export type DropdownMenuContainerProps = {
26
23
  *
27
24
  * @default 'first'
28
25
  */
29
- defaultFocusItem?: DropdownMenuDefaultFocusItem;
26
+ defaultFocusItem?: MenuDefaultFocusItem;
30
27
  /**
31
28
  * The style to apply to the component.
32
29
  * This prop is used to add custom styles to the component.
@@ -36,7 +33,7 @@ export type DropdownMenuContainerProps = {
36
33
  */
37
34
  style?: React.CSSProperties;
38
35
  /**
39
- * The function to close the DropdownMenu.
36
+ * The function to close the menu.
40
37
  */
41
38
  onClose: () => void;
42
39
  };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ export { MenuContainer } from './MenuContainer';
2
+ export type { MenuContainerProps } from './MenuContainer.types';
3
+ export { useMenuTriggerActivation } from './useMenuTriggerActivation';
4
+ export type { MenuDefaultFocusItem } from './useMenuTriggerActivation';
5
+ export { useMenuCloseContext, MenuCloseProvider } from './MenuCloseContext';
@@ -0,0 +1,3 @@
1
+ export { MenuContainer } from './MenuContainer';
2
+ export { useMenuTriggerActivation } from './useMenuTriggerActivation';
3
+ export { useMenuCloseContext, MenuCloseProvider } from './MenuCloseContext';
@@ -0,0 +1,35 @@
1
+ import { type FocusEvent, type KeyboardEvent, type MouseEvent } from 'react';
2
+ /**
3
+ * The default focus position of the menu.
4
+ */
5
+ export type MenuDefaultFocusItem = 'first' | 'last' | 'none';
6
+ /**
7
+ * Shared trigger-activation machinery for menu-button components (e.g. `DropdownMenu`,
8
+ * `ApplicationMenu`). Tracks whether the trigger was activated by keyboard so the menu focuses
9
+ * its first item on Enter / Space, and moves the default focus position on ArrowUp / ArrowDown.
10
+ *
11
+ * The returned handlers wrap the corresponding handler already provided by `Popover`'s
12
+ * `renderTrigger`, so callers compose them at the trigger call site:
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * const { menuDefaultFocusPosition, handleTriggerKeyDown, handleTriggerBlur, handleTriggerClick } =
17
+ * useMenuTriggerActivation();
18
+ *
19
+ * <Popover
20
+ * renderTrigger={({ togglePopover, handleTriggerKeyDown: popoverKeyDown, handleTriggerBlur: popoverBlur }) => (
21
+ * <Button
22
+ * onKeyDown={(event) => handleTriggerKeyDown(event, popoverKeyDown)}
23
+ * onBlur={(event) => handleTriggerBlur(event, popoverBlur)}
24
+ * onClick={(event) => handleTriggerClick(event, togglePopover)}
25
+ * />
26
+ * )}
27
+ * />
28
+ * ```
29
+ */
30
+ export declare function useMenuTriggerActivation(): {
31
+ menuDefaultFocusPosition: MenuDefaultFocusItem;
32
+ handleTriggerKeyDown: (event: KeyboardEvent<HTMLElement>, next: (event: KeyboardEvent<HTMLElement>) => void) => void;
33
+ handleTriggerBlur: (event: FocusEvent<HTMLElement>, next: (event: FocusEvent<HTMLElement>) => void) => void;
34
+ handleTriggerClick: (event: MouseEvent<HTMLElement>, next: (event: MouseEvent<HTMLElement>) => void) => void;
35
+ };
@@ -0,0 +1,69 @@
1
+ 'use client';
2
+ import { useCallback, useRef, useState } from 'react';
3
+ /**
4
+ * Shared trigger-activation machinery for menu-button components (e.g. `DropdownMenu`,
5
+ * `ApplicationMenu`). Tracks whether the trigger was activated by keyboard so the menu focuses
6
+ * its first item on Enter / Space, and moves the default focus position on ArrowUp / ArrowDown.
7
+ *
8
+ * The returned handlers wrap the corresponding handler already provided by `Popover`'s
9
+ * `renderTrigger`, so callers compose them at the trigger call site:
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * const { menuDefaultFocusPosition, handleTriggerKeyDown, handleTriggerBlur, handleTriggerClick } =
14
+ * useMenuTriggerActivation();
15
+ *
16
+ * <Popover
17
+ * renderTrigger={({ togglePopover, handleTriggerKeyDown: popoverKeyDown, handleTriggerBlur: popoverBlur }) => (
18
+ * <Button
19
+ * onKeyDown={(event) => handleTriggerKeyDown(event, popoverKeyDown)}
20
+ * onBlur={(event) => handleTriggerBlur(event, popoverBlur)}
21
+ * onClick={(event) => handleTriggerClick(event, togglePopover)}
22
+ * />
23
+ * )}
24
+ * />
25
+ * ```
26
+ */
27
+ export function useMenuTriggerActivation() {
28
+ const [menuDefaultFocusPosition, setMenuDefaultFocusPosition] = useState('first');
29
+ // Tracks keyboard activation (Enter / Space) of the trigger. The resulting click event usually
30
+ // has `detail === 0`, but Safari reports keyboard-triggered clicks with `detail === 1`, so the
31
+ // keydown itself is recorded as the reliable signal.
32
+ const isTriggerActivatedByKeyboardRef = useRef(false);
33
+ const handleTriggerKeyDown = useCallback((event, next) => {
34
+ // The flag only survives from an Enter / Space keydown to its follow-up click; any other key
35
+ // invalidates the pending keyboard activation so the flag cannot linger when the click never
36
+ // fires.
37
+ isTriggerActivatedByKeyboardRef.current = event.key === 'Enter' || event.key === ' ';
38
+ switch (event.key) {
39
+ case 'ArrowDown':
40
+ event.stopPropagation();
41
+ event.preventDefault();
42
+ setMenuDefaultFocusPosition('first');
43
+ break;
44
+ case 'ArrowUp':
45
+ event.stopPropagation();
46
+ event.preventDefault();
47
+ setMenuDefaultFocusPosition('last');
48
+ break;
49
+ }
50
+ next(event);
51
+ }, []);
52
+ const handleTriggerBlur = useCallback((event, next) => {
53
+ // Focus leaving the trigger invalidates any pending keyboard activation (e.g. a Space
54
+ // keydown whose follow-up click never fired), so a later mouse click cannot be
55
+ // misclassified as keyboard activation.
56
+ isTriggerActivatedByKeyboardRef.current = false;
57
+ next(event);
58
+ }, []);
59
+ const handleTriggerClick = useCallback((event, next) => {
60
+ // Opening with the keyboard (Enter / Space) focuses the first item, following the
61
+ // WAI-ARIA menu button pattern. Opening with the mouse focuses no item; the menu
62
+ // container receives focus instead so that arrow keys still work.
63
+ const isKeyboardActivation = isTriggerActivatedByKeyboardRef.current || event.detail === 0;
64
+ isTriggerActivatedByKeyboardRef.current = false;
65
+ setMenuDefaultFocusPosition(isKeyboardActivation ? 'first' : 'none');
66
+ next(event);
67
+ }, []);
68
+ return { menuDefaultFocusPosition, handleTriggerKeyDown, handleTriggerBlur, handleTriggerClick };
69
+ }
@@ -0,0 +1,33 @@
1
+ /* eslint-disable */
2
+ import type { ConditionalValue } from '../types/index';
3
+ import type { DistributiveOmit, Pretty } from '../types/system-types';
4
+
5
+ interface ApplicationMenuDividerSlotRecipeVariant {
6
+
7
+ }
8
+
9
+ type ApplicationMenuDividerSlotRecipeVariantMap = {
10
+ [key in keyof ApplicationMenuDividerSlotRecipeVariant]: Array<ApplicationMenuDividerSlotRecipeVariant[key]>
11
+ }
12
+
13
+ type ApplicationMenuDividerSlotRecipeSlot = "root" | "line"
14
+
15
+ export type ApplicationMenuDividerSlotRecipeVariantProps = {
16
+ [key in keyof ApplicationMenuDividerSlotRecipeVariant]?: ConditionalValue<ApplicationMenuDividerSlotRecipeVariant[key]> | undefined
17
+ }
18
+
19
+ export interface ApplicationMenuDividerSlotRecipeRecipe {
20
+ __slot: ApplicationMenuDividerSlotRecipeSlot
21
+ __type: ApplicationMenuDividerSlotRecipeVariantProps
22
+ (props?: ApplicationMenuDividerSlotRecipeVariantProps): Pretty<Record<ApplicationMenuDividerSlotRecipeSlot, string>>
23
+ raw: (props?: ApplicationMenuDividerSlotRecipeVariantProps) => ApplicationMenuDividerSlotRecipeVariantProps
24
+ variantMap: ApplicationMenuDividerSlotRecipeVariantMap
25
+ variantKeys: Array<keyof ApplicationMenuDividerSlotRecipeVariant>
26
+ splitVariantProps<Props extends ApplicationMenuDividerSlotRecipeVariantProps>(props: Props): [ApplicationMenuDividerSlotRecipeVariantProps, Pretty<DistributiveOmit<Props, keyof ApplicationMenuDividerSlotRecipeVariantProps>>]
27
+ getVariantProps: (props?: ApplicationMenuDividerSlotRecipeVariantProps) => ApplicationMenuDividerSlotRecipeVariantProps
28
+ }
29
+
30
+ /**
31
+ * Slot class created for the MFUI ApplicationMenuDivider component.
32
+ */
33
+ export declare const applicationMenuDividerSlotRecipe: ApplicationMenuDividerSlotRecipeRecipe
@@ -0,0 +1,32 @@
1
+ import { compact, getSlotCompoundVariant, memo, splitProps } from '../helpers.js';
2
+ import { createRecipe } from './create-recipe.js';
3
+ const applicationMenuDividerSlotRecipeDefaultVariants = {};
4
+ const applicationMenuDividerSlotRecipeCompoundVariants = [];
5
+ const applicationMenuDividerSlotRecipeSlotNames = [
6
+ [
7
+ "root",
8
+ "ApplicationMenuDivider__root"
9
+ ],
10
+ [
11
+ "line",
12
+ "ApplicationMenuDivider__line"
13
+ ]
14
+ ];
15
+ const applicationMenuDividerSlotRecipeSlotFns = /* @__PURE__ */ applicationMenuDividerSlotRecipeSlotNames.map(([slotName, slotKey]) => [slotName, createRecipe(slotKey, applicationMenuDividerSlotRecipeDefaultVariants, getSlotCompoundVariant(applicationMenuDividerSlotRecipeCompoundVariants, slotName))]);
16
+ const applicationMenuDividerSlotRecipeFn = memo((props = {}) => {
17
+ return Object.fromEntries(applicationMenuDividerSlotRecipeSlotFns.map(([slotName, slotFn]) => [slotName, slotFn.recipeFn(props)]));
18
+ });
19
+ const applicationMenuDividerSlotRecipeVariantKeys = [];
20
+ const getVariantProps = (variants) => ({ ...applicationMenuDividerSlotRecipeDefaultVariants, ...compact(variants) });
21
+ export const applicationMenuDividerSlotRecipe = /* @__PURE__ */ Object.assign(applicationMenuDividerSlotRecipeFn, {
22
+ __recipe__: false,
23
+ __name__: 'applicationMenuDividerSlotRecipe',
24
+ raw: (props) => props,
25
+ classNameMap: {},
26
+ variantKeys: applicationMenuDividerSlotRecipeVariantKeys,
27
+ variantMap: {},
28
+ splitVariantProps(props) {
29
+ return splitProps(props, applicationMenuDividerSlotRecipeVariantKeys);
30
+ },
31
+ getVariantProps
32
+ });
@@ -0,0 +1,33 @@
1
+ /* eslint-disable */
2
+ import type { ConditionalValue } from '../types/index';
3
+ import type { DistributiveOmit, Pretty } from '../types/system-types';
4
+
5
+ interface ApplicationMenuGroupSlotRecipeVariant {
6
+
7
+ }
8
+
9
+ type ApplicationMenuGroupSlotRecipeVariantMap = {
10
+ [key in keyof ApplicationMenuGroupSlotRecipeVariant]: Array<ApplicationMenuGroupSlotRecipeVariant[key]>
11
+ }
12
+
13
+ type ApplicationMenuGroupSlotRecipeSlot = "root"
14
+
15
+ export type ApplicationMenuGroupSlotRecipeVariantProps = {
16
+ [key in keyof ApplicationMenuGroupSlotRecipeVariant]?: ConditionalValue<ApplicationMenuGroupSlotRecipeVariant[key]> | undefined
17
+ }
18
+
19
+ export interface ApplicationMenuGroupSlotRecipeRecipe {
20
+ __slot: ApplicationMenuGroupSlotRecipeSlot
21
+ __type: ApplicationMenuGroupSlotRecipeVariantProps
22
+ (props?: ApplicationMenuGroupSlotRecipeVariantProps): Pretty<Record<ApplicationMenuGroupSlotRecipeSlot, string>>
23
+ raw: (props?: ApplicationMenuGroupSlotRecipeVariantProps) => ApplicationMenuGroupSlotRecipeVariantProps
24
+ variantMap: ApplicationMenuGroupSlotRecipeVariantMap
25
+ variantKeys: Array<keyof ApplicationMenuGroupSlotRecipeVariant>
26
+ splitVariantProps<Props extends ApplicationMenuGroupSlotRecipeVariantProps>(props: Props): [ApplicationMenuGroupSlotRecipeVariantProps, Pretty<DistributiveOmit<Props, keyof ApplicationMenuGroupSlotRecipeVariantProps>>]
27
+ getVariantProps: (props?: ApplicationMenuGroupSlotRecipeVariantProps) => ApplicationMenuGroupSlotRecipeVariantProps
28
+ }
29
+
30
+ /**
31
+ * Slot class created for the MFUI ApplicationMenuGroup component.
32
+ */
33
+ export declare const applicationMenuGroupSlotRecipe: ApplicationMenuGroupSlotRecipeRecipe
@@ -0,0 +1,28 @@
1
+ import { compact, getSlotCompoundVariant, memo, splitProps } from '../helpers.js';
2
+ import { createRecipe } from './create-recipe.js';
3
+ const applicationMenuGroupSlotRecipeDefaultVariants = {};
4
+ const applicationMenuGroupSlotRecipeCompoundVariants = [];
5
+ const applicationMenuGroupSlotRecipeSlotNames = [
6
+ [
7
+ "root",
8
+ "ApplicationMenuGroup__root"
9
+ ]
10
+ ];
11
+ const applicationMenuGroupSlotRecipeSlotFns = /* @__PURE__ */ applicationMenuGroupSlotRecipeSlotNames.map(([slotName, slotKey]) => [slotName, createRecipe(slotKey, applicationMenuGroupSlotRecipeDefaultVariants, getSlotCompoundVariant(applicationMenuGroupSlotRecipeCompoundVariants, slotName))]);
12
+ const applicationMenuGroupSlotRecipeFn = memo((props = {}) => {
13
+ return Object.fromEntries(applicationMenuGroupSlotRecipeSlotFns.map(([slotName, slotFn]) => [slotName, slotFn.recipeFn(props)]));
14
+ });
15
+ const applicationMenuGroupSlotRecipeVariantKeys = [];
16
+ const getVariantProps = (variants) => ({ ...applicationMenuGroupSlotRecipeDefaultVariants, ...compact(variants) });
17
+ export const applicationMenuGroupSlotRecipe = /* @__PURE__ */ Object.assign(applicationMenuGroupSlotRecipeFn, {
18
+ __recipe__: false,
19
+ __name__: 'applicationMenuGroupSlotRecipe',
20
+ raw: (props) => props,
21
+ classNameMap: {},
22
+ variantKeys: applicationMenuGroupSlotRecipeVariantKeys,
23
+ variantMap: {},
24
+ splitVariantProps(props) {
25
+ return splitProps(props, applicationMenuGroupSlotRecipeVariantKeys);
26
+ },
27
+ getVariantProps
28
+ });
@@ -0,0 +1,33 @@
1
+ /* eslint-disable */
2
+ import type { ConditionalValue } from '../types/index';
3
+ import type { DistributiveOmit, Pretty } from '../types/system-types';
4
+
5
+ interface ApplicationMenuItemSlotRecipeVariant {
6
+
7
+ }
8
+
9
+ type ApplicationMenuItemSlotRecipeVariantMap = {
10
+ [key in keyof ApplicationMenuItemSlotRecipeVariant]: Array<ApplicationMenuItemSlotRecipeVariant[key]>
11
+ }
12
+
13
+ type ApplicationMenuItemSlotRecipeSlot = "root"
14
+
15
+ export type ApplicationMenuItemSlotRecipeVariantProps = {
16
+ [key in keyof ApplicationMenuItemSlotRecipeVariant]?: ConditionalValue<ApplicationMenuItemSlotRecipeVariant[key]> | undefined
17
+ }
18
+
19
+ export interface ApplicationMenuItemSlotRecipeRecipe {
20
+ __slot: ApplicationMenuItemSlotRecipeSlot
21
+ __type: ApplicationMenuItemSlotRecipeVariantProps
22
+ (props?: ApplicationMenuItemSlotRecipeVariantProps): Pretty<Record<ApplicationMenuItemSlotRecipeSlot, string>>
23
+ raw: (props?: ApplicationMenuItemSlotRecipeVariantProps) => ApplicationMenuItemSlotRecipeVariantProps
24
+ variantMap: ApplicationMenuItemSlotRecipeVariantMap
25
+ variantKeys: Array<keyof ApplicationMenuItemSlotRecipeVariant>
26
+ splitVariantProps<Props extends ApplicationMenuItemSlotRecipeVariantProps>(props: Props): [ApplicationMenuItemSlotRecipeVariantProps, Pretty<DistributiveOmit<Props, keyof ApplicationMenuItemSlotRecipeVariantProps>>]
27
+ getVariantProps: (props?: ApplicationMenuItemSlotRecipeVariantProps) => ApplicationMenuItemSlotRecipeVariantProps
28
+ }
29
+
30
+ /**
31
+ * Slot class created for the MFUI ApplicationMenuItem component.
32
+ */
33
+ export declare const applicationMenuItemSlotRecipe: ApplicationMenuItemSlotRecipeRecipe
@@ -0,0 +1,28 @@
1
+ import { compact, getSlotCompoundVariant, memo, splitProps } from '../helpers.js';
2
+ import { createRecipe } from './create-recipe.js';
3
+ const applicationMenuItemSlotRecipeDefaultVariants = {};
4
+ const applicationMenuItemSlotRecipeCompoundVariants = [];
5
+ const applicationMenuItemSlotRecipeSlotNames = [
6
+ [
7
+ "root",
8
+ "ApplicationMenuItem__root"
9
+ ]
10
+ ];
11
+ const applicationMenuItemSlotRecipeSlotFns = /* @__PURE__ */ applicationMenuItemSlotRecipeSlotNames.map(([slotName, slotKey]) => [slotName, createRecipe(slotKey, applicationMenuItemSlotRecipeDefaultVariants, getSlotCompoundVariant(applicationMenuItemSlotRecipeCompoundVariants, slotName))]);
12
+ const applicationMenuItemSlotRecipeFn = memo((props = {}) => {
13
+ return Object.fromEntries(applicationMenuItemSlotRecipeSlotFns.map(([slotName, slotFn]) => [slotName, slotFn.recipeFn(props)]));
14
+ });
15
+ const applicationMenuItemSlotRecipeVariantKeys = [];
16
+ const getVariantProps = (variants) => ({ ...applicationMenuItemSlotRecipeDefaultVariants, ...compact(variants) });
17
+ export const applicationMenuItemSlotRecipe = /* @__PURE__ */ Object.assign(applicationMenuItemSlotRecipeFn, {
18
+ __recipe__: false,
19
+ __name__: 'applicationMenuItemSlotRecipe',
20
+ raw: (props) => props,
21
+ classNameMap: {},
22
+ variantKeys: applicationMenuItemSlotRecipeVariantKeys,
23
+ variantMap: {},
24
+ splitVariantProps(props) {
25
+ return splitProps(props, applicationMenuItemSlotRecipeVariantKeys);
26
+ },
27
+ getVariantProps
28
+ });
@@ -0,0 +1,33 @@
1
+ /* eslint-disable */
2
+ import type { ConditionalValue } from '../types/index';
3
+ import type { DistributiveOmit, Pretty } from '../types/system-types';
4
+
5
+ interface ApplicationMenuSlotRecipeVariant {
6
+
7
+ }
8
+
9
+ type ApplicationMenuSlotRecipeVariantMap = {
10
+ [key in keyof ApplicationMenuSlotRecipeVariant]: Array<ApplicationMenuSlotRecipeVariant[key]>
11
+ }
12
+
13
+ type ApplicationMenuSlotRecipeSlot = "popover" | "menuContainer"
14
+
15
+ export type ApplicationMenuSlotRecipeVariantProps = {
16
+ [key in keyof ApplicationMenuSlotRecipeVariant]?: ConditionalValue<ApplicationMenuSlotRecipeVariant[key]> | undefined
17
+ }
18
+
19
+ export interface ApplicationMenuSlotRecipeRecipe {
20
+ __slot: ApplicationMenuSlotRecipeSlot
21
+ __type: ApplicationMenuSlotRecipeVariantProps
22
+ (props?: ApplicationMenuSlotRecipeVariantProps): Pretty<Record<ApplicationMenuSlotRecipeSlot, string>>
23
+ raw: (props?: ApplicationMenuSlotRecipeVariantProps) => ApplicationMenuSlotRecipeVariantProps
24
+ variantMap: ApplicationMenuSlotRecipeVariantMap
25
+ variantKeys: Array<keyof ApplicationMenuSlotRecipeVariant>
26
+ splitVariantProps<Props extends ApplicationMenuSlotRecipeVariantProps>(props: Props): [ApplicationMenuSlotRecipeVariantProps, Pretty<DistributiveOmit<Props, keyof ApplicationMenuSlotRecipeVariantProps>>]
27
+ getVariantProps: (props?: ApplicationMenuSlotRecipeVariantProps) => ApplicationMenuSlotRecipeVariantProps
28
+ }
29
+
30
+ /**
31
+ * Slot class created for the MFUI ApplicationMenu component.
32
+ */
33
+ export declare const applicationMenuSlotRecipe: ApplicationMenuSlotRecipeRecipe
@@ -0,0 +1,32 @@
1
+ import { compact, getSlotCompoundVariant, memo, splitProps } from '../helpers.js';
2
+ import { createRecipe } from './create-recipe.js';
3
+ const applicationMenuSlotRecipeDefaultVariants = {};
4
+ const applicationMenuSlotRecipeCompoundVariants = [];
5
+ const applicationMenuSlotRecipeSlotNames = [
6
+ [
7
+ "popover",
8
+ "ApplicationMenu__popover"
9
+ ],
10
+ [
11
+ "menuContainer",
12
+ "ApplicationMenu__menuContainer"
13
+ ]
14
+ ];
15
+ const applicationMenuSlotRecipeSlotFns = /* @__PURE__ */ applicationMenuSlotRecipeSlotNames.map(([slotName, slotKey]) => [slotName, createRecipe(slotKey, applicationMenuSlotRecipeDefaultVariants, getSlotCompoundVariant(applicationMenuSlotRecipeCompoundVariants, slotName))]);
16
+ const applicationMenuSlotRecipeFn = memo((props = {}) => {
17
+ return Object.fromEntries(applicationMenuSlotRecipeSlotFns.map(([slotName, slotFn]) => [slotName, slotFn.recipeFn(props)]));
18
+ });
19
+ const applicationMenuSlotRecipeVariantKeys = [];
20
+ const getVariantProps = (variants) => ({ ...applicationMenuSlotRecipeDefaultVariants, ...compact(variants) });
21
+ export const applicationMenuSlotRecipe = /* @__PURE__ */ Object.assign(applicationMenuSlotRecipeFn, {
22
+ __recipe__: false,
23
+ __name__: 'applicationMenuSlotRecipe',
24
+ raw: (props) => props,
25
+ classNameMap: {},
26
+ variantKeys: applicationMenuSlotRecipeVariantKeys,
27
+ variantMap: {},
28
+ splitVariantProps(props) {
29
+ return splitProps(props, applicationMenuSlotRecipeVariantKeys);
30
+ },
31
+ getVariantProps
32
+ });
@@ -1,4 +1,8 @@
1
1
  /* eslint-disable */
2
+ export * from './application-menu-slot-recipe';
3
+ export * from './application-menu-divider-slot-recipe';
4
+ export * from './application-menu-item-slot-recipe';
5
+ export * from './application-menu-group-slot-recipe';
2
6
  export * from './breadcrumbs-slot-recipe';
3
7
  export * from './icon-button-slot-recipe';
4
8
  export * from './focus-indicator-slot-recipe';
@@ -1,3 +1,7 @@
1
+ export * from './application-menu-slot-recipe.js';
2
+ export * from './application-menu-divider-slot-recipe.js';
3
+ export * from './application-menu-item-slot-recipe.js';
4
+ export * from './application-menu-group-slot-recipe.js';
1
5
  export * from './breadcrumbs-slot-recipe.js';
2
6
  export * from './icon-button-slot-recipe.js';
3
7
  export * from './focus-indicator-slot-recipe.js';
package/dist/styles.css CHANGED
@@ -495,6 +495,53 @@
495
495
  --mfui-line-heights-mfui\.typography\.line-height\.condensed-input\.narrow: 21px;
496
496
  }
497
497
 
498
+ .mfui-gXBBVr {
499
+ overflow-y: auto;
500
+ }
501
+
502
+ .mfui-iHuYNm {
503
+ padding-block: var(--mfui-spacing-mfui\.size\.padding\.container\.vertical\.comfort);
504
+ flex-direction: column;
505
+ word-break: break-word;
506
+ }
507
+
508
+ .mfui-iHuYNm,.mfui-bKxkVF {
509
+ padding-inline: 0px;
510
+ display: flex;
511
+ min-width: var(--mfui-sizes-mfui\.size\.target\.button\.comfort);
512
+ }
513
+
514
+ .mfui-bKxkVF {
515
+ gap: var(--mfui-spacing-mfui\.size\.spacing\.icon-and-text\.horizontal\.comfort);
516
+ flex: 0 0 auto;
517
+ flex-direction: column;
518
+ justify-content: center;
519
+ align-items: center;
520
+ align-self: stretch;
521
+ height: 16px;
522
+ padding-top: 7px;
523
+ padding-bottom: 8px;
524
+ }
525
+
526
+ .mfui-bGpNIl {
527
+ border-top: 1px solid;
528
+ border-color: var(--mfui-colors-mfui\.color\.neutral\.sub-border\.none);
529
+ flex-shrink: 0;
530
+ align-self: stretch;
531
+ background-color: var(--mfui-colors-mfui\.color\.base\.background\.none);
532
+ height: 1px;
533
+ }
534
+
535
+ .mfui-fnwQXl {
536
+ width: var(--mfui-application-menu-item-width, 168px);
537
+ }
538
+
539
+ .mfui-elhNev {
540
+ display: flex;
541
+ flex-direction: column;
542
+ align-items: stretch;
543
+ }
544
+
498
545
  .mfui-dOaOSF {
499
546
  margin: 0;
500
547
  list-style: none;