JGuang

Menu

Menu · Ant Design

Preview
npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23

Menu

A versatile menu for navigation.

When To Use

Navigation is an important part of any website, as a good navigation setup allows users to move around the site quickly and efficiently. Ant Design offers two navigation options: top and side. Top navigation provides all the categories and functions of the website. Side navigation provides the multi-level structure of the website.

More layouts with navigation: Layout.

Notes for developers

  • Menu is rendered as a ul element, so it only supports li and script-supporting elements as children nodes. Your customized node should be wrapped by Menu.Item.
  • Menu needs to collect its node structure, so its children should be Menu.* or encapsulated HOCs.

Examples

  • Top Navigation · horizontal

  • Inline menu · inline

  • Collapsed inline menu · inline-collapsed

  • Menu tooltip · tooltip

  • Open current submenu only · sider-current

  • Vertical menu · vertical

  • Menu Themes · theme

  • Sub-menu theme · submenu-theme

  • Switch the menu type · switch-mode

  • Custom semantic dom styling · style-class

  • Custom Submenu Render · custom-popup-render

API

Common props ref:Common props

PropertyDescriptionTypeDefaultVersionGlobal Config
classNamesCustomize class for each semantic structure inside the component. Supports object or function.Record<SemanticDOM, string> | (info: { props }) => Record<SemanticDOM, string>-6.0.0
defaultOpenKeysArray with the keys of default opened sub menusstring[]-×
defaultSelectedKeysArray with the keys of default selected menu itemsstring[]-×
expandIconcustom expand icon of submenuReactNode | (props: SubMenuProps & { isSubMenu: boolean }) => ReactNode-4.9.05.15.0
forceSubMenuRenderRender submenu into DOM before it becomes visiblebooleanfalse×
inlineCollapsedSpecifies the collapsed status when menu is inline modeboolean-×
inlineIndentIndent (in pixels) of inline menu items on each levelnumber24×
itemsMenu item contentItemType[]-4.20.0×
modeType of menuvertical | horizontal | inlinevertical×
multipleAllows selection of multiple itemsbooleanfalse×
openKeysArray with the keys of currently opened sub-menusstring[]-×
overflowedIndicatorCustomized the ellipsis icon when menu is collapsed horizontallyReactNode<EllipsisOutlined />×
selectableAllows selecting menu itemsbooleantrue×
selectedKeysArray with the keys of currently selected menu itemsstring[]-×
stylesCustomize inline style for each semantic structure inside the component. Supports object or function.Record<SemanticDOM, CSSProperties> | (info: { props }) => Record<SemanticDOM, CSSProperties>-6.0.0
subMenuCloseDelayDelay time to hide submenu when mouse leaves (in seconds)number0.1×
subMenuOpenDelayDelay time to show submenu when mouse enters, (in seconds)number0×
tooltipConfig tooltip props for menu items in inline collapsed mode. Set to false to disable.false | TooltipProps-6.3.0×
themeColor theme of the menulight | darklight×
triggerSubMenuActionWhich action can trigger submenu open/closehover | clickhover×
onClickCalled when a menu item is clickedfunction({ key, keyPath, domEvent, itemData })-×
onDeselectCalled when a menu item is deselected (multiple mode only)function({ key, keyPath, selectedKeys, domEvent, itemData })-×
onOpenChangeCalled when sub-menus are opened or closedfunction(openKeys: string[])-×
onSelectCalled when a menu item is selectedfunction({ key, keyPath, selectedKeys, domEvent, itemData })-×
popupRenderCustom popup renderer for submenu(node: ReactElement, props: { item: SubMenuProps; keys: string[] }) => ReactNode-×

More options in @rc-component/menu

ItemType

type ItemType = MenuItemType | SubMenuType | MenuItemGroupType | MenuDividerType;

PropertyDescriptionTypeDefaultVersion
dangerDisplay the danger stylebooleanfalse
disabledWhether menu item is disabledbooleanfalse
extraThe extra of the menu itemReactNode-5.21.0
iconThe icon of the menu itemReactNode-
keyUnique ID of the menu itemstring-
labelMenu labelReactNode-
titleSet display title for collapsed itemstring-
PropertyDescriptionTypeDefaultVersion
childrenSub-menus or sub-menu itemsItemType[]-
disabledWhether sub-menu is disabledbooleanfalse
iconIcon of sub menuReactNode-
keyUnique ID of the sub-menustring-
labelMenu labelReactNode-
popupClassNameSub-menu class name, not working when mode="inline"string-
popupOffsetSub-menu offset, not working when mode="inline"[number, number]-
themeColor theme of the SubMenu (inherits from Menu by default)light | dark-
onTitleClickCallback executed when the sub-menu title is clickedfunction({ key, domEvent })-
popupRenderCustom popup renderer for current sub-menu(node: ReactElement, props: { item: SubMenuProps; keys: string[] }) => ReactNode-

Define type as group to make as group:

const groupItem = {
  type: 'group', // Must have
  label: 'My Group',
  children: [],
};
PropertyDescriptionTypeDefaultVersion
childrenSub-menu itemsMenuItemType[]-
labelThe title of the groupReactNode-

Divider line in between menu items, only used in vertical popup Menu or Dropdown Menu. Need define the type as divider:

const dividerItem = {
  type: 'divider', // Must have
};
PropertyDescriptionTypeDefaultVersion
dashedWhether line is dashedbooleanfalse

FAQ

Why will Menu's children be rendered twice?

Menu collects structure info with twice-render to support HOC usage. Merging into one render may cause the logic to become much more complex. Contributions to help improve the collection logic are welcomed.

Why Menu do not responsive collapse in Flex layout?

Menu will render fully item in flex layout and then collapse it. You need tell flex not consider Menu width to enable responsive (online demo):

<div style={{ flex }}>
  <div style={{ ... }}>Some Content</div>
  <Menu style={{ minWidth: 0, flex: "auto" }} />
</div>

Semantic DOM

Semantic nodeNative descriptionVersion
rootRoot element with basic menu container styles and layout—
itemItem element with relative positioning, block display, margins, whitespace handling, cursor styles, transitions and other basic interactive styles for menu items—
itemIconIcon element with min-width, font-size, transitions, icon reset styles, and spacing control with text—
itemContentItem content element with layout and typography styles for menu item content—
subMenu.itemTitleSubmenu title element with submenu title styles and interactive effects—
subMenu.listSubmenu list element with submenu list layout and container styles—
subMenu.itemSubmenu item element with submenu item styles and interactive effects—
subMenu.itemIconSubmenu item icon element with submenu icon size and styles—
subMenu.itemContentSubmenu item content element with submenu content layout and typography—
itemTitleItem title element (no effect in horizontal mode) with title text styles and layout—
listMenu list element (no effect in horizontal mode) with menu list layout and container styles—
popupPopup menu element (no effect in inline mode) with popup layer positioning, z-index, background and other styles—

Semantic description source: vendor/components/menu/demo/_semantic.tsx

Design Token

Types, inheritance and declarations retain the pinned native source. Defaults are computed by the native theme and may be overridden by ConfigProvider; this table does not invent static defaults.

TokenTypeNative description
dropdownWidthnumber | stringWidth of popup menu
zIndexPopupnumberz-index of popup menu
colorGroupTitlestringSee native declaration and inherited types
groupTitleColorstringColor of group title text
groupTitleLineHeightstring | numberline-height of group title
groupTitleFontSizenumberfont-size of group title
radiusItemnumberSee native declaration and inherited types
itemBorderRadiusnumberRadius of menu item
radiusSubMenuItemnumberSee native declaration and inherited types
subMenuItemBorderRadiusnumberRadius of sub-menu item
colorItemTextstringSee native declaration and inherited types
itemColorstringColor of menu item text
colorItemTextHoverstringSee native declaration and inherited types
itemHoverColorstringHover color of menu item text
colorItemTextHoverHorizontalstringSee native declaration and inherited types
horizontalItemHoverColorstringHover color of horizontal menu item text
colorItemTextSelectedstringSee native declaration and inherited types
itemSelectedColorstringColor of selected menu item text
subMenuItemSelectedColorstringColor of submenu title when submenu has selected item
colorItemTextSelectedHorizontalstringSee native declaration and inherited types
horizontalItemSelectedColorstringColor of selected horizontal menu item text
colorItemTextDisabledstringSee native declaration and inherited types
itemDisabledColorstringColor of disabled menu item text
colorDangerItemTextstringSee native declaration and inherited types
dangerItemColorstringColor of danger menu item text
colorDangerItemTextHoverstringSee native declaration and inherited types
dangerItemHoverColorstringHover color of danger menu item text
colorDangerItemTextSelectedstringSee native declaration and inherited types
dangerItemSelectedColorstringColor of selected danger menu item text
colorDangerItemBgActivestringSee native declaration and inherited types
dangerItemActiveBgstringBackground color of danger menu item when active
colorDangerItemBgSelectedstringSee native declaration and inherited types
dangerItemSelectedBgstringBackground color of selected danger menu item
colorItemBgstringSee native declaration and inherited types
itemBgstringSee native declaration and inherited types
colorItemBgHoverstringSee native declaration and inherited types
itemHoverBgstringBackground color of menu item when hover
colorSubItemBgstringSee native declaration and inherited types
subMenuItemBgstringBackground color of sub-menu item
colorItemBgActivestringSee native declaration and inherited types
itemActiveBgstringBackground color of menu item when active
colorItemBgSelectedstringSee native declaration and inherited types
itemSelectedBgstringBackground color of menu item when selected
colorItemBgSelectedHorizontalstringSee native declaration and inherited types
horizontalItemSelectedBgstringBackground color of horizontal menu item when selected
colorActiveBarWidthnumber | stringSee native declaration and inherited types
activeBarWidthnumber | stringWidth of menu item active bar
colorActiveBarHeightnumberSee native declaration and inherited types
activeBarHeightnumberHeight of menu item active bar
colorActiveBarBorderSizenumberSee native declaration and inherited types
activeBarBorderWidthnumber | stringBorder width of menu item active bar
itemMarginInlinenumberHorizontal margin of menu item
horizontalItemHoverBgstringBackground color of horizontal menu item when hover
horizontalItemBorderRadiusnumberBorder radius of horizontal menu item
itemHeightnumber | stringHeight of menu item
collapsedWidthnumber | stringWidth when collapsed
popupBgstringBackground color of popup
itemMarginBlockCSSProperties['marginBlock']margin-block of menu item
itemPaddingInlineCSSProperties['paddingInline']padding-inline of menu item
horizontalLineHeightCSSProperties['lineHeight']LineHeight of horizontal menu item
iconMarginInlineEndCSSProperties['marginInlineEnd']Spacing between icon and text
iconSizenumberSize of icon
collapsedIconSizenumberSize of icon when collapsed
darkPopupBgstringThe background color of the overlay menu in dark mode.
darkItemColorstringColor of menu item text in dark mode
darkDangerItemColorstringColor of danger menu item text in dark mode
darkItemBgstringBackground of menu item in dark mode
darkSubMenuItemBgstringBackground of submenu item in dark mode
darkItemSelectedColorstringColor of selected menu item in dark mode
darkItemSelectedBgstringBackground of active menu item in dark mode
darkItemHoverBgstringBackground of hovered menu item in dark mode
darkGroupTitleColorstringColor of group title text in dark mode
darkItemHoverColorstringColor of hovered menu item in dark mode
darkItemDisabledColorstringColor of disabled menu item in dark mode
darkDangerItemSelectedBgstringBackground of active danger menu item in dark mode
darkDangerItemHoverColorstringBackground of hovered danger menu item in dark mode
darkDangerItemSelectedColorstringColor of selected danger menu item in dark mode
darkDangerItemActiveBgstringBackground of active danger menu item in dark mode
itemWidthnumber | stringSee native declaration and inherited types

Declaration source: vendor/components/menu/style/index.ts

import type { CSSProperties } from 'react';

import type { CSSObject } from '@ant-design/cssinjs';

import { unit } from '@ant-design/cssinjs';

import { FastColor } from '@ant-design/fast-color';

import type { CssUtil } from 'antd-style';

import { clearFix, resetComponent, resetIcon, textEllipsis } from '../../style';

import { genCollapseMotion, initSlideMotion, initZoomMotion } from '../../style/motion';

import type { FullToken, GenerateStyle, GetDefaultToken } from '../../theme/internal';

import { genStyleHooks, mergeToken } from '../../theme/internal';

import getHorizontalStyle from './horizontal';

import getRTLStyle from './rtl';

import getThemeStyle from './theme';

import getVerticalStyle from './vertical';

/** Component only token. Which will handle additional calculation of alias token */
export interface ComponentToken {
  /**
   * @desc 弹出菜单的宽度
   * @descEN Width of popup menu
   */
  dropdownWidth: number | string;
  /**
   * @desc 弹出菜单的 z-index
   * @descEN z-index of popup menu
   */
  zIndexPopup: number;

  // Group
  /** @deprecated Use `groupTitleColor` instead */
  colorGroupTitle: string;
  /**
   * @desc 分组标题文字颜色
   * @descEN Color of group title text
   */
  groupTitleColor: string;
  /**
   * @desc 分组标题文字高度
   * @descEN line-height of group title
   */
  groupTitleLineHeight: string | number;
  /**
   * @desc 分组标题文字大小
   * @descEN font-size of group title
   */
  groupTitleFontSize: number;

  // radius
  /** @deprecated Use `itemBorderRadius` instead */
  radiusItem: number;
  /**
   * @desc 菜单项的圆角
   * @descEN Radius of menu item
   */
  itemBorderRadius: number;

  /** @deprecated Use `subMenuItemBorderRadius` instead */
  radiusSubMenuItem: number;
  /**
   * @desc 子菜单项的圆角
   * @descEN Radius of sub-menu item
   */
  subMenuItemBorderRadius: number;

  // Item Text
  // > Default
  /** @deprecated Use `itemColor` instead */
  colorItemText: string;
  /**
   * @desc 菜单项文字颜色
   * @descEN Color of menu item text
   */
  itemColor: string;

  /** @deprecated Use `itemHoverColor` instead */
  colorItemTextHover: string;
  /**
   * @desc 菜单项文字悬浮颜色
   * @descEN Hover color of menu item text
   */
  itemHoverColor: string;

  /** @deprecated Use `horizontalItemHoverColor` instead */
  colorItemTextHoverHorizontal: string;
  /**
   * @desc 水平菜单项文字悬浮颜色
   * @descEN Hover color of horizontal menu item text
   */
  horizontalItemHoverColor: string;

  /** @deprecated Use `itemSelectedColor` instead */
  colorItemTextSelected: string;
  /**
   * @desc 菜单项文字选中颜色
   * @descEN Color of selected menu item text
   */
  itemSelectedColor: string;
  /**
   * @desc 子菜单内有选中项时,子菜单标题色
   * @descEN Color of submenu title when submenu has selected item
   */
  subMenuItemSelectedColor: string;

  /** @deprecated Use `horizontalItemSelectedColor` instead */
  colorItemTextSelectedHorizontal: string;
  /**
   * @desc 水平菜单项文字选中颜色
   * @descEN Color of selected horizontal menu item text
   */
  horizontalItemSelectedColor: string;

  // > Disabled
  /** @deprecated Use `itemDisabledColor` instead */
  colorItemTextDisabled: string;
  /**
   * @desc 菜单项文字禁用颜色
   * @descEN Color of disabled menu item text
   */
  itemDisabledColor: string;

  // > Danger
  /** @deprecated Use `dangerItemColor` instead */
  colorDangerItemText: string;
  /**
   * @desc 危险菜单项文字颜色
   * @descEN Color of danger menu item text
   */
  dangerItemColor: string;

  /** @deprecated Use `dangerItemHoverColor` instead */
  colorDangerItemTextHover: string;
  /**
   * @desc 危险菜单项文字悬浮颜色
   * @descEN Hover color of danger menu item text
   */
  dangerItemHoverColor: string;

  /** @deprecated Use `dangerItemSelectedColor` instead */
  colorDangerItemTextSelected: string;
  /**
   * @desc 危险菜单项文字选中颜色
   * @descEN Color of selected danger menu item text
   */
  dangerItemSelectedColor: string;

  /** @deprecated Use `dangerItemActiveBg` instead */
  colorDangerItemBgActive: string;
  /**
   * @desc 危险菜单项激活态背景色
   * @descEN Background color of danger menu item when active
   */
  dangerItemActiveBg: string;

  /** @deprecated Use `dangerItemSelectedBg` instead */
  colorDangerItemBgSelected: string;
  /**
   * @desc 危险菜单项选中背景色
   * @descEN Background color of selected danger menu item
   */
  dangerItemSelectedBg: string;

  // Item Bg
  /** @deprecated Use `itemBg` instead */
  colorItemBg: string;
  /**
   * @desc 菜单项背景色
   */
  itemBg: string;

  /** @deprecated Use `itemHoverBg` instead */
  colorItemBgHover: string;
  /**
   * @desc 菜单项悬浮态背景色
   * @descEN Background color of menu item when hover
   */
  itemHoverBg: string;

  /** @deprecated Use `subMenuItemBg` instead */
  colorSubItemBg: string;
  /**
   * @desc 子菜单项背景色
   * @descEN Background color of sub-menu item
   */
  subMenuItemBg: string;

  // > Default
  /** @deprecated Use `itemActiveBg` instead */
  colorItemBgActive: string;
  /**
   * @desc 菜单项激活态背景色
   * @descEN Background color of menu item when active
   */
  itemActiveBg: string;

  /** @deprecated Use `itemSelectedBg` instead */
  colorItemBgSelected: string;
  /**
   * @desc 菜单项选中态背景色
   * @descEN Background color of menu item when selected
   */
  itemSelectedBg: string;

  /** @deprecated Use `horizontalItemSelectedBg` instead */
  colorItemBgSelectedHorizontal: string;
  /**
   * @desc 水平菜单项选中态背景色
   * @descEN Background color of horizontal menu item when selected
   */
  horizontalItemSelectedBg: string;

  // Ink Bar
  /** @deprecated Use `activeBarWidth` instead */
  colorActiveBarWidth: number | string;
  /**
   * @desc 菜单项指示条宽度
   * @descEN Width of menu item active bar
   */
  activeBarWidth: number | string;

  /** @deprecated Use `activeBarHeight` instead */
  colorActiveBarHeight: number;
  /**
   * @desc 菜单项指示条高度
   * @descEN Height of menu item active bar
   */
  activeBarHeight: number;

  /** @deprecated Use `activeBarBorderWidth` instead */
  colorActiveBarBorderSize: number;
  /**
   * @desc 菜单项指示条边框宽度
   * @descEN Border width of menu item active bar
   */
  activeBarBorderWidth: number | string;

  /**
   * @desc 菜单项横向外间距
   * @descEN Horizontal margin of menu item
   */
  itemMarginInline: number;
  /**
   * @desc 横向菜单项横悬浮态背景色
   * @descEN Background color of horizontal menu item when hover
   */
  horizontalItemHoverBg: string;
  /**
   * @desc 横向菜单项圆角
   * @descEN Border radius of horizontal menu item
   */
  horizontalItemBorderRadius: number;
  /**
   * @desc 菜单项高度
   * @descEN Height of menu item
   */
  itemHeight: number | string;
  /**
   * @desc 收起后的宽度
   * @descEN Width when collapsed
   */
  collapsedWidth: number | string;
  /**
   * @desc 弹出框背景色
   * @descEN Background color of popup
   */
  popupBg: string;
  /**
   * @desc 菜单项纵向外间距
   * @descEN margin-block of menu item
   */
  itemMarginBlock: CSSProperties['marginBlock'];
  /**
   * @desc 菜单项横向内间距
   * @descEN padding-inline of menu item
   */
  itemPaddingInline: CSSProperties['paddingInline'];
  /**
   * @desc 横向菜单行高
   * @descEN LineHeight of horizontal menu item
   */
  horizontalLineHeight: CSSProperties['lineHeight'];
  /**
   * @desc 图标与文字间距
   * @descEN Spacing between icon and text
   */
  iconMarginInlineEnd: CSSProperties['marginInlineEnd'];
  /**
   * @desc 图标尺寸
   * @descEN Size of icon
   */
  iconSize: number;
  /**
   * @desc 收起时图标尺寸
   * @descEN Size of icon when collapsed
   */
  collapsedIconSize: number;

  // Dark
  /**
   * @desc 暗色模式下的浮层菜单的背景颜色
   * @descEN The background color of the overlay menu in dark mode.
   */
  darkPopupBg: string;
  /**
   * @desc 暗色模式下的菜单项文字颜色
   * @descEN Color of menu item text in dark mode
   */
  darkItemColor: string;
  /**
   * @desc 暗色模式下的危险菜单项文字颜色
   * @descEN Color of danger menu item text in dark mode
   */
  darkDangerItemColor: string;
  /**
   * @desc 暗色模式下的菜单项背景
   * @descEN Background of menu item in dark mode
   */
  darkItemBg: string;
  /**
   * @desc 暗色模式下的子菜单项背景
   * @descEN Background of submenu item in dark mode
   */
  darkSubMenuItemBg: string;
  /**
   * @desc 暗色模式下的菜单项选中颜色
   * @descEN Color of selected menu item in dark mode
   */
  darkItemSelectedColor: string;
  /**
   * @desc 暗色模式下的菜单项选中背景
   * @descEN Background of active menu item in dark mode
   */
  darkItemSelectedBg: string;
  /**
   * @desc 暗色模式下的菜单项悬浮背景
   * @descEN Background of hovered menu item in dark mode
   */
  darkItemHoverBg: string;
  /**
   * @desc 暗色模式下的分组标题文字颜色
   * @descEN Color of group title text in dark mode
   */
  darkGroupTitleColor: string;
  /**
   * @desc 暗色模式下的菜单项悬浮颜色
   * @descEN Color of hovered menu item in dark mode
   */
  darkItemHoverColor: string;
  /**
   * @desc 暗色模式下的菜单项禁用颜色
   * @descEN Color of disabled menu item in dark mode
   */
  darkItemDisabledColor: string;
  /**
   * @desc 暗色模式下的危险菜单项选中背景
   * @descEN Background of active danger menu item in dark mode
   */
  darkDangerItemSelectedBg: string;
  /**
   * @desc 暗色模式下的危险菜单项悬浮文字背景
   * @descEN Background of hovered danger menu item in dark mode
   */
  darkDangerItemHoverColor: string;
  /**
   * @desc 暗色模式下的危险菜单项选中文字颜色
   * @descEN Color of selected danger menu item in dark mode
   */
  darkDangerItemSelectedColor: string;
  /**
   * @desc 暗色模式下的危险菜单项激活态背景
   * @descEN Background of active danger menu item in dark mode
   */
  darkDangerItemActiveBg: string;
  /** @internal */
  itemWidth: number | string;
}

/**
 * @desc Menu 组件的 Token
 * @descEN Token for Menu component
 */
export interface MenuToken extends FullToken<'Menu'> {
  /**
   * @desc 水平菜单高度
   * @descEN Height of horizontal menu
   */
  menuHorizontalHeight: number | string;
  /**
   * @desc 菜单箭头尺寸
   * @descEN Size of menu arrow
   */
  menuArrowSize: number | string;
  /**
   * @desc 菜单箭头偏移量
   * @descEN Offset of menu arrow
   */
  menuArrowOffset: number | string;
  /**
   * @desc 子菜单背景色
   * @descEN Background color of sub-menu
   */
  menuSubMenuBg: string;
  /**
   * @desc 暗色模式下的浮层菜单背景色
   * @descEN Background color of popup menu in dark mode
   */
  darkPopupBg: string;
}

Shared native props

Tips: The following generic properties apply to most antd components; those not supported are described separately.

PropertyDescriptionTypeDefault
styleThe additional styleCSSProperties-
classNameThe additional css classstring-
rootClassNameClassName on the root elementstring-
autoFocusAuto focus when component mounted, only effective for focusable elements like forms, links, etc.booleanfalse

Install and reproduce an example

npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23

Use ConfigProvider and native App; configure dayjs locale separately. Each example lists its complete source files and additional pinned dependencies in View code. Example names select demos, not universal component props. See the resource setup guide for theme, locale and SSR.

Native type references

The source viewer includes unchanged native implementations and the following source declarations. Inherited types remain in their native packages. English source comments are preserved as code reference.

  • vendor/components/menu/MenuContext.tsx
  • vendor/components/menu/MenuDivider.tsx
  • vendor/components/menu/MenuItem.tsx
  • vendor/components/menu/OverrideContext.tsx
  • vendor/components/menu/SubMenu.tsx
  • vendor/components/menu/index.tsx
  • vendor/components/menu/interface.ts
  • vendor/components/menu/menu.tsx
  • vendor/components/menu/style/index.ts

Source and license

https://github.com/ant-design/ant-design/tree/4a39f54842eade4e565ab336ef6097cd7e723cdd

Original bilingual prose and executable examples are retained. Website-only embeds and token tables are expanded locally. Ant Design is MIT; separately listed dependency notices also apply. Upload previews block outbound requests and do not provide a backend.